国防科大登顶SQuAD 2.0排行榜,机器阅读也要“不知为不知”

圆栗子 发自 凹非寺 
量子位 出品 | 公众号 QbitAI

最近,国防科大 (NUDT) 登顶SQuAD 2.0排行榜。

击败了微软强敌FusionNet++,机器的阅读理解能力又进化了。

640?wx_fmt=png

SQuAD 2.0是个阅读理解数据集,机器需要根据文本中的信息,回答问题。

强调一下,所有的答案都要来自文本

SQuAD 2.0的特殊之处在于,有些问题,文本里并没有答案

那么,机器回答这些问题的时候,要明确表示“No Answer”。

640?wx_fmt=png

国防科大和微软亚洲研究院,提出的阅读-验证算法,便是为检测无法回答的问题而生的。

备选答案,需要验证

要找出“不该乱填答案”的问题,常用的方法,就是预测No Answer的概率。

可这样的做法,可能就不会去检测,系统给出的其他备选答案有多可信了。

于是,国防科大和微软组成的Minghao Hu团队,给算法加入了验证候选答案的步骤,在SQuAD 2.0中获得了74.2 F1的最高分。

这里,阅读器验证器,都不可缺少。

640?wx_fmt=png

比如,阅读理解的文章提到,诺曼底是法国的一个地区。

问题问的是,法国是 ( ) 的一个地区,文中没有提到。

这对人类来说,难度不大,诺曼底可能连干扰项也算不上。但算法会怎么看?

首先阅读器从文中找出备选答案 ,同时也算出无答案概率 (NA Prob) 。

然后,把备选答案扔给验证器 (Answer Verifier) ,看文中相关句子的表达,能不能回答问题

最后,把验证器的无答案概率,和第一步的无答案概率,结合到一起,才能决定要不要输出No Answer。

验证答案,并不简单

不过,验证诺曼底是不是问题的答案,需要经过一番推理。

640?wx_fmt=png

 If A then B.

还是刚才的栗子,“诺曼底是法国的一个地区”用A表示,“法国是诺曼底的一个地区”用B表示。

如果,A能推出B,答案就是诺曼底。A不能推出B,诺曼底就被淘汰。

把这个验证过程,交给神经网络,团队试了三种不同的模型:

640?wx_fmt=png

Model-I,是最简单的顺序结构

Model-II,是交互式结构。由于要识别答案和问题之间的逻辑蕴含,团队使用了基于交互的一种方法,包含这几层:

· 编码 (Encoding)

· 推理建模 (Inference Modelling):建立两个句子之间的交互。

· 句内建模 (Intra-Sentence Modelling) :找出句子内部的逻辑。

· 预测 (Prediction) :给出阶段性的无答案概率

Model-III,则是把前两个模型整合起来,看预测结果会不会更理想。

640?wx_fmt=png

其中,Model I用了无监督的预训练,和有监督的微调。也就是说,阅读无标签的文本,来优化模型,初始化参数;然后按照有监督的目标,来调整参数。

Model II是直接用有监督的损失来训练的。

由于两个模型架构不同,需要的训练过程也不同。因此,Model III是用二者的预训练参数来初始化的,然后整体微调。

疗效出众

训练完成,就把AI扔进SQuAD 2.0的隐藏验证集 (下图Test栏) ,试一试。

离人类最近

测试用的阅读器,叫做Reinforced Mnemonic Reader (RMR) ,同样来自Minghao Hu团队,且在SQuAD 1.1榜上有名

640?wx_fmt=png

 在下愚钝,不确定Verifier用的是Model I、II、III中的哪一个

加上新的验证器,RMR (+ELMo嵌入) 的阅读理解成绩,高过了所有的前辈 (对手都是SQuAD 2.0论文中列出的强者) 。

它的两项分数,都与人类的表现最为接近:

71.7 EM,是精确匹配结果,表示模型给出的答案与标答完全一致。

74.2 F1,是模糊匹配,可理解为部分回答正确,根据模型的答案与标答之间的重合度计算。

登顶SQuAD 2.0排行榜的,就是这组成绩。

三个验证器比一比

击退外敌,再来看一下三个验证器模型,谁的无答案正确率最高。

640?wx_fmt=png

Model-III,以微弱的优势胜出。由此观之,把Model I、II整合起来,还是有效的。

不过,加上ELMo嵌入,倒是没有带来明显的加成。

欣赏论文吧

“阅读+验证”模型,离人类的阅读理解分数,还有一段距离。

不过,更准确地判断哪些题目不能乱答,也是很大的一步了。

