处理语料
从原语料中抽取出src,mt,时间,分别放在三个文件中。
src和mt中的句子需要去掉标注
时间需要归一化,归一化的方法:用每个时间除以时间中的最大值(用softmax归一化数值太小)
已形成的src和mt都是顺序的,接下来需要打乱语料顺序
最后
模型需要的文件有:
训练集:train.src train.mt train.mt.hter (一定要归一化!)
测试集:test.src test.mt test.mt.hter(一定要归一化!)
验证集:dev.src dev.mt dev.mt.hter(dev可以和test一样)
修改文件参数
qe_train.sh:
服务器用的块
export CUDA_VISIBLE_DEVICES=3
数据路径:这个路径里放着训练集测试集验证集
datadir=./data/qe/error-corpus
词表路径:这个路径不用改,这里qe模型的词表用的仍然是之前正常的qe的词表,只是将训练语料以及标准答案更换了。语料换成了进行错误标注的语料,原本的hter值换成 了归一化后的时间,用时间当做标准答案进行预测
vocabdir=./data/vocab/ccmt2021/55
模型路径:最后用新语料训练好的模型存放地址
modeldir=./saved_error_score_model
这一段是向qe_model.py传参数。这里要确认train,test,dev的名字不能错。第五行的lab=mt.hter是原实验中hter值文件的后缀,改成别的后缀会报错,所以这里继续沿用mt.hter这个后缀,将归一化后的时间文件的后缀改成mt.hter
num_train_step = 40000是训练步数
python qe_model.py \
--src=src \
--mt=mt \
--fea=sent.tfrecord \
--lab=mt.hter \
--train_prefix=${datadir}/train \
--dev_prefix=${datadir}/dev \
--test_prefix=${datadir}/dev \
--vocab_prefix=${vocabdir}/vocab.low \
--max_vocab_size=120000 \
--out_dir=${modeldir} \
--optimizer=lazyadam \
--warmup_steps=8000 \
--learning_rate=2.0 \
--num_train_steps=40000 \
--steps_per_stats=100 \
--steps_per_external_eval=1000 \
--rnn_units=128 \
--rnn_layers=1 \
--embedding_size=512 \
--num_units=512 \
--num_layers=4 \
--ffn_inner_dim=512 \
--qe_batch_size=64 \
--infer_batch_size=64 \
--metrics=pearson \
--use_hf=False \
--num_buckets=4 \
--dim_hf=17 \
--train_level=sent \
--avg_ckpts=True \
--fixed_exp=True \
--label_smoothing=0.1 \
--exp_model_dir=${exp_modeldir}
开始训练
之后就可以进行训练了
bash qe_train.sh
训练时间六个小时,训练出的模型保存在saved_error_score_model中
进行infer
训练完成后,开始对测试集进行测试
bash qe_infer.sh
形成的预测文件保存在infer-error文件夹中
export CUDA_VISIBLE_DEVICES=0
metrics=pearson
datadir=./data/qe/error-corpus
modeldir=./saved_error_score_model
inferdir=${datadir}/infer-error
mkdir -p ${inferdir}
data=test
python qe_model.py \
--out_dir=${modeldir} \
--ckpt=${modeldir}/avg_best_${metrics} \
--inference_src_file=${datadir}/${data}.src \
--inference_mt_file=${datadir}/${data}.mt \
--inference_fea_file=${datadir}/${data}.sent.tfrecord \
--inference_output_file=${inferdir}/${data}.infer2
计算皮尔森系数
对形成的test.infer2.sent和test.mt.hter计算皮尔森