前沿重器

栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。

近期,我更新了我的文章合集,累积起来有60w字,在这:CS的陋室60w字原创算法经验分享-2022版。

往期回顾

  • 前沿重器[19] | 预训练在美团搜索广告中的应用

  • 前沿重器[20] | 文本分类和意图识别调研思考

  • 前沿重器[21-25] | 合集:两万字聊对话系统

  • 前沿重器[26] | 预训练模型的领域适配问题

  • 前沿重器[27] | 从遗忘问题到预训练轻量化微调

向量召回本身是个新潮的东西,这次给大家小小的总结一下,工业界和科研界中常见的向量召回方案,希望能给大家一些启示吧。

前沿

首先,什么是向量召回,核心的流程是什么样的,先介绍下。首先,所谓向量召回,就是把物料和用户query都进行向量表征,物料可以构造索引供query向量进行检索,本质还是在库里检索和query最接近的那些物料,相当于推荐中的一路召回。具体的细节,可以看看我这篇文章,已经详细解释了:心法利器[16] | 向量表征和向量召回。

由于深度学习的逐渐深入,这种泛化的向量表征方式也成为了大家尝试的方向,更有比较激进的在尝试直接跳过字面的召回而直接选择向量召回的方式,可见该方式的热门程度,大家所关注的,就是他对特征的要求低,而且泛化能力强,所以也就成为了“香饽饽”。

那么,工业界和科研界到底是怎么做的,有没有什么先进的思路可以考虑,本文会分模块地详细总结,并给出一些大家一些思路吧。当然,我对图深度学习、图谱等不太熟悉,本文先不聊,主要就是聊双塔。

文章整体思路是这样的(懒人目录):

  • NLP技术下的QQ匹配

  • 工业界Query塔的表征

  • 工业界物料塔的表征

  • 难负例的挖掘

本文是综述,不会把每篇文章都展开讲,也不会列举出这个角度的所有文章,而是大概描述文章的特定亮点,并进行总结,说到的参考资料都会放到文末,并标上序号,大家后续按需深入阅读。

NLP技术下的QQ匹配

QQ匹配最简单而又经典的方案了,在对话系统和传统的搜索系统中非常常见,而且日渐成熟,其本质就是把query和物料放在同一个语义空间下进行训练和推理,所以专业的,领域内被称为语义表征,应为可以是text representation,大家其实经常能看到类似的说法,这方面的研究,我分为2个模块:

  • 表征层。

  • 预训练模型引入后的新问题。

  • 损失函数的优化思路。

表征层

表征成的优化相信大家都比较熟悉的,始于DSSM[1],后续里面的全连接层可以换成CNN,成为CLSM[2],又可以换成LSTM,成为DSSM-LSTM[3],而后续又对这块进行了一些总结性的归纳,有了infersent[4],统一了整个框架,并给出了一些较好的训练方法。(我也在以前有聊过这里的细节,见:心法利器[7] | 漫谈语义相似度与语义向量表征)

而后,就是预训练模型的时代了,最有代表性的是Sentence-BERT[5]和SimBERT[6],这俩在我看来都是在预训练模型用于语义表征的代表之作,虽然说后续对比学习的引入让预训练在此方面的应用更加优秀了,但这两篇工作,仍旧是很有学习和吸收的价值。

预训练模型引入后的问题

预训练模型直接做语义表征是有问题的,这个问题本身和训练策略和数据有关,例如特定词汇的词频,导致了出现语义空间各向异性的问题[7],从而限制了预训练模型在这个领域应用的天花板,而解放这一束缚,后人做出了新的努力。

第一阶段是直接在预训练的表征后增加一些转化的层,比较有代表性的是bert-flow[8]和bert-whitening[9, 10],通过映射的方式把预测的结果从有问题的空间转化到正确的空间里去,所谓的正确理解可能会有所不同,个人是比较喜欢bert-whitening对标准正态分布是各向同性的这一理解,用线性的变换的方式就能轻松解决该问题。

第二阶段,是考虑直接去解决词频和训练的问题,某种程度上说,其实和数据增强类似的思路,从样本或者从训练层面进行增强,从而直接解决预测层间的空间问题,以样本增强为代表的是美团的ConSERT[11],而在模型层面或训练策略层面的增强,代表之作就是现在大家都比较熟悉的SIMCSE[12],效果自不必多说,以SIMCSE为例,在STS等标准数据集下的效果,是要比作为极限的BERT要好一大截,算是继预训练模型引入之后的又一质变,甚至可以从数据中看到,无监督的方案甚至是能够逼近有监督方案的,这点其实强的蛮离谱的。

