a
    hR                     @  sV   d dl mZ d dlZd dlZd dlmZmZ d dlmZ ee	Z
G dd deZdS )    )annotationsN)Tensornn)Modulec                      sd   e Zd ZU dZg dZded< ddddd fdd	Zd
dddZddddddddZ  Z	S )WordWeightszDThis model can weight word embeddings, for example, with idf-values.)vocabword_weightsunknown_word_weightz	list[str]config_keys   zdict[str, float]floatc                   s   t    || _|| _|| _g }d}|D ]F}|}||v rB|| }n"| |v r\||  }n|d7 }|| q(t| dt	| d|  t
t	|d| _| jdt|di dS )aZ  
        Initializes the WordWeights class.

        Args:
            vocab (List[str]): Vocabulary of the tokenizer.
            word_weights (Dict[str, float]): Mapping of tokens to a float weight value. Word embeddings are multiplied
                by this float value. Tokens in word_weights must not be equal to the vocab (can contain more or less values).
            unknown_word_weight (float, optional): Weight for words in vocab that do not appear in the word_weights lookup.
                These can be, for example, rare words in the vocab where no weight exists. Defaults to 1.
        r   r   z of z0 words without a weighting value. Set weight to weightN)super__init__r   r   r	   lowerappendloggerinfolenr   Z	Embedding	emb_layerZload_state_dicttorchZFloatTensor	unsqueeze)selfr   r   r	   weightsZnum_unknown_wordswordr   	__class__ d/var/www/html/assistant/venv/lib/python3.9/site-packages/sentence_transformers/models/WordWeights.pyr      s&    

zWordWeights.__init__zdict[str, Tensor])featuresc                 C  sl   |d }|d }|  |d d}||  }t|d}|d| }|| }|||d |S )Nattention_masktoken_embeddingsZ	input_idsr   )r!   token_weights_sum)	r   Zsqueezer   r   sumr   expandsizeupdate)r   r   r    r!   Ztoken_weights_rawZtoken_weightsr#   Ztoken_weights_expandedr   r   r   forward5   s    zWordWeights.forwardT)safe_serializationstrboolNone)output_pathr)   returnc                O  s   |  | d S )N)Zsave_config)r   r-   r)   argskwargsr   r   r   saveE   s    zWordWeights.save)r   )
__name__
__module____qualname____doc__r
   __annotations__r   r(   r1   __classcell__r   r   r   r   r      s
   
#r   )
__future__r   loggingr   r   r   Z#sentence_transformers.models.Moduler   	getLoggerr2   r   r   r   r   r   r   <module>   s   
