0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何改进双塔模型才能更好的提升你的算法效果

深度学习自然语言处理 来源:对白的算法屋 作者:对白 2021-11-05 15:38 次阅读

来自:对白的算法

今天写点技术干货来回馈一下我的粉丝们。本来想继续写对比学习(Contrastive Learing)相关类型的文章,以满足我出一本AI前沿技术书籍的梦想,但奈何NIPS2021接收的论文一直未公开,在arxiv上不停地刷,也只翻到了零碎的几篇。于是,我想到该写一下双塔模型了,刚进美团的第一个月我就用到了Sentence-BERT。

为什么呢?因为双塔模型在NLP和搜广推中的应用实在太广泛了。不管是校招社招,面试NLP或推荐算法岗,这已经是必问的知识点了。

接下来,我将从模型结构,训练样本构造,模型目标函数三个方面介绍双塔模型该如何改进,才能更好的提升业务中的效果。

一、双塔模型结构改进

e727d636-3de0-11ec-82a9-dac502259ad0.png

如图所示,目前主流的双塔模型结构主要可以归为三类。

第一类在离线阶段直接将BERT编码的document映射为固定长度的向量,在线阶段将query映射为固定长度的向量,然后通过打分函数计算最后的得分,例如:Sentence-BERT,DPR。

第二类

模型在离线阶段将BERT编码document得到的多个向量(每个向量对应一个token)全部保留,在线阶段利用BERT将query编码成多个向量,和离线阶段保留的document的多个向量进行交互打分(复杂度O(mn)),得到最后的得分,代表工作,Col-BERT。

第三类

模型是前两种的折中,将离线阶段BERT编码得到的document向量进行压缩,保留k个(k《m)个向量,并且使用一个向量来表示query(一般query包含的信息较少),在线阶段计算一个query向量和k个document向量的交互打分(复杂度O(k)),代表工作:Poly-BERT,PQ-BERT。

总结这类工作的主要思想是增强双塔模型的向量表示能力,由于document较长,可能对应多种语义,而原始双塔模型对query和document只使用一个向量表示,可能造成语义缺失。那么可以使用多个向量来表示document,在线阶段再进行一些优化来加速模型的推断。

二、训练样本构造

检索任务中,相对于整体document库,每个query所对应的相关document是很少的一部分。在训练时,模型往往只接收query对应的相关文档(正样本)以及少量query的不相关文档(负样本),目标函数是区分正样本和负样本。然而在模型推断时,模型需要对document库中的所有document进行打分。如果模型在训练时读取的document和document库中的一些document之间的语义距离相差较大,则可能造成模型在推断阶段表现不佳。因此,如何构造训练样本是一个重要的研究方向。

方法一:(1) 首先介绍一个比较简单的trick,In-batch negatives。顾名思义,在训练时,假设一个batch中包含b个query,每个query(q_i)都有一个对应的正样本dp_i和负样本dq_i,那么在这个batch中,每个q_i除了自己所对应的负样本,还可以将batch中其他query所对一个的正样本和负样本都作为当前query所对应的负样本,大大提高了训练数据的利用率。实验表明,该trick在各种检索任务上都能提高模型的效果。

方法二:(2) 上述方法的目标是在训练过程中利用更多的负样本,让模型的鲁棒性更强。然而训练过程能遍历的负样本始终是有限的,那么如何在有限的训练样本中构造更有利于模型训练的负样本是一个重要的研究问题。

ANCE提出了一种迭代式生成负样本的思路:随着训练的进行,模型对于文本的表示也会变化,之前对于模型较难的负样本可能变得不那么难,而之前没见过的负样本对于模型可能会较难区分。该工作以此为出发点,同时进行train和inference,在训练的同时,利用上一个checkpoint中的模型进行inference,对训练数据生成新的负样本,在inference完成后,使用新的负样本进行训练。这样可以渐进的训练模型,保持负样本的难度,更充分的训练模型。

e78a1a26-3de0-11ec-82a9-dac502259ad0.png

方法三:(3) 除了利用模型本身来生成负样本,还可以利用比双塔模型复杂的交互模型来生成训练数据。RocketQA提出了基于交互模型来增强数据的方法。由于交互模型的表现更强,作者使用交互模型来标注可能成为正样本的文档(这些文档未经过标注),以及筛选更难的训练双塔模型的样本。具体的训练过程如下图所示:

