Roformer-sim模型

文章目录

RoFormer-Sim模型融合了检索和生成于一体的模型。在roformer-sim之前作者也提出了一种类似的模型BERTSIM,roformer-sim是对 SimBERT 相关技术进一步整合和优化,可以用来作为句向量的一个比较高的 baseline,也可以用来实现相似问句的自动生成,可以作为辅助数据扩增工具使用。

roformer-smi和bert-smi的区别如下所示:

SimBERT = BERT + UniLM + 对比学习 RoFormer-Sim = Roformer + UniLM + 对比学习 + BART + 蒸馏 \text {SimBERT} = \text{BERT}+ \text{UniLM} + \text{对比学习} \ \, \ \text {RoFormer-Sim} = \text{Roformer}+ \text{UniLM} + \text{对比学习}+\text{BART}+\text{蒸馏}SimBERT =BERT +UniLM +对比学习RoFormer-Sim =Roformer +UniLM +对比学习+BART +蒸馏

  1. RoformerSim Model

2.1 Roformer模型介绍

Roformer模型是transformer的升级版,它的主要改动是应用了作者构思的”旋转式位置编码(Rotary Position Embedding,RoPE)”代替transformer中的绝对位置编码,这是一种配合 Attention 机制能达到”绝对位置编码的方式实现相对位置编码”的设计。

一般来说,绝对位置编码具有实现简单、计算速度快等优点,而相对位置编码则直接地体现了相对位置信号,跟我们的直观理解吻合,实际性能往往也更好。 于是roformer就集各家之所长,提出通过绝对位置编码的方式实现相对位置编码的旋转式位置编码。

因此roformer的出发点就是通过绝对位置编码的方式实现相对位置编码,为了达到这个目的,假设通过下述运算来给 q , k q, k q ,k 添加绝对位置信息

q ~ m = f ( q , m ) , k ~ n = f ( k , n ) ( 2 − 1 ) \tilde{\boldsymbol{q}}{m}=\boldsymbol{f}(\boldsymbol{q}, m), \quad \tilde{\boldsymbol{k}}{n}=\boldsymbol{f}(\boldsymbol{k}, n) \,\,\,\,\,\,\, (2-1)q ~​m ​=f (q ,m ),k ~n ​=f (k ,n )(2 −1 )

也就是说,分别为 q , k q, k q ,k 设计操作 f ( ⋅ , m ) 和 f ( ⋅ , n ) f(·, m) 和f(·, n)f (⋅,m )和f (⋅,n ),使得经过该操作后,q ^ m \hat q_{m}q ^​m ​ k ^ n \hat k_{n}k ^n ​ 就带有了位置 m, n 的绝对位置信息。Attention 的核心运算是内积,所以我们希望的内积的结果带有相对位置信息,因此假设存在恒等关系

⟨ f ( q , m ) , f ( k , n ) ⟩ = g ( q , k , m − n ) \langle\boldsymbol{f}(\boldsymbol{q}, m), \boldsymbol{f}(\boldsymbol{k}, n)\rangle=g(\boldsymbol{q}, \boldsymbol{k}, m-n)⟨f (q ,m ),f (k ,n )⟩=g (q ,k ,m −n )

因此,目标就成为求出该恒等式的一个(尽可能简单的)解f f f。求解过程还需要一些初始条件,显然我们可以合理地设 f ( q , 0 ) = q f(q, 0)=q f (q ,0 )=q, f ( k , 0 ) = k f(k, 0) = k f (k ,0 )=k 。

具体求解过程可以参考Transformer升级之路:博采众长的旋转式位置编码,得到解f f f后,就可以用式(2-1)进行计算q , k q, k q ,k,然后进行self-attention计算的时候就带有相对位置信息了。

2.2 Roformer-Sim 模型

Roformer-Sim 的主体框架是Roformer模型,除此之外,RoFormer-Sim 用到了更多的训练数据,且不同于 SimBERT 仅仅局限于疑问句,RoFormer-Sim 可以用来做一般句子的相似句生成,适用场景更大。其他训练细节还包括 RoFormer-Sim 用了更大的 batch_size 和 maxlen 等。

2.2.1 语料

SimBERT 和 RoFormer-Sim 的关键之处,都是在于训练语料的构建。RoFormer-Sim 的训练语料包括两部分

  • 疑问类型相似句;
  • 通用类型相似句

对于疑问类相似句,还是像 SimBERT 一样,通过收集百度知道的相似问句,然后通过规则进一步清洗;
对于通用类相似句,没有现成的地方可以搜集,于是提出了两种方案来无监督地构建相似句对。

