
    9i                        S SK JrJr  S SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S S	KJr  S S
KJr  SSKJrJr  SSKJr  S/r\R2                  " \R4                  \R6                  S9 " S S\5      5       rg)    )AnyDictN)nn)CrossEntropyLoss)Models)Model)MODELS)PoNetConfig)'AttentionTokenClassificationModelOutput)Tasks   )	BertModelBertPreTrainedModel)
BertConfigBertForDocumentSegmentation)module_namec                   v   ^  \ rS rSrS/rU 4S jr           SS jr\S\\	\
4   4U 4S jj5       rSrU =r$ )	r      poolerc                 N  > [         TU ]  U5        UR                  U l        S U l        [	        USS9U l        UR                  n[        R                  " U5      U l	        [        R                  " UR                  UR                  5      U l        S U l        U R                  5         g )NF)add_pooling_layer)super__init__
num_labelssentence_pooler_typer   berthidden_dropout_probr   DropoutdropoutLinearhidden_size
classifierclass_weightsinit_weights)selfconfigkwargsclassifier_dropout	__class__s       p/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/nlp/bert/document_segmentation.pyr   $BertForDocumentSegmentation.__init__   s      ++$(!f>	#77zz"45))F$6$68I8IJ!    c                    Ub  UOU R                   R                  nU R                  UUUUUUU	U
US9	nUS   nU R                  b  [        eU R                  U5      nU R                  U5      nS nUb  [        U R                  S9nUb  UR                  S5      S:H  nUR                  SU R                  5      n[        R                  " UUR                  S5      [        R                  " UR                  5      R                  U5      5      nU" UU5      nO2U" UR                  SU R                  5      UR                  S5      5      nU(       d  U4USS  -   nUb  U4U-   $ U$ [!        UUUR"                  UR$                  S9$ )N)attention_masktoken_type_idsposition_ids	head_maskinputs_embedsoutput_attentionsoutput_hidden_statesreturn_dictr   )weightr      )losslogitshidden_states
attentions)r&   use_return_dictr   r   NotImplementedErrorr   r"   r   r#   viewr   torchwheretensorignore_indextype_asr   r;   r<   )r%   	input_idsr.   r/   r0   r1   sentence_attention_maskr2   labelsr3   r4   r5   outputssequence_outputr:   r9   loss_fctactive_lossactive_logitsactive_labelsoutputs                        r*   forward#BertForDocumentSegmentation.forward'   s    &1%<k$++B]B]))))%'/!5#  

 "!*$$0%%"ll?;O1't/A/ABH&25::2>!C &B @ %RLL!6!67??G!I  }=KKDOO4fkk"oG Z'!"+-F*.*:THv%FF6!//))	
 	
r,   model_configc                    > US   S:X  a  [         R                  " USS9nO0US   S:X  a  [        R                  " USS9nO[        SUS    35      e[        [
        U ]  USUS9nXl        X%l        U$ )	Ntyper   r8   )r   ponetz0Expected config type bert and ponet, which is : F)from_tfr&   )r   from_pretrainedr
   
ValueErrorr   r   	model_dir	model_cfg)clsrX   rQ   r'   r&   modelr)   s         r*   _instantiate(BertForDocumentSegmentation._instantiateb   s    6)//	aHF&!W, 00qIFB<PVCWBXY  eS1uV 2 5#&r,   )r   r#   r"   r   r   r   )NNNNNNNNNNN)__name__
__module____qualname____firstlineno__"_keys_to_ignore_on_load_unexpectedr   rO   classmethodr   strr   r\   __static_attributes____classcell__)r)   s   @r*   r   r      s^     +4&
 ##!(,""&%) 9
v 4S>  r,   )typingr   r   r@   r   torch.nnr   modelscope.metainfor   modelscope.modelsr   modelscope.models.builderr	   modelscope.models.nlp.ponetr
   modelscope.outputsr   modelscope.utils.constantr   backboner   r   configurationr   __all__register_moduledocument_segmentationbert_for_dsr    r,   r*   <module>rv      sp       % & # , 3 F + 4 %(
) 	V-?-?AY"5 YAYr,   