o
    *j                     @   s   d Z ddlZddlmZ ddlZddl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 dd	lmZmZmZ dad
d Zdd Zdd Zdd ZdS )zRace.    N)OrderedDict)finetune)mpu)	get_batch)accuracy_func_provider)BlankLMDatasetExtractionDatasetSeq2SeqDataset)BlankLMEvaluaterDecoderEvaluaterrouge_metricc                 C   s   |dur
|d   t| |\}}}}}	|dur|d  |||	|g|R  ^}
}t|
  |}|jdkrT|j}tj	j
j|
ddjdd }d| | ||  }|d}t|d| |  }||dfS )zForward step.Nzbatch generatorg        )dim   Zbert)startr   stopr   Zvocab_parallel_cross_entropy
contiguousfloatZlabel_smoothingtorchnnZ
functionalZlog_softmaxmeanZreshapesum)datamodelargsZtimersZmemstokenslabelsZ	loss_maskZattention_maskZposition_idsZlogitsZlossesepsilonZsmooth_lossZloss r   r/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/nlp/mglm/tasks/seq2seq/finetune.pyseq2seq_forward_step   s,   


r    c                 C   sb   | j  dkrt| d|d}d}n| j  dkr"t| d|d}d}n	t| d|d}d}|a||fS )z&Provide train and validation datasets.blanktrainsplit	tokenizerN
extraction)tasklowerr   r   r	   global_tokenizer)r   r%   Ztrain_datasetZvalid_datasetr   r   r   train_valid_datasets_provider:   s    r*   c           	   	      s    fdd} j  dv rt }|j}i }n6t }|j} jdkr)d}n j  dkr3d}nd}ttjt	d|d	tjt	d
|d	tjt	d|d	d} fdd}t
|| |||ddS )z"Provide metrics callback function.c                    sF    j  dkrt | dS  j  dkrt | dS t | dS )Nr!   r#   r&   )r'   r(   r   r   r	   )r$   r   r%   r   r   single_dataset_providerP   s
   z6metrics_func_provider.<locals>.single_dataset_provider)r!   r&   ZBertWordPieceTokenizercnn_dmgigawordZ
cnn_dm_orgrouge-1)Zmetricdatasetrouge-2rouge-l)r/   r1   r2   c                    s&  t |d ddd}| D ]}|| |d qW d    n1 s#w   Y  t |d ddd}|D ]}||jd  |d q4W d    n1 sNw   Y   j dkrt |d	 ddd$}|D ]}||jdd
d |jd   |d qfW d    d S 1 sw   Y  d S d S )Nz.hypswzutf-8)encoding
z.refsrefsquad_generationz.source z	 Answer: Zanswer)openwritemetar'   r(   Ztext_areplace)ZpredictionsZexamplesoutput_fileoutputZ
predictionZexampler   r   r   output_funcn   s6   

"z*metrics_func_provider.<locals>.output_funcF)is_test	eval_funcr@   Z
only_rank0)r'   r(   r
   evaluater   Ztokenizer_typer   	functoolspartialr   r   )	r   r%   rA   r,   Z	evaluaterrB   Zmetric_dictr0   r@   r   r+   r   metrics_func_providerM   s6   


	rF   c                 C   sB   | j | jkr
| j | _| j dv rt| ti ttd d S t| j)N)r-   Zcnn_dm_originalr.   r!   r7   Zxsumr&   )Zend_of_epoch_callback_providerZforward_step)	Zsrc_seq_lengthZmax_position_embeddingsr'   r(   r   r*   rF   r    NotImplementedErrorr?   r   r   r   main   s   

rH   )__doc__rD   collectionsr   r   Zfinetune_glmr   Zmegatron_utilr   Zpretrain_glmr   Ztasks.eval_utilsr   Ztasks.seq2seq.datasetr   r   r	   Ztasks.seq2seq.evaluater
   r   r   r)   r    r*   rF   rH   r   r   r   r   <module>   s   =