RE2:Simple and Effective Text Matching with Richer Alignment Features

news2024/9/24 21:16:59

原文链接:https://aclanthology.org/P19-1465.pdf

介绍

        问题

                作者认为之前文本匹配模型中序列对齐部分,过于复杂。只有单个inter-sequence alignment层的模型,常会引入外部信息(例如语法特征)作为额外输入,或是使用复杂的对齐机制,或是对对齐后的结果建立大量的后处理层。包含多个inter-sequence alignment层的模型,使用dense net或递归网络进行连接,导致低层的特征可能无法进行充分的传播以及梯度消失的问题。最近的一些工作提出将这些堆叠blocks进行connect 来增强低层特征,并生成比单一对齐模型更好的结果。

        IDEA

        因此作者对文本匹配方法中速度非常慢的部分(比如复杂的多方式对齐机制、外部语义特征等)存在的必要性进行思考,这些设计大大降低了模型的速度,考虑使用更轻巧并同样有效的设计来进行替代。作者认为文本匹配模型中RE2(残差向量、embedding向量以及encoded向量)是关键部分不进行化简,其余部分都应该尽可能的简单以保持模型具有较快的速度以及更好的表现。

方法

        作者提出的RE2模型大致结构如下图所示(右边部分与左边一致,分别输入两个序列):首先每个序列中的token首先在embedding层中进行编码,然后传入到连续的N个同结构的blocks中(也就是图中虚线框部分)。在每一个block内,先使用一个序列编码器来获得上下文信息(图中实心长方形),将encoder的输入以及得到的输出进行concatenate后传入到alignment layer,来对两个序列的交互和alignment进行建模,然后将alignment层的输入和输出使用fusion层进行融合。第N个模块中fusion的输出经过pooling层得到长度合适的向量,最后使用这两个序列的向量对它们之间的关系进行预测。

Augmented Residual Connections

        作者这里采取的是一个增强的残差连接(其实就是把序列经过embedding层得到的向量,传入每个block块中)。

        。具体的,第n个block的输入输出分别表示为:o^{(0)}定义为0向量。 在第一个块中,直接将序列经过embedding后的向量(也就是x^{(1)})作为encoder的输入,第i(i>1)块中,都是将序列经过embedding后的向量与前两块的输出进行concat。

        这样输入alignment层和fusion层的就有三部分,一个是一直不变的原始点状特征(embedding vector),一个是之前块处理后的aligned特征(residual vectors),以及encoder层得到的上下文特征(encoded vector)

Alignment Layer

        alignment layer将两个序列的特征(表示为a,b)作为输入,然后计算aligned表征作为输出。ai和bi之间的相似度由投影后向量的点积表示:

        F是一个实体函数或者一层前馈神经网络,该选择作为模型的超参数。

        输出a和b由当前位置与另一序列相应位置之间的相似分数进行加权求和得到。 

Fusion Layer

        fusion层从三个角度对本地和对齐的表征进行比较,然后将它们融合在一起。该层输出公式为\bar{a}

        G表示单层的前馈神经网络,向量之间相减突出它们之间的差异,相乘突出其相似性。

Prediction Layer 

         该层将两个序列的向量表征v1、v2作为输入,对使用以下函数进行预测:

        H是一个多层的前馈神经网络。y^表示所有类别的预测分数(没有进行标准化),在分类任务中选择分数最大的类别进行输出,回归任务中y^是一个区间值。

另外在语义识别类的语义任务中,使用以下公式:

        作者还提供了一个简化版:

        这里预测函数公式的选择也作为超参数。

实验

各个数据集上的表现

        在SNLI数据集上与其他模型进行对比实验,结果如下:

        ensemble版本是使用8个不同随机种子的训练模型,通过投票来得到最后的结果。作者提出的模型在单一模型中达到了最好的效果,在ensemble模型中在更少参数量的情况下表现出比较好的精度。 

        在Scitail数据集上进行实验,结果如下: 

        可以看到作者提出的模型与最好的结果非常接近。作者认为该数据集由于训练数据比较少(仅为SNLI的4%),所以导致整体的精度比起二分类问题都要低一些。 

        在Quora数据集上的实验结果如下图所示,可以看出作者提出的模型达到了最好效果。

        在答案选择任务的数据集WikiQA上的实验结果如下图所示(在超参数调整中,作者根据WikiQA开发集的MRR选择最佳的超参数 ):

时间性能 

         作者将模型的预测时间进行了对比,结果如下:

        作者只对3个block块以内的RE2模型进行了实验,可以看出即使作者提出的模型使用了多个stacked blocks,但在CPU上的推理速度非常快,至少比DIIN快了17倍,从前面的实验可知与速度相当的BiMPM和CAFE相比,我们的模型具有更高预测分数。 

