欢迎转载,转载请注明出处:http://blog.youkuaiyun.com/lucygill
本文基于个人理解,欢迎讨论交流。
最近在看斯坦福大学机器翻译的开源代码,琢磨着把代码稍微改动一下,做成中文到英文的翻译。参考了业界大牛的不少论文,大致明白了机器翻译实现的步骤:
1.将源文件转化成词向量(像中文这种词之间没有明显符号的,要先进行分词)
转化的方法,最简单的是生成one-hot词向量。具体来说就是,如果文件中包含n个不同的词,那么每个词的词向量都是n维的,而且只有一个元素的值为1,其余元素都为0. 这样做虽然简单,但需要的空间极大,而且无法反映出词与词之间的联系。我们想得到的词向量是这样的:舅舅-男人=舅妈,或者,王子+女人=公主。斯坦福大学的论文中是这样做的:先生成one-hot词向量,再通过一个变换矩阵将其压缩成低维向量。
注意,机器翻译是有监督学习,所以词向量的转化涉及将源语言和目标语言的文件进行词向量转化。通过转化,我们就把语言与语言之间的转换,等价变为向量与向量之间的转换。为什么要这样做呢?因为电脑本身是没有语言的概念的,它只认一串串数字。事实上,语言在电脑上的存在,也是通过ascii,Unicode等编码实现的。但我们不能直接用这些编码进行机器翻译,因为它们的规律性弱,也没法很好地展示词之间的关系,存储方式也比较复杂。机器翻译也算是一种数学模型,而数学模型的精髓就是简化问题,忽略不必要的条件。(数学系妹子的职业病==)
2.学习转换规则(训练模型)