课程向:深度学习与人类语言处理 ——李宏毅,2020 (P31)

Question Answering

李宏毅老师2020新课深度学习与人类语言处理课程主页:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html
视频链接地址:
https://www.bilibili.com/video/BV1RE411g7rQ
图片均截自课程PPT、且已得到李宏毅老师的许可:)

考虑到部分英文术语的不易理解性,因此笔记尽可能在标题后加中文辅助理解,虽然这样看起来会乱一些,但更好读者理解,以及文章内部较少使用英文术语或者即使用英文也会加中文注释,望见谅



前言

Question Answering QA问题的学习,本篇将介绍QA中Question 答案和 Source 来源的种种,下一篇将是有关问题的部分。

在上一篇P30中,我们进入了Question Answering QA问题的学习,介绍QA中Question 答案和 Source 来源的种种。

而在本篇P31中将学习更为复杂、各式各样的QA中Question问题的部分,将会从三大经典问题讲起,以及它们可能的解法。

I Questions1 匹配+抽取式问题

在这里插入图片描述

1.1 Classification 分类

我们将会学习到三种由简及难的问题类型及其对应解法:

  1. 第一类:Simple Question 简单的匹配+抽取式问题
  2. 第二类:Comple Question 复杂的推论问题
  3. 第三类:Dialogue QA 连续的对话问题

第一类问题,简单的问题,是只需要两步即可解决了,第一步是Match 匹配,第二步是Extract 抽取。

1.2 Data 数据集

在这里插入图片描述
在此,如上图,举一个SQuAD中标准的示例,在机器读取文章后,根据问题中比较重要的词汇对文章进行匹配,即相同的词汇在文章和问题中均出现了,找出其出现段落。再在段落中进行答案的抽取

那像这样的简单匹配抽取式问题该怎么用神经网络去做呢?

1.3 Solution v1 第一版解决方法

在这里插入图片描述

扫描二维码关注公众号,回复: 11838394 查看本文章

一个经典的做法就是使用 问题到文章的Attention机制,具体做法如上图,首先,预处理文章Knowledge source得到每个token的词向量表示,问题部分如法炮制,将问题浓缩成一个向量。接下来,实现匹配就用Attention,其实在此做Attention就是相当于将问题的向量与文章中每个token的词向量做相似度计算,也就是匹配。然后,将每一个Attention得到的权重参数与对应token相乘求和,也就是抽取,得到代表答案的一个向量。最终,通过这个代表答案的向量可以进行词汇的预测、或者一段话的生成。第一个使用这样的模型就是鼎鼎大名的End-to-end Memory Network。

1.4 Solution v2 第二版解决方法

在这里插入图片描述
问题的表示方式也可以是一个向量,而是问题中每个token的词向量表示。此时,有很多种不同的方式来使用上述模型,这里举一个常见的方法,如上图。把每一个问题的词向量都去做一次Attention得到对应的权重参数,再对同一个token的这些权重参数取最大值,之后同样相乘求和。

1.5 Context-to-query Attention 文章对问题做Attention

在这里插入图片描述
当然,这两种方法都是问题去对文章做Attention,其实也可以反过来,用文章对问题做Attention。一样的计算方式,得到相乘累加的结果,如上图的黄色向量,再通过这个向量与文章token的词向量做某种方式的计算,在文献上有两者相加、点乘、拼接等等得到绿色的向量。最终,通过每一个文章的词向量得到的绿色向量序列得到最终的答案,典型的模型有R-Net、Fusion Network。

1.6 Bi-direcational Attention 双向Attention

在这里插入图片描述
上面所讲的各种解法都是单向使用Attention,那能不能双向使用Attention呢?有这样一种模型,便是将两种Attention结合在了一起,BiDAF。
在这里插入图片描述
BiDAF的模型架构如上图,在输入部分,每一个词汇都会抽取其词向量嵌入,不过在当时使用的抽取方式是将整个词汇的向量和词汇中的每一个字母经CNN得到的向量结合在一起作为词向量嵌入。接下来,Attention层便是上述的两种Attention,此时我们会得到对应的向量,再将这些向量丢到LSTM中找到初始和结束的位置。在BiDAF中还有一个小设计,先找出初始的位置,再据此找出结束的位置。除了BiDAF外,还有Dynamic Coattention Networks、QANet。

1.7 BERT 迄今最好的模型BERT

在这里插入图片描述
接下来,就是BERT的时代,无论之前的解法模型多么好,都比不过BERT了…那BERT是怎么解QA问题呢?详细请参考系列文章的P18的III BERT

简而言之,将文章和问题通过<SEP>相连,输入到BERT中,得到一排的词向量。接下来,通过训练两个向量,一个代表起始位置,一个代表终止位置,将这两个向量与每一个词向量做相似度计算,找出起始和终止最相似的词向量位置,起始和终止位置的这一段词汇便是答案。

