以RNN为基础结构的seq2seq:
- 使用RNN作为encoder,一个词一个词输入
- 模型最后的隐藏状态作为context向量,传入decoder中
- context表示是一个问题,难以很好包含长句的信息、
RNN引入attention机制:
- 有选择的关注输入序列重要的相关部分
- 添加注意力机制后,传递更多的数据,不是最后一个状态,而是所有隐状态
- 解码时多了额外步骤,需要计算解码器当前隐藏状态与编码器所有隐状态的相关性,得到attention score。
- 根据attention score对于编码器隐藏状态加权相加,并与当前解码器隐藏状态拼接,再经过全连接网络输出最后的预测。
评价方式:
-
BLEU【专注与精度】
- 比较候选译文和参考译文中N-gram的重合程度。重合程度越高,则认为越好。
- 通常n取1-4,然后加权
-
ROUGE【专注于召回率】
-
ROUGE-L(将BLEU的n-gram优化为公共子序列)
Teacher forcing
- 训练阶段,在解码时,选什么词作为输入?
- 选择上一时刻预测的词,作为当前时刻输入【如果产生错误结果,会导致后续的学习效果都不好,学习速率变慢,难以收敛】
- 选择Ground Truth 作为输入。【测试阶段,不稳定。】
Curriculum Learning
- 用概率p选择使用ground truth的输出,1-p采用上一时刻的输出作为输入。
- 概率p随着时间的推移改变,逐渐变小。意思是随着训练的进行模型自身效果越来越好,需要的指导越来越少。
解码的选择
- greedy-search:每一步的最优(概率最大)
- beam-search:找到全局最优路径
- top-k :前k个进行采样
- top-p :给阈值
【测试阶段解码时,停止的方式】
- 遇到‘EOS’停止
- 给定一个最大长度,超过最大长度停止。