o
    *j$
                     @   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 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
G dd deZdS )    )DictN)nn)CrossEntropyLoss)Heads)	TorchHead)HEADS)'AttentionTokenClassificationModelOutput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 )TokenClassificationHead   皙?Nc                    s<   t  j|||d |d usJ t|| _t||| _d S )N)
num_labelsclassifier_dropouthidden_size)super__init__r   ZDropoutdropoutZLinear
classifier)selfr   r   r   kwargs	__class__ v/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/nlp/heads/token_classification_head.pyr      s   z TokenClassificationHead.__init__inputsc                 K   sH   |j }| |}| |}d }|d ur| |||}t|||j|jdS )N)losslogitshidden_states
attentions)Zlast_hidden_stater   r   compute_lossr   r    r!   )r   r   attention_masklabelsr   Zsequence_outputr   r   r   r   r   forward'   s   

zTokenClassificationHead.forwardr   returnc           	      C   sx   t  }|d ur-|ddk}|d| j}t||dt|j|}|||}|S ||d| j|d}|S )N   )r   viewr   torchwhereZtensorZignore_indexZtype_as)	r   r   r#   r$   Zloss_fctZactive_lossZactive_logitsZactive_labelsr   r   r   r   r"   9   s   

z$TokenClassificationHead.compute_loss)r   r   N)NN)
__name__
__module____qualname__r   r	   r%   r*   ZTensorr"   __classcell__r   r   r   r   r      s    	
r   )typingr   r*   Ztorch.nn.functionalr   Z
functionalFZtorch.nnr   Zmodelscope.metainfor   Zmodelscope.models.baser   Zmodelscope.models.builderr   Zmodelscope.outputsr   r	   r
   Zmodelscope.utils.constantr   Zregister_moduleZtoken_classificationZnamed_entity_recognitionZpart_of_speechr   r   r   r   r   <module>   s(   