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
    +关注

    关注

    89

    文章

    38085

    浏览量

    296316
  • 编码
    +关注

    关注

    6

    文章

    1015

    浏览量

    56643
  • CLS
    CLS
    +关注

    关注

    0

    文章

    9

    浏览量

    9853
  • nlp
    nlp
    +关注

    关注

    1

    文章

    491

    浏览量

    23185

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    e203除法器算法改进(一)

    e203内部除法操作使用加减交替迭代法进行运算,除几个特殊运算外,正常的除法操作需要33个周期才能输出运算结果,极大程度地影响了系统的性能。我们对e203的除法器进行了新的算法实现并改进。目前高性能
    发表于 10-22 07:13

    e203除法器算法改进(二)

    e203内部除法操作使用加减交替迭代法进行运算,除几个特殊运算外,正常的除法操作需要33个周期才能输出运算结果,极大程度地影响了系统的性能。我们对e203的除法器进行了新的算法实现并改进。目前高性能
    发表于 10-22 06:11

    移远通信飞鸢AIoT大模型应用算法成功通过备案

    近日,第十二批境内深度合成服务算法备案信息发布,移远通信"飞鸢AIoT大模型应用算法"榜上有名。这标志着该算法在技术合规性、安全可控性及社会价值上获得权威认可,彰显了移远通信在
    的头像 发表于 08-06 08:48 695次阅读
    移远通信飞鸢AIoT大<b class='flag-5'>模型</b>应用<b class='flag-5'>算法</b>成功通过备案

    改进粒子群算法的永磁同步电机PID控制器

    采用粒子优化算法进行PID模糊控制训练能提高永磁同步电机的控制精度,提出一种基于改进粒子群算法的永磁同步电机 PID控制方法,构建永磁同步电机PD模糊控制目标画数,选择电压、转矩、速度和电磁损耗等
    发表于 05-28 15:44

    改进电压模型的异步电机无速度传感器矢量控制

    无速度传感器矢量控制技术能够有效提高交流传动系统的可靠性,降低系统成本。该技术的核心问题是准确获取电机转子转速,并将其反馈到速度闭环控制环节。介绍一种采用改进模型参考自适应转速估计方法的异步电机矢量
    发表于 05-28 15:43

    改进GPC算法在永磁同步电机控制系统中的应用

    (CARIMA)模型。基于此模型和金元郁等提出的改进广义预测控制算法(JGPC)设计出了适用于 PMSM驱动系统的速度环的改进广义预测控制器
    发表于 05-28 15:41

    永磁同步电机电流环改进内模解耦控制的研究

    取,因此控制效果难以达到最佳 。依据自由度原理,在保证内模解耦效果的基础上,引入 2 个内模电流调 节因子,对内模解耦控制器进行改进 。仿真结果表明,改进
    发表于 03-26 14:25

    YOLOv5类中rgb888p_size这个参数要与模型推理和训练的尺寸一致吗?一致会达到更好效果

    YOLOv5类中rgb888p_size这个参数要与模型推理和训练的尺寸一致吗,一致会达到更好效果
    发表于 03-11 08:12

    请问如何能让模型效果更好

    重现步骤 我用yolov8n训练出的模型,跑出来的识别是没有问题的,问题是在部署到开发板上,无论是稳定性还是框的大小以及识别的准确性都比较差,再试了几次训练后的效果还是不好,请问有什么更多的解决办法
    发表于 03-11 07:21

    改进蛙跳算法:开启电动汽车有序充电新路径

    成本和电池损耗为目标的有序充电模型,并采用改进蛙跳算法进行求解。仿真结果表明,所提策略能有效降低电网负荷峰谷差,减少用户充电成本,并延长电池使用寿命,为电动汽车大规
    的头像 发表于 02-18 08:04 973次阅读
    <b class='flag-5'>改进</b>蛙跳<b class='flag-5'>算法</b>:开启电动汽车有序充电新路径

    【「基于大模型的RAG应用开发与优化」阅读体验】RAG基本概念

    工作,同时通过Prompt工程优化输入内容,甚至实现多模型的协同推理,充分发挥不同模型的优势。结果优化层,基于用户反馈学习不断改进输出,通过可信度评估算法判断结果的可靠性,实时知识蒸馏
    发表于 02-08 00:22

    【「基于大模型的RAG应用开发与优化」阅读体验】+大模型微调技术解读

    同时优化多个相关任务的损失函数来提升模型的泛化能力。学习率调整策略:合理的学习率调整可以加速模型收敛,提高最终的性能。常用的学习率调整方法包括指数衰减、余弦退火和自适应学习率算法(如A
    发表于 01-14 16:51

    【「大模型启示录」阅读体验】营销领域大模型的应用

    今天跟随「大模型启示录」这本书,学习在营销领域应用大模型。 大模型通过分析大量的消费者数据,包括购买历史、浏览记录、社交媒体互动等,能够识别消费者的偏好和行为模式。这种分析能力有助于企业更好
    发表于 12-24 12:48

    AI模型部署边缘设备的奇妙之旅:目标检测模型

    并非易事,它涉及到从选择合适的算法架构到针对特定硬件平台进行优化等一系列复杂的工作。 接下来,我们将详细介绍如何在资源受限的边缘设备上成功部署目标检测模型,探索其背后的原理和技术,并讨论解决该领域内常见
    发表于 12-19 14:33

    【「大模型启示录」阅读体验】如何在客服领域应用大模型

    多个因素以确保所选模型能够满足企业的具体需求和目标。首先,企业需要明确自己的客服需求和目标。例如,是否需要24小时在线客服服务?是否需要处理复杂问题的能力?是否需要个性化服务?明确这些需求有助于企业更好
    发表于 12-17 16:53