o
    *j                     @   s   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ e	jejejd	G d
d deZdS )    )DictN)nn)Heads)	TorchHead)HEADS)&AttentionTextClassificationModelOutputModelOutputBase
OutputKeys)Tasks)module_namec                       sP   e Zd Z				d fdd	Z		ddefd	d
ZdejdejfddZ  Z	S )TextRankingHead   皙?      c                    s8   t  j||||d || _t|| _t||| _d S )N)hidden_sizeclassifier_dropout
num_labels
neg_sample)super__init__r   r   ZDropoutdropoutZLinear
classifier)selfr   r   r   r   kwargs	__class__ n/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/nlp/heads/text_ranking_head.pyr      s   zTextRankingHead.__init__Ninputsc                 K   sB   |j }| |}| |}d }| jr| |}t|||j|jdS )N)losslogitshidden_states
attentions)pooler_outputr   r   Ztrainingcompute_lossr   r"   r#   )r   r   Zattention_masklabelsr   r$   r!   r    r   r   r   forward"   s   


zTextRankingHead.forwardr!   returnc                 C   sH   | d| jd }|d}tj }tj|tj|jd}|||}|S )Nr   r   )Zdtypedevice)	viewr   sizetorchr   ZCrossEntropyLossZzeroslongr*   )r   r!   ZscoresZ
batch_sizeZloss_fctZtarget_labelr    r   r   r   r%   5   s   



zTextRankingHead.compute_loss)r   r   r   r   )NN)
__name__
__module____qualname__r   r   r'   r-   ZTensorr%   __classcell__r   r   r   r   r      s    
r   )typingr   r-   r   Zmodelscope.metainfor   Zmodelscope.models.baser   Zmodelscope.models.builderr   Zmodelscope.outputsr   r   r	   Zmodelscope.utils.constantr
   Zregister_moduleZtext_rankingr   r   r   r   r   <module>   s   