o
    –h;  ã                   @   sê   d dl Z d dlZd dlZd dlZd dlmZ d dlm  mZ	 d dl
mZmZmZ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 d d	lmZ d d
lmZm Z  d dl!m"Z" e  #d¡Z$G dd„ dej%ƒZ&dS )é    N)Úpad_packed_sequenceÚpack_padded_sequenceÚpack_sequenceÚpad_sequenceÚPackedSequence)Úextract_bert_embeddings)ÚDeepBiaffineScorer)Úload_charlm)ÚHighwayLSTM)ÚWordDropout)Úattach_bert_model)ÚCompositeVocab)ÚCharacterModelÚCharacterLanguageModel)ÚutilsÚstanzac                       s6   e Zd Zd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Z‡  ZS )ÚParserNFc
              
      sf  t ƒ  ¡  || _|| _|| _g | _d}
| jd dkrCtjt|d ƒ| jd dd| _	tjt|d ƒ| jd dd| _
|
| jd d 7 }
| jd dkrÝ| j dd	¡ratjt|d
 ƒ| jd dd| _| j dd	¡rt|d tƒs€tjt|d ƒ| jd dd| _nt ¡ | _|d  ¡ D ]}| j tj|| jd dd¡ q‹| j dd	¡s«| j dd	¡r²|
| jd 7 }
| j dd	¡rÝt ¡ | _|d  ¡ D ]}| j tj|| jd dd¡ qÄ|
| jd 7 }
| jd rq| jd dkrq| j dd ¡rU|d d u stj |d ¡std |d ¡ƒ‚|d d u stj |d ¡s%td |d ¡ƒ‚t d|d |d ¡ |  dt|d |d¡ |  dt|d |d¡ |
| j ¡ | j ¡  7 }
nt ||ƒ| _!tj"| jd | jd dd| _#|
| jd 7 }
|	| _$t%| ||| j dd¡|ƒ | j dd ¡r®| d d¡r¤tj"|d  d!dd| _&tj' (| j&j)¡ nd | _&|
| j*j+j,7 }
| jd" rÖ|  d#tjj-|d	d$¡ tj"|j.d! | jd dd| _/|
| jd 7 }
t0|
| jd% | jd& d	d	| jd' | jd( t1j2d)| _3t 4t1 5|
¡t6 7|
¡ ¡| _8t 4t1 9d| jd&  d!| jd% ¡¡| _:t 4t1 9d| jd&  d!| jd% ¡¡| _;t<d| jd%  d| jd%  | jd* d!d	|d' d+| _=t<d| jd%  d| jd%  | jd* t|d, ƒd	|d' d+| _>|d- r{t<d| jd%  d| jd%  | jd* d!d	|d' d+| _?|d. ršt<d| jd%  d| jd%  | jd* d!d	|d' d+| _@tjAd/d0d1| _Bt C|d' ¡| _DtE|d2 ƒ| _Fd S )3Nr   Úword_emb_dimÚword)Úpadding_idxÚlemmaé   Útag_emb_dimÚuse_uposTÚuposÚuse_xposÚxposÚ
use_ufeatsÚfeatsÚcharÚchar_emb_dimÚcharlmÚcharlm_forward_filezUCould not find forward character model: {}  Please specify with --charlm_forward_fileÚcharlm_backward_filezWCould not find backward character model: {}  Please specify with --charlm_backward_filez,Depparse model loading charmodels: %s and %sÚcharmodel_forward)Úfoundation_cacheÚcharmodel_backwardÚchar_hidden_dimÚtransformed_dimF)ÚbiasÚuse_peftÚ
bert_modelÚbert_hidden_layersé   ÚpretrainÚpretrained_emb)ÚfreezeÚ
hidden_dimÚ
num_layersÚdropoutÚrec_dropout)Úbatch_firstÚbidirectionalr3   r4   Úhighway_funcÚdeep_biaff_hidden_dim)Úpairwiser3   ÚdeprelÚlinearizationÚdistanceéÿÿÿÿÚsum)Úignore_indexÚ	reductionÚword_dropout)GÚsuperÚ__init__ÚvocabÚargsÚ	share_hidÚunsaved_modulesÚnnÚ	EmbeddingÚlenÚword_embÚ	lemma_embÚgetÚupos_embÚ
isinstancer   Úxpos_embÚ
ModuleListÚlensÚappendÚ
ufeats_embÚosÚpathÚexistsÚFileNotFoundErrorÚformatÚloggerÚdebugÚadd_unsaved_moduler	   r$   r1   r&   r   Ú	charmodelÚLinearÚ
trans_charÚ	peft_namer   Úbert_layer_mixÚinitÚzeros_Úweightr+   ÚconfigÚhidden_sizeÚfrom_pretrainedÚshapeÚtrans_pretrainedr
   ÚtorchÚtanhÚ
