热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大规模搜索+预训练,百度是如何落地的?

大家好,我是kaiyuan。今天一起来看百度KDD2021的一篇工作,关于工业界语义检索召回系统,落地场景非常值得借鉴~Pre-train

大家好,我是kaiyuan。今天一起来看百度KDD2021的一篇工作,关于工业界语义检索召回系统,落地场景非常值得借鉴~

  • Pre-trained Language Model for Web-scale Retrieval in Baidu Search

先简单介绍一下论文要解决的任务,「根据用户搜索的query,从千亿级别的候选池中筛选出一定量的满足用户要求的网页doc」。也可以简单理解为NLP中的文本匹配任务,但是一旦涉及真实数据和工业应用场景,就会复杂很多。

关于信息检索和网页搜索,更详细的可以参考我们之前的综述文章:

  • 微软亚研院 | 智能信息检索综述

先验知识

最近特别有感触,找到问题所在比找到答案更重要。来看看当前网页搜索面临的主要挑战:

  • 「语义匹配」:这无疑是搜索最需要关注和解决的一块。目前query的形式多样化与口语化,像一些传统的靠词之间的硬匹配算法,很容易就错过同义表达;并且,query和doc两者长度另外,除了query和doc这两个客观的实体,更进一步的话还需要考虑用户的偏好,这在电商搜索中尤为重要。

  • 「数据分布」:在搜索中,大多数的query和doc对于搜索引擎来说都是第一次见的,如何让模型很好地解决这种长尾数据。

  • 「工程部署」:召回系统面向的是千亿级别的候选池,如何在保证模型效果的同时兼顾线上效率,毕竟用户体验才是产品的第一位。

长期follow我们内容的同学应该对上述问题都已经有一些个人基础的解法,下面来看看搜索巨头百度是如何做的。另外推荐一些下文所涉及的先验知识:

模型细节

任务目标是建模 query-doc之间的 「相关性匹配」(注意与「语义匹配」的区别)

模型骨架是ERNIE,最近出了一波ERNIE-3,不知道有没有更新安排上。双塔是工业届召回的标配,另外顶层交互方式参考了poly-encoder的模式,如下图。训练和预测阶段会有一点不同:

模型的细节参考poly-encoder:

由于上线性能的要求,计算相关性得分时在模型训练和预测阶段不一样:

数据挖掘

数据作为模型的上限,自然是非常重要。搜索系统实际数据来源主要是:

上述样本作为hard negative,由于召回是从大量不相关doc中找到非常小部分的相关doc(

),所以还设计了easy negative,即在同一batch中随机sample。最终batch训练正负样本数据如下

训练范式

为了让更多的领域知识融入模型,让模型具有更好的泛化性能,设计了多阶段训练模式。整个训练过程分四步:

  1. 「ERNIE 通用预训练」:单塔,NSP+MLM任务,用于热启动;

  2. 「ERNIE 领域预训练」:数据为一个月的搜索日志,query + title,单塔,输入格式[CLS] QUERY [SEP] TITLE [SEP],仅仅是训练数据与Vanilla ERNIE不同;

  3. 「ERNIE 一次任务微调」:搜索日志,query/title,双塔,任务变成分类任务,即从一系列不相关doc中找到正确的相关doc,进一步贴近最终目标;

  4. 「ERNIE 二次任务微调」:精细人工标注数据,query/title,双塔,任务同第三步。

损失优化

工程部署

向量压缩和量化

简单说,压缩就是把768的ERNIE向量通过FC转成256维度,量化就是把float32的变成int8。

召回框架

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)

END -



聊一聊大火的对比学习

2021-08-12

百度提前批算法工程师面筋!效率有、高

2021-08-09

Focal Loss --- 从直觉到实现

2021-07-28

动荡下如何自救 | 社招一年收割BATDK算法offer

2021-07-27



推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 应用场景当遇到数据分类,聚类,预测等场景问题,普通的SQL方法无法解决,需要借助算法这件武器,比如聚类算法,分类算法,预测算法等等,但是手动去研究一个算法比较吃力,有没有那种工具, ... [详细]
  • 项目需要实现弹幕,网上参考了各种方法,最后觉得transform+transition实现的效果在移动设备上性能最好,在iphone6和红米4上测试,看不到 ... [详细]
author-avatar
手机用户2502853355
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有