ESIM:Enhanced LSTM for Natural Language Inference

article/2025/8/22 17:15:19

原文链接:https://aclanthology.org/P17-1152.pdf

ACL 2017

概述

        对于自然语言推理任务,Bowman等人在2015年提出了一个大数据集,大多数工作就开始使用神经网络来对该任务进行训练。但作者认为序列模型的潜力还没有完全被挖掘,因此提出了一个基于chain LSTMs的序列模型,该模型比先前的模型效果都要好,另外融合循环结构后,性能得到进一步提升,特别是在纳入语法信息后达到了最好的结果。

介绍

        自然语言推理(NLI)中一个任务是RTE(recognize textual entailment),就是判断两个句子之间的关系,存在三种情况:矛盾、无关以及蕴含。实际就是看在给定前提p的情况下,能不能推出假说h。例如以下例子:

        前提p中表示部分航空公司发现即使调整了通货膨胀后成本增长仍高于预期,从中是可以推测出h这个假说的。

        另外,作者认为语法和语义是密切相关的,所以在本文中作者也探究了语法信息对NLP任务的作用,讲语法信息进行编码融入到模型中。

方法

        作者提出的模型结构主要包括:input encoding、local inference modeling和inference composition。如下图所示,左部分就是前面提到的序列模型ESIM(主要是使用语义信息来进行训练),右部分是在tree LSTMs中融合了语法信息的结构(主要是用语法信息来进行训练)。(可以只使用ESIM,也可以达到很好的效果,在加入了右边语法信息的结果后,结果会更好。如果两个模型都使用,作者称为HIM)

         premise a=(a1,,,ala),hypothesis b=(b1,,,blb),通过预训练的模型对其embedding进行初始化,最后得到两个句子逻辑关系之间的label y。

Input Encoding

        作者将双向LSTM(BiLSTM)和Tree-LSTM作为两个模型的基本结构块,但在input encoding部分和inference information部分中有着不同的作用。

        在ESIM中,使用BiLSTM来对输入的句子premise和hypothesis进行编码,文中对BiLSTM的具体结构没有进行具体介绍,实际就是将两个不同方向LSTM的隐状态进行concat作为最终的隐状态,另外作者提到这里使用其他循环记忆块(例如GRUs)进行代替的话,效果没有LSTMs好。

        如下所示,使用\bar{a}_{i}表示BiLSTM对输入句子a在时间步i的隐藏状态,对b也同理。

        对于语法信息,使用树状的LSTM来对节点进行更新。在每个节点中,将向量Xt以及其左右子节点的隐状态作为输入计算该节点的隐向量ht,对于没有叶子的节点,使用{x}'_{t}(类似于unknown word)作为输入。具体结构以及计算公式如下图所示:

         其中\sigma表示sigmoid函数,W,U都是可学习的权重矩阵。

 Local Inference Modeling

        感觉这部分就是得到词与词之间的soft attention,ESIM得到词与词之间语义信息的权重,而另一个使用语法信息的模型得到词与词之间语法关系的权重。

        在本文中,计算premise和hypothesis之间的相似度:

         在ESIM中,将上诉相似度eij用于premise中单词的隐状态\bar{a}_{i}和hypothesis中相关的语义信息计算,即使用\bar{b}_{j}中相关的向量来表示\tilde{a}_{i}

         在语法树中,是对PCFG语法分析器(相关链接:使用Stanford Parser的PDFG算法进行句法分析 - 灰信网(软件开发博客聚合))得到局部短语以及从句的关系进行注意力分数计算。与ESIM中差不多,只是将\bar{a}_{i}\bar{b}_{j}(前提和假说中的embedding)替换成tree-LSTM中对应叶节点的隐状态(由公式3计算得到)。

         为了使得元祖中元素之间关系(标签中的三种,矛盾、无关、蕴含)更加明显,作者将\tilde{a}_{i}\tilde{b}_{j}的差值和点积进行与其自身进行concat,对得到的local inference 信息进行增强:

        作者认为这是一种高层次的信息交互,另外,作者也将该元祖作为输入,传入一个前馈神经网络中,将最后一层的隐状态添加到上诉concatenation中,但实验结果表明这并没什么用。

 Inference Composition

        在ESIM中依旧使用BiLSTM对ma和mb的上下文信息进行捕获,计算与前面的公式1和公式2类似。另一个模型中,使用以下公式进行树节点的更新:

        为了减少计算量,这里的F是只有一层带有ReLu激活函数的前馈神经网络。

        最后通过一个pooling层后传入到分类器中对最终结果进行推测,本文中作者使用了avg和max两种pooling方式,如下所示(对于树结构的模型,在公式20中使用根结点的隐状态进行计算):

        整个模型使用多分类的交叉墒损失来进行训练。可以只使用ESIM模型的结果,也可以对两个模型最后的预测结果进行赋权来得到最后的结果。

