文本匹配模型ESIM
ESIM是一个综合应用了BiLSTM和注意力机制的模型,在文本匹配中效果十分强大.
文本匹配说就是分析两个句子是否具有某种关系,比如有一个问题,现在给出一个答案,我们就需要分析这个答案是否匹配这个问题,所以也可以看成是一个二分类问题(输出是或者不是)。现在主要基于SNIL和MutilNLI这两个语料库,它们包含两个句子premise和hypothesis以及一个label,label就是判断这两个句子的关系,本文主要讲解的就是如何利用ESIM分析这个问题。
1. 简介
ESIM模型主要是用来做文本推理的,给定一个前提premise ppp 推导出假设hypothesis ppp,其损失函数的目标是判断ppp与hhh是否有关联,即是否可以由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ˉi和bˉ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=1lb∑k=1lbexp(eik)exp(eij)bˉjb
上述几条公式的目的,简单来说可以这样理解,比如premise中有一个单词"good",首先我分析这个词和另一句话中各个词之间的联系,计算得到的结果eije_{ij}eij标准化后作为权重,用另一句话中的各个词向量按照权重去表示"good",这样一个个分析对比,得到新的序列。
以上操作就是一个attention机制,a~i\tilde{a}_{i}a~i 和 b~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=maxi=1laVa,iVb,ave=∑j=1lbVb,jlb,Vb,max=maxj=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=1∑lalaVa,i,Va,max=i=1maxlaVa,i=j=1∑lblbVb,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相关推荐
- 短文本匹配模型-ESIM
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zhang2010hao/article ...
- nmt模型源文本词项序列_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...
来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-14 引言 两篇文章与大家分享,第一篇作者对通用文本匹配模型进行探索,研究了构建一个快速优良的文本 ...
- antd 文本域超长问题_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...
来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-14 引言 两篇文章与大家分享,第一篇作者对通用文本匹配模型进行探索,研究了构建一个快速优 ...
- laravel 分词搜索匹配度_DSSM文本匹配模型在苏宁商品语义召回上的应用
文本匹配是自然语言处理中的一个核心问题,它不同于MT.MRC.QA 等end-to-end型任务,一般是以文本相似度计算的形式在应用系统中起核心支撑作用1.它可以应用于各种类型的自然语言处理任务中,例 ...
- 文本匹配模型-DSSM
这里主要实现的是基于表征文本匹配和基于交互的文本匹配模型. 同时也对比了各个模型在wikiQA上的运行结果. 1. 基于表征的文本匹配模型 1.1 DSSM 模型 1. 简介 DSSM 模型是2013 ...
- 文本匹配与ESIM模型详解
ESIM(Enhanced Sequential Inference Model)是一个综合应用了BiLSTM和注意力机制的模型,在文本匹配中效果十分强大,也是目前为止我见过结构最复杂的模型,下面将会 ...
- 【文本匹配】ESIM模型
ESIM实现 ESIM模型训练包含以下模块: 数据处理加载模块 模型实现模型 pytorch_lightning 封装训练模块 模型训练和使用模块 相关源码可以参见我Github上的源码.下面主要说明 ...
- 【文本匹配】表示型模型
基于表示的匹配模型的基本结构包括: (1)嵌入层,即文本细粒度的嵌入表示: (2)编码层,在嵌入表示的基础上进一步编码: (3)表示层:获取各文本的向量表征: (4)预测层:对文本pair的向量组进行 ...
- 文本匹配开山之作--双塔模型及实战
作者 | 夜小白 整理 | NewBeeNLP 在前面一篇文章中,总结了Representation-Based文本匹配模型的改进方法, 基于表征(Representation)的文本匹配.信息检索. ...
最新文章
- 工作流引擎设计之退回任务定义
- SAP WM Interview Questions
- python切片操作例题_Python之切片操作
- leetcode206.反转链表 解题思路(简单)
- 杰尼亚签约第四范式 开启奢侈品行业智慧零售新思路
- python学习教程,12306火车票抢票系统
- ping github超时问题
- MockupBuilder
- 浅谈jQuery的选择器
- C++ Pitfalls 之 reference to an object in a dynamically allocated containter
- 如何提高企业数据质量
- 【译】你不知道的Chrome调试工具技巧 第六天:command 菜单
- python操作sql_Python操作MSSQL
- 如何自己开发漏洞扫描工具
- IDEA Auto build completed with errors解决办法
- linux环境下,geopandas 安装报错,显示Proj executable not found. Please set PROJ_DIR variable
- 虚幻引擎之自定义着色模型(ShadingModel)
- c语言的菜单制作,C语言的菜单制作.ppt
- 计算机辅助教学领域的先驱者,探索“三大构成”教学模式发展之路
- css实现电子数字字体