ESIM是一个综合应用了BiLSTM和注意力机制的模型,在文本匹配中效果十分强大.

文本匹配说就是分析两个句子是否具有某种关系,比如有一个问题,现在给出一个答案,我们就需要分析这个答案是否匹配这个问题,所以也可以看成是一个二分类问题(输出是或者不是)。现在主要基于SNIL和MutilNLI这两个语料库,它们包含两个句子premise和hypothesis以及一个label,label就是判断这两个句子的关系,本文主要讲解的就是如何利用ESIM分析这个问题。

1. 简介

ESIM模型主要是用来做文本推理的,给定一个前提premise ppp 推导出假设hypothesis ppp,其损失函数的目标是判断ppphhh是否有关联,即是否可以由ppp推导出hhh,因此,该模型也可以做文本匹配,只是损失函数的目标是两个序列是否是同义句。

2. 模型结构

ESIM的论文中,作者提出了两种结构,如下图所示,左边是自然语言理解模型ESIM,右边是基于语法树结构的HIM,本文也主要讲解ESIM的结构,大家如果对HIM感兴趣的话可以阅读原论文。


ESIM一共包含四部分,Input Encoding、Local Inference Modeling、 Inference Composition、Prediction

2.1 Input Encoding

这一层结构的输入内容,一般可以采用预训练好的词向量或者添加embedding层。接下来就是一个双向的LSTM,起作用主要在于对输入值做encoding,也可以理解为在做特征提取,最后把其隐藏状态的值保留下来,分别记为aˉi\bar{a}_iaˉibˉi\bar{b}_ibˉi,其中i与j分别表示的是不同的时刻,a与b表示的是上文提到的p与h。
aˉi=BiLSTM⁡(a,i)bˉi=BiLSTM⁡(b,i)\begin{array}{l} \bar{a}_{i}=\operatorname{BiLSTM}(a, i) \\ \bar{b}_{i}=\operatorname{BiLSTM}(b, i) \end{array}aˉi=BiLSTM(a,i)bˉi=BiLSTM(b,i)

2.2 Local Inference Modeling

接下来就是需要分析这两个句子之间的联系了,具体怎么分析,首先要注意的是,我们现在得到的句子和单词的表示向量,是基于当前语境以及单词之间的意思综合分析得到的,那么如果两个单词之间联系越大,就意味着他们之间的距离和夹角就越少,比如(1,0)和(0,1)之间的联系就没有(0.5,0.5)和(0.5,0.5)之间的联系大。在理解了这一点之后,我们再来看看ESIM是怎么分析的。

首先,两个句子的词向量之间相乘
eij=aˉiTbˉJe_{i j}=\bar{a}_{i}^{T} \bar{b}_{J}eij=aˉiTbˉJ
正如之前所说的,如果两个词向量联系较大,那么乘积也会较大,然后进行softmax运算求出其权重:
a~i=∑j=1lbexp⁡(eij)∑k=1lbexp⁡(eik)bˉjb~j=∑i=1laexp⁡(eij)∑k=1laexp⁡(ekj)aˉi\begin{array}{l} \tilde{a}_{i}=\sum_{j=1}^{l_{b}} \frac{\exp \left(e_{i j}\right)}{\sum_{k=1}^{l_{b}} \exp \left(e_{i k}\right)} \bar{b}_{j} \\\\ \widetilde{b}_{j}=\sum_{i=1}^{l_{a}} \frac{\exp \left(e_{i j}\right)}{\sum_{k=1}^{l_{a}} \exp \left(e_{k j}\right)} \bar{a}_{i} \end{array}a~i=j=1lbk=1lbexp(eik)exp(eij)bˉjb

j=i=1lak=1laexp(ekj)exp(eij)aˉi

上述几条公式的目的,简单来说可以这样理解,比如premise中有一个单词"good",首先我分析这个词和另一句话中各个词之间的联系,计算得到的结果eije_{ij}eij标准化后作为权重,用另一句话中的各个词向量按照权重去表示"good",这样一个个分析对比,得到新的序列。