实验

        本文实验使用Bowman等人在2015年提出的SNLI(Stanford Natural Language Inference)数据集,移除了其中一些无法确定的数据。与之前提出的模型进行对比,实验结果如下:

        作者对模型中的主要部分进行了消融实验,结果如下:

        作者对Tree-LSTM和BiLSTM中各个词之间的注意力分数进行了可视化和分析:

  

总结

        本文提出了一个序列模型,在SNLI数据集上达到了目前最好的效果,在结合语法信息后达到效果会更好。作者认为序列模型的潜力害没有完全被发掘出来,未来将进一步探索使用额外信息(例如Word-Net和contrasting-meaning embedding)来帮助词级别的推理关系。

        (不知道为啥,这篇论文看完后花了接近一天的时间来写这篇博客,其实模型也不是很难,可能是我表述能力的问题吧!就是我能大概知道这个模型是怎么训练的,但是跟着论文来写一遍的时候还是会很慢很慢🥹)

参考文献

         论文阅读笔记:文本蕴含之ESIM - 知乎

【文本匹配】之 经典ESIM论文详读_尽量不躺平的kayla的博客-CSDN博客_文本匹配论文     


http://chatgpt.dhexx.cn/article/US9RRgg2.shtml

相关文章

Triton Inference Server教程2

本文介绍如何编写一个config文件,config.pbtxt文件中包含哪些可以配置的参数,这些参数又会对triton server产生什么影响。 必须指定的模型参数 platform/backend:模型要在什么backend上面运行,可以用两种参数指定,一…

变分推断(variational inference)/variational EM

诸神缄默不语-个人CSDN博文目录 由于我真的,啥都不会,所以本文基本上就是,从0开始。 我看不懂的博客就是写得不行的博客。所以我只写我看得懂的部分。 持续更新。 文章目录 1. 琴生不等式2. 香农信息量/自信息I3. 信息熵4. 相对熵/KL散度/信…

Hugging Face - 推理(Inference)解决方案

每天,开发人员和组织都在使用 Hugging Face 平台上托管的模型,将想法变成概念验证(proof-of-concept)的 demo,再将 demo 变成生产级的应用。 Transformer 模型已成为广泛的机器学习(ML)应用的流…

变分推断(Variational Inference)解析

一、什么是变分推断 假设在一个贝叶斯模型中, x x x为一组观测变量, z z z为一组隐变量(参数也看做随机变量,包含在 z z z中),则推断问题为计算后验概率密度 P ( z ∣ x ) P(z|x) P(z∣x)。根据贝叶斯公式…

深度学习-在线推断(Inference)技术

深度学习一般分为训练和在线推断两个部分,大家平时经常关注的多为训练阶段,也就是搜索和求解模型最优参数的阶段。而当模型参数已经求解出来,如何使用模型,以及在在线环境中部署模型,也是非常重要的。 一般会比较关注其…

推理(Inference)与预测(Prediction)

在机器学习的背景下,很多人似乎混淆了这两个术语。这篇文章将试图澄清我们所说的这两个词是什么意思,每一个词在哪里有用,以及它们是如何应用的。在这里,我将举几个例子来直观地理解两者之间的区别。 推理和预测这两个术语都描述…

嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)

关注星标公众号,不错过精彩内容 来源 | 宅学部落 最近,阅读了王工(王利涛)赠送的一本由他编著的书籍《嵌入式C语言自我修养》,感觉写的挺不错。今天分享一下这本书籍《嵌入式C语言自我修养》:从芯片、编译器…

进行嵌入式C语言编程调试的通用办法

总结了一下调试我们嵌入式C程序的一些基本的办法和思想,供大家学习参考: 打印日志:在代码中添加打印语句,输出变量值、函数调用等信息,以便在程序运行时观察程序执行情况。 断点调试:在代码中添加断点&…

