对话系统-seq2seq模型介绍及存在的问题

2018-11-18  本文已影响0人  又双叒叕苟了一天

原文:https://arxiv.org/abs/1805.09461?context=stat.ML

简单的seq2seq模型

seq2seq模型
训练步骤:

对于每个输入序列 input X​ 和输出序列 output Y​

  1. X 上运行 encoding,并获得 encoder 的最终状态 h_{T_e}
  2. h_{T_e} 传入第一个 decoder,并获得采样的输出序列 \hat{Y}
  3. 根据式(3)计算损失并更新模型参数。

\mathcal L_{CE}=-\sum_{t=1}^{T}\log{\pi_\theta(y_t|y_{t-1},s_t,c_{t-1},X)}\tag3

测试步骤:

对于每个输入序列 input X 和输出序列 output Y

  1. 使用训练过的模型通过式(4)采样输出\hat{Y}
  2. 通过一个度量,例如:ROUGE 等来评估模型

\hat y_{t'}=\underset{y}{\arg \max}\pi_\theta(y|\hat y_t,s_{t'})\tag4

seq2seq模型训练和测试

seq2seq模型的两个问题

  1. 暴露偏差(exposure bias)
  2. 训练和测试的度量不一致

1 暴露偏差

两个主要原因:

  1. 训练时最小化的是交叉熵损失,而测试时用的是离散度量。
  2. 由于训练时使用了 teacher forcing 的方式,decoder 的训练依赖于真实值 y_t ,而在测试阶段,真实值是没有的。

teacher forcing: teacher forcing 是一种训练技术,我们训练集中正确的输出反馈到 h(t+1),当模型部署后,真正的输出通常是未知的。这时,我们将模型的输出近似等于正确的输出,反馈给模型。

​ 为了避免这个问题,我们可以采用计划抽样法(scheduled sampling method)。

计划抽样法

​ 我们先使用交叉熵预训练模型,然后慢慢将真实值替换成模型本身的 action。我们以概率 \varepsilon 用真实值,以概率 (1-\varepsilon) 用模型自身的 action。当 \varepsilon=1 时,为式(3),即全用真实值。当 \varepsilon=0 时,为式(5),即全用自身的 action。
\mathcal L_{Inference}=-\sum_{t=1}^T\log{\pi_\theta(\hat y_t|\hat y_1,\cdots,\hat y_{t-1},s_t,c_{t-1},X)}\tag5

2 训练和测试的度量不一致

​ 我们训练时使用的交叉熵误差,而测试时使用的是不可微的度量,例如:BLEU 和 ROUGE,这就会导致训练目标和测试目标不匹配,结果不一致。

​ 这两个问题都可以通过强化学习来处理。

上一篇下一篇

猜你喜欢

热点阅读