640?wx_fmt=png

论文传送门:
https://arxiv.org/pdf/1808.05759.pdf

加入社群

量子位AI社群19群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

640?wx_fmt=jpeg

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQUAD插值是一种用于数据插值和平滑的方法。在MATLAB中,可以使用squad函数来实现SQUAD插值。 SQUAD插值基于四点共面数据,其中包括目标点以及它的邻近三个点。首先,需要定义目标点的坐标和邻近点的坐标。然后,可以使用squad函数进行插值计算。 squad函数的语法是: Vq = squad(X,Y,Z,V,Xq,Yq,Zq) 其中X、Y和Z是邻近点的坐标,V是邻近点对应的数值,Xq、Yq和Zq是目标点的坐标,Vq是计算得到的插值结果。 值得注意的是,邻近点必须严格共面,即它们不能处于不同的平面上。否则,对于非共面点,squad函数将无法进行插值。 另外,如果邻近点的数值存在缺失值或异常值,可能会影响插值结果的准确性。因此,在进行SQUAD插值之前,应该确保数据的质量和可靠性。 总结起来,SQUAD插值是MATLAB中一种用于数据插值和平滑的方法。通过squad函数,可以对四点共面数据进行插值计算,得到目标点的数值结果。为了保证准确性,需要确保邻近点严格共面,且数据的质量可靠。 ### 回答2: squad插值是一种机器学习方法,在Matlab中可以使用Squad方法进行插值。Squad插值是一种内插方法,它使用样条函数来估计未知点的值。 在Matlab中,可以使用'surface'和'spline'函数结合实现squad插值。首先,利用'surface'函数创建一个三维曲面,该曲面可以近似表示已知数据点。然后,使用'spline'函数生成样条函数,以便在这个曲面上内插未知点的值。 具体的代码实现如下: ```matlab % 导入已知数据点 data = load('data.txt'); x = data(:,1); y = data(:,2); z = data(:,3); % 创建三维曲面 figure; surf(x, y, z); hold on; % 生成样条函数 sp = spline(x, spline(y, z)); % 内插未知点 xi = 1.5; % 未知点的x坐标 yi = 2.5; % 未知点的y坐标 zi = ppval(ppval(sp, xi), yi); % 使用样条函数计算未知点的z值 % 绘制未知点 plot3(xi, yi, zi, 'ro', 'MarkerSize', 10, 'MarkerFaceColor', 'r'); % 显示结果 disp(['未知点的z值为:', num2str(zi)]); % 设置坐标轴标签和标题 xlabel('x'); ylabel('y'); zlabel('z'); title('Squad插值'); ``` 在运行此代码之前,需要先将已知数据点保存在一个名为'data.txt'的文本文件中,并确保文本文件中的数据按照x、y、z的顺序排列。通过修改代码中的未知点的坐标,可以插值得到其他未知点的值。 这是一个简单的示例,演示了如何使用Matlab进行Squad插值。根据具体的应用场景和数据特征,可能需要进一步调整参数和方法来获得更准确的插值结果。 ### 回答3: squad插值是一种通过四个相邻数据点来计算目标点的数值的插值方法,其中计算结果不受数据点的分布情况影响。 在MATLAB中,可以使用interp1函数实现squad插值。interp1函数有多种插值方法可供选择,其中包括'spline'(样条插值)和'pchip'(分段三次 Hermite 插值),也就是squad插值的两种常用方法。 假设有一组数据点x和对应的y,通过使用squad插值方法来计算目标点xq对应的yq值,可以按照以下步骤进行操作: 首先,将数据点x和y按照x的递增顺序进行排序。 然后,使用interp1函数进行插值计算。具体代码如下: ```MATLAB x = [x1, x2, x3, x4]; % 数据点的x坐标 y = [y1, y2, y3, y4]; % 数据点的y坐标 xq = target_x; % 目标点的x坐标 % 使用interp1函数进行squad插值计算 yq = interp1(x, y, xq, 'spline'); % 或者 'pchip' % 输出目标点的y坐标 disp(['目标点的y坐标为:', num2str(yq)]); ``` 其中x1、x2、x3、x4分别代表四个相邻数据点的x坐标,y1、y2、y3、y4分别代表相应的y坐标。target_x为目标点的x坐标。 通过以上代码,可以得到目标点xq对应的squad插值结果yq。 需要注意的是,squad插值方法需要至少四个数据点才能进行插值计算。如果数据点数量不足,可能会导致插值结果不准确。因此,在使用插值方法之前,应该确保数据点的数量满足要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值