o
    ߥi                     @   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   DropoutdropoutLinear
classifier)selfr   r   r   r   kwargs	__class__ a/home/ubuntu/.local/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   trainingcompute_lossr   r$   r%   )r   r!   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   )dtypedevice)	viewr   sizetorchr   CrossEntropyLosszeroslongr/   )r   r#   scores
batch_sizeloss_fcttarget_labelr"   r   r   r    r(   5   s   



zTextRankingHead.compute_loss)r   r   r   r   )NN)
__name__
__module____qualname__r   r   r+   r2   Tensorr(   __classcell__r   r   r   r    r      s    
r   )typingr   r2   r   modelscope.metainfor   modelscope.models.baser   modelscope.models.builderr   modelscope.outputsr   r   r	   modelscope.utils.constantr
   register_moduletext_rankingr   r   r   r   r    <module>   s   