消融实验

        enc-in表示之间将encoder的输出作为alignment和fusion的输入,即只有黑色矩形那部分。residual conn即不再对残差连接进行增强。simple fusion表示使用a_{i}{a}'_{i}concate作为输入,即\bar{a}_{i} = G[a_{i};{a}'_{i}].

        可以看出不将encoder的输入进行concat往后传递(作者说的是,输入alignment的特征不够丰富),对整个模型的影响都挺大的。 

        作者还对block以及encoder的数量进行了实验,对block数量进行改变时,encoder层为2,对encoder layers改变时,保持block2为2。

        我们可以从表中看到,较少的块或层可能是不够的,但增加超过必要的块或层对性能影响也不大。 

         作者对该模型中三个关键向量进行了occlusion sensitivity分析(类似于计算机视觉中的闭塞敏感性分析)。在某一个block中将其中一个特征进行mask为0,然后得到以下三个任务上的精确度。实验结构如下:

​​​

        第一个区块中没有以前的对齐特征,因此留有空白。编码器的输出所代表的上下文特征,在预测entailment关系时是不可或缺的,因此在mask enc-out后,精确度会下降;在2b和2c中,可以看出缺少之前的align特征和残差向量,会导致模型在预测中性、矛盾关系时表现出明显的下降。 

可视化 

         为了了解SNIL数据集中的序列对(premis为“A green bike is parked next to a door”,hypothesis为“The bike is chained to the door”)在每个block的对齐结果在作者提出的堆叠结构中是如何演变,对第个block和最后一个block的alignment layer中注意力分布(公式3中的归一化eij)的进行可视化。结果如下:

        在第一个块中,对其结果几乎是单词或者短语级别的,parked、next与bike、door最相关,parked和chained之间的联系比较弱。在最后一个block中,对齐结果就会整个句子的语义以及结构,所以parked和chained的联系就很强烈,有了正确的对齐方式,该模型就能知道,尽管premise中的大多数部分都包含hypothesis中的对齐部分,但 "parked "并不包含 "chained",所以它正确地预测了两个句子之间的关系是中立的。我们的模型将低级别的对齐结果作为中间状态,并逐渐将其细化为高级别的对齐结果。 

总结 

        本文对于普通的文本匹配任务提出了一个高效的模型RE2,在具有较快速度的同时也拥有较高的准确率。该模型主要强调了三个关键特征(Residual vectors、Embedding vectors、Encoded vectors),并简化了其他部分。

        整个模型较为简单,作者尽可能的减少参数与计算,embedding直接对word进行编码而不是对字符进行编码,也没有引入外部信息,encoder也是使用一个简单的CNN结构来获取上下文信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小游戏与H5游戏对比与梳理

H5游戏是运用了h5技术的响应式网站布局的游戏,它完全实现了网页游戏在手机移动端的无缝衔接。众所周知,H5游戏已盛行了多年,而如今,随着诸多小游戏的推出,小游戏爆款频出,从“跳一跳”到“羊了个羊”&#…

Leetcode---2465.不同的平均值数目

目录题目描述分析题目描述 给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。 只要 nums 不是 空数组,你就重复执行以下步骤: 找到 nums 中的最小值,并删除它。 找到 nums 中的最大值,并删除它。 计算删除两数的平均值。 两…

Qt OpenGL 2D图像文字

这次教程中,我们将学会如何使用四边形纹理贴图把文字显示在屏幕上。我们将把256个不同的文字从一个256256的纹理图像中一个个提取出来,接着创建一个输出函数来创建任意我们希望的文字。 还记得在第一篇字体教程中我提到使用纹理在屏幕上绘制文字吗&…

springboot构建RESTful 风格应用

Spring Boot 构建 RESTful 风格应用 1.Web开发的两种模式: 前后端不分离: 以前没有移动互联网时,我们做的大部分应用都是前后端不分的,比如jsp,或者thymeleaf等后端分离模板,在这种架构的应用中&#xf…

SQLMAP _DNS注入配置方法

网上针对sqlmap进行dns注入的相关文章太少,只是简单介绍了下–dns-domain参数,相关的实战文章要么就模糊或者一笔带过,。然后参考网上的方法重新整理了一遍,简单理解。 需要准备的东西,sqlmap、windows盲注一个、两个…

档案信息化咨询方法论实践要点有哪些?

咨询工作中,有些咨询师也许会有这样的疑问:“我业务经验挺丰富的,但做咨询工作怎么这么吃力呢?”这可能就是因为缺乏方法论的有效指导。咨询方法论是咨询工作中用来分析和解决某类特定问题的工具、方法、流程、模型和评价准则等。…

Ansible之playbook详解和应用实例

目录 一、playbook简介 1.什么是playbook 2.playbook组成 二、应用实例 1.使用playbook安装启用httpd服务 2.使用playbook安装启用nginx服务 三、ansible-playbook其他用法 1.检查yaml文件的语法是否正确 2.检查tasks任务 3.检查指定的主机 4.指定从某个task开始运行…

红队学习隧道必须了解的知识

