句子表征|Condenser: A Pre-training Architecture for Dense Retrieval

目录

一、模型背景

二、模型架构

三、实验结果

四、Funnel-Transformer和U-Net介绍


一、模型背景

        这篇论文发现标准的语言模型内部注意力机制并没有生成一个有效的token表征,很多时候我们会用BERT最后一层的CLS位置的向量作为句向量,但问题是CLS在中间层的时候虽然会self-attention其他token的信息,但并不对其他token作贡献,直到最后一层才进行全局的attention(这个还得再看看源码)

二、模型架构

         原理很简单,将12层BERT分为两部分,各6层,也就是上图的early(前6层),late(后6层),然后用第12层的CLS位置向量与第6层除CLS位置的其他隐藏向量拼接成原长度的输出向量,最后接一个2层训练以达到优化CLS位置的目的。

        第一眼这种操作,反应是这么做完全很难解释,处理方式有点是两个层各取部分位置的token拼接,然后增加模型复杂度来达到微小提升的目的,但从论文提到的几点妄自揣测这么做的动机:

        1、作者提到CLS位置在中间层并不参与其他位置的self-attention,因此它可以看作相对独立,因此与谁拼接影响不大;

        2、从第7层到第12层的网络学习仅仅使用了第12层的CLS向量,会强迫网络将信息往CLS位置汇合,达到学习更好句子表征的目的。

三、实验结果

四、Funnel-Transformer和U-Net介绍

        作者认为他的思路来源于Funnel-Transfomer(漏斗型),而Funnel-Transfomer来源于U-net

Funnel-Transformer:出发点是解决transformer性能瓶颈,因为它在每一层的每一个token都得做self-attention,随着句子长度的增加,计算量呈现平方级的增长,这就制约了它对长句句子表征的学习表达。

之前的解决方案主要分为模型后处理和非后处理:

        模型后处理:蒸馏、剪枝、量化等

         非后处理:修改注意力机制、采用CNN等

对第一个Block,我们还是像普通Transformer那样计算,但是到第二个Block的时候,就可以先把第一层得到的特征向量池化一下:

H^{'} \leftarrow Pooling(H)

这样子,新的特征矩阵的形状就是T'*D,这里T'< T。然后在池化后的特征上进行自注意力:

H \leftarrow LayerNorm(H^{'} + selfAtt(Q=H^{'}; K, V=H))

特别注意这里的Q和KV的差别。Q是新得到的特征,KV还是池化前的特征。这是因为对原来的特征进行自注意力有利于减少池化带来的信息损失。

U-Net: 采用了四次下采样和四次上采样,如下图,像一个U型,模型名由此而来

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值