提一下,二阶段的这套思路,其实也很大程度上让NLPer意识到,对比学习可能是进一步优化语义表征的一大突破口。

损失函数的优化思路

与其说对比学习,其实我更想说是损失函数的应用。这块的NLP论文我接触的其实不多,然而是看到了这个东西在CV领域方兴未艾。

这个关注点,我其实在很久之前的文章就有聊到了,就是这篇:前沿重器[8] | CV研究启发语义相似和表征,在人脸识别领域,表征这个事情和我们现在聊的非常接近,相似度表征的训练内部其实有大量可以用来进行优化的方式,例如margin的思想能把不同类的尽可能拉开,类间的壁垒得到提高,从而提升预测性能。这块论文不在提了,直接前面我说的那篇文章吧。

人脸说完,NLP有在用吗,有的,直接给个工业界的例子吧,OPPO的小布助手在这块其实已经有应用并且落了地了,可以参考下[13],我也写过讲解:前沿重器[7] | 小布助手登顶百度千言短文本相似度的秘诀。

工业界Query塔的匹配

有关Query塔的匹配,我比较想聊的是两篇文章吧,都是KDD21的,淘宝[14]和FB[15]的,这两篇都值得稍微的展开,淘宝那篇文章我专门聊过:前沿重器[18] | KDD21-淘宝向量检索。

淘宝电商

淘宝这篇的文章,这里想聊的是query塔,有意思的有两个点:

  • 没有用预训练模型。

  • 虽然抛弃了预训练,但始终对attention机制不离不弃。

前者一定程度上说明,预训练模型并不是现阶段,即使是前沿技术下必备的那块拼图,后者则说明,在复杂信息下,attention做信息筛选的重要性,两者综合起来看,真正重要的可能并非预训练模型,而是attention这种全局的信息筛选机制。

另外,还想聊的是,相比比较纯的NLP表征,这里的query表征方案其实做的很泛很广,详细展开下:

  • Query本身的理解,是从多粒度的角度分别解析后进行融合。

  • 使用了用户的历史行为信息,主要也是针对query层的信息。

  • Attention,尤其是coattention来进行多个特征的合并,可以看出作者对attention机制的理解非常深刻。

FACEBOOK电商搜索

而facebook的这篇论文,在使用阶段使用的是3个特征,分别是char-3-gram、国家信息和Query文本的信息。

在query解析上,char-3-gram给出的是文本内的细节信息,与之有区别的XLM则更倾向于更加泛化深入的语义信息,淘宝表面上是没有讨论深入的语义信息,n-gram的提取,但实际上,有q_seg,加上一定深度的attention,本质上是有的,可以说是八仙过海各显神通了,既要求query内部char级别的细节信息,有要求一定程度的深入信息。

物料塔

物料塔本身是一个非常业务导向的模块,这个物料塔怎么构建很大程度上和物料性质特征有关,可以是文本、音乐、视频,甚至是一些更加多样化的东西,例如商品(电商)、店铺(美团等生活服务)、理财产品(银行证券等),他们有很多物料自己的特征,甚至物料层面还有很多多样性很强的特征,例如商品,手机和外套之间的差距也非常大,也很复杂,严格地,其实已经算是“多模态”了,那么各行各业是怎么解决的呢,这里来看看工业界都是怎么搞的吧。

淘宝和FB的商品处理

电商的话,我们继续上面淘宝和FB的来聊,两者的处理差距非常大,简而言之,淘宝走的是“摆烂”路线,直接用标题做简单的处理,而FB则做了很多复杂的工作,多特征多模态处理。图我就不重放了,大家可以回去看看。

淘宝使用的是标题+全连接的模式,非常原始和简单,直接图可见,item这块有"没太说明细节"的表征以及title的简单表征,就用了全连接,真就感觉挺“摆烂”的。不过在线应用,效果好,估计没什么大问题,可能关注点在那个item的表征吧,不过实在没在论文里榨出什么关键点来,估计有些还没公开的操作吧。

