Ë
    ÛÓ^jé“  ã                   óB  — d Z ddlmZ ddlmZ ddlZddlmZ ddl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mZmZmZmZmZ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#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z,  e%jZ                  e.«      Z/ G d„ dej`                  «      Z1	 	 dBdej`                  dejd                  dejd                  dejd                  dejd                  dz  de3dz  de3dee#   fd„Z4 G d„ d ej`                  «      Z5 G d!„ d"ej`                  «      Z6 G d#„ d$ej`                  «      Z7 G d%„ d&ej`                  «      Z8e$ G d'„ d(e«      «       Z9 e$d)¬*«      e G d+„ d,e"«      «       «       Z:e$ G d-„ d.e9«      «       Z; e$d/¬*«       G d0„ d1e9«      «       Z< G d2„ d3ej`                  «      Z= G d4„ d5ej`                  «      Z>e$ G d6„ d7e9«      «       Z? e$d8¬*«       G d9„ d:e9«      «       Z@e$ G d;„ d<e9«      «       ZAe$ G d=„ d>e9«      «       ZBe$ G d?„ d@e9«      «       ZCg dA¢ZDy)CzPyTorch ALBERT model.é    )ÚCallable)Ú	dataclassN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚMaskedLMOutputÚMultipleChoiceModelOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚAlbertConfigc                   óÊ   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  f
d
„Z
ˆ xZS )ÚAlbertEmbeddingszQ
    Construct the embeddings from word, position and token_type embeddings.
    Úconfigc                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      d¬«       | j#                  dt%        j*                  | j,                  j/                  «       t$        j0                  ¬«      d¬«       y )	N)Úpadding_idx©ÚepsÚposition_ids©r   éÿÿÿÿF)Ú
persistentÚtoken_type_ids)Údtype)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚembedding_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferÚtorchÚarangeÚexpandÚzerosr(   ÚsizeÚlong©Úselfr#   Ú	__class__s     €úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/albert/modeling_albert.pyr/   zAlbertEmbeddings.__init__6   s  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?TÑ?TÐbh×buÑbuÔvˆÔÜ#%§<¡<°×0NÑ0NÐPV×PeÑPeÓ#fˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J_ÑJ_Ó%`ˆÔ"äŸ™ f×&;Ñ&;À×AVÑAVÔWˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ð 	×ÑØœeŸk™k¨$×*;Ñ*;×*@Ñ*@Ó*BÌ%Ï*É*ÔUÐbgð 	õ 	
ó    NÚ	input_idsr,   r(   Úinputs_embedsÚreturnc                 ó„  — |�|j                  «       }n|j                  «       d d }|\  }}|€| j                  d d …d |…f   }|€št        | d«      rT| j                  j	                  |j
                  d   d«      }t        j                  |d|¬«      }|j	                  ||«      }n:t        j                  |t        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }	||	z   }
