动态记忆网络

原文
Ask Me Anything: Dynamic Memory Networks for Natural Language Processing

简介

Question answering 是自然语言处理领域的一个复杂问题. 它需要对文本的理解力和推理能力. 大部分 NLP 问题都可以转化为一个 QA 问题. DMN 网络可以用来处理 QA 问题. DMN 的输入包含事实输入,问题输入,经过内部处理形成片段记忆,最终产生问题的答案.

DMN 可进行端到端的训练,并在多种任务上取得了 state-of-the-art 的效果:包括 QA(Facebook 的 bAbI 数据集),情感分析文本分类(Stanford Sentiment Treebank)和词性标注(WSJ-PTB).

动态记忆网络

DMN 由4个模块组成:

动态记忆网络_第1张图片
- 输入模块: 将原生文本输入编码成分布式向量表示. NLP 问题中,输入可以是一个句子,一个故事,电影评论,新闻文章或者维基百科文章等.
- 问题模块: 同输入模块类似,但输入是问题. 输出喂给片段记忆模块.
- 片段记忆模块: 片段记忆模块通过关注机制决定关注输入数据的那些部分,并根据之前的记忆和问题产生新的记忆.
- 回答模块: 根据最终记忆,产生问题的回答.

输入模块

  • 输入模块是一个 RNN 网络. 它的输入是 Work embedding(如通过 word2vec 或 GloVe 编码). 输入是 TI 个单词 w1,...,wTI .
  • 在每个时间点 t,RNN 更新其隐藏状态 ht=RNN(L[wt],ht1) . L 是 word embedding matrix.
  • 在输入只有一个句子的情况下,输入模块输出 RNN 的所有隐藏状态.
  • 在输入是多个句子的情况下,我们将所有句子拼接,并在每个句子末尾插入句末 token. RNN 每个句末 token 位置的隐藏状态作为输出.
  • 输入模块的输出序列为 Tc 个 fact representation c. 其中 ct 是输出序列的第 t 个元素. 输入只有一个句子的情况下, TC=TI ;输入多个句子的情况下, TC 是句子个数.
  • RNN 的选择: 原生的 RNN 性能较差, GRU 和 LSTM 性能差不多,但 LSTM 的计算更加昂贵,所以一般使用 GRU.

问题模块

同输入模块类似,也是一个 RNN 网络.
- 在每个时间点 t,RNN 更新其隐藏状态 qt=RNN(L[wQt],qt1) .
- 输出是最后隐藏节点 qTQ . (不同于输入模块,输入模块的输出是多个隐藏节点)

片段记忆模块

  • 片段记忆模块在输入模块输出的事实 c 上迭代,更新内部的片段记忆. 记忆更新 mi=GRU(ei,mi1) .
  • 每个迭代都根据之前的记忆 mi1 、问题q 和事实 c 产生新的片段 ei
  • 关注机制.
    – 构造一个门函数, git=G(ct,mm1,q) .
    – 隐藏层更新 hit=gitGRU(ct,hit1)+(1git)hit1
    – 片段 ei=hiTC
    – 门函数 G(c,m,q)=σ(W(2)tanh(W(1)z(c,m,q)+b(1))+b(2)) 是一个两层神经网络. 其中z(c,m,q) 是c,m,q 的特征向量.

回答模块

  • 回答模块也是一个 GRU 网络.
  • 初始值为 a0=mTM
  • 输出为 yt=softmax(W(a)at)
  • 隐藏状态 at=GRU([yt1,q],at1) , 上次输出和问题一起作为输入

训练

最小化回答序列的交叉熵

你可能感兴趣的:(机器学习)