以上操作就是一个attention机制,a~i\tilde{a}_{i}a~ib~j\tilde{b}_{j}b~j 的前面分式部分就是 attention weight。这里要注意,计算 a~i\tilde{a}_{i}a~i 其计算方法是与 bˉj\bar{b}_{j}bˉj 做加权和。而不是 aˉj\bar{a}_{j}aˉj,对于 b~j\tilde{b}_{j}b~j 同理。

接下来就是分析差异,从而判断两个句子之间的联系是否足够大了,ESIM主要是计算新旧序列之间的差和积,并把所有信息合并起来储存在一个序列中:
ma=[aˉ;a~;aˉ−a~;aˉ⊙a~]mb=[bˉ;b~;bˉ−b~;bˉ⊙b~]\begin{array}{l} m_{a}=[\bar{a} ; \tilde{a} ; \bar{a}-\tilde{a} ; \bar{a} \odot \tilde{a}] \\\\ m_{b}=[\bar{b} ; \tilde{b} ; \bar{b}-\tilde{b} ; \bar{b} \odot \tilde{b}] \end{array}ma=[aˉ;a~;aˉa~;aˉa~]mb=[bˉ;b~;bˉb~;bˉb~]

2.3 Inference Composition

上面之所以要把所有信息储存在一个序列中,因为ESIM最后还需要综合所有信息,做一个全局的分析,这个过程依然是通过BiLSTM处理这两个序列:
va,t=BiLSTM⁡(F(ma,t),t)vb,t=BiLSTM⁡(F(mb,t),t)\begin{array}{l} v_{a, t}=\operatorname{BiLSTM}\left(F\left(m_{a, t}\right), t\right) \\\\ v_{b, t}=\operatorname{BiLSTM}\left(F\left(m_{b, t}\right), t\right) \end{array}va,t=BiLSTM(F(ma,t),t)vb,t=BiLSTM(F(mb,t),t)

值得注意的是,F是一个单层神经网络(ReLU作为激活函数),主要用来减少模型的参数避免过拟合,另外,上面的t表示BiLSTM在t时刻的输出。

因为对于不同的句子,得到的向量v长度是不同的,为了方便最后一步的分析,这里把BiLSTM得到的值进行了池化处理,把结果储存在一个固定长度的向量中。值得注意的是,因为考虑到求和运算对于序列长度是敏感的,因而降低了模型的鲁棒性,所以ESIM选择同时对两个序列进行average pooling和max pooling,再把结果放进一个向量中:
Va,ave=∑i=1laVa,ila,Va,max⁡=max⁡i=1laVa,iVb,ave=∑j=1lbVb,jlb,Vb,max⁡=max⁡j=1lbVb,jV=[Va,ave;Va,max⁡;Vb,ave;Vb,max⁡]\begin{aligned} V_{a, a v e} &=\sum_{i=1}^{l_{a}} \frac{V_{a}, i}{l_{a}}, \quad V_{a, \max }=\max _{i=1}^{l_{a}} V_{a, i} \\ V_{b, a v e} &=\sum_{j=1}^{l_{b}} \frac{V_{b}, j}{l_{b}}, \quad V_{b, \max }=\max _{j=1}^{l_{b}} V_{b, j} \\ V &=\left[V_{a, a v e} ; V_{a, \max } ; V_{b, a v e} ; V_{b, \max }\right] \end{aligned}Va,aveVb,aveV=i=1lalaVa,i,Va,max=i=1maxlaVa,i=j=1lblbVb,j,Vb,max=j=1maxlbVb,j=[Va,ave;Va,max;Vb,ave;Vb,max]

2.4 prediction

终于来到最后一步了,那就是把向量v扔到一个多层感知器分类器,在输出层使用softmax函数。

总结

ESIM首先是将输入句子进行word embedding 或者直接使用预训练好的词向量送入到BiLSTM网络中,将LSTM网络的输出进行Attention计算(将p句子中的每个单词向量用h中所有单词向量加权和表示,同理将h句子中的每个单词向量用p句子中所有单词向量加权和表示),然后计算差异性。将两个差异性矩阵再次送入到BiLSTM网络中,将LSTM网络输出做均值池化和最大池化(两者连接起来),最后将池化输出送入到多层感知机分类器中,使用softmax分类。

ESIM使用的损失函数就是来判断输入的两个句子是否语义相匹配,匹配为1, 不匹配为0;因此使用交叉熵损失函数。

