
    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
Jr  S SKJr  \
R                  " \\R                  S9 " S S	\5      5       rg)
    )DictListN)Metrics)Metric)METRICS
MetricKeys)default_group)	group_keymodule_namec                       \ rS rSrSrSS\S\4S jjrS\\\	4   S\\\	4   4S jr
S	 r\S
 5       rS rS rSS jrS rS rSrg)TextRankingMetric   a$  The metric computation class for text ranking classes.

This metric class calculates mrr and ndcg metric for the whole evaluation dataset.

Args:
    target_text: The key of the target text column in the `inputs` arg.
    pred_text: The key of the predicted text column in the `outputs` arg.
mrr_kndcg_kc                 F    / U l         / U l        / U l        Xl        X l        g Nlabelsqidslogitsr   r   )selfr   r   s      f/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/metrics/text_ranking_metric.py__init__TextRankingMetric.__init__   s!    	
!    outputsinputsc                 D   U R                   R                  UR                  S5      R                  5       R	                  5       R                  5       5        U R                  R                  UR                  S5      R                  5       R	                  5       R                  5       5        US   R                  S5      R                  5       R	                  5       R                  5       nU R                  U5      R                  5       nU R                  R                  U5        g )Nr   qidr   )r   extendpopdetachcpunumpyr   squeeze_sigmoidtolistr   )r   r   r   r   s       r   addTextRankingMetric.add    s    6::h/668<<>DDFG		E*113779??AB"**2.557;;=CCEv&--/6"r   c                 Z   0 n[        U R                  U R                  U R                  5       H#  u  p#nX!;  a  / X'   X   R	                  X445        M%     U H  n[        X   S S9X'   M     [        R                  U R                  U5      [        R                  U R                  U5      0$ )Nc                     U S   $ Nr    xs    r   <lambda>,TextRankingMetric.evaluate.<locals>.<lambda>0   s    adr   )key)zipr   r   r   appendsortedr   MRR_compute_mrrNDCG_compute_ndcg)r   rank_resultr   scorelabels        r   evaluateTextRankingMetric.evaluate(   s    !$TYYT[[!IC%#% ##UN3 "J
 C%k&6NKK  NND--k:OOT//<
 	
r   c                 b    [         R                  " U 5      S[         R                  " U 5      -   -  $ )N   )npexp)r   s    r   r'   TextRankingMetric._sigmoid7   s"    vvf~RVVF^!344r   c                     SnUR                  5        HR  n[        US SS9nSn[        US U R                   5       H!  u  pg[	        US   5      S:X  d  M  SUS-   -  n  O   X%-  nMT     U[        U5      -  $ )Nr   c                     U S   $ r-   r.   r/   s    r   r1   0TextRankingMetric._compute_mrr.<locals>.<lambda>>   s    1Q4r   Tr3   reverserA   1g      ?)valuesr6   	enumerater   strlen)r   resultmrrres
sorted_resarindexeles           r   r8   TextRankingMetric._compute_mrr;   s    ==?CFJB'
;DJJ(?@
s1v;#%	*B A IC # S[  r   c           
      j   SnSSK Jn  UR                  5        H  n[        US SS9n[        R
                  " U Vs/ s H  ofS   PM	     sn/5      n[        R
                  " U Vs/ s H  ofS   PM	     sn/5      nU[        U" XxU R                  S95      -  nM     U[        U5      -  $ s  snf s  snf )Nr   )
ndcg_scorec                     S/$ r-   r.   r/   s    r   r1   1TextRankingMetric._compute_ndcg.<locals>.<lambda>K   s    A3r   TrH   rA   )k)	sklearn.metricsrX   rK   r6   rB   arrayfloatr   rN   )	r   rO   ndcgrX   rQ   rR   rU   r   scoress	            r   r:   TextRankingMetric._compute_ndcgG   s    .==?CEJXX*=*3A*=>?FXX*=*3A*=>?FE*Vt{{CDDD	 #
 c&k!!  >=s   B+
&B0
c                     U R                   R                  UR                   5        U R                  R                  UR                  5        U R                  R                  UR                  5        g r   )r   r!   r   r   )r   others     r   mergeTextRankingMetric.mergeQ   sD    5<<(		$5<<(r   c                 t    U R                   U R                  U R                  U R                  U R                  4$ r   r   )r   s    r   __getstate__TextRankingMetric.__getstate__V   s'    {{DIIt{{DJJKKr   c                 f    U R                  5         Uu  U l        U l        U l        U l        U l        g r   )r   r   r   r   r   r   )r   states     r   __setstate__TextRankingMetric.__setstate__Y   s%    GLDTYTZr   )r   r   r   r   r   N)rA   rA   )rc   r   )__name__
__module____qualname____firstlineno____doc__intr   r   rM   r   r)   r>   staticmethodr'   r8   r:   rd   rg   rk   __static_attributes__r.   r   r   r   r      sq    "c "s "#4T	? #DdO #
 5 5
!")
LMr   r   )typingr   r   r%   rB   modelscope.metainfor   modelscope.metrics.baser   modelscope.metrics.builderr   r   modelscope.utils.registryr	   register_moduletext_ranking_metricr   r.   r   r   <module>r|      sR      ' * : 3 	)D)DFLM LMFLMr   