资源链接:https://www.bilibili.com/video/BV1r4411
当我们在谷歌浏览器中搜索澳大利亚第三任总统是谁时,谷歌浏览器会告诉我们答案,这就是一个问答系统
而且这是通过我们提问语句的特征进行回答的,而不是基于结构化数据存储的问答,我们今天要讨论的也主要是神经问答系统
大概意思就是我们现在有特别多的全文文本,早起搜索可能就是返回相关的文档(类似于你想知道现在某俱乐部的负责人是谁,它可能提供你该俱乐部的各种资料,然后你需要自己去这些相关资料中寻找答案),但是人们对于需要答案的需求就更加急迫了(之前的太麻烦,我要算个数学题,给我一个高等数学让我自己学嘛。。。),当然,问答系统也是要给予已有的文本才能进行的,也就是说答案在文本中,我们期望的问答系统是计算机直接在文本中找到答案然后告诉我们,而不是给我们藏着答案的资料/文章/材料,而从计算机中寻找答案这个过程也称为阅读理解。
这一部分自行查阅吧
许多早期的NLP工作尝试阅读理解
由Lynette Hirschman在1999年复活
Chris Burges于2013年通过 MCTest 又重新复活 RC
再次通过简单的故事文本回答问题
2015/16年,随着大型数据集的产生,神经问答系统崛起了,可以建立监督神经系统
课件的解释是:“一台机器能够理解文本的段落,对于大多数母语使用者能够正确回答的关于文本的任何问题,该机器都能提供一个字符串,这些说话者既能回答该问题,又不会包含与该问题无关的信息。”
如下图所示:其实就是给一篇文章,然后问一个相关问题,然后机器从文章选择答案进行回答。
Simmons et al. (1964) 首先探索了如何基于匹配问题和答案的依赖关系解析,从说明性文本中回答问题
Murax(Kupiec1993) 旨在使用IR和浅层语言处理在在线百科全书上回答问题
NIST TREC QA track 始于1999年,率先严格调查了对大量文档的事实问题的回答
IBM的冒险!System (DeepQA, 2011)提出了一个版本的问题;它使用了许多方法的集合
DrQA(Chen et al. 2016)采用IR结合神经阅读理解,将深度学习引入开放领域的QA
这是一个非常复杂的系统,由多模块多组件构成的复杂系统
(类似于人工进行各种规则定义的一样)其结构如下图:
问题:哪个球队赢了50分?
Passage 是来自维基百科的一段文本,系统需要回答问题,在文章中找出答案
答案必须是文章中的一系列单词序列,也就是提取式问答/提取问题回答,答案:
再来看一个例子:
这个例子主要想告诉我们,可能即使是人来回答问题,可能答案都是不一样的,如果理解没有出现差错,可能这些不同答案都是完美的正确答案,甚至是不同方面理解都是正确的~,因为牵扯阅读理解嘛~这个也就引出了评估这一问题。
作者收集了3个黄金答案,系统在两个指标上计算得分:
完全匹配/精确匹配指标:得分为0/1,您是否匹配三个答案中的一个,如果匹配到了得分为1,否则0分~简单粗暴,但是存在问题
F1指标:将系统和每个答案都视为词袋,具体计算如下:
它不是基于人类选择的跨度完全相同的一种方法,人类选择的跨度容易受到各种影响,包括换行,而且可以避免人们更倾向的答案所带来的影响,所以F1测量被视为更可靠的指标,作为主要指标使用,这两个指标忽视标点符号和冠词(a, an, the only)
然后说了一下,在这个数据集上的排名2016-2019,其中人类的F1是91.2
SQuAD1.0的一个缺陷是,所有问题都有答案的段落,系统(隐式地)排名候选答案并选择最好的一个,这就变成了一种排名任务,你不必判断一个span是否回答了这个问题
针对上面的缺陷:SQuAD2.0中 1/3 的训练问题没有答案,大约 1/2 的开发/测试问题没有答案 ,对于No Answer examples, no answer 获得的得分为1,对于精确匹配和F1,任何其他响应的得分都为0
SQuAD2.0最简单的系统方法
对于一个 span 是否回答了一个问题有一个阈值评分或者您可以有第二个确认回答的组件 ,类似自然语言推理 或者 答案验证
系统可能能很好的找出我们需要的数据类型(例如问时间,找出文章的时间数据),但是并不能真正的理解人类语言的含义,系统没有真正了解一切,仍然在做一种匹配问题(找时间数据等)。
在2.0版本中人类获得的F1=89.4,其他模型最高87.6,相比于1.1版本F1指标有所下降
展示了一个非常小型的、非常成功的阅读理解和问题回答架构,后来被称为 the Stanford Attentive Reader,结构如下图:
首先将问题用向量表示,对问题中的每个单词,查找其词嵌入,输入到双向LSTM中并将最终的 hidden state 拼接,再处理文章。
查找每个单词的词嵌入并输入到双向LSTM中,使用双线性/双向注意力,将每个LSTM的表示(LSTM的两个隐藏状态的连接)与问题表示做运算,获得了不同位置的注意力,从而获得答案的开始位置,再以同样方式获得答案的结束位置,为了在文章中找到答案,使用问题的向量表示,来解决答案在什么位置使用注意力。
还提到了bi-LSTM,这一部分没怎么听懂,bi-LSTM也不熟悉。
整个模型的所有参数都是端到端训练的,训练的目标是开始位置与结束为止的准确度,优化有两种方式
第一种简单方式:
上述模型,不止是利用最终的隐藏层状态,而是使用所有隐层状态的加权和 ,使用一个可学习的向量w与每个时间步的隐层状态相乘。而且可以不只是使用一层bi-LSTM,可以使用深层LSTM,例如3层的。
文章中每个token的向量表示由一下部分连接而成
问题和答案之间具有一定的相似性,下面的等式(可以自行查阅)
看一下趋势~
答案:单词相似度的语义匹做得更好
BiDAF系统图:
多年来,BiDAF architecture有许多变体和改进,但其核心思想是 注意力流层(将问题映射到段落文字上),创新点是段落和查询之间是双向的
思想 :attention 应该双向流动——从上下文到问题,从问题到上下文
令相似矩阵w的维数为6d
Context-to-Question (C2Q) 注意力 (哪些查询词与每个上下文词最相关,用soft进行计算,然后进行加权)
Question-to-Context (Q2C) 注意力 (上下文中最重要的单词相对于查询的加权和——通过max略有不对称),通过max取得上下文中的每个单词对于问题的相关度
对于文章中的每个位置,BiDAF layer的输出为
然后有“modelling”层 ,文章通过另一个深(双层)BiLSTM,然后回答跨度选择更为复杂
微软发明的,双线性形式、浅层的,认为注意力更好,使用了tons到tons的注意力,可以降低复杂性(W矩阵可以变成两个低阶矩阵的乘积),如果认为注意力矩阵是对称的,可以分解为,而且一定程度上非线性是更好的,还可以变化为(这也是他们使用的最终形式),空间复杂度为
使用这种注意力更加便宜,所以他们可以使用很多注意力,这就是可以建造更复杂的模型
(这个模型课程中没有将,直接略过了
2016年、2017年和2018年的大部分工作都采用了越来越复杂的架构,其中包含了多种注意力变体——通常可以获得很好的任务收益(可能有好收益,才会发出来,让大家知道吧...个人看法)
人们也一直在尝试不同的 Attention模型
这是nlp的进一步革命,人们开发了产生上下文单词表示的算法ELMo,谷歌人进一步想出了BERT,BERT用复杂的注意力创建客观的模型,两者以后再讨论谁更优越,不过看下图中的模型排行榜,我们可以发现排名靠前的模型很多使用了BERT
(这就是本节课内容)