o
    *Îj«j  ã                   @   sÖ  d dl Z d dlZd dlmZ d dlmZ d dlZd dlm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 d d	lmZ d d
lmZ d dlmZmZ d dlmZmZ d dlm Z  e ƒ Z!ej"ej#dd„ dœZ$e  %d¡dddœZ&G dd„ dej'ƒZ(G dd„ dej'ƒZ)G dd„ dej'ƒZ*G dd„ dej'ƒZ+G dd„ dej'ƒZ,G dd„ dej'ƒZ-G d d!„ d!ej'ƒZ.d"d#„ Z/ej0ej1ej2d$G d%d&„ d&eƒƒZ3d'd(„ Z4G d)d*„ d*ej'ƒZ5G d+d,„ d,ej'ƒZ6dS )-é    N)Ú
namedtuple)ÚDict)ÚTensor)ÚBCEWithLogitsLoss)ÚModels)ÚMODELS)ÚSbertConfigÚ
SbertModel)ÚBaseTaskModel)ÚFaqQuestionAnsweringOutput)ÚConfigÚConfigFields)Ú	ModelFileÚTasks)Ú
get_loggerc                 C   ó   | S ©N© ©Úxr   r   úx/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/nlp/structbert/faq_question_answering.pyÚ<lambda>   ó    r   )ÚreluÚtanhÚlinearé   g«ªªªªªú?ç      ð?c                       s*   e Zd Z		d‡ fdd„	Zdd„ Z‡  ZS )ÚLinearProjectionr   Tc                    sp   t ƒ  ¡  t| | _t| }tj|||d}tjj|j	t
 d| ¡| d |r/tj |j¡ tj |¡| _d S )N©Úbiasr   )Zstd)ÚsuperÚ__init__ÚactivationsÚ
activationÚactivation_coeffsÚnnZLinearÚinitZnormal_ÚweightÚmathÚsqrtZzeros_r    ÚutilsZweight_normÚmodel)ÚselfZin_featuresZout_featuresr$   r    Zactivation_coeffr   ©Ú	__class__r   r   r"   (   s   

ÿzLinearProjection.__init__c                 C   s   |   |  |¡¡S r   )r$   r,   )r-   r   r   r   r   Úforward7   s   zLinearProjection.forward)r   T©Ú__name__Ú
__module__Ú__qualname__r"   r0   Ú__classcell__r   r   r.   r   r   &   s
    ür   c                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚRelationModulec                    sR   t t| ƒ ¡  |jd }tj t||jd ddt |j	¡t|jd dƒ¡| _
d S )Né   r   ©r$   é   )r!   r7   r"   Úproj_hidden_sizeÚtorchr&   Ú
Sequentialr   ÚDropoutÚdropoutÚ
prediction)r-   ÚargsÚ
input_sizer.   r   r   r"   =   s   
ÿ

üzRelationModule.__init__c                 C   sr   |j d }|j d }| d¡ |dd¡}| d¡ d|d¡}tj||||  ¡ || gdd}|  |¡}| d¡S ©Nr   r:   éÿÿÿÿ©Údim)ÚshapeÚ	unsqueezeÚrepeatr<   ÚcatÚabsr@   Úsqueeze)r-   ÚqueryÚprotosÚn_clsÚn_queryZ
input_featÚdistsr   r   r   r0   F   s   

ÿ

zRelationModule.forwardr1   r   r   r.   r   r7   ;   s    	r7   c                       s8   e Zd Z‡ fdd„Zedd„ ƒZdd„ Zdd„ Z‡  ZS )	ÚMetricsLayerc                    s>   t t| ƒ ¡  || _|jdv sJ ‚|jdkrt|ƒ| _d S d S )N)ÚrelationÚcosinerS   )r!   rR   r"   rA   Úmetricsr7   Úrelation_net©r-   rA   r.   r   r   r"   S   s   
ÿzMetricsLayer.__init__c                 C   s   | j jS r   )rA   rU   ©r-   r   r   r   ÚnameZ   s   zMetricsLayer.namec                 C   sJ   | j jdkr|  ||¡}| jr|d9 }|S | j jdv r#|  ||¡}|S t‚)NrT   é   )rS   )rA   rU   Úcosine_similarityZtrainingrV   ÚNotImplementedError)r-   rM   rN   Zsupervised_distsr   r   r   r0   ^   s   üÿzMetricsLayer.forwardc                 C   sX   |j d }|j d }|j d }| d¡ |||g¡}| d¡ |||g¡}t ||d¡S )Nr   rD   r:   )rG   rH   ÚexpandÚFr[   )r-   r   ÚyrP   rO   rF   r   r   r   r[   i   s   


