o
    h                      @   s   d Z ddlZddlZddlmZ ddlmZ ddlm	Z	 g dg dg ddZ
d	ed
efddZd	ed
efddZdd ZedkrGe  dS dS )zB
Utils for training and evaluating multiple models simultaneously
    N)main)DEFAULT_BATCH_SIZE)       @         i   )   
         )   i,  i  iX  full)
lstm_layerupos_emb_dimtraining_size
num_models	base_pathc           	   
   C   s  |j dkr-tdd D ]!}t| D ]}tj|| d| d}||_||_t	|d qq|j dkrZtdd D ]"}t| D ]}tj|d| d| d}||_||_
t	|d q=q7|j dkrtdd D ].}t| D ]'}tj|| d| d}tjtjtd	d
d}||_||_t	|d qkqe|j dkrt| D ]1}tj|d| d}||_d|_t	|d |jsd|_tj|d| d}||_t	|d q|j dkrt| D ]}tj|d| d}||_t	|d q|j dkrt| D ]}tj|d| d}||_t	|d q|j dkr/t| D ]}tj|d| d}||_t	|d q|j dkrTt| D ]}tj|d|j d| d}||_t	|d q9d S d S )Nr   _.ptpredefined_argsr   dim_r   
_examples_dataprocessed_ud_encombined_train.txtbaselstm_model_FTlstm_model_wloss_base_charlmlstm_charlm_base_charlm_uposlstm_charlm_upos_	base_upos
lstm_upos_
attn_modelattn_model__heads_)change_paramchange_params_mapgetrangeospathjoin	save_name
hidden_dimtrain_lstm_mainr   dirname__file__
train_fileweighted_loss	num_heads)	r   r   args
num_layersinew_save_nameupos_dimsizenew_train_file r?   d/var/www/html/env_mimamsha/lib/python3.10/site-packages/stanza/models/lemma_classifier/train_many.pytrain_n_models   sv   






rA   c                 C   s   |j dkrot| D ]g}|jdkr=tj|d| d}||_d|_t|d tj|d| d}||_d|_t|d q	|jd	krntj|d
| d}||_d|_t|d tj|d| d}||_d|_t|d q	d S d S )Ntfmrbertbert_r   cer   bert_wloss_weighted_bcerobertaroberta_roberta_wloss_)	multi_train_typer,   r)   r-   r.   r/   r0   loss_fntrain_tfmr_main)r   r   r8   r:   r;   r?   r?   r@   train_n_tfmrsS   s.   





rN   c               	   C   s  t  } | jdtddd | jdttjtjt	dddd | jd	d
dddd | jdtd dd | jdttjtjt	dddd | jdttjtjt	dddd | jdtddd | jdd
dddd | jdtdd d | jd!ttjtjt	d"d#d$d | jd%t
d&d'd | jd(t
d)d*d | jd+ttd,d | jd-ttjtjt	d.d/d0d1d | jd2d
d3dd4d | jd5ttjtjt	d.d/d6d7d | jd8td9d:d | jd;td d<d | jd=td>d?d | jd@tdAdBd | jdCtdDdEd | jdFtd dGd | jdHtd dId |  }|jdAkr)t|j|j|dJ d S |jdKkr:t|j|j|dJ d S tdL|j )MNz--hidden_dimr   zSize of hidden layer)typedefaulthelpz--wordvec_pretrain_filepretrainzglove.ptz'Exact name of the pretrain file to readz--charlm
store_true
use_charlmFz(Whether not to use the charlm embeddings)actiondestrP   rQ   z--charlm_shorthandz=Shorthand for character-level language model training corpus.z--charlm_forward_filecharlm_filesz1billion_forward.ptzPath to forward charlm filez--charlm_backward_filez1billion_backwards.ptzPath to backward charlm filez--upos_emb_dimr   z'Dimension size for UPOS tag embeddings.z
--use_attnattnz3Whether to use multihead attention instead of LSTM.z--num_headsr   z/Number of heads to use for multihead attention.z--save_namesaved_modelsz2lemma_classifier_model_weighted_loss_charlm_new.ptzPath to model save filez--lrgMbP?zlearning ratez--num_epochsr
   zNumber of training epochsz--batch_sizez+Number of examples to include in each batchz--train_filer   r   r   zFull path to training filez--weighted_lossr6   z-Whether to use weighted loss during training.z--eval_filezcombined_dev.txtz1Path to dev file used to evaluate model for savesz--model_typerH   z.Which transformer to use ('bert' or 'roberta')z--bert_modelz>Use a specific transformer instead of the default bert/robertaz	--loss_fnrG   z?Which loss function to train with (e.g. 'ce' or 'weighted_bce')z--multi_train_typelstmz@Whether you are attempting to multi-train an LSTM or transformerz--multi_train_countr	   zNumber of each model to buildz--base_pathz(Path to start generating model type for.z--change_paramz,Which hyperparameter to change when training)r   r   r8   rB   zImproper input )argparseArgumentParseradd_argumentintstrr-   r.   r/   r3   r4   floatr   
parse_argsrK   rA   multi_train_countr   rN   
ValueError)parserr8   r?   r?   r@   r   p   sH   &&&&((

r   __main__)__doc__r[   r-   /stanza.models.lemma_classifier.train_lstm_modelr   r2   6stanza.models.lemma_classifier.train_transformer_modelrM   (stanza.models.lemma_classifier.constantsr   r*   r^   r_   rA   rN   __name__r?   r?   r?   r@   <module>   s     @*
