
    9iP                     T   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\R2                  " \R8                  \R6                  S9 " S S\5      5       5       rg)    )AnyDictN)nn)CrossEntropyLoss)Models)Model)MODELS)
BertConfig)'AttentionTokenClassificationModelOutput)Tasks   )
PoNetModelPoNetPreTrainedModel)PoNetConfigPoNetForDocumentSegmentation)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                 .  > [         TU ]  U5        UR                  U l        [        USS9U l        [
        R                  " UR                  5      U l        [
        R                  " UR                  UR                  5      U l        U R                  5         g )NF)add_pooling_layer)super__init__
num_labelsr   ponetr   Dropouthidden_dropout_probdropoutLinearhidden_size
classifierinit_weights)selfconfigkwargs	__class__s      q/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/nlp/ponet/document_segmentation.pyr   %PoNetForDocumentSegmentation.__init__   sk      ++%@
zz&"<"<=))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
US9
nUS   nU R                  U5      nU R	                  U5      nSnUb  [        5       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$ )z
labels (:obj:`torch.LongTensor` of shape :obj:`(batch_size, sequence_length)`, `optional`):
    Labels for computing the token classification loss. Indices should be in ``[0, ..., config.num_labels -
1]``.
N)	attention_masktoken_type_idssegment_idsposition_ids	head_maskinputs_embedsoutput_attentionsoutput_hidden_statesreturn_dictr   r      )losslogitshidden_states
attentions)r$   use_return_dictr   r   r!   r   viewr   torchwheretensorignore_indextype_asr   r8   r9   )r#   	input_idsr+   r,   r-   r.   r/   r0   labelsr1   r2   r3   outputssequence_outputr7   r6   loss_fctactive_lossactive_logitsactive_labelsoutputs                        r'   forward$PoNetForDocumentSegmentation.forward&   su   & &1%<k$++B]B]**))#%'/!5#  
 "!*,,71')H),11"5: &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 ]  XS9nXl        X%l        U$ )Ntypebertr5   )r   r   z0Expected config type bert and ponet, which is : )r$   )r
   from_pretrainedr   
ValueErrorr   r   	model_dir	model_cfg)clsrR   rL   r%   r$   modelr&   s         r'   _instantiate)PoNetForDocumentSegmentation._instantiateg   s    6)//	aHF&!W, 00qIFB<PVCWBXY  eS1)1K#&r)   )r!   r   r   r   )NNNNNNNNNNN)__name__
__module____qualname____firstlineno__"_keys_to_ignore_on_load_unexpectedr   rJ   classmethodr   strr   rV   __static_attributes____classcell__)r&   s   @r'   r   r      s^    
 +4& !?
B 4S>  r)   )typingr   r   r<   r   torch.nnr   modelscope.metainfor   modelscope.models.baser   modelscope.models.builderr	   modelscope.models.nlp.bertr
   modelscope.outputsr   modelscope.utils.constantr   backboner   r   configurationr   __all__register_moduledocument_segmentationponet_for_dsextractive_summarizationr    r)   r'   <module>rq      s       % & ( , 1 F + 6 &)
* 	V-@-@B	""0C0CE[#7 [EB[r)   