SimBERTv2来了!融合检索和生成的RoFormer-Sim模型

©PaperWeekly 原创 · 作者|苏剑林
单位|追一科技
研究方向|NLP、神经网络
去年我们放出了 SimBERT [1] 模型,它算是我们开源的比较成功的模型之一,获得了不少读者的认可。简单来说,SimBERT 是一个融生成和检索于一体的模型,可以用来作为句向量的一个比较高的 baseline,也可以用来实现相似问句的自动生成,可以作为辅助数据扩增工具使用,这一功能是开创性的。
近段时间,我们以 RoFormer 为基础模型,对 SimBERT 相关技术进一步整合和优化,最终发布了升级版的 RoFormer-Sim 模型。

简介
RoFormer-Sim 是 SimBERT 的升级版,我们也可以通俗地称之为 “SimBERTv2”,而 SimBERT 则默认是指旧版。从外部看,除了基础架构换成了 RoFormer 外,RoFormer-Sim 跟 SimBERT 没什么明显差别,事实上它们主要的区别在于训练的细节上,我们可以用两个公式进行对比:

除此之外,RoFormer-Sim 用到了更多的训练数据,并且拓展到了一般句式,也就是说,不同于 SimBERT 仅仅局限于疑问句,RoFormer-Sim 可以用来做一般句子的相似句生成,适用场景更大。其他训练细节还包括 RoFormer-Sim 用了更大的 batch_size 和 maxlen 等,这些在后面我们都会进一步介绍。
开源地址:
https://github.com/ZhuiyiTechnology/roformer-sim

语料
SimBERT 和 RoFormer-Sim 的关键之处,都是在于训练语料的构建。RoFormer-Sim 的训练语料包括两部分:1)疑问类型相似句;2)通用类型相似句。对于疑问类相似句,我们还是像 SimBERT 一样,通过收集百度知道的相似问句,然后通过规则进一步清洗,这部分对我们来说已经很成熟了;对于通用类相似句,我们没有现成的地方可以搜集,于是我们提出了两种方案,一定程度上可以无监督地构建(伪)相似句对。
第一个方案是基于“同一个问题的答案是相似的”思想,假如我们有现成的问答语料,该语料对于同一个问题有多个答案,那么我们可以将每个答案分句,然后用一个现成的相似度函数来比较答案之间的相似度,挑出相似度超过某个阈值的句对作为相似句对使用;
第二个方案则是基于“同一篇章的句子是相似的”思想,它更加简单直接一点,就是将每个篇章分句,然后用一个现成的相似度函数两两计算相似度,挑出相似度超过某个阈值的句对作为相似句对使用,显然该方案的合理性更弱,所以它的阈值也更高。
这里涉及到一个“现成的相似度函数”,我们是直接使用 Jaccard 相似度的一个变体,换言之只需要一个规则的、字符级别的相似度就好了,语义上的关联,则通过篇章内部的关联以及预训练模型本身的泛化能力来获得。
通过第一个方案,我们从几个阅读理解数据集中构建了约 450 万个(伪)相似句对;通过第二个方案,我们从 30 多 G 的平行预料中构建了约 470 万个(伪)相似句对;而爬取的问句则达到了约 3000 万个相似句组(一组可以构成多对)。从这个角度看来,问句的数目是远超于一般句式的,所以我们按照 1:1 的方式从中采样,使得每种句式的样本都均衡。

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