parserlstmÚ	ParameterÚrandnÚnpÚsqrtÚdrop_replacementÚzerosÚparserlstm_h_initÚparserlstm_c_initr   Ú	unlabeledr:   r;   r<   ÚCrossEntropyLossÚcritÚDropoutÚdropr   Úworddrop)ÚselfrE   rD   Ú
emb_matrixrF   r%   r+   Úbert_tokenizerÚforce_bert_savedr`   Ú
input_sizeÚl©Ú	__class__© úW/var/www/html/env_mimamsha/lib/python3.10/site-packages/stanza/models/depparse/model.pyrC      s€   
   "
 
   4&&4<
4
4zParser.__init__c                 C   s    |  j |g7  _ t| ||ƒ d S ©N)rG   Úsetattr)r{   ÚnameÚmodulerƒ   rƒ   r„   r\   u   s   zParser.add_unsaved_modulec                 C   s   t  | ¡ d S r…   )r   Ú	log_norms©r{   rƒ   rƒ   r„   r‰   y   ó   zParser.log_normsc           /         sž  ‡fdd„}g }ˆ j d r ˆ  |¡}ˆ  |¡}||ƒ}||g7 }ˆ j d dkr?ˆ  |¡}||ƒ}ˆ  |	¡}||ƒ}|||g7 }ˆ j d dkrÑˆ j  dd¡rSˆ  |¡}nd}ˆ j  d	d¡rŠtˆ jd
 t	ƒrƒt
tˆ jd
 ƒƒD ]}|ˆ j| |d d …d d …|f ƒ7 }qmn|ˆ  |¡7 }ˆ j  dd¡s˜ˆ j  d	d¡r¡||ƒ}||g7 }ˆ j  dd¡rÑd}t
tˆ jd ƒƒD ]}|ˆ j| |d d …d d …|f ƒ7 }q³||ƒ}||g7 }ˆ j d r,ˆ j d dkr,ˆ j  dd ¡rdd„ |D ƒ}ˆ j |¡}|t|ddƒ}ˆ j |¡}|t|ddƒ}|||g7 }nˆ  |||ˆ|¡}tˆ  ˆ  |j¡¡|jƒ}||g7 }ˆ jd ur„tˆ  ¡ ƒj}tˆ j d ˆ jˆ j||dˆ jd urOˆ jjnd ˆ j  dd¡ p\ˆ j  ˆ j!d	}ˆ jd urp‡ fdd„|D ƒ}dd„ |D ƒ}t|dd}|||ƒg7 }t" #dd„ |D ƒd¡}ˆ  $|ˆ j%¡}ˆ  |¡}t||d jƒ}ˆ j&|ˆˆ j' (dˆ j d  | )d¡ˆ j d ¡ *¡ ˆ j+ (dˆ j d  | )d¡ˆ j d ¡ *¡ fd\}} t,|dd\}} ˆ  -ˆ  |¡ˆ  |¡¡ .d¡}!ˆ  /ˆ  |¡ˆ  |¡¡}"ˆ j d  sˆ j d! r4t"j0| )d¡|
jd" 1ddd#¡ (| )d¡d#d#¡t"j0| )d¡|
jd" 1dd#d¡ (| )d¡d#d#¡ }#ˆ j d  rYˆ  2ˆ  |¡ˆ  |¡¡ .d¡}$|!t3 4|$t" 5|#¡ 6¡  ¡ 7¡ 7 }!ˆ j d! rˆ  8ˆ  |¡ˆ  |¡¡ .d¡}%dt3 9|%¡ }&t" :|#¡}'t" ;|' 6¡ |& d d d ¡ }(|!|( 7¡ 7 }!t"j<|
 )d#¡d t"j=|
jd$ >d¡})|! ?|)t6d%ƒ ¡ g }*ˆ j rª|!d d …dd …d d …f }!|! @| >d¡t6d%ƒ ¡}!|
 @|d d …dd …f d#¡}+ˆ  A|! *¡  1d#|! )d¡¡|+ 1d#¡¡},|"d d …dd …f }"t" B|"d|
 >d¡ >d¡ (d#d#d#tˆ jd& ƒ¡¡ 1d#tˆ jd& ƒ¡}"| @|d d …dd …f d#¡}-|,ˆ  A|" *¡ |- 1d#¡¡7 },ˆ j d  rt" B|$d d …dd …f d|
 >d¡¡ 1d#¡}$t" #|$ >d¡ d |$ >d¡d gd¡}$t" B|#d d …dd …f dk C¡ d|
 >d¡¡}.|,ˆ  A|$ *¡ |. 1d#¡¡7 },ˆ j d! rŸt" B|(d d …dd …f d|
 >d¡¡}(|,|( D¡ 8 },|,| )d¡ },|,|*fS d},|* Et3 F|!d¡ 7¡  G¡  H¡ ¡ |* E|" Id¡d  7¡  G¡  H¡ ¡ |,|*fS )'Nc                    s   t | ˆ ddS )NT©r5   )r   )Úx)Úsentlensrƒ   r„   Úpack}   r‹   zParser.forward.<locals>.packr.   r   r   r   r   Tr   r   r   r   r   r    r!   c                 S   s   g | ]}d g| ‘qS )Ú
rƒ   ©Ú.0r   rƒ   rƒ   r„   Ú
<listcomp>­   s    z"Parser.forward.<locals>.<listcomp>rŒ   r+   Úbert_finetuneF)Úkeep_endpointsr2   Údetachr`   c                    s0   g | ]}ˆ   |¡ d ¡|jd dˆ j j  ‘qS )r   )Úaxis)ra   Úsqueezer>   Úin_features)r’   ÚfeaturerŠ   rƒ   r„   r“   À   s   0 c                 S   s    g | ]}|d d…d d …f ‘qS )Nr=   rƒ   r‘   rƒ   rƒ   r„   r“   Ã   s     c                 S   s   g | ]}|j ‘qS rƒ   )Údatar‘   rƒ   rƒ   r„   r“   Ç   s    r-   r   r2   r1   )Úhxé   r;   r<   )Údevicer=   )Údtyperž   Úinfr:   )JrE   r/   ri   rK   rL   rM   rN   rO   rD   r   ÚrangerJ   rP   rT   r$   Úbuild_char_representationr   r&   r]   r   r_   ry   r›   Úbatch_sizesr+   ÚnextÚ
parametersrž   r   r}   ra   r™   Útrainingr`   rj   Úcatrz   rq   rl   rs   ÚexpandÚsizeÚ
contiguousrt   r   ru   r˜   r:   ÚarangeÚviewr;   ÚFÚ
logsigmoidÚsignÚfloatr–   r<   ÚsoftplusÚabsÚlogÚeyeÚboolÚ	unsqueezeÚmasked_fill_Úmasked_fillrw   ÚgatherÚlongr>   rS   Úlog_softmaxÚcpuÚnumpyÚmax)/r{   r   Ú	word_maskÚ	wordcharsÚwordchars_maskr   r   ÚufeatsÚ
pretrainedr   Úheadr:   Úword_orig_idxrŽ   ÚwordlensÚtextr   Úinputsr/   rK   rL   Úpos_embÚiÚ	feats_embÚcharlm_textÚall_forward_charsÚall_backward_charsÚ	char_repsrž   Úprocessed_bertÚlstm_inputsÚlstm_outputsÚ_Úunlabeled_scoresÚdeprel_scoresÚhead_offsetÚ
lin_scoresÚdist_scoresÚ	dist_predÚdist_targetÚdist_kldÚdiagÚpredsÚunlabeled_targetÚlossÚdeprel_targetÚ
lin_targetrƒ   )r{   rŽ   r„   Úforward|   sÈ   





&ÿ
&

ý
d` 
 $$B*&,$ü zParser.forward)NFNNNFN)Ú__name__Ú
__module__Ú__qualname__rC   r\   r‰   râ   Ú__classcell__rƒ   rƒ   r   r„   r      s
    ^r   )'ÚloggingrU   r½   ro   rj   Útorch.nnrH   Útorch.nn.functionalÚ
functionalr­   Útorch.nn.utils.rnnr   r   r   r   r   Ú#stanza.models.common.bert_embeddingr   Ústanza.models.common.biaffiner   Ú%stanza.models.common.foundation_cacher	   Ústanza.models.common.hlstmr
   Ústanza.models.common.dropoutr   Ústanza.models.common.utilsr   Ústanza.models.common.vocabr   Ústanza.models.common.char_modelr   r   Ústanza.models.commonr   Ú	getLoggerrZ   ÚModuler   rƒ   rƒ   rƒ   r„   Ú<module>   s$    