zMetricsLayer.cosine_similarity)	r2   r3   r4   r"   ÚpropertyrY   r0   r[   r5   r   r   r.   r   rR   Q   s    
rR   c                   @   s   e Zd Zddd„ZdS )ÚAveragePoolingr:   c                 C   s(   t j|| ¡  |dt j| ¡ |d S )NrE   )r<   ÚsumÚfloat)r-   r   ÚmaskrF   r   r   r   r0   t   s   ÿÿÿzAveragePooling.forwardN)r:   )r2   r3   r4   r0   r   r   r   r   ra   r   s    ra   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚAttnPoolingNc              	      sP   t ƒ  ¡  t t||ƒt ¡ t|ddd¡| _|r!t||ƒ| _d S dd„ | _d S )Nr:   Fr   c                 S   r   r   r   r   r   r   r   r   ‚   r   z&AttnPooling.__init__.<locals>.<lambda>)r!   r"   r&   r=   r   ZTanhÚ
input_projÚoutput_proj)r-   rB   Úhidden_sizeÚoutput_sizer.   r   r   r"   |   s   
þÿ
ÿÿzAttnPooling.__init__c                 C   sX   |   |¡}|| ¡  dd| ¡    }tj|dd}|  |¡}t | dd¡|¡ d¡S )Nç     ˆÃÀr   r:   rE   r   )	rf   rc   r^   Úsoftmaxrg   r<   ÚmatmulÚ	transposerL   )r-   r   rd   ZscoreÚfeaturesr   r   r   r0   „   s
   

zAttnPooling.forward©NNr1   r   r   r.   r   re   z   s    re   c                       r6   )ÚPoolingLayerc                    sP   t t| ƒ ¡  |jdkrt|j|j|jƒ| _d S |jdkr#tƒ | _d S t|jƒ‚)NÚattnÚavg)r!   rp   r"   Úpoolingre   r;   ra   r\   rW   r.   r   r   r"   Ž   s   

þ

zPoolingLayer.__init__c                 C   s   |   ||¡S r   ©rs   )r-   r   rd   r   r   r   r0   ™   ó   zPoolingLayer.forwardr1   r   r   r.   r   rp   Œ   s    rp   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú	Alignmentc                    s   t ƒ  ¡  d S r   )r!   r"   rX   r.   r   r   r"   Ÿ   s   zAlignment.__init__c                 C   s   t  || dd¡¡S )Nr:   r   )r<   rl   rm   )r-   ÚaÚbr   r   r   Ú
_attention¢   s   zAlignment._attentionc                 C   sB   |   ||¡}t | ¡ | dd¡ ¡ ¡}| ¡ }| | d¡ |S )Nr:   r   rj   )ry   r<   rl   rc   rm   ÚboolZmasked_fill_)r-   rw   rx   Zmask_aZmask_brq   rd   r   r   r   r0   ¥   s
   zAlignment.forward)r2   r3   r4   r"   ry   r0   r5   r   r   r.   r   rv      s    rv   c                 C   s<   |   dd¡}|   dd¡}tdg d¢ƒ}||||d|d}|S )NÚmetricrT   rs   rr   rA   )rU   r;   rh   r?   rs   g        )Úgetr   )Úmodel_configrh   r{   Zpooling_methodZArgrA   r   r   r   Ú_create_args­   s   þûr~   )Úmodule_namec                       sl   e Zd ZdZdZdZedd„ ƒZ‡ fdd„Zde	e
ef d	efd
d„Zdd„ Zdd„ Z		ddd„Z‡  ZS )ÚSbertForFaqQuestionAnsweringÚ ZprotonetZmgimnnetc                 K   s(   |  d¡}| |fi |¤Ž}| |¡ |S )NÚ	model_dir)ÚpopÚload_checkpoint)ÚclsÚkwargsr‚   r,   r   r   r   Ú_instantiateÃ   s   

