大规模搜索+预训练,百度是如何落地的?
大家好,我是kaiyuan。今天一起来看百度KDD2021的一篇工作,关于工业界语义检索召回系统,落地场景非常值得借鉴~
Pre-trained Language Model for Web-scale Retrieval in Baidu Search
先简单介绍一下论文要解决的任务,「根据用户搜索的query,从千亿级别的候选池中筛选出一定量的满足用户要求的网页doc」。也可以简单理解为NLP中的文本匹配任务,但是一旦涉及真实数据和工业应用场景,就会复杂很多。
关于信息检索和网页搜索,更详细的可以参考我们之前的综述文章:
微软亚研院 | 智能信息检索综述
先验知识
最近特别有感触,找到问题所在比找到答案更重要。来看看当前网页搜索面临的主要挑战:
「语义匹配」:这无疑是搜索最需要关注和解决的一块。目前query的形式多样化与口语化,像一些传统的靠词之间的硬匹配算法,很容易就错过同义表达;并且,query和doc两者长度另外,除了query和doc这两个客观的实体,更进一步的话还需要考虑用户的偏好,这在电商搜索中尤为重要。
「数据分布」:在搜索中,大多数的query和doc对于搜索引擎来说都是第一次见的,如何让模型很好地解决这种长尾数据。
「工程部署」:召回系统面向的是千亿级别的候选池,如何在保证模型效果的同时兼顾线上效率,毕竟用户体验才是产品的第一位。
长期follow我们内容的同学应该对上述问题都已经有一些个人基础的解法,下面来看看搜索巨头百度是如何做的。另外推荐一些下文所涉及的先验知识:
NLP预训练模型
万字梳理!BERT之后,NLP预训练模型发展史
NLP预训练家族 | Transformer-XL及其进化XLNet
芝麻街跨界NLP | 预训练模型专辑(三)
芝麻街跨界NLP,没有一个ERNIE是无辜的
详解ERNIE-Baidu进化史及应用场景
信息检索与文本匹配:
基于表征(Representation)的文本匹配、信息检索、向量召回的方法总结
微软亚研院 | 智能信息检索综述
谈谈文本匹配和多轮检索
文本匹配开山之作--双塔模型及实战
迈向NLP大师 | 自然语言推理入门
模型细节
任务目标是建模 query-doc之间的 「相关性匹配」(注意与「语义匹配」的区别)
模型骨架是ERNIE,最近出了一波ERNIE-3,不知道有没有更新安排上。双塔是工业届召回的标配,另外顶层交互方式参考了poly-encoder的模式,如下图。训练和预测阶段会有一点不同:
模型的细节参考poly-encoder:
底层quey、doc端ERNIE参数共享
顶层query端:用16个参数向量分别对Encoder的输出序列表示做scaled_dot_product_attention,经过FC转换后产出16个256维的向量表示
顶层title端:直接取Encoder最后的CLS向量,经过FC转换后产出1个256维的向量表示
由于上线性能的要求,计算相关性得分时在模型训练和预测阶段不一样:
训练:query端的16个向量分别与title端的向量做内积,然后对16个内积取max产出最终的score
线上inference:直接将query端16个向量做avg-pooling,这样只需和title-emb做一次内积。既满足了性能的要求,又丰富细化了query的表示。
数据挖掘
数据作为模型的上限,自然是非常重要。搜索系统实际数据来源主要是:
「搜索日志」:大规模自动有标签样本,用户点击作为正样本,未点击的作为负样本;
「人工标注数据」:0-4分档,数量较少,质量较好;正负样本的划分通过pairwise的方式使用;
上述样本作为hard negative
,由于召回是从大量不相关doc中找到非常小部分的相关doc(
),所以还设计了
easy negative
,即在同一batch中随机sample。最终batch训练正负样本数据如下
训练范式
为了让更多的领域知识融入模型,让模型具有更好的泛化性能,设计了多阶段训练模式。整个训练过程分四步:
「ERNIE 通用预训练」:单塔,NSP+MLM任务,用于热启动;
「ERNIE 领域预训练」:数据为一个月的搜索日志,query + title,单塔,输入格式
[CLS] QUERY [SEP] TITLE [SEP]
,仅仅是训练数据与Vanilla ERNIE不同;「ERNIE 一次任务微调」:搜索日志,query/title,双塔,任务变成分类任务,即从一系列不相关doc中找到正确的相关doc,进一步贴近最终目标;
「ERNIE 二次任务微调」:精细人工标注数据,query/title,双塔,任务同第三步。
损失优化
工程部署
向量压缩和量化
简单说,压缩就是把768的ERNIE向量通过FC转成256维度,量化就是把float32的变成int8。
召回框架
离线部分(左侧):计算doc端的embedding,cache保存
在线部分(右侧):分为召回和排序。召回部分又包括传统query特征计算,以及ERNIE-query向量计算。ERNIE-query-emb和ERNIE-doc-emb计算相似度打分,与传统特征一起作为上层排序的特征。注意这里的排序是召回系统内部的排序,不属于搜索大框架下的排序模块,目的是进一步缩小优化召回候选集,模型为RankSVM或GBRank;
一起交流
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)
- END -
聊一聊大火的对比学习
2021-08-12
百度提前批算法工程师面筋!效率有、高
2021-08-09
Focal Loss --- 从直觉到实现
2021-07-28
动荡下如何自救 | 社招一年收割BATDK算法offer
2021-07-27
大规模搜索+预训练,百度是如何落地的?相关推荐
- 笔记:文澜:桥接视觉和语言的大规模多模态预训练 WenLan: Bridging Vision and Language by Large-Scale Multi-Modal Pre-Training
笔记:WenLan: Bridging Vision and Language by Large-Scale Multi-Modal Pre-Training 笔记:文澜:桥接视觉和语言的大规模的多模 ...
- 【论文精度】AutoBERT-Zero (使用NAS搜索预训练语言模型)
AutoBERT-Zero 论文地址: https://arxiv.org/pdf/2107.07445.pdf Abstract 基于 Transformer 的预训练模型,如 BERT 在很多 ...
- 手把手!基于领域预训练和对比学习SimCSE的语义检索(附源码)
之前看到有同学问,希望看一些偏实践,特别是带源码的那种,安排!今天就手把手带大家完成一个基于领域预训练和对比学习SimCSE的语义检索小系统. 所谓语义检索(也称基于向量的检索),是指检索系统不再拘泥 ...
- 推荐系统预训练任务的研究进展
© 作者|陈昱硕 机构|中国人民大学高瓴人工智能学院硕士 研究方向 | 推荐系统 引言: 最近几年,各种预训练模型在NLP,CV等领域都取得了显著的效果.最近的一些工作也开始在研究如何将预训练与推荐系 ...
- ELMo预训练词向量模型
引言 Word Embedding:词嵌入.最简单的理解就是:将词进行向量化表示,抽象成为数学描述,然后可以进行建模,应用到很多自然语言处理的下游任务中.之前用语言模型做 Word Embedding ...
- 让预训练语言模型读懂数字:超对称技术发布 10 亿参数 BigBang Transformer [乾元]金融大规模预训练语言模型
导读:超对称技术公司发布10亿参数金融预训练语言模型BigBang Transformer[乾元].BBT大模型基于时序-文本跨模态架构,融合训练文本和时序两种模态数据,下游任务准确率较T5同级别模型 ...
- 让预训练语言模型读懂数字:超对称技术联合复旦知识工场等发布10亿参数BigBang Transformer[乾元]金融大规模预训练语言模型
目录 1.通用大模型的缺陷 2.专注于融合训练时序-文本跨模态的预训练模型算法架构 3.学术和工业界覆盖最完整,规模最大的金融投资类数据集 4.创新的预训练方法可大幅提高语言模型准确度:Similar ...
- 清华BAAI唐杰团队提出第一个开源的通用大规模预训练文本到视频生成模型CogVideo,含94亿超大参数量!代码即将开源!...
关注公众号,发现CV技术之美 我爱计算机视觉 专业计算机视觉技术分享平台,"有价值有深度",分享开源技术与最新论文解读,传播视觉技术的业内最佳实践.知乎/微博:我爱计算机视觉,官网 ...
- 《预训练周刊》第8期:首个千亿中文大模型「盘古」问世、谷歌等提出视频音频文本转换器VATT...
No.08 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 超大规模预训练模型是当前人工智能领域研究的热点,为了帮助研究与工程人员了解这一领域的进展和资讯,智源社区整理了第8期< ...
最新文章
- 计算机的学生该怎么做?
- 病例对照研究和队列研究详解
- 【Python】用Python实现十大经典排序算法
- 5点击换gif_新媒体人,至少要会做这种切换式GIF
- Hive中类SQL语言中的where 与having
- mysql修改主键为unique_mysql 如何修改、添加、删除表主键及unique约束
- Java程序性能优化
- 对比修改过的两个BOM表
- iOS越狱环境 debugserver 防护
- jupyter更改默认浏览器的方法
- 华为路由器显示连接到服务器失败怎么办,华为路由器设置好后不能上网怎么办...
- 微信小程序: wx:key详解
- 怎么压缩图片200k以下?这个压缩工具,3秒无损完成
- STM32通过DS18B20读取温度
- u大师u盘装系统win7_U盘启动联想ThinkPad E450 20DCA026CD重装win7系统教程分享
- 堆栈内存的分析以及作用域的详解
- 惠普战66 三代 pro win10下安装ubuntu20.04
- 计算机考试考前培训怎么弄,关于2016年下半年全国计算机等级考试考前培训实施方案...
- 如何高效的收集视频作业、收集照片作业,安利一款收集工具/小程序
- 简述计算机主机硬件安装流程,怎么看电脑配置信息 看电脑配置的方法【图文步骤】...
热门文章
- scrm电商后台管理、公司管理、店铺管理、特卖活动、营销活动、订单管理、优惠券管理、商品管理、会员管理、标签管理、会员卡、签到配置、积分、拼团、砍价、快递配置、短信配置、充值、运营活动
- 智慧、智能图书馆管理平台系统+web端业务数据管理平台+Axure通用web端高保真交互业务数据管理平台+铭牌管理+设备监控+系统管理+内容管理+机构列表管理+用户权限管理+专题管理+服务包管理
- Http Header的Transfer-Encoding
- 笔记86 | 视频在ACC起来后会跳进度问题分析
- poj 3414 Pots-bfs
- css基础内容之background
- SpringMVC 入门示例讲解
- 【leetcode】Permutations
- 按创建日期删除指定日期之前的文件夹及文件夹下的所有子目录
- (转载)在IAR及MDK里生成hex及bin文件的标准方法