乐趣区

关于自然语言处理:NLP教程7-问答系统

  • 作者:韩信子 @ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/36
  • 本文地址:http://www.showmeai.tech/article-detail/245
  • 申明:版权所有,转载请分割平台与作者并注明出处
  • 珍藏 ShowMeAI 查看更多精彩内容


本系列为 斯坦福 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. 参考资料

  • 本教程的 在线浏览版本
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
  • 双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)

ShowMeAI系列教程举荐

  • 大厂技术实现 | 举荐与广告计算解决方案
  • 大厂技术实现 | 计算机视觉解决方案
  • 大厂技术实现 | 自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程 | 斯坦福 CS224n 课程 · 课程带学与全套笔记解读

NLP 系列教程文章

  • NLP 教程(1)- 词向量、SVD 合成与 Word2vec
  • NLP 教程(2)- GloVe 及词向量的训练与评估
  • NLP 教程(3)- 神经网络与反向流传
  • NLP 教程(4)- 句法分析与依存解析
  • NLP 教程(5)- 语言模型、RNN、GRU 与 LSTM
  • NLP 教程(6)- 神经机器翻译、seq2seq 与注意力机制
  • NLP 教程(7)- 问答零碎
  • NLP 教程(8)- NLP 中的卷积神经网络
  • NLP 教程(9)- 句法分析与树形递归神经网络

斯坦福 CS224n 课程带学详解

  • 斯坦福 NLP 课程 | 第 1 讲 – NLP 介绍与词向量初步
  • 斯坦福 NLP 课程 | 第 2 讲 – 词向量进阶
  • 斯坦福 NLP 课程 | 第 3 讲 – 神经网络常识回顾
  • 斯坦福 NLP 课程 | 第 4 讲 – 神经网络反向流传与计算图
  • 斯坦福 NLP 课程 | 第 5 讲 – 句法分析与依存解析
  • 斯坦福 NLP 课程 | 第 6 讲 – 循环神经网络与语言模型
  • 斯坦福 NLP 课程 | 第 7 讲 – 梯度隐没问题与 RNN 变种
  • 斯坦福 NLP 课程 | 第 8 讲 – 机器翻译、seq2seq 与注意力机制
  • 斯坦福 NLP 课程 | 第 9 讲 – cs224n 课程大我的项目实用技巧与教训
  • 斯坦福 NLP 课程 | 第 10 讲 – NLP 中的问答零碎
  • 斯坦福 NLP 课程 | 第 11 讲 – NLP 中的卷积神经网络
  • 斯坦福 NLP 课程 | 第 12 讲 – 子词模型
  • 斯坦福 NLP 课程 | 第 13 讲 – 基于上下文的表征与 NLP 预训练模型
  • 斯坦福 NLP 课程 | 第 14 讲 – Transformers 自注意力与生成模型
  • 斯坦福 NLP 课程 | 第 15 讲 – NLP 文本生成工作
  • 斯坦福 NLP 课程 | 第 16 讲 – 指代消解问题与神经网络办法
  • 斯坦福 NLP 课程 | 第 17 讲 – 多任务学习(以问答零碎为例)
  • 斯坦福 NLP 课程 | 第 18 讲 – 句法分析与树形递归神经网络
  • 斯坦福 NLP 课程 | 第 19 讲 – AI 平安偏见与偏心
  • 斯坦福 NLP 课程 | 第 20 讲 – NLP 与深度学习的将来

退出移动版