那讲了那么多“化石”,为什么BERT效果会那么好呢?因为BERT内部有大量的self-attention层,而这些attention既包含了文章对问题的attention,也包含了问题对文章的attention,其实也是相当于一种双向的attention。

II Question2 复杂的推论问题

其实如今我们更希望模型能够解决更为复杂的问题,如推论问题,没办法用匹配+抽取的方法来得到答案。让我们先来了解一下有关的著名的数据集。

2.1 Data 数据集

2.1.1 Qangaroo 数据集1

在这里插入图片描述
Qangaroo数据集 有好几篇文章、一个问题和多个选项,但答案不是像上面可以直接得到的。

举例而言,问题“Hanging花园在哪个国家?”,文章1写道“Hanging花园在孟买”,文章2写道”孟买在印度“,期待模型能够在诸多国家名选项中选择出正确的那个。这种回答问题需要从多个文章中跳来跳去搜寻,像袋鼠一样,因此这个数据集叫Qangaroo袋鼠。

2.1.2 Hoppot QA 数据集2

在这里插入图片描述
Hoppot QA数据集,也是从多篇文章中综合找到答案,且其中也有很多颇为困难的问题。Hoppot QA也将不再提供选项,而是真实的多种多样的QA问题。

2.1.3 DROP 数据集3

在这里插入图片描述
DROP数据集,像是数学的应用题,如有这样的文章”某知名画作现价16.3百万美元,当初估测仅卖12百万美元“,问题是”这副知名画作比当初估测的还要高多少美元?“,这样的答案完全是没有出现在文章中的。

且在设计问题时,要求问题一定不能被BiDAF答对的问题,一种”恶意“出题方式。

那要怎么解上述这些需要一定推理的问题呢?

2.2 Solution 解法

2.2.1 Multiple-hop 多轮替换匹配目标

在这里插入图片描述
对于上述这些需要推理的问题,有这样一种想法,Multiple-hop。

举个例子,问题”Greg是什么颜色的?“,文章”Brian是一只青蛙,Lily是灰色的,Brian是黄色的,Julius是绿色的,Greg是一只青蛙“。如果仅从抽取式进行答案的提取,那将会得到答案是青蛙。但这样显然是不对的,因此,我们会把抽取式得到的答案”青蛙“,拿去改变要匹配的目标,也就是说现在将会去匹配有青蛙的句子,得到的答案将是”Brian“。接下来,通过"Brian"匹配得到”黄色“,这就是Multiple-hop,一般会做三次。
在这里插入图片描述
在Memory Network里面就有做这件事,如上图,根据文章得到两种embedding词嵌入,一种embedding拿来做匹配,另一种拿来做提取。再将用于提取的向量与问题相加,相加的目的是改变了我们想要匹配的对象。之后,再将相加后的向量进行匹配查找,这样重复的操作就是上述的hop,hop的迭代次数也是人为设置的。当然,也有这样的一种模型ReasoNet让模型自行决定hop次数,有用到强化学习。

2.2.2 Graph Neural Network 图神经网络

在这里插入图片描述
近年来,对于这种需要推理的QA,也有这样的一种解法,使用图神经网络,这边将不细讲图神经网络了。主要是要通过图神经网络做法和上面的hop类似,不过它将不会修改匹配对象,而是通过图来实现。先将文章中所有的entity实体抽取出来,建一个图,每条边上的点将分享Attention权重,而最终图中权重最大的将会是答案。有关细节,请参阅上图论文。

III Question3 连续问题

3.1 Data 数据集

3.1.1 CoQA

在这里插入图片描述
对于这样 Dialogue QA,连续问题,我们不仅希望机器能够回答问题,还希望它能回答一连串的问题。还是先让我们了解一下有关著名的数据集,CoQA,一连串彼此相关的问题,如

”候选者在竞选什么?“
答:”州长“
”在哪?“ (注意,如果单独问这一个问题是没有答案的,但承接上文问答并可知其指代。)
答:”弗吉尼亚州“

3.1.2 QuAC

在这里插入图片描述
第二个知名的 Dialogue QA数据集,便是QuAC,在QuAC中特别的是,出问题的人是没有看过文章的,而一般的QA出问题都是根据文章来出的,也因此有些问题可能是没办法根据文章来回答的。

3.2 Solution 解法

在这里插入图片描述
像这种一连串的问题,一种直觉的解法是将一连串的问题拆开,一个一个地去解,这样就是上述复杂的QA问题,而不再是Dialogue QA了。当然这种解法也仅仅能被当作baseline使用,效果不会太好。

一个经典的做法是类似上述的想法,如上图,不过将每一个问题间加一层RNN/Attention。

3.3 Model 模型

在这里插入图片描述
当然,这些QA问题都有以Albert为基础的模型其分数已超过人类。这里这类模型不再阐述,有兴趣的同学可以参考上表自行学习。


至此,QA任务中最为复杂的问题类别已结束,我们学会了三大经典问题,以及它们可能的解法。

猜你喜欢

转载自blog.csdn.net/qq_44574333/article/details/108562165
今日推荐