| j                  |«      }|
|z   }
| j                  |
«      }
| j                  |
«      }
|
S )Nr*   r,   r   r   )ÚdimÚindex)r-   Údevice)rC   r(   Úhasattrr,   rA   Úshaper?   ÚgatherrB   rD   rP   r4   r8   r6   r9   r=   )rF   rJ   r,   r(   rK   Úinput_shapeÚ
batch_sizeÚ
seq_lengthÚbuffered_token_type_idsr8   Ú
embeddingsr6   s               rH   ÚforwardzAlbertEmbeddings.forwardG   sG  € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà!,Ñˆ
�JàÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLð
 Ð!Ü�tÐ-Ô.à*.×*=Ñ*=×*DÑ*DÀ\×EWÑEWÐXYÑEZÐ\^Ó*_Ð'Ü*/¯,©,Ð7NÐTUÐ]iÔ*jÐ'Ø!8×!?Ñ!?À
ÈJÓ!W‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐØ"Ð%:Ñ:ˆ
à"×6Ñ6°|ÓDÐØÐ"5Ñ5ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐrI   )NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r/   r?   Ú
LongTensorÚFloatTensorÚTensorrY   Ú__classcell__©rG   s   @rH   r"   r"   1   s‡   ø„ ñð
˜|õ 
ð& .2Ø26Ø04Ø26ñ'à×#Ñ# dÑ*ð'ð ×(Ñ(¨4Ñ/ð'ð ×&Ñ&¨Ñ-ð	'ð
 ×(Ñ(¨4Ñ/ð'ð 
�‰÷'rI   r"   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr=   Úkwargsc                 óœ  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |d¬«      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr*   ç      à¿é   r	   ©rN   )ÚpÚtrainingr   )
rC   r?   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr=   ro   Ú
contiguous)
rc   rd   re   rf   rg   rh   r=   ri   Úattn_weightsÚattn_outputs
             rH   Úeager_attention_forwardrw   r   s»   € ð €Ø—*‘*˜R“. DÑ(ˆô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LàÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$rI   c                   ó¦   ‡ — e Zd Zdefˆ fd„Z	 d	dej                  dej                  dz  dee	   de
ej                  ej                  f   fd„Zˆ xZS )
ÚAlbertAttentionr#   c                 ó$  •— t         ‰| �  «        |j                  |j                  z  dk7  r1t	        |d«      s%t        d|j                  › d|j                  › �«      ‚|| _        |j                  | _        |j                  | _        |j                  |j                  z  | _        | j                  | j                  z  | _        | j                  dz  | _	        t        j                  |j                  «      | _        t        j                  |j                  «      | _        t        j                   |j                  | j                  «      | _        t        j                   |j                  | j                  «      | _        t        j                   |j                  | j                  «      | _        t        j                   |j                  |j                  «      | _        t        j*                  |j                  |j,                  ¬«      | _        d| _        y )Nr   r2   zThe hidden size (z6) is not a multiple of the number of attention heads (rk   r&   F)r.   r/   Úhidden_sizeÚnum_attention_headsrQ   Ú
ValueErrorr#   Úattention_head_sizeÚall_head_sizerh   r   r;   Úattention_probs_dropout_probÚattention_dropoutr<   Úoutput_dropoutÚLinearrd   re   rf   Údenser9   r:   Ú	is_causalrE   s     €rH   r/   zAlbertAttention.__init__�   s—  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5ð7óð ð ˆŒà#)×#=Ñ#=ˆÔ Ø!×-Ñ-ˆÔØ#)×#5Ñ#5¸×9SÑ9SÑ#SˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔØ×/Ñ/°Ñ5ˆŒä!#§¡¨F×,OÑ,OÓ!PˆÔÜ Ÿj™j¨×)CÑ)CÓDˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒàˆ�rI   NÚhidden_statesrg   ri   rL   c                 óì  — |j                   d d }g |¢d‘| j                  ‘­} | j                  |«      j                  |Ž j	                  dd«      } | j                  |«      j                  |Ž j	                  dd«      } | j                  |«      j                  |Ž j	                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||f| j                  sdn| j                  j                  | j                  dœ|¤Ž\  }
} |
j                   g |¢d‘­Ž j#                  «       }
| j%                  |
«      }
| j'                  |
«      }
| j)                  ||
z   «      }
|
|fS )Nr*   r   rl   ç        )r=   rh   )rR   r~   rd   Úviewrq   re   rf   r   Úget_interfacer#   Ú_attn_implementationrw   ro   r�   rn   rh   Úreshapert   r„   r‚   r9   )rF   r†   rg   ri   rT   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_interfacerv   ru   s               rH   rY   zAlbertAttention.forwardª   s}  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆð 5�d—j‘j Ó/×4Ñ4°lÐC×MÑMÈaÐQRÓSˆØ0�D—H‘H˜]Ó+×0Ñ0°,Ð?×IÑIÈ!ÈQÓOˆ	Ø4�d—j‘j Ó/×4Ñ4°lÐC×MÑMÈaÐQRÓSˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2H×2JÑ2JØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆà—j‘j Ó-ˆØ×)Ñ)¨+Ó6ˆØ—n‘n ]°[Ñ%@ÓAˆà˜LÐ(Ð(rI   ©N©rZ   r[   r\   r    r/   r?   r`   r_   r   r   ÚtuplerY   ra   rb   s   @rH   ry   ry   Ž   sf   ø„ ð˜|õ ð< 48ñ")à—|‘|ð")ð ×)Ñ)¨DÑ0ð")ð Ð+Ñ,ð	")ð
 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷")rI   ry   c                   óÞ   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dej                  dz  dee	   de
ej                  ej                  f   fd„Zd	ej                  dej                  fd
„Zˆ xZS )ÚAlbertLayerr#   c                 ó  •— t         ‰| �  «        || _        |j                  | _        d| _        t        j                  |j                  |j                  ¬«      | _	        t        |«      | _        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        t         |j"                     | _        t        j&                  |j(                  «      | _        y )Nr   r&   )r.   r/   r#   Úchunk_size_feed_forwardÚseq_len_dimr   r9   r{   r:   Úfull_layer_layer_normry   Ú	attentionrƒ   Úintermediate_sizeÚffnÚ
ffn_outputr   Ú
hidden_actÚ
activationr;   r<   r=   rE   s     €rH   r/   zAlbertLayer.__init__Ð   sº   ø€ Ü‰ÑÔàˆŒØ'-×'EÑ'EˆÔ$ØˆÔÜ%'§\¡\°&×2DÑ2DÈ&×J_ÑJ_Ô%`ˆÔ"Ü(¨Ó0ˆŒÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜŸ)™) F×$<Ñ$<¸f×>PÑ>PÓQˆŒÜ  ×!2Ñ!2Ñ3ˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rI   Nr†   rg   ri   rL   c                 ó´   —  | j                   ||fi |¤Ž\  }}t        | j                  | j                  | j                  |«      }| j                  ||z   «      }|S r’   )r›   r   Úff_chunkr˜   r™   rš   )rF   r†   rg   ri   Úattention_outputÚ_rž   s          rH   rY   zAlbertLayer.forwardÝ   se   € ð -˜dŸn™n¨]¸NÑUÈfÑUÑÐ˜!ä.Ø�M‰MØ×(Ñ(Ø×ÑØó	
ˆ
ð ×2Ñ2°:Ð@PÑ3PÓQˆØÐrI   r£   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r’   )r�   r    rž   )rF   r£   rž   s      rH   r¢   zAlbertLayer.ff_chunkî   s3   € Ø—X‘XÐ.Ó/ˆ
Ø—_‘_ ZÓ0ˆ
Ø—_‘_ ZÓ0ˆ
ØÐrI   r’   )rZ   r[   r\   r    r/   r?   r`   r_   r   r   r”   rY   r¢   ra   rb   s   @rH   r–   r–   Ï   s�   ø„ ð>˜|õ >ð  48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*óð"¨¯©ð ¸%¿,¹,÷ rI   r–   c                   ó²   ‡ — e Zd Zdefˆ fd„Z	 d
dej                  dej                  dz  dee	   de
ej                  e
ej                     z  df   fd	„Zˆ xZS )ÚAlbertLayerGroupr#   c                 ó´   •— t         ‰| �  «        t        j                  t	        |j
                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        y c c}w r’   )r.   r/   r   Ú
