机器翻译(MT)以及一些机器人对话问题的特点就是输出是单词序列而不是单个单词。 输出序列的长度可能与源序列的长度不同
为了解决这个问题,主要采用的是Sequence to Sequence模型
模型主要由两个部分组成,一个编码器(encoder)和一个解码器(decoder)。编码器和解码器一般都是由RNN类网络构成,常用LSTM。这是由于使用RNN可以自适应输入输出,这里就不多提了。后面的网络都会以LSTM为例进行说明。
编码器主要指的是将句子编码成一个能够映射出句子大致内容的固定长度的向量
解码器,这里就是将由编码器得到的固定长度的向量再还原成对应的序列数据,一般使用和编码器同样的结构,也是一个RNN类的网络。
实际操作过程会将由编码器得到的定长向量传递给解码器,解码器节点会使用这个向量作为隐藏层输入和一个开始标志位作为当前位置的输入。得到的输出向量能够映射成为我们想要的输出结果,并且会将映射输出的向量传递给下一个展开的RNN节点。
模型训练:
训练时encoder的输入为英文原始文本对应的词向量
decoder的第一个输入为编码器得到的隐藏向量和开始文本bos,后面是对应正确的文本词向量作为输入
decoder的label标签值为对应正确的文本和结束符号eos
模型预测:
模型预测时编码器也是输入英文原始文本的词向量,而解码器部分的输入是只需要传入一个开始符号,后面节点的输入为上一节点的输出。
模型具体结构:
Beam Search
简单的greedy search
取每个输出的可能性最大的作为输出,但可能会造成语义的不连贯
维特比算法:选择整体分数最高的句子(搜索空间太大)
所以诞生了Beam Search集束搜索:
每一步寻找 Beam size个最合适的候选人,然后接着往后找,最后找到最合适总体输出