【文本匹配】之 RE2论文详解

5 篇文章 0 订阅
3 篇文章 0 订阅

RE2 - Simple and Effective Text Matching with Richer Alignment Features

这篇论文来自阿里,19年的ACL论文。《Simple and Effective Text Matching with Richer Alignment Features》:https://arxiv.org/abs/1908.00300

Intro

很多深层网络只拥有一层alignment layer,导致模型需要很多额外的语义信息或手工特征或复杂alignment机制或后处理。

本文的创新点就在于用multiple alignment processes。

R - Residual vectors:previous aligned features

E - Embedding vectors:original point-wise features

E - Encoded vectors:contextual features

简称RE2

具体代表什么呢?让我们往下看。

Model

在这里插入图片描述

空白格子表示embedding vectors,斜线方格表示augmented residual connections,经过一个encoder生成的context vectors用黑色方格表示。如图所示,把这三个向量concat起来都放进alignment layer里,再用alignment layer的input和output都concat起来放入fusion layer中。一个block包含encoding、alignment和fusion三层,重复N次且每个block都是独立的参数。 fusion layer的output经过池化层,得到最后的固定长度向量。利用左右两侧的固定长度向量做预测,Loss采用交叉熵。

Augmented Residual Connections

为了给alignment layer(attention layer)提供更丰富的特征,RE2用了残差网络来连接连续的n个blocks。

The input of the n n n-th block x ( n ) x^{(n)} x(n)( n n n ≥ 2), is the concatenation of the input of the first block x ( 1 ) x^{(1)} x(1) and the summation of the output of previous two blocks (denoted by rectangles with diagonal stripes in Figure 1):

x i ( n ) = [ x i ( 1 ) ; o i ( n − 1 ) + o i ( n − 2 ) ] x^{(n)}_i=[x^{(1)}_i;o^{(n-1)}_i+o_i^{(n-2)}] xi(n)=[xi(1);oi(n1)+oi(n2)]

Alignment Layer

alignment的方法仍是采取点积(可指路上一篇【文本匹配】之 经典ESIM论文详读)。 F F F指identity function或单层前向神经网络,这个作为超参数自行指定。

e i j = F ( a i ) T F ( b j ) e_{ij}=F(a_i)^TF(b_j) eij=F(ai)TF(bj)

求得相似度e后,我们用同样的方法得到加权和。 a i ′ a'_i ai就是 { b j } j = 1 l b \{b_j\}^{l_b}_{j=1} {bj}j=1lb中关于 a i a_i ai的内容。

a i ′ = ∑ j = 1 l b e x p ( e i j ) ∑ k = 1 l b e x p ( e i k ) b j , ∀ i ∈ [ 1 , . . . , l a ] b j ′ = ∑ i = 1 l a e x p ( e i j ) ∑ k = 1 l a e x p ( e k j ) a i , ∀ j ∈ [ 1 , . . . , l b ] a'_i=\sum^{l_b}_{j=1}\frac{exp(e_{ij})}{\sum^{l_b}_{k=1}exp(e_{ik})} b_j, \forall i\in [1,...,l_a]\\b'_j=\sum^{l_a}_{i=1}\frac{exp(e_{ij})}{\sum^{l_a}_{k=1}exp(e_{kj})} a_i, \forall j\in [1,...,l_b] ai=j=1lbk=1lbexp(eik)exp(eij)bj,i[1,...,la]bj=i=1lak=1laexp(ekj)exp(eij)ai,j[1,...,lb]

Fusion Layer

对输入sequence a ˉ \bar{a} aˉ进行以下三个计算,并进行concat。这里的 G G G是单层前向神经网络,因为参数不共享所以用不同角标进行区别。

a ˉ i 1 = G 1 ( [ a i ; a i ′ ] ) a ˉ i 2 = G 2 ( [ a i ; a i − a i ′ ] ) a ˉ i 3 = G 3 ( [ a i ; a i ⊙ a i ′ ] ) a ˉ i = G ( [ a ˉ i 1 ; a ˉ i 2 ; a ˉ i 3 ] ) \bar{a}_i^1=G_1([a_i;a_i'])\\\bar{a}_i^2=G_2([a_i;a_i-a_i'])\\\bar{a}_i^3=G_3([a_i;a_i \odot a_i'])\\\bar{a}_i=G([\bar{a}_i^1;\bar{a}_i^2;\bar{a}_i^3])\\ aˉi1=G1([ai;ai])aˉi2=G2([ai;aiai])aˉi3=G3([ai;aiai])aˉi=G([aˉi1;aˉi2;aˉi3])

相减主要是为了提取difference,相乘是为了提取similarity。

Prediction Layer

输入 v 1 , v 2 v_1,v_2 v1,v2两个vector,输出的值为:

y ^ = H ( [ v 1 ; v 2 ; v 1 − v 2 ; v 1 ⊙ v 2 ] ) \hat{y}=H([v1;v2;v1-v2;v1\odot v2]) y^=H([v1;v2;v1v2;v1v2])

其中H为多层前向神经网络。

简化版,这个也作为超参数调试:

y ^ = H ( [ v 1 ; v 2 ] ) \hat{y}=H([v1;v2]) y^=H([v1;v2])

Difference with ESIM

从公式来看,和ESIM还是比较相似,最大的不同点在于使用残差网络进行信息增强。由于每个block都含有alignment层,从单一的alignment process变成了multiple alignment processes。这个方法放弃了复杂的计算alignment方式(complicated multi-way alignment mechanisms, heavy distillations of alignment results, external syntactic features, or dense connections to connect stacked blocks when the model is going deep),所以在保证性能的基础上尽可能地快。

作者给出了github地址:

tf1.x:alibaba-edu/simple-effective-text-matching

pytorch:alibaba-edu/simple-effective-text-matching-pytorch

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
re.split函数用于根据正则表达式来分割字符串。它接受两个参数,第一个参数是正则表达式,第二个参数是要进行分割的字符串。这个函数会返回一个列表,其中包含了根据正则表达式分割后的子字符串。 re.finditer函数用于在字符串中查找所有满足正则表达式的非重叠出现,并返回一个迭代器。通过迭代器遍历可以获取到每个匹配到的对象,而每个匹配对象包含了匹配到的字符串以及对应的开始和结束索引。 re.findall函数用于在字符串中查找所有满足正则表达式的非重叠出现,并返回一个列表。这个函数的参数与re.finditer函数相同,但它直接返回一个包含匹配到的所有字符串的列表。 这三个函数可以很方便地用于字符串的处理和分析。通过正则表达式的灵活性,我们可以根据特定模式来对字符串进行分割、查找和提取。re.split函数可用于将一个字符串按照某个模式进行分割,比如可以将一段文字按照空格或标点进行分割成单词。re.finditer函数可以帮助我们在字符串中找到所有满足某个模式的部分,比如可以统计一段文字中出现了多少个特定的单词。re.findall函数则更加简便,可以一次性返回所有匹配的字符串。 总的来说,这三个函数在正则表达式的应用中非常常用,可以通过它们来进行字符串的拆分、提取和匹配,从而实现更灵活和高效的文本处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值