《Character-Level Question Answering with Attention》

arxiv
University of Washington、Microsoft Research
2016.04

这篇文章在 github 上有开源实现(SimpleQA),虽然是 lua 的

主要工作

使用 character-level encoder-decoder 框架解决了 3 个问题,得到了超过 word-level NN 模型的效果。

  • 使用 LSTM 对 question 进行 embed,来解决一个 question 有多种表达方式的问题
  • 完全使用 character-level 的表征,来解决许多训练的时候没有出现的 KB entity 需要在测试的时候正确预测的问题(对 unseen KB 鲁棒)
  • 放弃大规模的输出层,改为由 question embedding 和 KB embedding 之间的语义相似度决定输出,来解决 KB 过于庞大导致预测难度很大的问题

模型

这篇文章也是基于 single-relation question 的。

架构图 Alt text

模型有3个组件:

  • character-level LSTM-based encoder
    用于编码 question
    分为两步:
    1. 获得 question 里每个 character 的 one-hot 向量 \(x_1, x_2, ..., x_n\),保留空格、标点和大小写
    2. \(x_1, x_2, ..., x_n\) 从左至右输入一个两层 gated-feedback LSTM 里,每个 timestep 都输出,获得 question 的 embedding 向量 \(s_1,s_2,...,s_n\)
  • character-level CNN-based encoder
    用于编码 entity 和 predicate
    使用 CNN 而不是 LSTM 是因为 KB 太大了,用 LSTM 会没效率。entity 和 predicate 的 CNN 网络参数不共享是因为 entity 的和 predicate 的形式差别很大。
    分为两步:
    1. 获得 entity 或 predicate 的 one-hot 向量 \(x_1, x_2, ..., x_n\)
    2. \(x_1, x_2, ..., x_n\) 输入一个 temporal CNN(每个 CNN 包含两个卷积层、三个全连接层以及一个 max pooling 层),获得 entity 或 predicate 的 embedding 向量
      • \(f(x_1,...,x_n) = tanh(W_3\times max(tanh(W_2\times conv(tanh(W_1\times conv(x_1,...,x_n))))))\)
      • 其中 \(f(x_{1...n})\) 是大小为 N 的 embedding 向量
  • 使用 attention 机制和相关性衡量函数(relevance function)的 LSTM-based decoder
    用于获得 (entity, predicate) 对生成 KB query
    分为两个组件:
    1. 基于 attention 的 LSTM-based decoder
      • \(c_i= \sum\limits_{j=1}^n\alpha_{ij}s_j\)
      • \(\alpha_{ij}=\frac{\exp(e_{ij})}{\sum_{k=1}^{T_x}exp(e_{ik})}\)
      • \(e_{ij}=v_\alpha^\top tanh(W_\alpha h_{i-1}+U_{\alpha}s_j)\)
    2. 一对语义相关性衡量函数
      • \(P(e_j)=\frac{\exp(\lambda\cos(h_1,e_j))}{\sum_{i=1}^n\exp(\lambda\cos(h_1,e_i))}\)
      • \(P(p_k)=\frac{exp(\lambda\cos(h_2,p_k))}{\sum_{i=1}^m\exp(\lambda\cos(h_2,p_i))}\)

最后使用 \((e^*,p^*)=argmax_{e_i,p_j}(P(e_i)*P(p_j))\) 获得可能性最大的 (entity, predicate) 对作为输出。

在 SimpleQuestions 上的结果

Alt text 里面的MemNN是《Large-scale Simple Question Answering with Memory Networks》里的,就是原始的强监督 MemNN,不是end-to-end 的。

WQ 是 WebQuestions, SIQ 是 SimpleQuestions,PRP 是 extracted paraphrases from WikiAnswers

读后感

在 SimpleQuestions 数据集上获得了很不错的结果,网络结构也很清晰,使用 attention 机制解决 KBQA 问题的一个好例子。
特殊的点是用到了 character-level 的 encoder,能够较好的应对 OOV 问题。使用 CNN 来处理 KB 部分也很有意思。
感觉挺有实用参考价值的。