ModuleListÚrangeÚinner_group_numr–   Úalbert_layers©rF   r#   r¤   rG   s      €rH   r/   zAlbertLayerGroup.__init__ö   s=   ø€ Ü‰ÑÔäŸ]™]ÌÈv×OeÑOeÓIfÖ+gÀA¬K¸Õ,?Ò+gÓhˆÕùÒ+gs   ¶ANr†   rg   ri   rL   .c                 óT   — t        | j                  «      D ]  \  }} |||fi |¤Ž}Œ |S r’   )Ú	enumerater¬   )rF   r†   rg   ri   Úlayer_indexÚalbert_layers         rH   rY   zAlbertLayerGroup.forwardû   s<   € ô *3°4×3EÑ3EÓ)Fò 	RÑ%ˆK˜Ù(¨¸ÑQÈ&ÑQ‰Mð	RàÐrI   r’   r“   rb   s   @rH   r§   r§   õ   sr   ø„ ði˜|õ ið 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
ˆu�|‰|˜e E§L¡LÑ1Ñ1°3Ð6Ñ	7÷rI   r§   c            
       óz   ‡ — e Zd Zdefˆ fd„Z	 d	dej                  dej                  dz  dee	   de
ez  fd„Zˆ xZS )
ÚAlbertTransformerr#   c                 ó   •— t         ‰| �  «        || _        t        j                  |j
                  |j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        y c c}w r’   )r.   r/   r#   r   rƒ   r2   r{   Úembedding_hidden_mapping_inr©   rª   Únum_hidden_groupsr§   Úalbert_layer_groupsr­   s      €rH   r/   zAlbertTransformer.__init__  sf   ø€ Ü‰ÑÔàˆŒÜ+-¯9©9°V×5JÑ5JÈF×L^ÑL^Ó+_ˆÔ(Ü#%§=¡=ÔTYÐZ`×ZrÑZrÓTsÖ1tÈqÔ2BÀ6Õ2JÒ1tÓ#uˆÕ ùÒ1ts   Á,BNr†   rg   ri   rL   c                 ó$  — | j                  |«      }t        | j                  j                  «      D ]R  }t	        || j                  j                  | j                  j
                  z  z  «      } | j                  |   ||fi |¤Ž}ŒT t        |¬«      S )N)Úlast_hidden_state)rµ   rª   r#   Únum_hidden_layersÚintr¶   r·   r   )rF   r†   rg   ri   ÚiÚ	group_idxs         rH   rY   zAlbertTransformer.forward  sŽ   € ð ×8Ñ8¸ÓGˆä�t—{‘{×4Ñ4Ó5ò 	ˆAä˜A §¡×!>Ñ!>ÀÇÁ×A^ÑA^Ñ!^Ñ_Ó`ˆIà?˜D×4Ñ4°YÑ?ØØñð ñ‰Mð		ô °Ô?Ð?rI   r’   )rZ   r[   r\   r    r/   r?   r`   r_   r   r   r   r”   rY   ra   rb   s   @rH   r³   r³     s`   ø„ ðv˜|õ vð 48ñ@à—|‘|ð@ð ×)Ñ)¨DÑ0ð@ð Ð+Ñ,ð	@ð
 
˜5Ñ	 ÷@rI   r³   c                   óh   ‡ — e Zd ZeZdZdZdZdZdZ	e
edœZ ej                  «       ˆ fd„«       Zˆ xZS )ÚAlbertPreTrainedModelÚalbertT)r†   Ú
attentionsc                 ó–  •— t         ‰| �  |«       t        |t        «      r t	        j
                  |j                  «       yt        |t        «      ryt	        j                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       t	        j
                  |j                  «       yy)zInitialize the weights.r*   r)   N)r.   Ú_init_weightsÚ
isinstanceÚAlbertMLMHeadÚinitÚzeros_Úbiasr"   Úcopy_r(   r?   r@   rR   rA   r,   )rF   rc   rG   s     €rH   rÃ   z#AlbertPreTrainedModel._init_weights0  s‰   ø€ ô 	‰Ñ˜fÔ%Ü�fœmÔ,Ü�K‰K˜Ÿ™Õ$Ü˜Ô 0Ô1Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�K‰K˜×-Ñ-Õ.ð 2rI   )rZ   r[   r\   r    Úconfig_classÚbase_model_prefixÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendr–   ry   Ú_can_record_outputsr?   Úno_gradrÃ   ra   rb   s   @rH   r¿   r¿   #  sO   ø„ à€LØ ÐØÐØ€NØÐØ"&Ðà$Ø%ñÐð
 €U‡]�]ƒ_ó/ó ô/rI   r¿   z2
    Output type of [`AlbertForPreTraining`].
    )Úcustom_introc                   óæ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	ej                  dz  ed<   dZ
eej                     dz  ed<   dZeej                     dz  ed<   y)ÚAlbertForPreTrainingOutputa‰  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        Total loss as the sum of the masked language modeling loss and the next sequence prediction
        (classification) loss.
    prediction_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    sop_logits (`torch.FloatTensor` of shape `(batch_size, 2)`):
        Prediction scores of the next sequence prediction (classification) head (scores of True/False continuation
        before SoftMax).
    NÚlossÚprediction_logitsÚ
