- 作者:韩信子 @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 football
和 John 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 与深度学习的将来