z)SbertForFaqQuestionAnswering._instantiatec                    s¬   t ƒ j|g|¢R i |¤Ž t |¡}t tj |t	j
¡¡ tji ¡}| |¡ | d| j¡}|| jkr9t||ƒ}n|| jkrDt||ƒ}nt|ƒ‚t d|› d¡ || _d S )NÚnetworkzfaq task build z network)r!   r"   r   Zfrom_pretrainedr   Ú	from_fileÚosÚpathÚjoinr   ZCONFIGURATIONr|   r   r,   ÚupdateÚ	PROTO_NETÚProtoNetÚ	MGIMN_NETÚMGIMNNetr\   ÚloggerÚinforˆ   )r-   r‚   rA   r†   Zbackbone_cfgr}   Znetwork_namerˆ   r.   r   r   r"   Ê   s$   
ÿÿ
þ



z%SbertForFaqQuestionAnswering.__init__ÚinputÚreturnc                 C   s”   |d }|d }|d }|d }|d }|   |||||¡\}}d|v rE|d }	t |¡d }
|  ||	|
¡}tj|dd}t|||d	 ¡ S t|d
S )u
  
        Args:
            input (Dict[str, Tensor]): the preprocessed data, it contains the following keys:

                - query(:obj:`torch.LongTensor` of shape :obj:`(batch_size, sequence_length)`):
                    The query to be predicted.
                - support(:obj:`torch.LongTensor` of shape :obj:`(support_size, sequence_length)`):
                    The support set.
                - support_label(:obj:`torch.LongTensor` of shape :obj:`(support_size, )`):
                    The labels of support set.

        Returns:
            Dict[str, Tensor]: result, it contains the following key:

                - scores(:obj:`torch.FloatTensor` of shape :obj:`(batch_size, num_cls)`):
                    Predicted scores of all classes for each query.

        Examples:
            >>> from modelscope.hub.snapshot_download import snapshot_download
            >>> from modelscope.preprocessors import FaqQuestionAnsweringTransformersPreprocessor
            >>> from modelscope.models.nlp import SbertForFaqQuestionAnswering
            >>> cache_path = snapshot_download('damo/nlp_structbert_faq-question-answering_chinese-base')
            >>> preprocessor = FaqQuestionAnsweringTransformersPreprocessor.from_pretrained(cache_path)
            >>> model = SbertForFaqQuestionAnswering.from_pretrained(cache_path)
            >>> param = {
            >>>            'query_set': ['å¦‚ä½•ä½¿ç”¨ä¼˜æƒ åˆ¸', 'åœ¨å“ªé‡Œé¢†åˆ¸', 'åœ¨å“ªé‡Œé¢†åˆ¸'],
            >>>            'support_set': [{
            >>>                    'text': 'å–å“ä»£é‡‘åˆ¸æ€Žä¹ˆç”¨',
            >>>                    'label': '6527856'
            >>>               }, {
            >>>                    'text': 'æ€Žä¹ˆä½¿ç”¨ä¼˜æƒ åˆ¸',
            >>>                    'label': '6527856'
            >>>                }, {
            >>>                    'text': 'è¿™ä¸ªå¯ä»¥ä¸€èµ·é¢†å—',
            >>>                    'label': '1000012000'
            >>>                }, {
            >>>                    'text': 'ä»˜æ¬¾æ—¶é€çš„ä¼˜æƒ åˆ¸å“ªé‡Œé¢†',
            >>>                    'label': '1000012000'
            >>>                }, {
            >>>                    'text': 'è´­ç‰©ç­‰çº§æ€Žä¹ˆé•¿',
            >>>                    'label': '13421097'
            >>>                }, {
            >>>                    'text': 'è´­ç‰©ç­‰çº§äºŒå¿ƒ',
            >>>                    'label': '13421097'
            >>>               }]
            >>>           }
            >>> result = model(preprocessor(param))
        rM   ÚsupportZquery_attention_maskZsupport_attention_maskÚsupport_labelsÚlabelsr:   rE   )ÚlossÚlogitsr˜   )Úscores)rˆ   r<   ÚmaxÚ_compute_lossZargmaxr   Úto_dict)r-   r”   rM   r–   Ú