sop_logitsr†   rÁ   )rZ   r[   r\   r]   rÕ   r?   r_   Ú__annotations__rÖ   r×   r†   r”   rÁ   © rI   rH   rÔ   rÔ   ;  s}   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø+/€J�×!Ñ! DÑ(Ó/Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6rI   rÔ   c                   óR  ‡ — e Zd ZeZdZddedefˆ fd„Zdej                  fd„Z
dej                  ddfd	„Zeee	 	 	 	 	 dd
ej                   dz  dej"                  dz  dej                   dz  dej                   dz  dej"                  dz  dee   deez  fd„«       «       «       Zˆ xZS )ÚAlbertModelrÀ   r#   Úadd_pooling_layerc                 óf  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        |rIt        j                  |j                  |j                  «      | _
        t        j                  «       | _        nd| _
        d| _        |j                  | _        | j                  «        y)zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)r.   r/   r#   r"   rX   r³   Úencoderr   rƒ   r{   ÚpoolerÚTanhÚpooler_activationr‹   Úattn_implementationÚ	post_init)rF   r#   rÜ   rG   s      €rH   r/   zAlbertModel.__init__Y  s‰   ø€ ô
 	‰Ñ˜Ô àˆŒÜ*¨6Ó2ˆŒÜ(¨Ó0ˆŒÙÜŸ)™) F×$6Ñ$6¸×8JÑ8JÓKˆDŒKÜ%'§W¡W£YˆDÕ"àˆDŒKØ%)ˆDÔ"à#)×#>Ñ#>ˆÔ ð 	�‰ÕrI   rL   c                 ó.   — | j                   j                  S r’   ©rX   r4   ©rF   s    rH   Úget_input_embeddingsz AlbertModel.get_input_embeddingso  s   € Ø�‰×.Ñ.Ð.rI   rf   Nc                 ó&   — || j                   _        y r’   rå   )rF   rf   s     rH   Úset_input_embeddingsz AlbertModel.set_input_embeddingsr  s   € Ø*/ˆ�‰Õ'rI   rJ   rg   r,   r(   rK   ri   c                 ó>  — |d u |d uz  rt        d«      ‚| j                  ||||¬«      }t        | j                  ||¬«      } | j                  ||fd|i|¤Ž}|d   }	| j
                  �'| j                  | j                  |	d d …df   «      «      nd }
