阿里RE2:如何将残差与文本匹配模型融合

2021 年 1 月 13 日 AINLP


RE2[1] 这个名称来源于该网络三个重要部分的合体:Residual vectors;Embedding vectors;Encoded vectors;

掌握这个论文,最重要的一个细节点就是了解如何将增强残差连接融入到模型之中

1.架构图

先来看架构图,如下:

这个架构图很精简,所以不太容易理解。

大体上区分可以分为三层。第一层就是输入层,第二个就是中间处理层,第三个就是输出层。

中间处理层我们可以称之为block,就是画虚线的部分,可以被循环为n次,但是需要注意的是每个block不是共享的,参数是不同的,是独立的,这点需要注意。

2.增强残差连接

其实这个论文比较有意思的点就是增强残差连接这里。架构图在这里其实很精简,容易看糊涂,要理解还是要看代码和公式。

2.1 第一个残差

首先假设我们的句子长度为 ,然后对于第n个block(就是第n个虚线框的部分)。

它的输入和输出分别是: ;

首先对一第一个block,也就是 ,它的输入是embedding层,注意这里仅仅是embedding层;

对于第二个block,也就是 ,它的输入是embedding层(就是初始的embedding层)和第一个block的输出 拼接在一起;

紧接着对于n大于2的情况下,也就是对于第三个,第四个等等的block,它的输入形式是这样的;

理解的重点在这里:在每个block的输入,大体可以分为两个部分,第一部分就是初始的embedding层,这个永远不变,第二个部分就是此时block之前的两层的blocks的输出和;这两个部分进行拼接。

这是第一个体现残差的部分。

2.2第二个残差

第二个残差的部分在block内部:

alignment层之前的输入就有三个部分:第一部分就是embedding,第二部分就是前两层的输出,第三部分就是encoder的输出。

这点结合着图就很好理解了。

3.Alignment Layer

attention这里其实操作比较常规,和ESIM很类似,大家可以去看之前这个文章:如何又好又快的做文本匹配

公式大概如下:

这里有一个细节点需要注意,在源码中计算softmax之前,也是做了类似TRM中的缩放,也就是参数,放个代码:

#核心代码
def __init__(self, args, __):
super().__init__()
self.temperature = nn.Parameter(torch.tensor(1 / math.sqrt(args.hidden_size)))

def _attention(self, a, b):
return torch.matmul(a, b.transpose(1, 2)) * self.temperature

4.Fusion Layer

融合层,就是对attentino之前和之后的特征进行一个融合,具体如下:

三种融合方式分别是直接拼接,算了对位减法然后拼接,算了对位乘法然后拼接。最后是对三个融合结果进行拼接。

有一个很有意思的点,作者说到减法强调了两句话的不同,而乘法强调了两句话相同的地方。

5.Prediction Layer

Pooling层之后两个句子分别得到向量表达:

三个表达方式,各取所需就可以:

6. 总结

简单总结一下,这个论文最主要就是掌握残差连接。

残差体现在模型两个地方,一个是block外,一个是block内;

对于block,需要了解的是,每一个block的输入是有两部分拼接而成,一个是最初始的embeddding,一个是之前两层的输出和。

对于block内,需要注意的是Alignment之前,有三个部分的输入一个是最初始的embeddding,一个是之前两层的输出和,还有一个是encoder的输出。

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方"AINLP",进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

欢迎加入AINLP技术交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注NLP技术交流

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

参考资料

[1]

Simple and Effective Text Matching with Richer Alignment Features: https://www.aclweb.org/anthology/P19-1465/,

登录查看更多
0

相关内容

专知会员服务
65+阅读 · 2021年3月21日
【ICML2020】统一预训练伪掩码语言模型
专知会员服务
25+阅读 · 2020年7月23日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
专知会员服务
25+阅读 · 2020年2月15日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
【深度语义匹配模型】原理篇二:交互篇
AINLP
15+阅读 · 2020年5月18日
干货 | 双11总峰值超8亿OPS 阿里分布式NoSQL如何岿然不动稳如山?
阿里巴巴数据库技术
10+阅读 · 2018年12月12日
检索式chatbot了解一下?
黑龙江大学自然语言处理实验室
6+阅读 · 2018年9月28日
CNN五大经典模型:LeNet,AlexNet,GoogleNet,VGG,DRL
黑龙江大学自然语言处理实验室
14+阅读 · 2018年9月7日
论文解读 | 基于递归联合注意力的句子匹配模型
深度学习CTPN算法的解读与tensorflow实现
数据挖掘入门与实战
5+阅读 · 2017年11月30日
干货 | 深度学习之卷积神经网络(CNN)的模型结构
机器学习算法与Python学习
12+阅读 · 2017年11月1日
如何用TensorFlow预测时间序列:TFTS库详细教程
人工智能头条
9+阅读 · 2017年8月30日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
8+阅读 · 2018年1月12日
Arxiv
4+阅读 · 2016年12月29日
Arxiv
4+阅读 · 2015年8月25日
VIP会员
相关VIP内容
专知会员服务
65+阅读 · 2021年3月21日
【ICML2020】统一预训练伪掩码语言模型
专知会员服务
25+阅读 · 2020年7月23日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
专知会员服务
25+阅读 · 2020年2月15日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
相关资讯
【深度语义匹配模型】原理篇二:交互篇
AINLP
15+阅读 · 2020年5月18日
干货 | 双11总峰值超8亿OPS 阿里分布式NoSQL如何岿然不动稳如山?
阿里巴巴数据库技术
10+阅读 · 2018年12月12日
检索式chatbot了解一下?
黑龙江大学自然语言处理实验室
6+阅读 · 2018年9月28日
CNN五大经典模型:LeNet,AlexNet,GoogleNet,VGG,DRL
黑龙江大学自然语言处理实验室
14+阅读 · 2018年9月7日
论文解读 | 基于递归联合注意力的句子匹配模型
深度学习CTPN算法的解读与tensorflow实现
数据挖掘入门与实战
5+阅读 · 2017年11月30日
干货 | 深度学习之卷积神经网络(CNN)的模型结构
机器学习算法与Python学习
12+阅读 · 2017年11月1日
如何用TensorFlow预测时间序列:TFTS库详细教程
人工智能头条
9+阅读 · 2017年8月30日
Top
微信扫码咨询专知VIP会员