本系列为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》的全套学习笔记,对应的课程视频可以在 这里 查看。



ShowMeAI为CS224n课程的全部课件,做了中文翻译和注释,并制作成了 GIF动图!点击 第10讲-NLP中的问答系统 查看的课件注释与带学解读。更多资料获取方式见文末。


引言

CS224n是顶级院校斯坦福出品的深度学习与自然语言处理方向专业课程,核心内容覆盖RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、阅读理解等前沿内容。

本篇笔记对应斯坦福CS224n自然语言处理专项课程的知识板块:问答系统。主要针对NLP中的问答系统场景,介绍了一些模型和思路。

笔记核心词

  • question answering
  • Dynamic Memory Networks \ 动态记忆网络
  • QA
  • 问答
  • 对话
  • MemNN
  • DCN
  • VQA

1.图文问答系统与动态记忆网络( DMN )

QA 系统的概念是直接从文档、对话、在线搜索等中提取信息(有时是段落,或是单词的范围),以满足用户的信息需求。 QA 系统不需要用户通读整个文档,而是倾向于给出一个简短的答案。

现在, QA 系统可以很容易地与其他 NLP 系统(如聊天机器人)结合起来,有些 QA 系统甚至超越了文本文档的搜索,可以从一组图片中提取信息。

有很多类型的问题,其中最简单的是 Factoid Question Answering 事实类问题回答。它包含的问题看起来像

  • The symbol for mercuric oxide is?(氧化汞的符号是什么?)
  • Which NFL team represented the AFC at Super Bowl 50?(哪支NFL球队代表AFC参加超级碗50赛?)

当然还有其他类型的问题,如数学问题(\(2+3=?\))、逻辑问题,这些问题需要广泛的推理(而且没有背景信息)。然而,我们可以说在人们的日常生活中,寻求信息的事实类问题回答是最常见的问题。

事实上,大多数 NLP 问题都可以看作是一个问答问题,其范式很简单:

  • 我们发出一个查询,然后机器提供一个响应。通过阅读文档或一组指令,智能系统应该能够回答各种各样的问题。
  • 我们可以要求句子的 POS 标签,我们可以要求系统用不同的语言来响应。

因此,很自然地,我们想设计一个可以用于一般 QA 的模型。

为了实现这一目标,我们面临两大障碍。

  • ① 许多NLP任务使用不同的架构,如TreeLSTM (Tai et al., 2015)用于情绪分析,Memory Network (Weston et al., 2015) 用于回答问题,以及双向LSTM-CRF (Huang et al., 2015) 用于词性标注。
  • ② 全面的多任务学习往往非常困难,迁移学习仍然是当前人工智能领域(计算机视觉、强化学习等)神经网络架构的主要障碍。

我们可以使用NLP的共享体系结构来解决第一个问题:动态内存网络( DMN ),这是一种为一般 QA 任务设计的体系结构。 QA 很难,部分原因是阅读一段很长的文字很难。即使对于人类,我们也不能在你的工作记忆中存储一个很长的文档。

1.1 输入模块

将 DMN 分为多个模块。首先我们来看输入模块。输入模块以单词序列 \(T_I\) 作为输入,输出事实表示序列 \(T_C\)。如果输出是一个单词列表,我们有 \(T_C = T_I\)。如果输出是一个句子列表,我们有 \(T_C\) 作为句子的数量, \(T_I\) 作为句子中的单词数量。我们使用一个简单的 GRU 来读取其中的句子,即隐藏状态 \(h_{t}=\operatorname{GRU}\left(x_{t}, h_{t-1}\right)\),其中 \(x_{t}=L\left[w_{t}\right]\), \(L\) 为嵌入矩阵,\(w_t\) 为 \(t\) 时刻的单词,我们使用 Bi- GRU 进一步改进,如下图所示。