t        |	|
¬«      S )Nz:You must specify exactly one of input_ids or inputs_embeds)r(   r,   rK   )r#   rK   rg   r(   r   )r¹   Úpooler_output)r}   rX   r   r#   rÞ   rß   rá   r   )rF   rJ   rg   r,   r(   rK   ri   Úembedding_outputÚencoder_outputsÚsequence_outputÚpooled_outputs              rH   rY   zAlbertModel.forwardu  sÔ   € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàŸ?™?Ø LÀÐ_lð +ó 
Ðô 3Ø—;‘;Ø*Ø)ô
ˆð '˜$Ÿ,™,ØØñ
ð &ð
ð ñ	
ˆð *¨!Ñ,ˆàVZ×VaÑVaÐVm˜×.Ñ.¨t¯{©{¸?Ê1ÈaÈ4Ñ;PÓ/QÔRÐswˆä)Ø-Ø'ô
ð 	
rI   )T)NNNNN)rZ   r[   r\   r    rÊ   rË   Úboolr/   r   r0   rç   ré   r   r   r   r?   r^   r_   r   r   r   r”   rY   ra   rb   s   @rH   rÛ   rÛ   T  s  ø„ à€LØ Ðñ˜|ð Àõ ð,/ b§l¡ló /ð0¨"¯,©,ð 0¸4ó 0ð  ØØð .2Ø37Ø26Ø04Ø26ñ$
à×#Ñ# dÑ*ð$
ð ×)Ñ)¨DÑ0ð$
ð ×(Ñ(¨4Ñ/ð	$
ð
 ×&Ñ&¨Ñ-ð$
ð ×(Ñ(¨4Ñ/ð$
ð Ð+Ñ,ð$
ð 
$ eÑ	+ò$
ó ó ó  ô$
rI   rÛ   z«
    Albert Model with two heads on top as done during the pretraining: a `masked language modeling` head and a
    `sentence order prediction (classification)` head.
    c                   ó¤  ‡ — e Zd ZdddœZdefˆ fd„Zdej                  fd„Zdej                  dd	fd
„Z	dej                  fd„Zee	 	 	 	 	 	 	 ddej                  d	z  dej                   d	z  dej                  d	z  dej                  d	z  dej                   d	z  dej                  d	z  dej                  d	z  dee   deez  fd„«       «       Zˆ xZS )ÚAlbertForPreTrainingú(albert.embeddings.word_embeddings.weightúpredictions.bias©zpredictions.decoder.weightzpredictions.decoder.biasr#   c                 ó¤   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        t        |«      | _        | j                  «        y r’   )	r.   r/   rÛ   rÀ   rÅ   ÚpredictionsÚAlbertSOPHeadÚsop_classifierrã   rE   s     €rH   r/   zAlbertForPreTraining.__init__«  sB   ø€ Ü‰Ñ˜Ô ä! &Ó)ˆŒÜ(¨Ó0ˆÔÜ+¨FÓ3ˆÔð 	�‰ÕrI   rL   c                 ó.   — | j                   j                  S r’   ©r÷   Údecoderræ   s    rH   Úget_output_embeddingsz*AlbertForPreTraining.get_output_embeddingsµ  ó   € Ø×Ñ×'Ñ'Ð'rI   Únew_embeddingsNc                 ó&   — || j                   _        y r’   rû   ©rF   rÿ   s     rH   Úset_output_embeddingsz*AlbertForPreTraining.set_output_embeddings¸  s   € Ø#1ˆ×ÑÕ rI   c                 óB   — | j                   j                  j                  S r’   ©rÀ   rX   r4   ræ   s    rH   rç   z)AlbertForPreTraining.get_input_embeddings»  ó   € Ø�{‰{×%Ñ%×5Ñ5Ð5rI   rJ   rg   r,   r(   rK   ÚlabelsÚsentence_order_labelri   c           	      óÂ  —  | j                   |f||||ddœ|¤Ž}	|	dd \  }
}| j                  |
«      }| j                  |«      }d}|�u|�st        «       } ||j	                  d| j
                  j                  «      |j	                  d«      «      } ||j	                  dd«      |j	                  d«      «      }||z   }t        ||||	j                  |	j                  ¬«      S )a†  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
            loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`
        sentence_order_label (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the next sequence prediction (classification) loss. Input should be a sequence pair
            (see `input_ids` docstring) Indices should be in `[0, 1]`. `0` indicates original order (sequence A, then
            sequence B), `1` indicates switched order (sequence B, then sequence A).

        Example:

        ```python
        >>> from transformers import AutoTokenizer, AlbertForPreTraining
        >>> import torch

        >>> tokenizer = AutoTokenizer.from_pretrained("albert/albert-base-v2")
        >>> model = AlbertForPreTraining.from_pretrained("albert/albert-base-v2")

        >>> input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True)).unsqueeze(0)
        >>> # Batch size 1
        >>> outputs = model(input_ids)

        >>> prediction_logits = outputs.prediction_logits
        >>> sop_logits = outputs.sop_logits
        ```T©rg   r,   r(   rK   Úreturn_dictNrl   r*   )rÕ   rÖ   r×   r†   rÁ   )
rÀ   r÷   rù   r   r‰   r#   r1   rÔ   r†   rÁ   )rF   rJ   rg   r,   r(   rK   r  r  ri   Úoutputsrî   rï   Úprediction_scoresÚ
sop_scoresÚ
total_lossÚloss_fctÚmasked_lm_lossÚsentence_order_losss                     rH   rY   zAlbertForPreTraining.forward¾  s  € ðN �$—+‘+Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð *1°°!¨Ñ&ˆ˜à ×,Ñ,¨_Ó=ÐØ×(Ñ(¨Ó7ˆ
àˆ
ØÐÐ"6Ð"BÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNÙ"*¨:¯?©?¸2¸qÓ+AÐCW×C\ÑC\Ð]_ÓC`Ó"aÐØ'Ð*=Ñ=ˆJä)ØØ/Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rI   ©NNNNNNN)rZ   r[   r\   Ú_tied_weights_keysr    r/   r   rƒ   rý   r  r0   rç   r   r   r?   r^   r_   r   r   rÔ   r”   rY   ra   rb   s   @rH   rò   rò   Ÿ  sE  ø„ ð 'QØ$6ñÐð
˜|õ ð( r§y¡yó (ð2°B·I±Ið 2À$ó 2ð6 b§l¡ló 6ð Øð .2Ø37Ø26Ø04Ø26Ø*.Ø8<ñA
à×#Ñ# dÑ*ðA
ð ×)Ñ)¨DÑ0ðA
ð ×(Ñ(¨4Ñ/ð	A
ð
 ×&Ñ&¨Ñ-ðA
ð ×(Ñ(¨4Ñ/ðA
ð × Ñ  4Ñ'ðA
ð $×.Ñ.°Ñ5ðA
ð Ð+Ñ,ðA
ð 
$ eÑ	+òA
ó ó ôA
rI   rò   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )rÅ   r#   c                 óÜ  •— t         ‰| �  «        t        j                  |j                  |j
                  ¬«      | _        t        j                  t        j                  |j                  «      «      | _
        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        t        |j                      | _        y )Nr&   )r.   r/   r   r9   r2   r:   Ú	Parameterr?   rB   r1   rÈ   rƒ   r{   r„   rü   r   rŸ   r    rE   s     €rH   r/   zAlbertMLMHead.__init__  s™   ø€ Ü‰ÑÔäŸ™ f×&;Ñ&;À×AVÑAVÔWˆŒÜ—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆŒ	Ü—Y‘Y˜v×1Ñ1°6×3HÑ3HÓIˆŒ
Ü—y‘y ×!6Ñ!6¸×8IÑ8IÓJˆŒÜ  ×!2Ñ!2Ñ3ˆ�rI   r†   rL   c                 ó’   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|}|S r’   )r„   r    r9   rü   )rF   r†   r  s      rH   rY   zAlbertMLMHead.forward  sF   € ØŸ
™
 =Ó1ˆØŸ™¨Ó6ˆØŸ™ }Ó5ˆØŸ™ ]Ó3ˆà)Ðà Ð rI   ©	rZ   r[   r\   r    r/   r?   r`   rY   ra   rb   s   @rH   rÅ   rÅ     s*   ø„ ð4˜|õ 4ð! U§\¡\ð !°e·l±l÷ !rI   rÅ   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )rø   r#   c                 óÈ   •— t         ‰| �  «        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _	        y r’   )
r.   r/   r   r;   Úclassifier_dropout_probr=   rƒ   r{   Ú
num_labelsÚ
classifierrE   s     €rH   r/   zAlbertSOPHead.__init__  sB   ø€ Ü‰ÑÔä—z‘z &×"@Ñ"@ÓAˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆ�rI   rï   rL   c                 óJ   — | j                  |«      }| j                  |«      }|S r’   )r=   r  )rF   rï   Údropout_pooled_outputÚlogitss       rH   rY   zAlbertSOPHead.forward   s%   € Ø $§¡¨]Ó ;ÐØ—‘Ð!6Ó7ˆØˆrI   r  rb   s   @rH   rø   rø     s,   ø„ ðK˜|õ Kð U§\¡\ð °e·l±l÷ rI   rø   c                   ó~  ‡ — e Zd ZdddœZˆ fd„Zdej                  fd„Zdej                  ddfd	„Zdej                  fd
„Z
ee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dee   deez  fd„«       «       Zˆ xZS )ÚAlbertForMaskedLMró   rô   rõ   c                 óˆ   •— t         ‰| �  |«       t        |d¬«      | _        t	        |«      | _        | j                  «        y ©NF)rÜ   )r.   r/   rÛ   rÀ   rÅ   r÷   rã   rE   s     €rH   r/   zAlbertForMaskedLM.__init__-  s7   ø€ Ü‰Ñ˜Ô ä! &¸EÔBˆŒÜ(¨Ó0ˆÔð 	�‰ÕrI   rL   c                 ó.   — | j                   j                  S r’   rû   ræ   s    rH   rý   z'AlbertForMaskedLM.get_output_embeddings6  rþ   rI   rÿ   Nc                 ó\   — || j                   _        |j                  | j                   _        y r’   )r÷   rü   rÈ   r  s     rH   r  z'AlbertForMaskedLM.set_output_embeddings9  s$   € Ø#1ˆ×ÑÔ Ø .× 3Ñ 3ˆ×ÑÕrI   c                 óB   — | j                   j                  j                  S r’   r  ræ   s    rH   rç   z&AlbertForMaskedLM.get_input_embeddings=  r  rI   rJ   rg   r,   r(   rK   r  ri   c           
      ó:  —  | j                   d|||||ddœ|¤Ž}|d   }	| j                  |	«      }
d}|�Ft        «       } ||
j                  d| j                  j
                  «      |j                  d«      «      }t        ||
|j                  |j                  ¬«      S )a  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
            loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`

        Example:

        ```python
        >>> import torch
        >>> from transformers import AutoTokenizer, AlbertForMaskedLM

        >>> tokenizer = AutoTokenizer.from_pretrained("albert/albert-base-v2")
        >>> model = AlbertForMaskedLM.from_pretrained("albert/albert-base-v2")

        >>> # add mask_token
        >>> inputs = tokenizer("The capital of [MASK] is Paris.", return_tensors="pt")
        >>> with torch.no_grad():
        ...     logits = model(**inputs).logits

        >>> # retrieve index of [MASK]
        >>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]
        >>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
        >>> tokenizer.decode(predicted_token_id)
        'france'
        ```

        ```python
        >>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
        >>> labels = torch.where(inputs.input_ids == tokenizer.mask_token_id, labels, -100)
        >>> outputs = model(**inputs, labels=labels)
        >>> round(outputs.loss.item(), 2)
        0.81
        ```
        T©rJ   rg   r,   r(   rK   r
  r   Nr*   ©rÕ   r   r†   rÁ   rÙ   )	rÀ   r÷   r   r‰   r#   r1   r   r†   rÁ   )rF   rJ   rg   r,   r(   rK   r  ri   r  Úsequence_outputsr  r  r  s                rH   rY   zAlbertForMaskedLM.forward@  s½   € ð^ �$—+‘+ð 
ØØ)Ø)Ø%Ø'Øñ
ð ñ
ˆð # 1™:Ðà ×,Ñ,Ð-=Ó>ÐàˆØÐÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNäØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rI   ©NNNNNN)rZ   r[   r\   r  r/   r   rƒ   rý   r  r0   rç   r   r   r?   r^   r_   r   r   r   r”   rY   ra   rb   s   @rH   r"  r"  &  s%  ø„ ð 'QØ$6ñÐô
ð( r§y¡yó (ð4°B·I±Ið 4À$ó 4ð6 b§l¡ló 6ð Øð .2Ø37Ø26Ø04Ø26Ø*.ñD
à×#Ñ# dÑ*ðD
ð ×)Ñ)¨DÑ0ðD
ð ×(Ñ(¨4Ñ/ð	D
ð
 ×&Ñ&¨Ñ-ðD
ð ×(Ñ(¨4Ñ/ðD
ð × Ñ  4Ñ'ðD
ð Ð+Ñ,ðD
ð 
˜%Ñ	òD
ó ó ôD
rI   r"  zž
    Albert Model transformer with a sequence classification/regression head on top (a linear layer on top of the pooled
    output) e.g. for GLUE tasks.
    c                   ó  ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
e
e   deez  fd„«       «       Zˆ xZS )ÚAlbertForSequenceClassificationr#   c                 óN  •— t         ‰| �  |«       |j                  | _        || _        t	        |«      | _        t        j                  |j                  «      | _	        t        j                  |j                  | j                  j                  «      | _        | j                  «        y r’   )r.   r/   r  r#   rÛ   rÀ   r   r;   r  r=   rƒ   r{   r  rã   rE   s     €rH   r/   z(AlbertForSequenceClassification.__init__�  st   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØˆŒä! &Ó)ˆŒÜ—z‘z &×"@Ñ"@ÓAˆŒÜŸ)™) F×$6Ñ$6¸¿¹×8NÑ8NÓOˆŒð 	�‰ÕrI   NrJ   rg   r,   r(   rK   r  ri   rL   c           
      óà  —  | j                   d
|||||ddœ|¤Ž}|d   }	| j                  |	«      }	| j                  |	«      }
d}|��‡| j                  j                  €�| j
                  dk(  rd| j                  _        nl| j
                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                  _        nd| j                  _        | j                  j                  dk(  rIt        «       }| j
                  dk(  r& ||
j                  «       |j                  «       «      }nŒ ||
|«      }n‚| j                  j                  dk(  r=t        «       } ||
j                  d| j
                  «      |j                  d«      «      }n,| j                  j                  dk(  rt        «       } ||