query_maskÚsupport_maskr—   rš   r›   Zquery_labelsÚnum_clsr™   Zpred_labelsr   r   r   r0   Ü   s&   1ÿÿÿ
z$SbertForFaqQuestionAnswering.forwardc                 C   s   t ||ƒ}tdd||ƒ}|S )NÚmean)Z	reduction)Úget_onehot_labelsr   )r-   rš   Útargetr¡   Úonehot_labelsr™   r   r   r   r     s   
z*SbertForFaqQuestionAnswering._compute_lossc                 C   s   | j  |¡S r   )rˆ   Úsentence_embedding)r-   Úinputsr   r   r   Úforward_sentence_embedding$  ru   z7SbertForFaqQuestionAnswering.forward_sentence_embeddingNc                 K   s   t j |d¡}tj|dd}i }| ¡ D ]\}}	|}
t|ƒ d¡s&d|› }
|	||
< q|d ur4t |¡ | j	||ddd\}}}}||||dœS )	Nzpytorch_model.binÚcpu)Zmap_locationrˆ   znetwork.T)Úload_state_fnZignore_mismatched_sizesZ
_fast_init)Úmissing_keysÚunexpected_keysÚmismatched_keysÚ
error_msgs)
rŠ   r‹   rŒ   r<   ÚloadÚitemsÚstrÚ
startswithZset_default_dtypeZ_load_checkpoint)r-   Zmodel_local_dirZdefault_dtyperª   r†   Z	ckpt_fileZ
state_dictZnew_state_dictÚvar_nameZ	var_valueZnew_var_namer«   r¬   r­   r®   r   r   r   r„   '  s*   


üüz,SbertForFaqQuestionAnswering.load_checkpointro   )r2   r3   r4   Z_backbone_prefixrŽ   r   Úclassmethodr‡   r"   r   r±   r   r   r0   r   r¨   r„   r5   r   r   r.   r   r€   ¼   s    
Cýr€   c                 C   sH   |   dd¡} | jd }t ||¡ | ¡}|jd| dd |  ||¡ ¡ S )NrD   r:   r   )rF   ÚindexÚvalue)ÚviewrG   r<   ZzerosÚtoZscatter_rc   )r¤   r¡   ÚsizeZ	target_ohr   r   r   r£   G  s
   
r£   c                       s:   e Zd Z‡ fdd„Zdd„ Zdeeef fdd„Z‡  Z	S )r   c                    s@   t t| ƒ ¡  t|ƒ| _t|| jjjƒ}t|ƒ| _	t
|ƒ| _d S r   )r!   r   r"   r	   Úbertr~   Úconfigrh   rR   Úmetrics_layerrp   rs   )r-   Úbackbone_configr}   rA   r.   r   r   r"   Q  s
   

zProtoNet.__init__c                 C   sÚ   |j d }t |¡d }t||ƒ}t ||g¡}	tj||gdd}
|  |	|
dœ¡}|d |… }||d … }tj|ddd }t | dd¡|¡| 	d¡ }|  
||¡ ||g¡}| j
jdkrgt |¡}||fS |}||fS )	Nr   r:   rE   )Ú	input_idsÚattention_maskéþÿÿÿgñhãˆµøä>rD   rS   )rG   r<   rœ   r£   rJ   r¦   rb   rl   rm   rH   r¼   r·   rY   Úsigmoid)r-   rM   r–   rŸ   r    r—   rP   r¡   r¥   r¾   Ú
input_maskÚpooled_representationÚz_queryÚ	z_supportZcls_n_supportrN   rš   r›   r   r   r   Ú__call__X  s.   

üÿÿ
ÿzProtoNet.__call__r§   c                 C   sŽ   |d }|d }t |tƒst |¡}t |tƒst |¡}| | jj¡}| | jj¡}|  ||¡}|j}t|j	ƒdkr?| 
d¡}|  ||¡}|S ©Nr¾   r¿   r   rD   )Ú
isinstancer   r<   Ú	IntTensorr¸   rº   ZdeviceÚlast_hidden_stateÚlenrG   rH   rs   ©r-   r§   r¾   rÂ   ÚrstZlast_hidden_statesrÃ   r   r   r   r¦   s  s   




zProtoNet.sentence_embedding)
r2   r3   r4   r"   rÆ   r   r±   r   r¦   r5   r   r   r.   r   r   O  s    r   c                       s”   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
			ddd„Z			ddd„Zdd„ Zdeeef fdd„Zddd„Z‡  ZS )r‘   Zinstance_level_interactionZepisode_level_interactionc           	         s  t t| ƒ ¡  t|ƒ| _|| _tƒ | _| jjj	}|  
| jd¡}|  
| jd¡}dt|ƒ t|ƒ }t d|› d|› ¡ t||d |  |dd| _t||ƒ}t|ƒ| _|jdd	}t|ƒ| _tj t|d
 |dd¡| _tj t|d |ddt d¡t|dƒ¡| _d S )NTr:   zIfaq MGIMN model class-level-interaction:true, instance-level-interaction:z(,             episode-level-interaction:é   r   r9   rr   rt   r8   r   r   )r!   r‘   r"   r	   rº   r}   rv   Ú	alignmentr»   rh   Úsafe_getÚINSTANCE_LEVEL_INTERACTIONÚEPISODE_LEVEL_INTERACTIONÚintr’   r“   r   Ú	fuse_projr~   rp   rs   Ú_replaceÚavg_poolingr<   r&   r=   Úinstance_compare_layerr>   r@   )	r-   r½   r}   rh   Zuse_instance_level_interactionZuse_episode_level_interactionri   rA   Únew_argsr.   r   r   r"   ‰  sF   

