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

    文章

    30072

    浏览量

    268340
  • 编码
    +关注

    关注

    6

    文章

    935

    浏览量

    54759
  • CLS
    CLS
    +关注

    关注

    0

    文章

    9

    浏览量

    9695
  • nlp
    nlp
    +关注

    关注

    1

    文章

    487

    浏览量

    22006

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

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

收藏 人收藏

    评论

    相关推荐

    如何提升ASR模型的准确性

    提升ASR(Automatic Speech Recognition,自动语音识别)模型的准确性是语音识别技术领域的核心挑战之一。以下是一些提升ASR模型准确性的关键方法: 一、优化数
    的头像 发表于 11-18 15:14 227次阅读

    如何提升AIC3254 AEC的录音效果

    最近在 3254 EVM板上调试 AEC功能,平台搭建如下: 1.J7LINE OUT接音箱; 2.J4EXT MIC IN 外接了个MIC 现在情况是:回音基本消除,但是发现近端的录音效果不理想,不知如何改进?下图是我的 mini-dsp 的例程、配置,附件中是该配置
    发表于 11-07 06:02

    如何评估AI大模型效果

    评估AI大模型效果是一个复杂且多维度的过程,涉及多个方面的考量。以下是一些关键的评估方法和步骤: 一、基准测试(Benchmarking) 使用标准数据集和任务来评估模型的性能,如GLUE
    的头像 发表于 10-23 15:21 359次阅读

    未来AI大模型的发展趋势

    上得到了显著提升。未来,算法和架构的进一步优化将推动AI大模型在性能上实现新的突破。 多头自注意力机制、前馈神经网络等关键技术的改进,将增强模型
    的头像 发表于 10-23 15:06 422次阅读

    通过两级OPA656实现微弱光电信号的放大,如何才能更好的抑制噪声呢?

    我现在通过两级OPA656实现微弱光电信号的放大,但是通过示波器检测时发现一级噪声可以达到50mv,二级放大后噪声可达到200多mv。一级噪声这么大完全可以把信号噪声给淹没了,如何才能更好的抑制
    发表于 09-06 08:13

    大电流绕线电感选择什么规格的效果更好

    大电流绕线电感选择什么规格的效果更好 gujing 编辑:谷景电子 电感作为电子电路中非常重要的一种电感元器件,它的类型有很多,不同的类型在电路中的功能作用也时存在差异的。大电流绕线电感就是特别
    的头像 发表于 08-13 21:21 198次阅读

    图像识别算法提升有哪些

    引言 图像识别是计算机视觉领域的核心任务之一,旨在使计算机能够自动地识别和理解图像中的内容。随着计算机硬件的发展和深度学习技术的突破,图像识别算法的性能得到了显著提升。本文将介绍图像识别算法
    的头像 发表于 07-16 11:12 587次阅读

    ai大模型算法有什么区别

    AI大模型算法是人工智能领域的两个重要概念,它们在很多方面有着密切的联系,但同时也存在一些明显的区别。 定义和概念 AI大模型通常是指具有大量参数和复杂结构的人工智能模型,它们能够处
    的头像 发表于 07-16 10:09 1508次阅读

    深度学习模型训练过程详解

    深度学习模型训练是一个复杂且关键的过程,它涉及大量的数据、计算资源和精心设计的算法。训练一个深度学习模型,本质上是通过优化算法调整模型参数,
    的头像 发表于 07-01 16:13 1067次阅读

    【大语言模型:原理与工程实践】揭开大语言模型的面纱

    更好地拟合训练数据,并在推理和泛化时表现出色。此外,特征复用通过共享参数提高效率和性能,使得大语言模型能够更有效地利用学到的特征。最后,优化效果则通过使用更复杂的优化算法和更长的训练时
    发表于 05-04 23:55

    为什么深度学习的效果更好

    ,这些原则和进步协同作用使这些模型异常强大。本文探讨了深度学习成功背后的核心原因,包括其学习层次表示的能力、大型数据集的影响、计算能力的进步、算法创新、迁移学习的
    的头像 发表于 03-09 08:26 590次阅读
    为什么深度学习的<b class='flag-5'>效果</b><b class='flag-5'>更好</b>?

    Spring Boot和飞腾派融合构建的农业物联网系统-改进自适应加权融合算法

    接上集: 上次实验我们已经完成多传感器融合算法的设计,本次实验注意完成改进自适应加权融合算法设计。 一、背景 通过利用温室控制系统来管理温室内的各种设备并控制温度、湿度,可以更好地探索
    发表于 01-06 12:18

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

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

    拆解大语言模型RLHF中的PPO算法

    由于本文以大语言模型 RLHF 的 PPO 算法为主,所以希望你在阅读前先弄明白大语言模型 RLHF 的前两步,即 SFT Model 和 Reward Model 的训练过程。另外因为本文不是纯讲强化学习的文章,所以我在叙述的
    的头像 发表于 12-11 18:30 2071次阅读
    拆解大语言<b class='flag-5'>模型</b>RLHF中的PPO<b class='flag-5'>算法</b>

    请问如何才能得到AD9234和AD9735的spice模型

    请问如何才能得到AD9234和AD9735的spice模型?谢谢!
    发表于 12-01 06:14