e79edc68-3de0-11ec-82a9-dac502259ad0.png

总结:这类工作从训练数据着手,弥补原有的训练模式对于缺少负样本优化的不足。个人角度认为这类工作提升可能更为显著。

三、训练目标改进

训练目标上的改进比较灵活,有多种不同的改进方式,首先介绍利用交互模型改进双塔模型的工作。

相对于双塔模型,交互模型的表现更好,但复杂度更高,因此很多工作的idea是通过模型蒸馏将交互模型的文本表示能力迁移到双塔模型中,这方面有很多类似的工作。这里选取一个SIGIR2021的最新文章作为代表。

e7b3f6fc-3de0-11ec-82a9-dac502259ad0.png

如上图所示,该模型不仅蒸馏了一个交互模型(monoBERT),同时还蒸馏了一个基于双塔的改进模型ColBERT。该模型使用monoBERT作为teacher,对模型的CLS位置向量进行蒸馏,使用ColBERT作为teacher,对模型的除了[CLS]位置的向量进行蒸馏,目标函数为以下三部分的加和:

e8167462-3de0-11ec-82a9-dac502259ad0.png

最后的打分函数是monoBERT和ColBERT的组合,即,首先使用document和query的CLS位置向量输入MLP,输出一个分数,同时使用document和query的其他位置表示向量输入到和ColBERT相同的打分函数中,最后使用两个分数的和作为最后打分。

前文所述的工作都是将query和document的文本映射到稠密向量空间中,然后进行匹配。另外还有的工作是直接利用文字进行匹配。Doc2query使用一个基于seq2seq的预训练语言模型(比如T5),利用标注的document,query对进行finetune,目标是输入document输出对应的query,然后将输出的query和document本身进行拼接,扩展document。然后利用传统的检索方法,比如BM25,对扩展过的document建立索引并查找。过程示意如下图所示。在MSMARCO上的一些实验表明,这个方法可以和基于向量的搜索一起使用,提高模型的表现。

e8338908-3de0-11ec-82a9-dac502259ad0.png

四、双塔模型预训练

一般的预训练模型使用的目标函数主要是MLM或者seq2seq,这种预训练目标和双塔的匹配任务还是有一些不一致。并且已有的预训练模型即使有匹配任务(比如NSP),也是使用交互而非双塔的工作方式。为了使用预训练提高双塔模型的效果,SimCSE通过对比学习,提升模型对句子的表示能力。

该方法的实现很简单,假设提取一个batch的句子,通过模型自带的dropout,将每个句子输入到预训练模型中,dropout两次,将同一个句子dropout后的结果作为正样本,不同句子的dropout结果作为负样本,拉近正样本的距离,拉远负样本的距离,每个句子的向量由BERT的CLS位置向量表示。如下图所示:

e88ab17e-3de0-11ec-82a9-dac502259ad0.png

模型虽然很简单,但是在句子匹配任务上取得了很好的效果。该模型在检索任务上的效果还需实验。

还有的工作是针对检索任务的预训练。ICLR2020一篇论文Pre-training Tasks for Embedding-based Large-scale Retrieval提出了一些预训练任务,这些任务主要是针对Wikipedia的,不一定具有普适性。如下图所示,紫色d框出来的代表document,q1,q2,q3代表不同任务构造的的query,q1是ICT,即利用document所在的一句话作为query,q2是BFS,即利用document所在网页的第一段中的一句话作为query,q3是WLP,使用document中的某个超链接页面的第一句话作为query。任务目标是匹配q1,q2,q3和d。

e8b6746c-3de0-11ec-82a9-dac502259ad0.png

Condenser

传统的MLM预训练任务如下图所示,该任务没有特别强制训练CLS位置的向量表示能力。为了将整个序列的信息压缩到CLS位置上,Condenser将模型分成两部分,第一部分和普通的Transformer一样,第二部分使用经过更多交互后的[CLS]位置向量(黄色部分)来预测[MASK]的token,强制模型的[CLS]编码可以具有还原其他token的能力。

e932122a-3de0-11ec-82a9-dac502259ad0.png

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    87

    文章

    26443

    浏览量

    264038
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54457
  • CLS
    CLS
    +关注

    关注

    0

    文章

    9

    浏览量

    9651
  • nlp
    nlp
    +关注

    关注

    1

    文章

    463

    浏览量

    21819