▲ SimBERT训练方式示意图
生成效果没什么特别好的评测指标,我们直接目测一些例子就好:
gen_synonyms(u'广州和深圳哪个好?')
['深圳和广州哪个好?','广州和深圳哪个好','广州和深圳哪个更好?','深圳和广州哪个更好?','深圳和广州,那个更好?','深圳和广州哪个好一些呢?','深圳好还是广州好?','广州和深圳哪个地方好点?','广州好还是深圳好?','广州和深圳哪个好一点','广州和深圳哪个发展好?','深圳好还是广州好','深圳和广州哪个城市更好些','深圳比广州好吗?','到底深圳和广州哪个好?为什么呢?','深圳究竟好还是广州好','一般是深圳好还是广州好','广州和深圳那个发展好点','好一点的深圳和广州那边好?','深圳比广州好在哪里?'
]gen_synonyms(u'科学技术是第一生产力。')
['科学技术是第一生产力!','科学技术是第一生产力','一、科学技术是第一生产力。','一是科学技术是第一生产力。','第一,科学技术是第一生产力。','第一生产力是科学技术。','因为科学技术是第一生产力。','科学技术是第一生产力知。','也即科学技术是第一生产力。','科学技术是第一生产力吗','科技是第一生产力。','因此,科学技术是第一生产力。','其次,科学技术是第一生产力。','科学技术才是第一生产力。','科学技术是第一生产力吗?','第二,科学技术是第一生产力。','所以说科学技术是第一生产力。','科学技术确实是第一生产力。','科学技术还是第一生产力','科学技术是第一生产力对吗?'
]总的来说,初步实现了任意句式的相似扩增,但问句的扩增效果优于一般句型,这是因为训练语料中问句的质量就明显高于一般句型。由于进行了仿 BART 式训练,所以除了直接进行相似句生成外,我们还可以自行把某些部分 mask 掉,让模型自行发散扩充,比如:
gen_synonyms(u'科学技术是第一生产力。', mask_idxs=[6, 7]) # mask掉“第一”
["科学技术是第一生产力","2、科学技术是第一生产力。","科学技术是第一生产力,也是第二生产力。","科学技术是第一生产力,科学发展是第二生产力。","9、科学技术是第一生产力。","第一,科学技术是一种生产力。","科学技术是生产力。","科学技术是第二生产力。","科学技术是第一生产力”现在提出来的。","一、科学技术是一种生产力。","科学技术是第一生产力是什么意思","科学技术是一种主要生产力。","一:科学技术是最高生产力。","指科学技术不是第一生产力。","科学技术是第二生产力,第一生产力又是第二生产力。","二、科学技术是一种生产力。","世界上第一种生产力是科学技术。","科学技术是社会主义生产力之一。","第二,科学技术也是第二生产力。","科技是一切生产力。"
]
更多玩法,请大家自行挖掘了。

检索
增加一般句式的语料、引入仿 BART 式训练,这些改动都相对来说提升了生成模型的效果。然而,我们意外地发现,检索模型(即句子编码模型)的效果却降低了。估计的原因,可能是更多的语料、更大的噪声虽然加大了生成模型的难度,但对于对比学习来说,这些不同句式的或者带噪声的样本作为负样本,反而是难度降低了。比如,如果一个 batch 同时有疑问句和陈述句,那么模型可以简单地通过句式(而不是语义)就可以识别出不少负样本,从而降低了对语义的理解能力。
当然,SimBERT 和 RoFormer-Sim 的本质定位都是相似句扩增模型,检索模型只是它的“副产品”,但我们仍然希望这个“副产品”能尽可能好一些。为此,我们在 RoFormer-Sim 训练完之后,进一步通过蒸馏的方式把 SimBERT 的检索效果转移到 RoFormer-Sim 上去,从而使得 RoFormer-Sim 的检索效果基本持平甚至优于 SimBERT。蒸馏的方式很简单,假如对于同一批句子,SimBERT 出来的句向量为 ,RoFormer-Sim 出来的句向量为 ,那么就以:

为 loss 进行学习,这里 。当然,为了防止模型“遗忘”掉生成模型,蒸馏的同时还要加上生成损失,即 。蒸馏不需要很多步,大致 5000 步左右就可以训练完成了。
跟无监督语义相似度哪家强?我们做了个比较全面的评测一样,我们用同样的任务对比了 SimBERT 和 RoFormer 的检索效果(其中每一格的三个数据,分别代表“不加 whitening”、“加 whitening”、“加 whitening-256”的效果,同之前的评测):

从表中可以看出,不管加不加 whiteining,RoFormer-Sim 在大部分任务上都超过了 SimBERT,可见蒸馏之后的 RoFormer-Sim 的检索效果确实能获得提高,这个“副产品”也不至于太差了。

总结
本文介绍和发布了我们 SimBERT 的升级版—— RoFormer-Sim(SimBERTv2),它既可以用来扩充相似句子,也是语义相似度问题的一个较高的 baseline。相比 SimBERT,它最大的特点是将句型拓展到了一般类型,不再局限于相似问句。更多的玩法欢迎读者进一步挖掘和分享。
参考文献
[1] https://kexue.fm/archives/7427
更多阅读




#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
???? 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
???? 投稿通道:
• 投稿邮箱:hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

△长按添加PaperWeekly小编
????
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