端口映射和端口转发 端口映射 端口映射就是将外网的主机的一个端口映射到内网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上 端口转发 端口转发就是将发往外网指定端口的通信完全转发给…

windows下安装hbase

windows下安转hbase 安装流程 解压提供的压缩包 该压缩包是经过我修改后的,已经创建data、tmp、zookeeper目录和替换相关配置文件,目的是简化安装流程 压缩包 https://share.weiyun.com/SLTS9woO 环境变量配置 在系统变量中添加HBASE_HOME环境变量&…

Java ConcurrentHashMap 高并发安全实现原理解析

三、C13Map的字段定义 C13Map的字段定义 //最大容量 private static final int MAXIMUM_CAPACITY 1 << 30; //默认初始容量 private static final int DEFAULT_CAPACITY 16; //数组的最大容量,防止抛出OOM static final int MAX_ARRAY_SIZE Integer.MAX_VALUE -…

使用pyautogui进行PC用户界面自动化测试

目录 1.pyautogui简介及安装 2.pyautogui常见用法 2.1返回所用显示器的分辨率 2.2键盘输入函数 2.3常用函数typewrite() 2.4键盘事件 2.5函数hotkey() 2.6保存屏幕截图 3.常见用法代码汇总 1.pyautogui简介及安装 Pyautogui是一个纯Python的图形化自动化工具&#x…

代码审计-4 代码执行漏洞

代码执行漏洞 代码执行漏洞利用 ZZZPHP1.6 远程代码执行漏洞分析 漏洞点函数 此处如果能控制$ifstr就可以进行闭合&#xff0c;执行恶意代码 parserIfLabel函数将传入的参数进行正则匹配&#xff0c;当匹配通过时继续往下走 下面并没有对恶意代码内容进行过滤 跟踪parserIfLab…

游戏开发37课 狙击枪 视野问题

首先说一下视野的思路&#xff1a;我们可视化的视野全部都是以扇形显示的&#xff0c;同时为了后期的方便调整我们的视野和距离都必须是动态的。那么我们是不是可以使用度数来控制视野范围&#xff0c;那么我们就需要画出一个扇形。那么我们可以先画出来一个圆 然后在这个圆上面…

Linux安装 vmware workstation

官网下载地址 vmware workstation&#xff1a; Download VMware Workstation Pro 也可以下载提供的安装包。 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;au74 一、Ubuntu 安装 安装构建依赖项&#xff0c;打开您的系统终端并运行以下命令&#xff1a; s…

Linux操作系统中的yum命令

Linux操作系统中的yum命令是大家经常会用到的命令&#xff0c;有着非常重要的作用&#xff0c;但很多朋友依然不太清楚yum命令作用是什么&#xff1f;yum命令有哪些语法和常用命令&#xff1f;接下来我们一起来看看详细的内容介绍。 yum命令全称为Yellow dog Updater, Modified…

ChatGPT生成量化交易策略,真好玩

OK&#xff0c;还有没有更好玩的对 量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 『正文』 ˇ 最近比较火的OpenAI-ChatGPT&#xff0c;太有意思了。尝试让它写了几个策略&#xff0c;您别说&#xff0c;还真是有模有样。我们来看看吧。 模型一&a…

哈希(开散列、闭散列)-位图-布隆过滤器-哈希切分

文章目录1、哈希概念2、哈希表/散列表&#xff08;1&#xff09;哈希函数的设计&#xff1a;&#xff08;2&#xff09;&#xff08;最常用&#xff09;除留余数法&#xff1a;&#xff08;3&#xff09;如何解决哈希冲突&#xff1f;更加合理的设计哈希函数闭散列&#xff08;…

Java多线程之线程同步机制(锁,线程池等等)

Java多线程之线程同步机制一、概念1、并发2、起因3、缺点二、三大不安全案例1、样例一&#xff08;模拟买票场景&#xff09;2、样例二&#xff08;模拟取钱场景&#xff09;3、样例三&#xff08;模拟集合&#xff09;三、同步方法及同步块1、同步方法2、同步块四、JUC安全类型…

java多线程这一篇就差不多了

java多线程这一篇就差不多了 什么是多线程&#xff1f; 一般被问你对多线程了解多少的时候&#xff0c;你可能不仅仅只需要知道线程怎么创建&#xff0c;你可能需要了解线程的几种创建方式&#xff0c;线程的生命周期&#xff0c;线程池相关&#xff0c;并发安全&#xff0c;…

ADSP-21489的图形化编程详解(4:左右声道音量调节和多通道的输入输出详解)

左右声道音量调节 在直通的前提下&#xff0c;我们加入一个调音量的算法模块&#xff0c;来实现调节输出音量大小的功能。首先拖出来一个音量调节算法模块&#xff1a; 我们这里都是双通道&#xff0c;所以需要对这个音量调节模块进行配置&#xff1a; 连好程序&#xff0c;下…