李宏毅DLHLP.27.Deep Learning for Question Answering.1/2

介绍

本门课程是2020年李宏毅老师新课:Deep Learning for Human Language Processing(深度学习与人类语言处理)
课程网站
B站视频
公式输入请参考:在线Latex公式
本节主要讲QA
在这里插入图片描述
如上图所示,提问的问题和回答分有好几种:
问题:简单问题,回答只要一个单词即可;计算问题,答案需要进行相应的计算才行;复杂问题,没有唯一正确答案。
回答:可以是某个单词,可以是原文的某句话,可以是某个选项,可以某个段落。
答案的来源可以有很多种,包括音频,视频,文本,互联网等。
用BERT模型抽取了问题和答案特征后,做一个attention。
先从Answer来看

Answer

Answer is simply a word

• bAbI数据集,在GNN里面有用到过,具体可以看这里
• MNIST of QA,QA任务中的MNIST
• 20 types of questions
• Synthesized这个数据集里面的QA都是合成的。
在这里插入图片描述
由于答案只有一个词,所以可以用分类的方法来解这个任务:
在这里插入图片描述

Multiple Choices

在这里插入图片描述
可以把这个任务看做一个二元分类问题,每次丢一个选项进入模型,然后得到一个YES/NO的概率,四个选项就运行四次。
在这里插入图片描述
还有一个思路,一次输入四个选项,然后module for answer就做一个四分类。但是选择题可能选项的数量不一样,这个方法就不太通用。

Span in Source / Extraction-based

SQuAD [Rajpurkar, et al., EMNLP’16]:英文
DRCD [Shao, et al., arXiv’18]: 中文版SQuAD
假设有一串token,每个token都有两个分数,开始和结束,然后要找到开始分数最大,结束分数最大的token,然后列出来得到结果。
在这里插入图片描述
在处理knowledge source的时候要对question做attention,得到的向量再去求开始和结束的score。如果是LSTM那么就是直接把黄色向量看做是一串sequence,然后丢LSTM得到结果。如果是BERT,就直接用黄色向量分别和start和end向量做点乘,分别得到开始和结束的score。
在这里插入图片描述

上面的方法只能找出答案在原文,而且是连续的QA任务。还有一个比较general的解法,就是直接生成答案:

Free Answer Generation

MS MARCO [Bajaj, et al., NIPS’16], 英文,微软出品
DuReader [He, et al., ACL workshop’18] ,中文,百度出品
下面列出了四种情况:
答案在文章的不同位置
答案在文章和提问中
部分答案在文章中
所有答案都不在文章中
在这里插入图片描述
第一个要考虑的是答案如果是YES/NO的可能也属于以上情况,因此,可以先用一个问题分类器把答案是YES/NO的问题过滤出来,然后用前面提到的二分类的思想来解。
然后可以考虑使用SEQ模型来解:S-net[Tan, et al., AAAI’18]
在这里插入图片描述
在这里插入图片描述
这个模型看上去有点复杂,因此有人投机把这个任务当做extraction的任务来做,因为无论怎么样,答案都会有几个单词在文章中,MS MARCO在评估的时候是按匹配的单词数量来给分的。
对于那些不一定有答案的问题。。。老师给出了一个漫画的例子。
正确的做法应该是:不要回答,保持沉默。

Know what you don’t know

SQuAD 2.0 [Rajpurkar, et al., ACL’18] 就包含一些没有答案的问题,例如:
在这里插入图片描述
上图中,一般的模型都会想办法从原文中取一些答案,实际上是不对的。
BERT在解这个问题的时候是加了一个null的token.
在这里插入图片描述
如果null对应的开始和结束分数最高,那么模型就认为这个问题没有答案。
原始BERT用CLS当做NULL token。
一般来说,null很难对应到最高的开始和结束分数,因此我们需要手动设置一个阈值,当开始和结束分数超过阈值就会认为这个问题没有答案。
另外一个解决思路是训练一个二元分类器,用来判断问题是不是能够回答的。
在这里插入图片描述
但是这个问题二元分类器只看过问题和文章,并没有看过答案,因此有一个进阶版本的做法:
在这里插入图片描述
训练一个验证回答的模型,吃上图中的三个东西,如果回答也是非常荒谬,那么这个问题就是没有答案的。

Knowledge Source

常见的Source:
文章
picture/video
Audio

DrQA

第一步先从很多文章里面先抽选出几篇与问题相关的文章,然后再从这些文章中抽出来相关的答案。
在这里插入图片描述
MS MARCO and DuReader also have several documents for each question.
这个方法的问题在于,第一步的时候抽选的结果不一定和问题相关。
下面看一个具体模型:V-Net [Wang, et al., ACL’18]
在这里插入图片描述
最上面是一个问题,然后有n个文章,每个文章对应这个问题都有一个答案,模型有一个假设,就是认为大多数文章中都包含了问题的答案,因此模型采用了投票的机制,把问题在n个文章得到答案都拿出来,重复最多(得票最高)的就是正确答案,反正则认为不是答案。
在这里插入图片描述

上图中文章1提供的答案与其他不太一样,3456都比较像。

picture/video

在这里插入图片描述
在这里插入图片描述
问题:
• What is in the image?
• Are there any humans?
• What sport is being played?
• Who has the ball?
• How many players are in
the image?
• Who are the teams?
• Is it raining?
图片经过预训练模型是可以变成向量的,变成向量后就和文字的处理是一样的了。

Audio

最早的思想就是先把语音转文字,再按文字的套路走。
早期做了一个托福的听力的问答系统:
https://github.com/iamyuanchung/TOEFL-QA
[Tseng, et al., INTERSPEECH’16]
在这里插入图片描述
后来SQuAD出来后,就做SQuAD的语音版,找人把文字版的SQuAD念一遍。
https://github.com/chiahsuan156/ODSQA
在这里插入图片描述

SPOKEN OPEN-DOMAIN QUESTION ANSWERING DATASET
SOD QA(这个名字貌似别有他意,自己百度)改为:
OPEN-DOMAIN SPOKEN QUESTION ANSWERING DATASET
ODS QA
语音转文字后再QA有一个问题,就是语音转文字这里是有一定的错误率,而且还面临很多同音字识别错误的问题。例如城市和程式读音一样。
老师给出了一个解决方案,就是不用文字,直接用读音作为输入。具体没展开,大概有下面两个模型,其中右边还用到了domain adversarial的方法。

另外一个思路就是直接端到端的语音QA,中间不经过任何的文字转换,模型如下图所示:
[Chuang, et al., arXiv’19]
在这里插入图片描述
文字版的问题,语音版的信号,训练模型吃这两个东西,得到在语音版信息中答案的开始时间和结束时间。效果比语音转文字要差一点。
以上都是从单一的Source来回答问题,下面考虑多个Source如何来回答问题。
在这里插入图片描述
这是一个比赛,要从电影(视频)、电影简介、字幕中找到问题的答案,最后的结果表明,仅仅靠文字就能拿到很好的效果了,视频其实帮助不大。
在这里插入图片描述
TO BE CONTINUED.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值