原文
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个模块组成:
- 输入模块: 将原生文本输入编码成分布式向量表示. NLP 问题中,输入可以是一个句子,一个故事,电影评论,新闻文章或者维基百科文章等.
- 问题模块: 同输入模块类似,但输入是问题. 输出喂给片段记忆模块.
- 片段记忆模块: 片段记忆模块通过关注机制决定关注输入数据的那些部分,并根据之前的记忆和问题产生新的记忆.
- 回答模块: 根据最终记忆,产生问题的回答.
输入模块
- 输入模块是一个 RNN 网络. 它的输入是 Work embedding(如通过 word2vec 或 GloVe 编码). 输入是 TI
- 是句子个数.
- RNN 的选择: 原生的 RNN 性能较差, GRU 和 LSTM 性能差不多,但 LSTM 的计算更加昂贵,所以一般使用 GRU.
问题模块
同输入模块类似,也是一个 RNN 网络.
- 在每个时间点 t,RNN 更新其隐藏状态 qt=RNN(L[wQt],qt−1)
- 输出是最后隐藏节点 qTQ
. (不同于输入模块,输入模块的输出是多个隐藏节点)
片段记忆模块
- 片段记忆模块在输入模块输出的事实 c 上迭代,更新内部的片段记忆. 记忆更新 mi=GRU(ei,mi−1)
关注机制.
– 构造一个门函数, git=G(ct,mm−1,q).
– 隐藏层更新 hit=gitGRU(ct,hit−1)+(1−git)hit−1
– 片段 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([yt−1,q],at−1)
- , 上次输出和问题一起作为输入
训练
最小化回答序列的交叉熵
转载:https://blog.csdn.net/javafreely/article/details/71994247
Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu | AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu |