Poly-encoder

Poly-encoder

论文《Poly-encoders: Transformer Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring》开放了一种新的transformer体系结构,即Poly-encoder。
Poly-encoder学习全局而不是token级别的self-attention特征,同时解决了Bi-encoder匹配质量低的问题以及 ARC-II、BERT等交互式的cross-encoder匹配速度慢的问题。

Bi-encoder

在这里插入图片描述
如图,Bi-encoder采用两个相同的网络(如BERT)得出两个句子各自的特征向量,再进行相似度计算。

  1. 计算context向量: y c x t = r e d ( T 1 ( C T X T ) ) y_{cxt}=red(T_1(CTXT)) ycxt=red(T1(CTXT))

  2. 计算candidate向量: y c a n d = r e d ( T 1 ( C A N D ) ) y_{cand}=red(T_1(CAND)) ycand=red(T1(CAND))
    red()的三种计算方法:

    ·List item取第一个位置(CLS)的向量
    ·求所有位置向量的平均
    · 求前n个位置向量的平均

  3. 相似度得分:dot-product(点积),即s{CTXT,CAND}= y c x t ⋅ y c a n d y_{cxt} ·y_{cand} ycxtycand

  4. 训练,cross-entopy(交叉熵)
    总体来讲,利用2个网络分别将context和candidate编码成向量,最后再通过一个相似性判别函数(如cosine、dot-product)计算两个向量间的相似度。
    Bi-encoder的特点是context和candidate编码成向量的过程独立(编码过程不交互),最后才开始交互,速度快但匹配质量不高。
    因此,这种独立编码的方式可以使我们离线计算出所有candidates的向量,线上服务时,只需要计算query的向量再进行相似度匹配,匹配速度快但质量不能达到最佳。

cross-encoder

在这里插入图片描述如图:

  1. 计算context和candidate的向量 y c t x t , c a n d = h 1 = f i r s t ( T ( c t x t , c a n d ) ) y_{ctxt,cand}=h_1=first(T(ctxt,cand)) yctxt,cand=h1=first(T(ctxt,cand))
  2. 相似度得分: s ( c t x t , c a n d ) = y c t x t , c a n d W s(ctxt,cand)=y_{ctxt,cand}W s(ctxt,cand)=yctxt,candW
  3. 训练:cross-entopy(交叉熵)。
    cross-encoder的特点是context和candidate输入至同意网络结构中,编码过程完全交互(即context和candidate时时刻刻应相互交互),但匹配速度慢,同时无法离线计算出所有candidates的表征向量,没处理一个context必须与所有candidates进行交互,模型非常耗时。

poly-encoder

在这里插入图片描述

  1. 计算context向量
    用多个向量表示context,(简化版:直接去前m个向量)
  2. 利用一个独立的encoder编码出candidate的表示特征。
  3. 二者交互,
    在这里插入图片描述
  4. 相似度得分:dot-product。

参考1
参考2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值