原文标题:业界总结 | 如何改进双塔模型,才能更好的提升你的算法效果?

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何提升单片机开发技术?

    学习 单片机开发技术的基础是电子电路原理和C语言编程。我们需要通过学习相关的教材和课程,加强对电子电路原理和C语言编程的掌握。只有扎实的基础知识,才能更好地进行单片机开发。 二、参与实际项目开发 实践
    发表于 01-05 10:14

    模型算法总结

    本文将继续修炼回归模型算法,并总结了一些常用的除线性回归模型之外的模型,其中包括一些单模型及集成学习器。 保序回归、多项式回归、多输出回归、
    的头像 发表于 11-03 10:39 311次阅读
    <b class='flag-5'>模型</b><b class='flag-5'>算法</b>总结

    中国计算机大会现场王海峰揭秘文心大模型4.0

    王海峰表示,基于更强平台、更优数据、更好算法,我们训练出规模更大、效果更好的文心大模型4.0。通过飞桨与文心的协同优化,
    的头像 发表于 10-29 11:35 516次阅读

    STM32和DSP两个做运动控制算法,哪一个的控制效果更好一点?

    哪一个的控制效果更好一点
    发表于 10-15 13:36

    怎么评估一个滤波算法的滤波效果?

    怎么评估一个滤波算法的滤波效果
    发表于 10-10 07:31

    百度千帆大模型2.0一天可跑通大模型效果验证

    百度千帆大模型2.0一天可跑通大模型效果验证 今天的2023百度云智大会上,百度智能云宣布千帆大模型平台2.0全面升级,百度千帆大模型2.0
    的头像 发表于 09-05 16:17 718次阅读

    盘古大模型和文心一言哪个更好

    盘古大模型和文心一言哪个更好? 盘古大模型和文心一言都是非常优秀的文本生成模型,它们都具有很高的准确性和流畅性,但就其在某些方面的表现和应用而言,二者还是存在一些区别的。
    的头像 发表于 08-31 09:01 3840次阅读

    异步电机的改进型电压模型磁链观测器介绍

    导读:本期文章主要介绍异步电机的改进型电压模型磁链观测器。传统纯积分形式的积分器在低速区域存在初始值问题和直流偏置问题,所以在实际应用中必须对电压模型进行改进。本期文章中的对电压
    的头像 发表于 08-19 16:00 697次阅读
    异步电机的<b class='flag-5'>改进</b>型电压<b class='flag-5'>模型</b>磁链观测器介绍

    机器学习算法汇总 机器学习算法分类 机器学习算法模型

    是解决具体问题的一系列步骤,机器学习的算法被设计用于从大量的数据中自动学习并不断改进自身的性能。本文将为大家介绍机器学习算法汇总和分类,以及常用的机器学习算法
    的头像 发表于 08-17 16:11 724次阅读

    ai算法模型的区别

    ai算法模型的区别 人工智能(AI)是当今最热门的技术领域之一。虽然AI被广泛应用于各种领域,但其核心是由算法模型组成的。AI算法
    的头像 发表于 08-08 17:35 2801次阅读

    AI大模型的开源算法介绍

    自定义。 AI大模型的开源算法简单来说就是用于训练AI大模型算法,并且是开源的。 现阶段随着计算能力的不断提升和数据量的不断攀升,越来越多
    的头像 发表于 08-08 17:25 1381次阅读

    点云标注的算法优化与性能提升

    点云标注的算法优化和性能提升是提高自动驾驶技术的关键因素。通过优化算法提升性能,可以获得更准确、更高效的点云标注结果。 首先,算法优化可以
    的头像 发表于 07-13 15:20 313次阅读

    智能开源大模型baichuan-7B技术改进

    改进如下: 效果改进 :用于提升模型效果以及解码效率。 分词
    的头像 发表于 06-17 14:14 750次阅读

    如何优化和提升滤波器的效果

    要优化和提升滤波器的效果,可以考虑以下几个方面。
    的头像 发表于 06-10 11:10 836次阅读

    快速入门自动驾驶中目标检测算法

    的,具有普适性。 3. 当交通场景中目标密集、相互遮挡时,改进非极大值抑制算法、合理设计边界框可以有效缓解目标漏检、误检等问题。 4. 当交通场景相对复杂、背景多变时,损失函数的改进可以
    发表于 06-06 09:40 0次下载
    快速入门自动驾驶中目标检测<b class='flag-5'>算法</b>