09 Machine Translation
分类可以使用最后一个隐藏层的输出,序列标注可以采样每个隐藏层的输出。
机器翻译的难度在于输出序列长度≠输入序列长度。
英语到法语的翻译
去掉空格
字符在计算机里是以编码的形式存在,我们通常所用的空格是 \x20 ,是在标准ASCII可见字符 0x20~0x7e 范围内。 而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表不间断空白符nbsp(non-breaking space),超出gbk编码范围,是需要去除的特殊字符。再数据预处理的过程中,我们首先需要对数据进行清洗。
大写转小写
单词和标点符号之间加空格
分词
字符串——单词组成的列表。英语一个列表,法语一个列表,列表里的元素是每个句子的列表。并保证法语和英语的一一对应。
建立词典
收录数据集里出现过的英语/法语单词,组成英语/法语词典。
将分词得到的单词组成的列表展开,得到所有的单词。
统计单词词频,按词频从大到小排序,赋予'pad', 'bos', 'eos', 'unk'分别为0,1,2,3,的index。
只获取频次大于某个阈值的所有单词,给他们赋予index。
给定单词列表,得到index列表。
载入数据集
保证每个batch的所有输入的句子长度一样,需要进行pad。规定句子长度,长的截掉后面的,短的用某个符号进行补足。
如果是法语(target),需要在句子前后分别加上bos和eos,要把句子的每个单词转成index,得到index列表,然后pad,列表转成tensor。
有效长度就是句子原本的长度(pad之前),计算损失的时候只计算有效长度部分的。
Encoder-Decoder
Encoder将输入变成语义编码(比如隐藏状态ht),语义编码作为Decoder的输入,产生输出,输出是eos时表示结束。
Sequence to Sequence模型
英语:hello world .
法语 :bonjour le mode .
decoder的hidden state初始化为encoder的隐藏状态输出h(-1),
训练的时候:
h(-1)和预测bonjour(y0),h(0)和bonjour预测le,以此类推。
预测的时候:
h(-1)和预测bonjour(y0),h(0)和y(0)预测y1,以此类推。
Encoder:
英语的输入是一个id的列表,通过embedding得到词向量,作为rnn的输入。
Decoder:
和encoder类似,但是需要有一个dense层,得到输出y。且初始化状态是encoder的输出。
损失函数
pad部分的损失无效。
Beam Search
简单贪心搜索:每次只选概率最大的作为最终的单词。
维特比算法:选择整体分数最高的句子(搜索空间太大)
集束搜索:每一步找到最好的n个,用这n个生成下一步的结果,再找最好的n个,以此类推
Last updated
Was this helpful?