
    9i                         S SK r S SKJrJr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Jr  SS	KJr  SS
KJrJr  \R,                  " \\R.                  S9 " S S\5      5       rg)    N)DictListOptionalUnion)
OutputKeys   )Metrics)default_group)torch_nested_detachtorch_nested_numpify   )Metric)METRICS
MetricKeys)	group_keymodule_namec                      ^  \ rS rSrSr\R                  \R                  SS4U 4S jjrS\	S\	4S jr
S	 rSS
 jrS rS r\     SS\S\\   S\\   S\\\      S\\\4   4
S jj5       rSrU =r$ )TokenClassificationMetric   a  The metric computation class for token-classification task.

This metric class uses seqeval to calculate the scores.

Args:
    label_name(str, `optional`): The key of label column in the 'inputs' arg.
    logit_name(str, `optional`): The key of logits column in the 'inputs' arg.
    return_entity_level_metrics (bool, `optional`):
        Whether to return every label's detail metrics, default False.
    label2id(dict, `optional`): The label2id information to get the token labels.
FNc                 r   > [         TU ]  " U0 UD6  X0l        / U l        / U l        X@l        Xl        X l        g N)super__init__return_entity_level_metricspredslabelslabel2id
label_name
logit_name)selfr   r   r   r   argskwargs	__class__s          n/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/metrics/token_classification_metric.pyr   "TokenClassificationMetric.__init__   s:     	$)&)+F(
 $$    outputsinputsc                     X R                      nXR                     nU R                  R                  [	        [        U5      5      5        U R                  R                  [	        [        U5      5      5        g r   )r   r   r   appendr   r   r   )r    r'   r(   ground_truthseval_resultss        r$   addTokenClassificationMetric.add.   s\    //

 !4\!BC	E !4]!CD	Fr&   c                 X   U R                   nUc)  [        U S5      (       d   eU R                  R                   nUR                  5        VVs0 s H  u  p#X2_M	     snnU l        [
        R                  " U R                  SS9U l        [
        R                  " U R                  SS9U l        [
        R                  " U R                  SS9n[        X@R                  5       VVVVs/ s H:  u  pR[        XR5       VVs/ s H  u  pgUS:w  d  M  U R                  U   PM     snnPM<     nnnnn[        X@R                  5       VVVVs/ s H:  u  pR[        XR5       VVs/ s H  u  pgUS:w  d  M  U R                  U   PM     snnPM<     n	nnnnU R                  XS9n
U R                  (       aZ  0 nU
R                  5        HB  u  p[        U[        5      (       a$  UR                  5        H  u  pXU SU 3'   M     M>  XU'   MD     U$ [        R                   U
[        R                      [        R"                  U
[        R"                     [        R$                  U
[        R$                     [        R&                  U
[        R&                     0$ s  snnf s  snnf s  snnnnf s  snnf s  snnnnf )Ntrainerr   )axisi)predictions
references_)r   hasattrr0   itemsid2labelnpconcatenater   r   argmaxzip_computer   
isinstancedictr   	PRECISIONRECALLF1ACCURACY)r    r   labelidr3   
predictionplbtrue_predictionstrue_labelsresultsfinal_resultskeyvaluenvs                   r$   evaluate"TokenClassificationMetric.evaluate6   s\   ==4++++||,,H4<NN4DE4Dyu4DE^^DJJQ7
nnT[[q9ii

4
 $'{KK#@B $Aj -0
,B
,B!Tz DMM!,B
 $A 	 B $'{KK#@B $Aj .1-C
-C'1Tz DMM"-C
 $A 	 B
 --(   B++M%mmo
eT** %67Qqcl3 !. */#& . !  $$gj.B.B&C!!7:+<+<#=wz}}5##WZ-@-@%A	 5 F

 B
 BsB   J
$J
:J
JJ
J$
J*J=J$
J
J$
c                     U R                   R                  UR                   5        U R                  R                  UR                  5        g r   )r   extendr   )r    others     r$   mergeTokenClassificationMetric.merge]   s.    

%++&5<<(r&   c                     U R                   U R                  U R                  U R                  U R                  U R
                  4$ r   )r   r   r   r   r   r   )r    s    r$   __getstate__&TokenClassificationMetric.__getstate__a   s6    00$**dkktA 	Ar&   c                 r    U R                  5         Uu  U l        U l        U l        U l        U l        U l        g r   )r   r   r   r   r   r   r   )r    states     r$   __setstate__&TokenClassificationMetric.__setstate__e   s-    <A	:	)4:t{	r&   suffixschememodesample_weightzero_divisionc                    SSK JnJn  Ub"   [        R                  " S5      n	[        X5      nU" UU USUUUUS9n
U
R                  S5        U
R                  S5        U
R                  S	5      nU
R                  5        VVs0 s HF  u  pU[        R                  US
   [        R                  US   [        R                  US   SUS   0_MH     nnnUS
   U[        R                  '   US   U[        R                  '   US   U[        R                  '   U" XS9U[        R                  '   U$ ! [         a    [        SU 35      ef = fs  snnf )Nr   )accuracy_scoreclassification_reportzseqeval.schemezDScheme should be one of [IOB1, IOB2, IOE1, IOE2, IOBES, BILOU], got T)y_truey_predr_   output_dictr`   ra   rb   rc   z	macro avgzweighted avgz	micro avg	precisionrecallzf1-scorenumbersupport)rg   rh   )seqeval.metricsre   rf   	importlibimport_modulegetattrAttributeError
ValueErrorpopr7   r   r@   rA   rB   rC   )r3   r4   r_   r`   ra   rb   rc   re   rf   scheme_modulereportoverall_score	type_namescorescoress                  r$   r=   "TokenClassificationMetric._computej   su    	J ) 7 78H I 7
 '''	
 	

;

>"

;/ %+LLN
 %3 	 $$eK&8!!5?uZ0%	*	  %3 	 
 (5['Az##$$1($;z  ! -j 9z}}&4'3z""#A "  Z[aZbc $
s   !D, AE,E)r8   r   r   r   r   r   r   )rU   r   )FNNNwarn)__name__
__module____qualname____firstlineno____doc__r   LABELSLOGITSr   r   r-   rQ   rV   rY   r]   staticmethodboolr   strr   intr   r=   __static_attributes____classcell__)r#   s   @r$   r   r      s    
 '--&---2	%F4 F F%N)AB
   $"-1)/. . 	.
 sm.  S	*. S#X. .r&   r   )ro   typingr   r   r   r   numpyr9   modelscope.outputsr   metainfor	   utils.registryr
   utils.tensor_utilsr   r   baser   builderr   r   register_moduletoken_cls_metricr    r&   r$   <module>r      s[     . .  )  * J  ( 	)A)ACG GCGr&   