o
    ߥi                     @   s   d dl mZ d dlZd dlm  m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	ejejejd	ejejejd	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                       sN   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 )TextClassificationHead   皙?Nc                    s<   t  j|||d |d usJ t|| _t||| _d S )N)hidden_sizeclassifier_dropout
num_labels)super__init__r   DropoutdropoutLinear
classifier)selfr   r   r   kwargs	__class__ h/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/nlp/heads/text_classification_head.pyr      s   zTextClassificationHead.__init__inputsc                 K   sF   |j }| |}| |}d }|d ur| ||}t|||j|jdS )N)losslogitshidden_states
attentions)pooler_outputr   r   compute_lossr   r!   r"   )r   r   attention_masklabelsr   r#   r    r   r   r   r   forward'   s   

zTextClassificationHead.forwardr    returnc                 C   s   t ||S )N)Fcross_entropy)r   r    r&   r   r   r   r$   :   s   z#TextClassificationHead.compute_loss)r   r   N)NN)
__name__
__module____qualname__r   r   r'   torchTensorr$   __classcell__r   r   r   r   r      s    

r   )typingr   r.   torch.nn.functionalr   
functionalr)   modelscope.metainfor   modelscope.models.baser   modelscope.models.builderr   modelscope.outputsr   r   r	   modelscope.utils.constantr
   register_moduletext_classificationsentence_similaritynlisentiment_classificationr   r   r   r   r   <module>   s(   