第一个方案是基于”同一个问题的答案是相似的”思想,假如我们有现成的问答语料,该语料对于同一个问题有多个答案,那么我们可以将每个答案分句,然后用一个现成的相似度函数来比较答案之间的相似度,挑出相似度超过某个阈值的句对作为相似句对使用;

第二个方案则是基于”同一篇章的句子是相似的”思想,它更加简单直接一点,就是将每个篇章分句,然后用一个现成的相似度函数两两计算相似度,挑出相似度超过某个阈值的句对作为相似句对使用,显然该方案的合理性更弱,所以它的阈值也更高。

相似度函数是直接使用 Jaccard 相似度的一个变体,换言之只需要一个规则的、字符级别的相似度就好了,语义上的关联,则通过篇章内部的关联以及预训练模型本身的泛化能力来获得。通过第一个方案,从几个阅读理解数据集中构建了约 450 万个(伪)相似句对;通过第二个方案,从 30 多 G 的平行预料中构建了约 470 万个(伪)相似句对;而爬取的问句则达到了约 3000 万个相似句组(一组可以构成多对)。从这个角度看来,问句的数目是远超于一般句式的,所以我们按照 1:1 的方式从中采样,使得每种句式的样本都均衡。

2.2.2 生成

RoFormer-Sim 的训练方式跟 SimBERT 基本一样,如下图所示。稍微不同的是,为了增强模型的生成能力,在构造训练语料的时候,我们还随机地将输入句子的部分 token 替换为[MASK],这种预训练方法首先由 BART 提出。而我们跟 BART 的区别在于:BART 是”输入带噪声的句子,输出原句子”,我们是”输入带噪声的句子,输出原句子的一个相似句”,理论上我们的任务还更难。

Roformer-sim模型

; 2.2.3 检索

增加一般句式的语料、引入仿 BART 式训练,这些改动都相对来说提升了生成模型的效果。然而,检索模型(即句子编码模型)的效果却降低了。估计可能是更多的语料、更大的噪声虽然加大了生成模型的难度,但对于对比学习来说,这些不同句式的或者带噪声的样本作为负样本,反而是难度降低了。比如,如果一个 batch 同时有疑问句和陈述句,那么模型可以简单地通过句式(而不是语义)就可以识别出不少负样本,从而降低了对语义的理解能力。

当然,SimBERT 和 RoFormer-Sim 的本质定位都是相似句扩增模型,检索模型只是它的”副产品”,但仍然希望这个”副产品”能尽可能好一些。为此,在 RoFormer-Sim 训练完之后,进一步通过蒸馏的方式把 SimBERT 的检索效果转移到 RoFormer-Sim 上去,从而使得 RoFormer-Sim 的检索效果基本持平甚至优于 SimBERT。蒸馏的方式很简单,假如对于同一批句子,SimBERT 出来的句向量为 u 1 , u 2 , . . . , u n u_1, u_2, …, u_n u 1 ​,u 2 ​,…,u n ​,RoFormer-Sim 出来的句向量为 v 1 , v 2 , . . . , v n v_1, v_2, … , v_n v 1 ​,v 2 ​,…,v n ​ ,那么就以:

L s i m = λ n 2 ∑ i = 1 n ∑ j = 1 n ( cos ⁡ ( u i , u j ) − cos ⁡ ( v i , v j ) ) 2 \mathcal{L}{\mathrm{sim}}=\frac{\lambda}{n^{2}} \sum{i=1}^{n} \sum_{j=1}^{n}\left(\cos \left(u_{i}, u_{j}\right)-\cos \left(v_{i}, v_{j}\right)\right)^{2}L s i m ​=n 2 λ​i =1 ∑n ​j =1 ∑n ​(cos (u i ​,u j ​)−cos (v i ​,v j ​))2

当然,为了防止模型”遗忘”掉生成模型,蒸馏的同时还要加上生成损失,L = L s i m + L g e n L = L_{sim}+L_{gen}L =L s i m ​+L g e n ​

  1. 总结

Roformer-Sim以Roformer为主体框架,使用大量的相似对语句进行训练,来进行似句扩增,同时检索模型作为他的副产品也获得非常好的效果。在训练的时候有两个任务:生成任务和检索任务,在生成任务中效仿BART,输入带噪声的句子,输出原句子的一个相似句,在检索任务中通过蒸馏的方式把 SimBERT 的检索效果转移到 RoFormer-Sim 上

  1. 参考

Transformer升级之路:博采众长的旋转式位置编码
SimBERTv2来了!融合检索和生成的RoFormer-Sim模型

Original: https://blog.csdn.net/orangerfun/article/details/121352941
Author: orangerfun
Title: Roformer-sim模型

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544605/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球