o
    *j                     @   s   d dl Z d dlmZmZ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 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 d dlmZ dZeeZej ej!dG dd deZ"dS )    N)CallableDictOptional)Trainers)SpaceGenerator)SpaceModelBase)get_sequential_data_loader)IntentBPETextField)intent_preprocess)BaseTrainer)TRAINERS)IntentTrainer)Config	ModelFile)
get_logger)module_namec                       st   e Zd Z		ddee dee f fddZdd Zdefd	d
Z	dd Z
	ddee deeef fddZ  ZS )DialogIntentTrainerNcfg_filecfg_modify_fnc                    s:  t  tj|d |d  dd }|| _| | j| _|| jjj	 t
| jjj| j t| jjj| j| _| jj| jj_| jjd | jj_tj| jjj| jjjg}| jj}t| jjj| j| j||dd| _t| jjj| j| j||dd| _t| jjj| j| j||d	d| _tj| j| jd
| _| jdi | d S )N	model_dirZcfg_namec                 S   sJ   dd l }dd l}||  |j|  tj |  ||  d|jj_	d S )Nr   T)
randomtorchZmanual_seedcudaZmanual_seed_allnpseedbackendsZcudnnZdeterministic)r   r   r    r   t/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/trainers/nlp/space/dialog_intent_trainer.py
setup_seed$   s   

z0DialogIntentTrainer.__init__.<locals>.setup_seed   train)Z
batch_sizereaderZhparamsZ
data_paths
collate_fnZ	data_typevalidtestr!   r   ) super__init__ospathjoinr   rebuild_configcfgTrainerr   r
   ZModelZinit_checkpointr	   bpeZ
vocab_sizeZnum_token_embeddingsZmax_ctx_turnZnum_turn_embeddingsZDatasetdata_dirZtrigger_dataZcollate_fn_multi_turnr   Zbatch_size_labeltrain_label_loadervalid_label_loadertest_label_loaderr   create	generator_load_model)selfr   r   argskwargsr   Zdataset_pathsr"   	__class__r   r   r'      sP   		zDialogIntentTrainer.__init__c                    s    fdd}d|v r|d  _ ntj|d  j j jd _ dd l} jjjdkr9|j	
 dkr9|j j  _ t j | j jd _t j} jj|d	  j  d S )
Nc                    s&   ddl }|| }  jjr|  S | S )z/
            numpy array -> tensor
            r   N)r   Ztensorr,   Zuse_gpur   )arrayr   r6   r   r   	to_tensor[   s   
z2DialogIntentTrainer._load_model.<locals>.to_tensormodelr   )r!   r4   r   r   r%   )Znum_training_steps_per_epoch)r>   r   r3   r,   r.   r4   r   r-   Zgpur   Zdevice_countnnZDataParallelr   trainerlenr0   Zset_optimizersload)r6   r8   r=   r   Znum_batchesr   r<   r   r5   Y   s$   	
zDialogIntentTrainer._load_modelr,   c                 C   s   | j d ur
|  |S |S N)r   )r6   r,   r   r   r   r+   z   s   

z"DialogIntentTrainer.rebuild_configc                 O   s"   t d | jj| j| jd d S )NZTrain)Ztrain_label_iterZvalid_label_iter)loggerinfor@   r    r0   r1   )r6   r7   r8   r   r   r   r       s
   

zDialogIntentTrainer.traincheckpoint_pathreturnc                 O   sv   t d d| j_|d}||d d  }|d | }|tjks#J ||d< | jdi | | jj	| j
| jd d S )NZEvaluateT/r   r   )Z	data_iterZex_data_iterr   )rD   rE   r,   Zdo_inferrfindr   ZTORCH_MODEL_BIN_FILEr5   r@   Zinferr2   r0   )r6   rF   r7   r8   posZcheckpoint_nameZcheckpoint_dirr   r   r   evaluate   s   


zDialogIntentTrainer.evaluate)NNrC   )__name__
__module____qualname__r   strr   r'   r5   r   r+   r    r   floatrK   __classcell__r   r   r9   r   r      s"    <!
r   )#r(   typingr   r   r   numpyr   Zmodelscope.metainfor   Z+modelscope.models.nlp.space.model.generatorr   Z,modelscope.models.nlp.space.model.model_baser   Z.modelscope.preprocessors.nlp.space.data_loaderr   Z6modelscope.preprocessors.nlp.space.fields.intent_fieldr	   Z-modelscope.preprocessors.nlp.space.preprocessr
   Zmodelscope.trainers.baser   Zmodelscope.trainers.builderr   Z4modelscope.trainers.nlp.space.trainer.intent_trainerr   Zmodelscope.utils.configr   r   Zmodelscope.utils.loggerr   PATHrD   Zregister_moduleZdialog_intent_trainerr   r   r   r   r   <module>   s$   