ÿÿÿÿÿý


ÿ
þzMGIMNNet.__init__c                 C   s–  |   ||||¡\}}tt |¡ƒd }|j\}	}
|jd }|| }||dœd|	i}}|  | jd¡rD|  ||||¡\}}||d< ||d< |  |||||¡\}}||d< ||d	< |  | j	d¡rp|  
||||¡\}}||d
< ||d< | j|fi |¤Ž}| j|fi |¤Ž}| d¡ d|d¡ |	| |
d¡}| d¡ |	dd¡ |	| |
d¡}|  ||¡}|  ||¡}|  |||	||¡}|  |¡}| |	|¡}|t |¡fS )Nr:   r   )rO   Úk_shotrP   TÚins_z_queryÚins_z_supportÚcls_z_queryÚcls_z_supportÚeps_z_queryÚeps_z_support)Úcontext_embeddingrÓ   r<   rœ   rG   rÐ   rÑ   Ú_instance_level_interactionÚ_class_level_interactionrÒ   Ú_episode_level_interactionÚ_fuse_queryÚ_fuse_supportrH   rI   r·   rs   Ú_instance_comparer@   rÁ   )r-   rM   r–   rŸ   r    r—   rÄ   rÅ   rO   rP   Úsent_lenÚ	n_supportrÙ   Zq_paramsZs_paramsrÚ   rÛ   rÜ   rÝ   rÞ   rß   Zfused_z_queryZfused_z_supportZquery_mask_expandedZsupport_mask_expandedÚQÚSZmatching_featurerš   r   r   r   rÆ   ¨  s`   
ÿ

þÿýÿ
ÿÿ
ÿÿ
ÿÿ
zMGIMNNet.__call__c                 C   s˜   |j d }| ||| |¡}| ||| |¡}tj|||| ||  ¡ gdd}|  |¡}| ||||¡}| d¡}	| d¡\}
}tj|	|
gdd}|S )NrD   rE   r   )rG   r·   r<   rJ   rK   r×   r¢   rœ   )r-   ré   rê   rP   rO   rÙ   Úz_dimZcat_featuresZinstance_matching_featureZcls_matching_feature_meanZcls_matching_feature_maxÚ_Zcls_matching_featurer   r   r   ræ   Ó  s   
"
ÿ
ÿzMGIMNNet._instance_comparec                 C   sø   |j \}}}|j d }| d¡ d|dd¡ || ||¡}| d¡ d|d¡ || |d¡}| d¡ |ddd¡ || ||¡}| d¡ |ddd¡ || |d¡}|  ||||¡}	tj|	dd}
tj|	dd}t |
 	dd¡|¡}t ||¡}||fS )Nr   r:   rE   r   )
rG   rH   rI   r·   rÏ   r^   rk   r<   rl   rm   )r-   rÄ   rŸ   rÅ   r    rP   rç   rë   rè   rq   Zattn_aÚattn_bZins_supportZ	ins_queryr   r   r   rá   á  s0   
ÿÿÿ
ÿ
ÿ
ÿz$MGIMNNet._instance_level_interactionc                 C   sl  |}|}|j \}}	}
|j d }|| }| d¡ d|dd¡ || |	|
¡}| d¡ d¡ d|dd¡ || |	d¡}| d¡ |ddd¡ || ||	 |
¡}| d¡ d¡ |ddd¡ || ||	 d¡}|  ||||¡}tj|dd}t ||¡}| |||	|
¡}| |||	 |
¡}| |||	 d¡}|  ||||¡}tj|dd}t ||¡}| || |	|
¡}||fS ©Nr   r:   rD   r   rE   )	rG   rH   rI   r·   rÏ   r^   rk   r<   rl   )r-   rÄ   rŸ   rÅ   r    rO   Úz_support_oriÚsupport_mask_orirP   rç   rë   rè   rÙ   rq   rí   Z	cls_queryZcls_supportr   r   r   râ   õ  sH   
ÿÿÿÿÿÿÿÿz!MGIMNNet._class_level_interactionc                 C   s"  |}|}|j \}}}	|j d }
| ||d¡}| d¡ |ddd¡ ||
| |	¡}| d¡ d¡ |ddd¡ ||
| d¡}|  ||||¡}tj|dd}t ||¡}| d|
| |	¡ |
dd¡}| d|
| d¡ |
dd¡}|  ||| d¡|¡}tj|dd}t ||¡}| |
||	¡}||fS rî   )	rG   r·   rH   rI   rÏ   r^   rk   r<   rl   )r-   rÄ   rŸ   rÅ   r    rï   rð   rP   rç   rë   rè   rq   rí   Z	eps_queryZ
z_support2Zeps_supportr   r   r   rã     sB   

ÿÿÿÿ
ÿÿ
ÿ
ÿz#MGIMNNet._episode_level_interactionNc                 C   s  |j \}}}	|d usJ ‚| d¡ dd|dd¡ || | ||	¡}
| d¡ d|| dd¡ || | ||	¡}||
||
 ||
  ¡ g}|d urU| ||| ||  ¡ g¡ |d ur}| d¡ d|| dd¡ || | ||	¡}| ||| ||  ¡ g¡ tj|dd}|  |¡}|S )Nr   r:   rD   rE   ©	rG   rH   rI   r·   rK   Úextendr<   rJ   rÔ   )r-   r   rO   rÙ   rÚ   rÜ   rÞ   rP   rç   rë   Úcls_featuresrn   Úfusion_featr   r   r   rä   4  sD   

ÿÿÿÿÿÿÿ
ÿÿÿÿ
zMGIMNNet._fuse_queryc                 C   s   |d usJ ‚|j \}}}| d¡ |ddd¡ || ||¡}| d¡ |ddd¡ || ||¡}	||	||	 ||	  ¡ g}
|d urN|
 ||| ||  ¡ g¡ |d urr| d¡ |ddd¡ || ||¡}|
 ||| ||  ¡ g¡ tj|
dd}
|  |
¡}|S rC   rñ   )r-   r   rP   rÛ   rÝ   rß   rè   rç   rë   ró   rn   rô   r   r   r   rå   R  s<   ÿÿ
ÿÿÿÿ
ÿÿÿ
zMGIMNNet._fuse_supportc                 C   s’   |j d }|j d }tj||gdd}tj||gdd}|  ||¡j}	|	j d }
|	j d }|	d |…  |||
g¡}|	|d …  |||
g¡}||fS )Nr   rE   rD   rÀ   )rG   r<   rJ   rº   rÊ   r·   )r-   rM   r–   rŸ   r    rP   rè   r   Zx_maskrÊ   rë   rç   rÄ   rÅ   r   r   r   rà   m  s   



ÿzMGIMNNet.context_embeddingr§   c                 C   sr   |d }|d }t |tƒst |¡}t |tƒst |¡}|  ||¡}|j}t|jƒdkr1| d¡}|  	||¡}|S rÇ   )
rÈ   r   r<   rÉ   rº   rÊ   rË   rG   rH   rÖ   rÌ   r   r   r   r¦   z  s   




ÿzMGIMNNet.sentence_embeddingc              
   C   sX   z| j  ||¡W S  ty+ } zt |› d|› ¡ t |¡ |W  Y d }~S d }~ww )Nz" not in model_config, use default:)r}   r|   Ú	Exceptionr’   Údebug)r-   ÚkÚdefaultÚer   r   r   rÐ   ‰  s   
€ýzMGIMNNet.safe_get)NNNr   )r2   r3   r4   rÑ   rÒ   r"   rÆ   ræ   rá   râ   rã   rä   rå   rà   r   r±   r   r¦   rÐ   r5   r   r   r.   r   r‘   „  s(    +!"
ú!
ûr‘   )7r)   rŠ   Úcollectionsr   Útypingr   r<   Ztorch.nnr&   Ztorch.nn.functionalZ
functionalr^   r   r   Zmodelscope.metainfor   Zmodelscope.models.builderr   Z modelscope.models.nlp.structbertr   r	   Z,modelscope.models.nlp.task_models.task_modelr
   Zmodelscope.outputsr   Zmodelscope.utils.configr   r   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr   r’   r   r   r#   r*   r%   ÚModuler   r7   rR   ra   re   rp   rv   r~   Zregister_moduleZfaq_question_answeringZ
structbertr€   r£   r   r‘   r   r   r   r   Ú<module>   sT   ýý!ÿ 
5