机器翻译笔记

本文详细记录了使用TensorFlow实现神经网络机器翻译的过程,包括数据准备、模型训练、GPU加速以及遇到的问题和解决方案。通过训练越南语-英语和中英翻译模型,探讨了seq2seq模型、RNN、注意力机制等关键概念,并对Transformer、BERT和GPT等先进模型进行了简要介绍。
摘要由CSDN通过智能技术生成

神经网络机器翻译系统(中英、越南语-英语)

  1. 下载https://github.com/tensorflow/nmt项目或直接使用D:\Deep-Learning-21-Examples-master\chapter_16\nmt(2017年8月25的版本,与tf1.8不兼容)

  2. 从https://nlp.stanford.edu/projects/nmt/data/iwslt15.en-vi/下载越南与英语平行语料库,保存至chapter_16\nmt_data,训练集大概13w对句子,验证集1500多对,测试集1200多对;

  3. 进入chapter_16,创建chapter_16\nmt_model,执行python -m nmt.nmt
    –src=vi --tgt=en --vocab_prefix=nmt_data/vocab --train_prefix=nmt_data/train
    –dev_prefix= nmt_data/tst2012 --test_prefix=nmt_data/tst2013 --out_dir=nmt_model
    –num_train_steps=12000 --steps_per_stats=100 --num_layers=2 --num_units=128
    –dropout=0.2 --metrics=bleu,window会报错UnicodeEncodeError: ‘gbk’ codec can’t encode character ,文件头部添加sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding=‘utf8’) 即可,
    直接注释print(out_s, end="", file=sys.stdout)也可以,但会错过很多信息;
    https://blog.csdn.net/u013066244/article/details/53057411)

  4. 考虑到训练时cpu使用率太高及内存问题,下面使用google colab的免费gpu训练;
    翻墙、使用gmail登录、将nmt打包上传至云端硬盘(如mount目录)、挂载共享目录(https://blog.csdn.net/cocoaqin/article/details/79184540)
    注意:colab的tf版本为1.10,所在目录/usr/local/lib/python3.6/dist-packages

  5. 执行!unzip nmt.zip解压,进入mount/nmt目录,再执行以上训练命令,发现step-time 为0.2s左右,比自己的cpu快5倍,wps为30k,也快5倍;
    在执行到5400步,报错挂掉, DataLossError (see above for traceback): file is too short to be an sstable,[[Node: save/RestoreV2 = RestoreV2。。。。tensorflow.python.framework.errors_impl.DataLossError: file is too short to be an sstable。。。好在可以接着训练!!!
    最终验证集和测试集的bleu、ppl分别是5.9、32.41,5.1、36.37;训练集是step 12000 lr 1 step-time 0.20s wps 30.35K ppl 34.68 gN 3.31 bleu 5.87 ;其中best_bleu自动保存了bleu较好的几个检查点,如11900等;
    执行!tensorboard --logdir nmt_model打开tensorboard(会自动给出url如 http://fac4c1842001:6006),但访问不了。。;hparams会保存训练使用的超参数;可以将best_bleu目录下载下来,在自己电脑上看,只能看到dev_bleu、dev_ppl、test_bleu、test_ppl,且只有最后时刻的一个点;
    注意:词汇表有3个特殊的单词:< unk>、< s>、< /s>分别表示不常见、句子开头和结尾(自动添加到句子);

  6. 制作my_infer_file.vi,写入越南语(可直接从tst2013.vi复制),上传至云端nmt_testdata目录,执行!python -m nmt.nmt --out_dir=nmt_model
    -inference_input_file=nmt_testdata/my_infer_file.vi
    –inference_output_file=nmt_model/output_infer,
    速度很快不到一分钟, 使用了nmt_model/translate.ckpt-12000
    下载后打开output_infer查看;翻译质量不够好,有3000多个< unk>;

  7. 越南语-英语是官网github的例子,下面进行中英翻译;NiuTrans (小牛翻译)提供的数据集(训练集10w,测试以及验证集1000),中文已分好词;上传数据至云端nmt_data_ch_en,同时新建云端nmt_model_ch_en目录;
    执行python -m nmt.nmt --src=en --tgt=zh --attention=scaled_luong
    –vocab_prefix=nmt_data_ch_en/vocab --train_prefix=nmt_data_ch_en/train
    –dev_prefix=nmt_data_ch_en/dev --test_prefix=nmt_data_ch_en/test
    –out_dir=nmt_model_ch_en
    –num_train_steps=200000 --steps_per_stats=100 --num_layers=2
    –num_units=128 --dropout=0.2 --metrics=bleu ,训练到18000挂掉,直接测试;
    执行!python -m nmt.nmt --out_dir=nmt_model_ch_en
    –inference_input_file=nmt_testdata/my_infer_file.en
    –inference_output_file=nmt_model_ch_en/output_infer,
    报错OutOfRangeError (see above for traceback): Read less bytes than requested,下载checkpoint发现是个临时文件,只有最后一个检查点,可能跟训练中断有关!

  8. nmt源码研究:
    tf.contrib.seq2seq.AttentionWrapper 、tf.contrib.seq2seq.LuongAttention、tf.contrib.seq2seq.BahdanauAttention、tf.contrib.seq2seq.BasicDecoder、tf.contrib.seq2seq.dynamic_decode、tf.nn.dynamic_rnn、tf.nn.bidirectional_dynamic_rnn、tf.nn.embedding_lookup、tf.contrib.seq2seq.TrainingHelper等;
    疑点:wiki说BLEU’s output is always a number between 0 and 1,但nmt项目对最后值乘了100。bleu是对n-gram的改进,1-grams代表充分性、n-grams代表流畅性;惩罚短句子;

关于Colaboratory和云端硬盘的要点:
9. 验证字符串需要输入2次,每次不同,根据提示输入,最后都要回车
10. Colaboratory和云端硬盘的关联很简单,两个应用可以互相访问、跳转(貌似本来就是关联的)
11. 执行!mkdir -p drive是在colab当前目录创建共享目录,!google-drive-ocamlfuse drive -o nonempty是把drive目录挂载到云端硬盘的root目录;这样就能在drive看到云端硬盘的所有文件和目录(ls drive/ ),也可以通过rm -f直接删除云端硬盘的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值