|«      }t        ||
|j                   |j"                  ¬	«      S )a�  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Tr)  r   NÚ
regressionÚsingle_label_classificationÚmulti_label_classificationr*   r*  rÙ   )rÀ   r=   r  r#   Úproblem_typer  r-   r?   rD   r»   r   Úsqueezer   r‰   r   r   r†   rÁ   )rF   rJ   rg   r,   r(   rK   r  ri   r  rï   r   rÕ   r  s                rH   rY   z'AlbertForSequenceClassification.forwardœ  s©  € ð$ �$—+‘+ð 
ØØ)Ø)Ø%Ø'Øñ
ð ñ
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rI   r,  )rZ   r[   r\   r    r/   r   r   r?   r^   r_   r   r   r   r”   rY   ra   rb   s   @rH   r.  r.  ‰  sÚ   ø„ ð
˜|õ 
ð Øð .2Ø37Ø26Ø04Ø26Ø*.ñ;
à×#Ñ# dÑ*ð;
ð ×)Ñ)¨DÑ0ð;
ð ×(Ñ(¨4Ñ/ð	;
ð
 ×&Ñ&¨Ñ-ð;
ð ×(Ñ(¨4Ñ/ð;
ð × Ñ  4Ñ'ð;
ð Ð+Ñ,ð;
ð 
" EÑ	)ò;
ó ó ô;
rI   r.  c                   ó  ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
e
e   deez  fd„«       «       Zˆ xZS )ÚAlbertForTokenClassificationr#   c                 óx  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        |j
                  �|j
                  n|j                  }t        j                  |«      | _	        t        j                  |j                  | j                  j                  «      | _        | j                  «        y r$  )r.   r/   r  rÛ   rÀ   r  r<   r   r;   r=   rƒ   r{   r#   r  rã   )rF   r#   r  rG   s      €rH   r/   z%AlbertForTokenClassification.__init__Þ  s“   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä! &¸EÔBˆŒð ×-Ñ-Ð9ð ×*Ò*à×+Ñ+ð 	 ô
 —z‘zÐ"9Ó:ˆŒÜŸ)™) F×$6Ñ$6¸¿¹×8NÑ8NÓOˆŒð 	�‰ÕrI   NrJ   rg   r,   r(   rK   r  ri   rL   c           	      óH  —  | j                   |f||||ddœ|¤Ž}|d   }	| j                  |	«      }	| j                  |	«      }
d}|�<t        «       } ||
j	                  d| j
                  «      |j	                  d«      «      }t        ||
