赞
踩
机器翻译的基本原理:简单来说,机器翻译就是将一种语言(一句话或者一段话或者一篇文章,篇章翻译也是机器翻译长期存在的挑战)翻译成另外一种语言,它所面临的挑战主要有三个:
(1)译文选择,也就是在翻译一个句子的时候,会面临很多选词的问题,比如中文看,翻译成英文可以是look,watch,read等等,机器翻译系统必须要在结合“看”后面的词的情况下才能做出正确的翻译
(2)词语顺序的调整:这个现象在各个语种中都普遍存在
(3)数据稀疏:不同语种的语言数量之间分布非常不均匀,中文英文的数量非常庞大,其他语种可能相对较少,想在非常少的数据上或者分布非常不均匀的数据上训练一个好的翻译系统很难
为了解决以上的问题,机器翻译模型开始出现并不断进化,主要分为三个阶段:
(1)基于规则的翻译
(2)统计机器翻译
(3)神经网络机器翻译
神经网络机器翻译从模型上来看架构比较简单,就是一个编码器(encoder)+一个解码器(decoder),编码器把源语言经过一系列的神经网络层的变换之后,表示成一个高维的向量(可以理解为句向量),解码器负责把这个高维的向量再重新解码成目标语言
做了一个双向的编码,参考百度飞浆的一张图片:
首先需要提前训练得到一个词向量表,通过上一篇文章中提到的n-gram或者NLM来得到,然后对于我们想要翻译的源语句,将它用one-hot编码为一个one-hot向量,这个向量和词向量表相乘就相当于提取出了词向量表中的某一列,这一列就代表了语句中对应的词
得到了词的向量表示之后,再用一个RNN变换,得到另外一个隐状态向量hi,这就完成了一个单词的单向编码,双向编码就是从句子的最后开始,走一遍刚刚的步骤,充分的利用上下文信息
经过双向编码之后,对于某个词我们就得到了两个向量,然后直接将它们拼接起来(就是4+4=8维)
那么接下来就需要把这个源语句的所有的词的向量合并压缩到一个向量里面(为什么要压缩,不压缩对于一个很长的语句或者段落会有维度灾难问题)
如何压缩?最简单的当然是直接每个单词的向量相加,但是这样意味着每个词被赋予了相同的权重,在一个语句中显然不同位置的词应该具有不同的权重。所以attention机制就被提出来了,它就是想把注意力放到和我们当前词有关的词上,尽可能的忽略那些和当前无关或者隔的很远的词或者不去关注整个句子,也就是在刚刚的那个隐状态向量hi前乘以一个权重αi,从而经过这样的处理,我们的编码就完成了
解码器就是和编码器相反,从左到右一个词一个词的解码产生目标翻译语言,同样有attention机制,并且在产生整个翻译的词时会考虑历史状态
目前最好的架构自然就是transformer,仍然是编码器+解码器,只是两个东西中都有多层,并且每一个词是三个向量表示:query,key和value,需要三个词向量矩阵WQ,WK,WV,分别相乘,就得到了当前词的向量表示,然后用attention机制,只是在transformer中作者认为只有一个qkv来刻画一个词不够,需要多个qkv来刻画,那么就有了“multi-head attention”机制
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。