而FB,则在物料塔内做了很多的工作,标题的处理用了和query类似的操作,另外还引入了图片的embedding,可以说是多模态信息了,最终用了一个attention fusion来进行融合。

淘宝和FB的差异其实挺有意思的,个人仔细想,两者的差异和考量主要有这几个关键点吧:

  • 中英文的差异所致,中文信息浓度比英文高,这点类似为什么汉字容易出现弹幕文化,英文不容易有。

  • 淘宝本身标题的信息含量不小,很多参数型号之类的信息是会在标题里的,直接处理是有效的。

  • 要考虑冷启动问题,淘宝这个对冷启动的压力会下很多吧。

音乐场景的操作——腾讯[16]

音乐对不少人来说可能是一些比较陌生的领域,但是在处理上,有不少有意思的特征其实可以尝试的,图像上有内容识别和情绪识别,文本不必多说,音频有自己的表征模式,标签很大部分来源于用户,后续也通过一些算法进行了自动化标注,视频则可以依赖标题提取一些信息,再就是视频内的信息提取等,细节上,一个是因为这篇分享内容本就不太细,另一方面很多超出了本文希望聊的内容,所以此处点到为止吧,大家只需要知道这方面有进展,有可深入调研的内容即可。

更复杂的场景——美团[17]

相比音乐更加复杂的场景,美团算一个,美团的物料可以说是妥妥的说是“异构信息”,文章本身是在聊排序,但是文章本身对物料的解析和表征有些借鉴意义,简单总结下:

  • 为多个业务搭建子网络,并用特定的方式构造配额来划分各个模块的重要性。

  • group-lasso的方式对多个子网络的特征进行筛选,后续有加入了基于query的attention进行进一步优化。

HARD CASE挖掘

HARS CASE挖掘可以说是向量召回领域的一个特色问题,难负例本身对预测的准确性影响巨大,借此机会,分享几个挖掘方案吧。

  • 用字面检索(如BM25粗排的召回)召回与query相似的样本,赋为负例。

  • BATCH内,通过两两相似度矩阵进行粗排挖掘[14]。

  • 正负例表征加权求和构造负类embedding[13]。

  • R-dropout[17]等增强方式。

小结

上面综述了不少方法,让大家能够了解到前沿的向量召回都是用的什么做表征的,划几个重点:

  • 工业界和科研界好像尚未有些不同,科研界更多关注语义的表征,预训练模型更多,工业界则更在乎多粒度的语言理解,还有用户行为。

  • 科研界,在语义表征上,NLP层面预训练模型还是有很大优势。

  • 多信息的组合,以及日常任务的协作,导致了工业界模型虽然都还偏大,但其实都有分多个模块,然后最终组装的模式。

  • attention,因为多模块组合的原因,成了工业界的宠儿。

当然了,这里也给大家在向量召回上一些使用建议吧。

  • 预训练模型并不是必须得,可以先考虑多粒度的语义理解并进行融合,这个优先级更高。

  • 搜索不止有语义信息,无论是query塔还是物料塔,还会有很多信息和特征,前者有用户历史行为,后者有多模态和其他物料特征。

  • 向量召回不太能是唯一的召回方案,字面召回还是建议保留,这点在[13]的架构图里有体现,我上一篇文章也有聊这个问题:心法利器[62] | 向量召回和字面召回的选择与权衡。

参考文献

参考文献前半部分,是前面提到的文章,后半部分,还给了一些建议大家深入阅读的东西,有兴趣也可以看看的。

[1] Learning deep structured semantic models for web search using clickthrough data
[2] A latent semantic model with convolutional-pooling structure for information retrieval
[3] Semantic modelling with long-short-term memory for information retrieval
[4] Supervised Learning of Universal Sentence Representation from Natural Language Inference Data
[5] Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
[6] simbert:  https://kexue.fm/archives/7427
[7] Representation Degeneration Problem in Training Natural Language Generation Models
[8] On the Sentence Embeddings from Pre-trained Language Models
[9] Whitening Sentence Representations for Better Semantics and Faster Retrieval
[10] https://kexue.fm/archives/8069
[11] ConSERT: A Contrastive Framework for Self-Supervised Sentence Representation Transfer
[12] SimCSE: Simple Contrastive Learning of Sentence Embeddings
[13] 基于深度学习的短文本相似度学习与行业测评:https://mp.weixin.qq.com/s/6VqFTj2MVF24yF2KwPOcpQ
[14] Embedding-based Product Retrieval in Taobao Search
[15] Que2Search: Fast and Accurate Query and Document Understanding for Search at Facebook [16] 腾讯音乐多模态音乐匹配技术与应用:https://zhuanlan.zhihu.com/p/458220532
[17] 多业务建模在美团搜索排序中的实践:https://blog.csdn.net/MeituanTech/article/details/118585808
[18] R-Drop: Regularized Dropout for Neural Networks

