o
    *jE                  	   @   s   d dl Z d dlmZ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mZ e 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
ejejejd
G dd deZdS )    N)CrossEntropyLossMSELoss)Models)MODELS)&AttentionTextClassificationModelOutput)logger)Tasks   )PeerClassificationHead	PeerModelPeerPreTrainedModelPeerTopModel)module_namec                       s>   e Zd Z fddZddddddddde dfddZ  ZS )PeerForSequenceClassificationc                    s   t  | |j| _|| _t|}t|}|jdks J d|j|_|j|j |_t|| _	t
|| _t|| _|   d S )Nr   z9config.num_hidden_layers_shared should be greater than 0!)super__init__
num_labelsconfigcopydeepcopyZnum_hidden_layers_sharedZnum_hidden_layersr   teams1_shared_bottomr   teams1_discr_topr
   
classifierZinit_weights)selfr   kwargsZconfig_discr_topZconfig_shared_bottom	__class__ o/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/nlp/peer/text_classification.pyr   *   s   




z&PeerForSequenceClassification.__init__Nc                 C   s   |dur|n| j j}| ||||||||	|
|
}| |d ||||||||	|
|}|}|d }| |}d}|dur^| jdkrNt }||d|d}nt }||d| j|d}|st|f|dd  }|durr|f| S |S t	|||j
|jdS )a  
        labels (:obj:`torch.LongTensor` of shape :obj:`(batch_size,)`, `optional`):
            Labels for computing the sequence classification/regression loss. Indices should be in :obj:`[0, ...,
            config.num_labels - 1]`. If :obj:`config.num_labels == 1` a regression loss is computed (Mean-Square loss),
            If :obj:`config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nr   r	   )losslogitshidden_states
attentions)r   Zuse_return_dictr   r   r   r   r   viewr   r   r"   r#   )r   Z	input_idsZattention_maskZtoken_type_idsZposition_idsZ	head_maskZinputs_embedslabelsZoutput_attentionsZoutput_hidden_statesZside_info_setsZreturn_dictZhidden_states_discr_bottomZhidden_states_discr_topZdiscriminator_hidden_statesZsequence_outputr!   r    Zloss_fctoutputr   r   r   forward?   sB   



z%PeerForSequenceClassification.forward)__name__
__module____qualname__r   dictr'   __classcell__r   r   r   r   r   !   s    	r   )r   Ztorch.nnr   r   Zmodelscope.metainfor   Zmodelscope.models.builderr   Zmodelscope.outputsr   Zmodelscope.utilsr   loggingZmodelscope.utils.constantr   Zbackboner
   r   r   r   Z
get_loggerZregister_moduleZtext_classificationZpeerZnliZsentiment_classificationZsentence_similarityZzero_shot_classificationr   r   r   r   r   <module>   s&   