当前位置:   article > 正文

机器翻译小结_机器翻译实践课程的心得体会

机器翻译实践课程的心得体会

机器翻译小结

       机器翻译主要是通过计算机将一种语言翻译到其他语言,也就是最基本的序列到序列的问题。传统的机器翻译主要是基于统计的机器翻译,一般能够在精确度上做的比较好,但是在译文流畅度上有很大的不足,往往是只是翻译出对应单词的意思而缺少句子的整体信息。近几年,出现了基于神经网络的机器翻译,在译文流畅度和精确度上均有较好的表现。目前,主流的神经网络翻译架构有 CNN(facebook), RNN,LSTM , GRU,transformer等,在翻译结果上也有不同的表现,之前也有各自优点。RNN到LSTM到GRU 是不断变化进而 弥补之前缺陷,2017 年初左右这三种是很多翻译模型的主流架构。紧接着,出现了CNN和transformer ,CNN结构的主要是通过不断卷积,并且加入注意力机制,进而取得不错的翻译表现。而transformer 则是完全基于注意力机制,在翻译表现上,均能达到最好的效果,在经过优化之后,基于transformer的翻译模型最终碾压其他模型。这也使得较多公司选择使用transformer,并不断进行优化创新。在之前的文章中已经有了GNMT相关训练总结http://doc.actneed.com/?p=267,这里就对transformer在基本原理和使用方面做一个总结。(之后的transformer 表示基于transfomer的模型)

       首先,虽然transformer是完全基于注意力机制的,但是仍然离不开基本的编码-解码器结构,这一点是和GNMT相同的。不同的是GNMT是经过变种的RNN结合注意力机制实现的,而transformer完全是基于注意力机制实现的。这里就对transformer基本结构做一个简单的描述:

首先是最基本的结构图:

       由图可以看出,transformer是由编码器和解码器组成,不同的是 编码器和解码器内部完全是多层的注意力机制层,这里的注意力机制也可以看做是一个变种,准确来说是自注意力机制,也就是说qkv 均来自自身,对输入本身做注意力,然后输入的信息经过编码器到达解码器,逐渐对于每一个位置的词语进行生成,最终得到完整的句子。

       其中,transformer中 同样有需要进行训练的输入输出嵌套层,这在GNMT中也有所体现。嵌套的目的是为了将较长的输入向量映射到 映射空间,进而减少训练过程中产生过多参数,以适应当前硬件的处理能力。同时transformer中有位置编码层,这是目前transformer中特有的。由于此结构模型是完全基于注意力机制的,在训练过程中单词之间的相对位置信息不能够很好的被模型所捕捉到,所以引入了 位置编码层,以记录不同单词见的相对位置信息,在google发表的论文中有不同的位置编码方式,可供选择。在自注意力机制之前也就是主要也就是这两部分,紧接着是重要的多头注意力机制了,简单来说就是设置不同的qkv以获得所谓不同类型的注意力模型,再次还有多头的概念,由于模型在初始过程中的一些权重完全是随机初始化的,为了提高精度,使用多个自注意力机制,也就是这里的多头,然后将这些进行连接通过训练的新的权重矩阵层获得和单个自注意力的同样的输出。进行完多头注意力机制层,接着就是残差层,和标准化层。然后经过前馈神经网络和另一个残差层。这样就是一个完整的编码器的基本单元了,在transformer中,这样的 单元根据参数的设置,可以叠加多层,以获得更好效果。解码器与编码器类似,不同的就是将编码器的输出作为解码器中注意力的输出,结合已经产生的输出进而逐渐产生出对应位置结果。

以上就是对transformer模型的简单介绍,接下来是关于训练的一些步骤。

       首先是获取基本的训练代码,transformer模型可以自己通过tensorflow或是Keras进行构建,也可以直接使用开源代码。目前较为成熟的开源项目tensor2tensor 中包含transofmer 模型的实现,并且在模型修改和问题的定义方面也都比较方便,因此选择其作为训练的主要代码。

基本环境的配置主要有:

  1. 安装对应的环境,tensorflow(gpu),tensor2tensor
  2. 编写自定义问题代码 (根据官网文档)
  3. 编写自定义参数代码。

代码链接:https://blog.csdn.net/hpulfc/article/details/82625217

数据预处理由于tensor2tensor 的内置了一些训练集,会记进行自动下载(可在代码中屏蔽),所以这里是直接使用自己处理好的数据进行训练,处理过程在之前的训练中有所提及这里就不做详细描述,不同的是对于中文的处理是不进行分字处理,而是进行分词处理,然后使用tensor2tensor 内部的子词处理工具进行处理获取对应的子词单词表,然后生成对应的样本文件(TFRecord),等待后续的训练。

训练方面:主要是通过提供的命令,选择问题对应的训练参数和模型进行训练。需要注意的是要根据硬件条件调整训练的batch_size 大小,一般来说,GPU数量越多,batch_size 越大,获得的模型质量越好。对于同的语言,要根据实际情况进行参数调整,主要有warm_up_steps 和 learning_rate 。如果是硬件条件限制,可以选择不同的优化器进行结果调整。例如:gpu过少,但是想要达到过GPU效果,可以采用多步调优优化器。

结果评测:tensor2tensor 在训练过程中会有bleu的测试,这个值较大,不能和其他模型进行比较。理想的是它提供了测试bleu的命令t2t-bleu 可以测试出标准的bleu。在评测的时候可以拿newstest各年的评测语料进行评测,然后与网上的数据进行对比,以检验模型的优劣。同时在内容上,可以预参考文件进行对比,查找具体原因。

结果调优:基本的transformer模型虽然能基本达到其他模型的最好效果,但是还有很多方式进行整,以达到最优效果。目前主流的就是有通过增加数据集大小,不断的扩充语料。主要方式是通过开放的数据集和网上同开文章进行提取获取语料,同时可以通过back_translation 的方式进行扩充语料(这部分需要进一步探索)。数据清洗,为了获取优质的翻译语料,需要将原始语料中的一些东西去除,一般的做法主要有,清除句子中过长句子,标点统一转化为半角字符,转义字符进行转化,统一大小写,通过统计获取句子中的原句和目标句子的长度比值的阈值,以去除问题数据等。模型集成,通过训练出不同的模型,然后将同一源句子输入到各个模型对结果赋予不同权重,进行重新打分,进而选择最合适模型。最后对翻译进行微调,以获取较好的结果。

 

总的来说,一个人的力量很有限,期待和更多相似的人共同合作!

加油~!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/372823
推荐阅读
相关标签
  

闽ICP备14008679号