(本部分DMN网络频繁使用到GRU结构,具体的GRU细节讲解可以查看ShowMeAI的对吴恩达老师课程的总结文章深度学习教程 | 序列模型与RNN网络,也可以查看本系列的前序文章NLP教程(5) - 语言模型、RNN、GRU与LSTM

1.2 问题读取模块

我们也使用标准的 GRU 来读取问题(使用嵌入矩阵 \(L : q_{t}=\operatorname{GRU}\left(L\left[w_{t}^{Q}\right], q_{t-1}\right)\)),但是问题模块的输出是问题的编码表示。

1.3 情景记忆模块

动态记忆网络的一个显著特征是情景记忆模块,它在输入序列上运行多次,每次关注输入的不同事实子集。它使用 Bi- GRU 实现这一点, Bi- GRU 接收输入模块传入的句子级别表示的输入,并生成情景记忆表示。

我们将情景记忆表征表示为 \(m^i\),情景表征(由注意机制输出)表示为 \(e^i\)。情景记忆表示使用 \(m^0 = q\) 初始化,然后继续使用 \(\mathrm{GRU} : m^{i}=\mathrm{GRU}\left(e^{i}, m^{i-1}\right)\)。使用来自输入模块的隐藏状态输出更新情景表征,如下所示,其中 \(g\) 是注意机制。

\[\begin{aligned}
h_{t}^{i} &=g_{t}^{i} \operatorname{GRU}\left(c_{t}, h_{t-1}^{i}\right)+\left(1-g_{t}^{i}\right) h_{t-1}^{i} \\
e_{i} &=h_{T_{\mathrm{C}}}^{i}
\end{aligned}
\]

注意向量 \(g\) 的计算方法有很多,但是在原始的 DMN 论文(Kumar et al. 2016)中,我们发现以下公式是最有效的

\[g_{t}^{i} =G\left(c_{t}, m^{i-1}, q\right)
\]
\[G(c, m, q) =\sigma \left(W^{(2)} tanh \left(W^{(1)} z(c, m, q)+b^{(1)}\right)+b^{(2)}\right)
\]
\[z(c, m, q) =\left[c, m, q, c \circ q, c \circ m,|c-q|,|c-m|, c^{T} W^{(b)} q_{,} c^{T} W^{(b)} m\right]
\]

这样,如果句子与问题或记忆有关,这个模块中的门就会被激活。在第 \(i\) 遍中,如果总结不足以回答问题,我们可以在第 \(i +1\) 遍中重复输入序列。

例如,考虑这样一个问题 Where is the football? 以及输入序列 John kicked the footballJohn was in the field。在这个例子中,John和football可以在一个pass中连接,然后John和field可以在第二个pass中连接,这样网络就可以根据这两个信息进行传递推断。

1.4 回答模块

回答模块是一个简单的 GRU 解码器,它接收问题模块、情景记忆模块的输出,并输出一个单词(或者通常是一个计算结果)。其工作原理如下:

\[\begin{aligned}
y_{t} &=\operatorname{softmax}\left(W^{(a)} a_{t}\right) \\
a_{t} &=\operatorname{GRU}\left(\left[y_{t-1}, q\right], a_{t-1}\right)
\end{aligned}
\]

1.5 实验

通过实验可以看出, DMN 在 babl 问答任务中的表现优于 MemNN,在情绪分析和词性标注方面也优于其他体系结构。情景记忆需要多少个情景?答案是,任务越难,通过的次数就越多。多次传递还可以让网络真正理解句子,只关注最后一项任务的相关部分,而不是只对单词嵌入的信息做出反应。

关键思想是模块化系统,你可以通过更改输入模块来允许不同类型的输入。例如,如果我们用一个基于卷积神经网络的模块替换输入模块,那么这个架构就可以处理一个称为可视化问题回答(VQA)的任务。它也能够在这项任务中胜过其他模型。

1.6 总结

自2015年以来,寻找能够解决所有问题的通用体系结构的热情略有减退,但在一个领域进行训练并推广到其他领域的愿望有所增强。要理解更高级的问答模块,读者可以参考动态注意力网络(DCN)。

2.参考资料

ShowMeAI系列教程推荐

NLP系列教程文章

斯坦福 CS224n 课程带学详解

NLP教程(7) - 问答系统的更多相关文章

  1. NLP教程(2) | GloVe及词向量的训练与评估

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  2. NLP教程(3) | 神经网络与反向传播

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  3. NLP教程(4) - 句法分析与依存解析

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  4. NLP教程(5) - 语言模型、RNN、GRU与LSTM

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  5. NLP教程(6) - 神经机器翻译、seq2seq与注意力机制

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  6. 斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  7. 斯坦福NLP课程 | 第2讲 - 词向量进阶

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  8. 斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  9. 斯坦福NLP课程 | 第12讲 - NLP子词模型

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

随机推荐

  1. Zookeeper 下 Server 工作状态 ?

    服务器具有四种状态,分别是 LOOKING.FOLLOWING.LEADING.OBSERVING. 1.LOOKING:寻找 Leader 状态.当服务器处于该状态时,它会认为当前集群中 没有 Le ...

  2. 说出几点 Java 中使用 Collections 的最佳实践?

    这是我在使用 Java 中 Collectionc 类的一些最佳实践: a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector. b)优先使用并发集合,而不是对 ...

  3. 学习Cobbler(二)

    Server端: 第一步,启动Cobbler服务 第二步,进行Cobbler错误检查,执行cobbler check命令 第三步,进行配置同步,执行cobbler sync命令 第四步,复制相关启动文 ...

  4. 打败算法 —— 删除链表的倒数第n个结点

    本文参考 出自LeetCode上的题库 -- 删除链表的倒数第n个结点,官方的双指针解法没有完全符合"只遍历一遍链表"的要求,本文给出另一种双指针解法 https://leetco ...

  5. 算法 | 串匹配算法之KMP算法及其优化

    主串 s:A B D A B C A B C 子串 t:  A B C A B 问题:在主串 s 中是否存在一段 t 的子串呢? 形如上述问题,就是串匹配类问题.[串匹配--百度百科] 串匹配问题是一 ...

  6. CSDN博客步骤:

    在SCDN看到喜欢的文章想转载又嫌一个一个敲太麻烦,干脆直接收藏.但有时候作者把原文章删除或设置为私密文章后又看不了.所以还是转载来的好.这篇博文为快速转载博客的方法,亲测有效,教程如下. 原博客原址 ...

  7. 纯干货数学推导_傅里叶级数与傅里叶变换_Part5_从傅里叶级数推导傅里叶变换

  8. NE555脉冲模块电路

  9. PCB常用低速、高速板材参数性能(2)

  10. 安装scrapy速度慢解决方案

    使用终端pip安装scrapy龟速 解决方案: 使用清华源下载 清华园链接 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ win+R打开cmd 输入p ...