|j                  |j                  ¬«      S )zÛ
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
        Tr	  r   Nr*   r*  )	rÀ   r=   r  r   r‰   r  r   r†   rÁ   )rF   rJ   rg   r,   r(   rK   r  ri   r  rî   r   rÕ   r  s                rH   rY   z$AlbertForTokenClassification.forwardî  s·   € ð  �$—+‘+Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rI   r,  )rZ   r[   r\   r    r/   r   r   r?   r^   r_   r   r   r   r”   rY   ra   rb   s   @rH   r7  r7  Ü  sÚ   ø„ ð˜|õ ð  Øð .2Ø37Ø26Ø04Ø26Ø*.ñ'
à×#Ñ# dÑ*ð'
ð ×)Ñ)¨DÑ0ð'
ð ×(Ñ(¨4Ñ/ð	'
ð
 ×&Ñ&¨Ñ-ð'
ð ×(Ñ(¨4Ñ/ð'
ð × Ñ  4Ñ'ð'
ð Ð+Ñ,ð'
ð 
 Ñ	&ò'
ó ó ô'
rI   r7  c                   ó6  ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  de
e   deez  fd„«       «       Zˆ xZS )ÚAlbertForQuestionAnsweringr#   c                 óè   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y r$  )
r.   r/   r  rÛ   rÀ   r   rƒ   r{   Ú
qa_outputsrã   rE   s     €rH   r/   z#AlbertForQuestionAnswering.__init__  sU   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä! &¸EÔBˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrI   NrJ   rg   r,   r(   rK   Ústart_positionsÚend_positionsri   rL   c           
      óÆ  —  | j                   d
|||||ddœ|¤Ž}	|	d   }
| j                  |
«      }|j                  dd¬«      \  }}|j                  d«      j	                  «       }|j                  d«      j	                  «       }d }|�·|�µt        |j                  «       «      dkD  r|j                  d«      }t        |j                  «       «      dkD  r|j                  d«      }|j                  d«      }|j                  d|«      }|j                  d|«      }t        |¬«      } |||«      } |||«      }||z   dz  }t        ||||	j                  |	j                  ¬	«      S )NTr)  r   r   r*   rm   )Úignore_indexrl   )rÕ   Ústart_logitsÚ
end_logitsr†   rÁ   rÙ   )rÀ   r=  Úsplitr5  rt   ÚlenrC   Úclampr   r   r†   rÁ   )rF   rJ   rg   r,   r(   rK   r>  r?  ri   r  rî   r   rB  rC  r  Úignored_indexr  Ú
start_lossÚend_losss                      rH   rY   z"AlbertForQuestionAnswering.forward&  s€  € ð �$—+‘+ð 
ØØ)Ø)Ø%Ø'Øñ
ð ñ
ˆð " !™*ˆà#Ÿ™¨Ó?ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rI   r  ©rZ   r[   r\   r    r/   r   r   r?   r^   r_   r   r   rÔ   r”   rY   ra   rb   s   @rH   r;  r;    sò   ø„ ð˜|õ ð Øð .2Ø37Ø26Ø04Ø26Ø37Ø15ñ3
à×#Ñ# dÑ*ð3
ð ×)Ñ)¨DÑ0ð3
ð ×(Ñ(¨4Ñ/ð	3
ð
 ×&Ñ&¨Ñ-ð3
ð ×(Ñ(¨4Ñ/ð3
ð ×)Ñ)¨DÑ0ð3
ð ×'Ñ'¨$Ñ.ð3
ð Ð+Ñ,ð3
ð 
$ eÑ	+ò3
ó ó ô3
rI   r;  c                   ó  ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
e
e   deez  fd„«       «       Zˆ xZS )ÚAlbertForMultipleChoicer#   c                 óö   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  «      | _        t	        j                  |j                  d«      | _
        | j                  «        y )Nr   )r.   r/   rÛ   rÀ   r   r;   r  r=   rƒ   r{   r  rã   rE   s     €rH   r/   z AlbertForMultipleChoice.__init__`  sV   ø€ Ü‰Ñ˜Ô ä! &Ó)ˆŒÜ—z‘z &×"@Ñ"@ÓAˆŒÜŸ)™) F×$6Ñ$6¸Ó:ˆŒð 	�‰ÕrI   NrJ   rg   r,   r(   rK   r  ri   rL   c           	      óì  — |�|j                   d   n|j                   d   }|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�1|j                  d|j                  d«      |j                  d«      «      nd} | j                  |f||||ddœ|¤Ž}	|	d   }
| j	                  |
«      }
| j                  |
«      }|j                  d|«      }d}|�t        «       } |||«      }t        |||	j                  |	j                  ¬«      S )a[  
        input_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.__call__`] and
            [`PreTrainedTokenizer.encode`] for details.

            [What are input IDs?](../glossary#input-ids)
        token_type_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

            - 0 corresponds to a *sentence A* token,
            - 1 corresponds to a *sentence B* token.

            [What are token type IDs?](../glossary#token-type-ids)
        position_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_choices, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
            is useful if you want more control over how to convert `input_ids` indices into associated vectors than the
            model's internal embedding lookup matrix.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the multiple choice classification loss. Indices should be in `[0, ...,
            num_choices-1]` where *num_choices* is the size of the second dimension of the input tensors. (see
            *input_ids* above)
        Nr   r*   éþÿÿÿTr	  r*  )
rR   r‰   rC   rÀ   r=   r  r   r   r†   rÁ   )rF   rJ   rg   r,   r(   rK   r  ri   Únum_choicesr  rï   r   Úreshaped_logitsrÕ   r  s                  rH   rY   zAlbertForMultipleChoice.forwardj  sž  € ðT -6Ð,A�i—o‘o aÒ(À}×GZÑGZÐ[\ÑG]ˆà>GÐ>S�I—N‘N 2 y§~¡~°bÓ'9Ô:ÐY]ˆ	ØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØGSÐG_�|×(Ñ(¨¨\×->Ñ->¸rÓ-BÔCÐeiˆð Ð(ð ×Ñ˜r =×#5Ñ#5°bÓ#9¸=×;MÑ;MÈbÓ;QÔRàð 	ð
 �$—+‘+Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð   ™
ˆàŸ™ ]Ó3ˆØ#Ÿ™¨}Ó=ˆØ Ÿ+™+ b¨+Ó6ˆàˆØÐÜ'Ó)ˆHÙ˜O¨VÓ4ˆDä(ØØ"Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rI   r,  rJ  rb   s   @rH   rL  rL  ^  sä   ø„ ð˜|õ ð Øð .2Ø37Ø26Ø04Ø26Ø*.ñM
à×#Ñ# dÑ*ðM
ð ×)Ñ)¨DÑ0ðM
ð ×(Ñ(¨4Ñ/ð	M
ð
 ×&Ñ&¨Ñ-ðM
ð ×(Ñ(¨4Ñ/ðM
ð × Ñ  4Ñ'ðM
ð Ð+Ñ,ðM
ð 
$ eÑ	+òM
ó ó ôM
rI   rL  )r¿   rÛ   rò   r"  r.  r7  r;  rL  )Nrˆ   )Er]   Úcollections.abcr   Údataclassesr   r?   r   Útorch.nnr   r   r   Ú r
   rÆ   Úactivationsr   Úmasking_utilsr   Úmodeling_outputsr   r   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_albertr    Ú
get_loggerrZ   ÚloggerÚModuler"   r`   Úfloatrw   ry   r–   r§   r³   r¿   rÔ   rÛ   rò   rÅ   rø   r"  r.  r7  r;  rL  Ú__all__rÙ   rI   rH   ú<module>re     s›  ðñ å $Ý !ã Ý ß AÑ Aå &Ý !Ý 6÷÷ ñ ÷ GÝ &õ÷ NÓ Mß IÝ 5Ý .ð 
ˆ×	Ñ	˜HÓ	%€ô=�r—y‘yô =ðN !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô8>)�b—i‘iô >)ôB#�"—)‘)ô #ôL�r—y‘yô ô"@˜Ÿ	™	ô @ð: ô/˜Oó /ó ð/ñ. ðôð
 ô7 ó 7ó óð7ð& ôG
Ð'ó G
ó ðG
ñT ðôô\
Ð0ó \
óð\
ô~!�B—I‘Iô !ô*
�B—I‘Iô 
ð ô_
Ð-ó _
ó ð_
ñD ðôôJ
Ð&;ó J
óðJ
ðZ ô:
Ð#8ó :
ó ð:
ðz ô@
Ð!6ó @
ó ð@
ðF ôZ
Ð3ó Z
ó ðZ
òz	�rI   