后半部分的文章则是一些推荐阅读的内容了:

[1] Deep Learning for Matching in Search and Recommendation
sigir18中提到的一篇有关深度学习匹配的工作。
[2] Recent Trends in Deep Learning Based Natural Language Processing
sigir19的趋势分析,内部提到了表征。

前沿重器[28] | 前沿的向量召回都是怎么做的相关推荐

  1. 前沿重器[31] | 理性聊聊ChatGPT

    前沿重器 栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有.(算起来,专项启动已经是20年的事 ...

  2. 前沿重器[21-25] | 合集:两万字聊对话系统

    前沿重器 栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 近期,我再次总结了我的历史文章, ...

  3. 前沿重器[7] | 小布助手登顶百度千言短文本相似度的秘诀

    [前沿重器] 栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 往期回顾 前沿重器[2] | ...

  4. 前沿重器[24] | 聊聊对话系统:内容输出

    前沿重器 栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 近期,我再次总结了我的历史文章, ...

  5. 前沿重器[10] | bert语义空间的思考

    [前沿重器] 栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 往期回顾 前沿重器[5] | ...

  6. 前沿重器[5] | 阿里小蜜的数据量分级处理机制

    [前沿重器] 全新栏目,那么栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 往期回顾 前沿 ...

  7. 前沿重器[1] | 微软小冰-多轮和情感机器人的先行者

    [前沿重器] 全新栏目,那么栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 往期回顾 NL ...

  8. 前沿重器[13] | 知乎query改写思路启示

    [前沿重器] 栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 往期回顾 前沿重器[7] | ...

  9. 前沿重器[15] | R-Dropout——一次不行就两次

    前沿重器 栏目主要给大家分享各种大厂.顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术.具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有. 往期回顾 前沿重器[10] | ...

最新文章

  1. python常用内置函数总结-Python学习教程之常用的内置函数大全
  2. Assembly.Load()不能加载程序集的问题
  3. CLion 远程Linux服务器 开发调试
  4. python文件传输模块_如何将python对象从一个文件模块传递到另一个文件模块?
  5. bzoj 1119 [POI2009] SLO bzoj 1697 牛排序 —— 置换+贪心
  6. 消息队列---RabbitMQ深入研究(含Springboot+RabbitMQ整合)
  7. 一致性hash算法的应用研究学习
  8. Gitlab-API各状态码解释
  9. 对话系统的简单综述及应用智能客服
  10. linux libaio介绍
  11. php dingo和jwt,DingoApi 中使用 JWT
  12. librosa重采样和声道设置
  13. Python面试——基础面试题
  14. Windows11镜像下载及安装
  15. MQ-2烟雾传感器检测
  16. JavaScript shells
  17. Python(分治算法)问题 A: 找出伪币_给你一个装有n枚硬币的袋子。n枚硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这枚伪造的硬币。
  18. SOLIDWORKS钣金成形工具
  19. 给ROCK64安装OpenCV3
  20. 记录我的第一次面试(C++实习生)

热门文章

  1. JS相关笔记---DAY2(逻辑运算,判断,循环以及demo,在输出方面和C,java有很大不同!)
  2. conda install安装python库失败:PackagesNotFoundError: The following packages are not available from curren
  3. 机器学习之理解Bias-Variance Tradeoff
  4. MySQL数据库入门超级详细教程
  5. 蜜芽刘楠:垂直电商的新出路是价值链为王
  6. python中title函数有什么用_Python title()字符串处理函数的使用
  7. Flink教程(10)-BroadCast State和BroadCast Stream
  8. 坚果啊!ISA-NUT协会成立:求围观
  9. 【VAR模型 | 时间序列】帮助文档:VAR模型的引入和Python实践(含源代码)
  10. 小结字符集及字符编码问题