linux c与c语言的区别吗,嵌入式c语言与c语言的区别

原标题:嵌入式c语言与c语言的区别 最广泛使用的系统编程语言是C语言,它是使用自由格式源代码的简单编程语言;它曾用于以前用汇编语言构建的应用程序中。嵌入式C是C语言的扩展,它在嵌入式系统中应用于编写嵌入式软件,那么二者之间究竟有什么差异呢? 一、启动过程 1. 通用c…

嵌入式C语言——常见面试题

1、描述一下gcc编译过程? gcc编译过程分为4步骤:预处理、编译、汇编、链接。 预处理:头文件包含、宏替换、条件编译、删除注释。编译:主要进行词法、语法、语义分析等等,检查无误后把预处理好的文件编译成汇编文件。…

c语言对嵌入式的作用是什么,关于嵌入式C语言它有些什么意义

描述 首先,在当前产业结构升级的大背景下,机械行业未来的自动化、智能化程度会越来越高,所以机械类相关专业的知识结构必然会不断得到丰富和发展,而学习编程语言对于机械类专业来说具有较为实际的意义,尤其是C语言。 机…

总结嵌入式C语言难点(2部分)

结构类型和对齐 C语言提供自定义数据类型来描述一类具有相同特征点的事务,主要支持的有结构体,枚举和联合体。其中枚举通过别名限制数据的访问,可以让数据更直观,易读,实现如下: 联合体的是能在同一个存储…

嵌入式c语言教程 题库 百度云,嵌入式c语言视频教程尚观主讲视频教程

嵌入式C语言培训-01C语言概述-01C语言概念-发展历史-特点.mp4 嵌入式C语言培训-01C语言概述-02C基本程序结构-第一个helloworld程序-Linux下编辑编译执行.mp4 嵌入式C语言培训-01C语言概述-03C语言第2个程序第3个程序.mp4 嵌入式C语言培训-01C语言概述-04C程序开发过程.mp4 嵌入…

《嵌入式C语言》C语言介绍及环境搭建

--最具价值的嵌入式C语言1 C语言简介 C语言是国际上广泛流行的高级语言,是在B语言的基础上发展起来的, 1970年, 美国贝尔实验室的D.M.Ritchie设计了B 语言, 并用于编写了第一个UNIX操作系统。 1973年, D.M.Ritchie 在B语言的基础…

嵌入式C语言深入篇之 —— 变量

新建一个物联网行业交流学习QQ群,感兴趣可加:928840648 CUT 变量 可执行程序存储区 当一个C/C原码文件被编译链(比如gcc/g)编译及链接成为可执行程序后,由4个段组成,分别是:代码段&#xff…

嵌入式C语言编程技巧

基础语法编程技巧 变量 (1)变量名需见名知意,用英文单词命名,尽可能避免出现 a b 等单一字母的变量 (2)变量在定义同时进行初始化,防止乱码数据 (3)变量序号尽可能用英语…

嵌入式C语言强化学习——(嵌入式学习路线1)

前言 从零开始记录自己学习嵌入式,之前看稚晖君的视频,里面的费曼学习法觉得对自己很有帮助,所以准备把自己学习到的东西分享出来,便于学的更深(符合费曼学习法) 众所周知,嵌入式编一般是使用C…

嵌入式C语言开发

这是我的第一篇对ARM有有疑问并展开调查的文档总结,以备之后查阅。 首先的疑惑是发现之前的源码中都是在对寄存器做操作,所以对寄存器的地址是怎么被确定的就很疑惑。 搜索引擎关键词:嵌入式 寄存器 基地址 使用 参考《嵌入式15——HAL 库中…

嵌入式C语言编译过程

1.预处理 gcc -E -o a.i 001.c 把001.c输出为a.s文件。预处理的本质是把宏定义替换处理。#define ABC 123 2.编译 gcc -S -o a.s 001.c 3.汇编 gcc -c -i a.s 001.c 把c文件生成汇编文件 4.链接 gcc -o build 001.c把001.c生成build.exe可执行文件,从预处理开始。

嵌入式C语言自我修养分享课件

一.异构计算 1.背景: 随着物联网、大数据、人工智能时代的到来,海量的数据分析和大量复杂的运算对CPU 的算力要求越来越高,CPU 的大部分资源用于缓存和逻辑控制,适合运行各种复杂的串行程序,但是单核或者多核CPU处理性…