参考

  • 文本匹配与ESIM模型详解
  • 程序1
  • 程序2
  • 论文

文本匹配模型ESIM相关推荐

  1. 短文本匹配模型-ESIM

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zhang2010hao/article ...

  2. nmt模型源文本词项序列_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-14 引言 两篇文章与大家分享,第一篇作者对通用文本匹配模型进行探索,研究了构建一个快速优良的文本 ...

  3. antd 文本域超长问题_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-14 引言     两篇文章与大家分享,第一篇作者对通用文本匹配模型进行探索,研究了构建一个快速优 ...

  4. laravel 分词搜索匹配度_DSSM文本匹配模型在苏宁商品语义召回上的应用

    文本匹配是自然语言处理中的一个核心问题,它不同于MT.MRC.QA 等end-to-end型任务,一般是以文本相似度计算的形式在应用系统中起核心支撑作用1.它可以应用于各种类型的自然语言处理任务中,例 ...

  5. 文本匹配模型-DSSM

    这里主要实现的是基于表征文本匹配和基于交互的文本匹配模型. 同时也对比了各个模型在wikiQA上的运行结果. 1. 基于表征的文本匹配模型 1.1 DSSM 模型 1. 简介 DSSM 模型是2013 ...

  6. 文本匹配与ESIM模型详解

    ESIM(Enhanced Sequential Inference Model)是一个综合应用了BiLSTM和注意力机制的模型,在文本匹配中效果十分强大,也是目前为止我见过结构最复杂的模型,下面将会 ...

  7. 【文本匹配】ESIM模型

    ESIM实现 ESIM模型训练包含以下模块: 数据处理加载模块 模型实现模型 pytorch_lightning 封装训练模块 模型训练和使用模块 相关源码可以参见我Github上的源码.下面主要说明 ...

  8. 【文本匹配】表示型模型

    基于表示的匹配模型的基本结构包括: (1)嵌入层,即文本细粒度的嵌入表示: (2)编码层,在嵌入表示的基础上进一步编码: (3)表示层:获取各文本的向量表征: (4)预测层:对文本pair的向量组进行 ...

  9. 文本匹配开山之作--双塔模型及实战

    作者 | 夜小白 整理 | NewBeeNLP 在前面一篇文章中,总结了Representation-Based文本匹配模型的改进方法, 基于表征(Representation)的文本匹配.信息检索. ...

最新文章

  1. 工作流引擎设计之退回任务定义
  2. SAP WM Interview Questions
  3. python切片操作例题_Python之切片操作
  4. leetcode206.反转链表 解题思路(简单)
  5. 杰尼亚签约第四范式 开启奢侈品行业智慧零售新思路
  6. python学习教程,12306火车票抢票系统
  7. ping github超时问题
  8. MockupBuilder
  9. 浅谈jQuery的选择器
  10. C++ Pitfalls 之 reference to an object in a dynamically allocated containter
  11. 如何提高企业数据质量
  12. 【译】你不知道的Chrome调试工具技巧 第六天:command 菜单
  13. python操作sql_Python操作MSSQL
  14. 如何自己开发漏洞扫描工具
  15. IDEA Auto build completed with errors解决办法
  16. linux环境下,geopandas 安装报错,显示Proj executable not found. Please set PROJ_DIR variable
  17. 虚幻引擎之自定义着色模型(ShadingModel)
  18. c语言的菜单制作,C语言的菜单制作.ppt
  19. 计算机辅助教学领域的先驱者,探索“三大构成”教学模式发展之路
  20. css实现电子数字字体

热门文章

  1. mybatis的原理详解
  2. 阿里云新年活动 轻量云服务器1H2G5M仅需要86元/年
  3. Exynos_4412——RTC实验
  4. mysql oracle创建视图索引吗_Oracle视图,索引,序列
  5. Android NDK 使用skia
  6. 系统体系结构-概念和框架
  7. 端午节书法作品楷书内容_端午节书法作品楷书四字柳体
  8. 囧!万恶的微软组策略
  9. 算法问题:整数除法详解(Java方向)
  10. 前端解决web端 125%,150%缩放,1366*768分辨率兼容问题