Fork me on GitHub

算法工程师之路—搜索召回策略篇

作者: 洪九
来源: https://zhuanlan.zhihu.com/p/97357462

1.召回策略

召回阶段通常是推荐、搜索、广告和O2O分单中的第一步,其输出作为后续阶段的输入。最终展示给用户的数据是这个集合的子集。召回太多,导致后续的精细化排序过程计算压力大,用户被“读懂”的幸福感降低;召回太少,用户看到的内容太少,不利于用户和平台发生转化。所以召回阶段对系统的性能至关重要

关于召回暂时想到这么多,后续补充.
preview

2. 搜索召回

搜索的使命是“找你所需”,在用户已经通过Query明确表达搜索意图的情况下,只需要对Query切词然后从倒排表中召回相关文档即可。但是用户很多时候并不能通过Query准确表达自己的真实需求,或者由于语言本身的复杂性,导致用户输入的Query无法与引擎匹配。种种以上原因导致“相关性低”或“零少结果”。所以搜索召回与推荐召回不同的是很大一部分工作集中在对Query的分析上


2.1 Query多粒度切词

preview

不同的分词算法,在准确率、歧义词、未登录词识别等方面性能有较大差别。“小孩才做选择大人全都要”,为了不漏掉丝毫理解用户的机会,可以采取多种不同粒度的分词算法结果组合的策略。

比如:

Query:结婚的和尚未结婚的

分词一: 结婚/的/和尚/未/结婚/的

分词二: 结婚/的/和/尚未/结婚/的

分词三: 结婚/婚的/的和/和尚/尚未/未结/结婚/婚的

可以把多种分词结果组合去重丢给引擎,也可以看成是一种Model Ensemble方法。

参考资料:

1.基于层叠隐马模型的汉语词法分析

基于层叠隐马模型的汉语词法分析(_办法www.docin.com2. bi-LSTM + CRF 序列标注

https://ansvver.github.io/lstm_crf_ner.htmlansvver.github.io

2.2 Query纠错

preview

在百度中搜索“肯得鸡”。

可以看到百度已经帮我们把错误纠正了,避免了“零少结果”,提高了用户体验。

参考资料:

1.搜索引擎的Query自动纠错技术和架构详解

https://blog.csdn.net/catherine_985/article/details/78789089

2.3 Query丢词

preview
丢词相当于把用户较长尾的搜索需求“泛化”。比如用户搜索“上好佳饼干”,但发现引擎中目前没有相关商品记录。对Query做简单的分析:

preview

以上结果在http://ltp.ai/demo.html计算

根据依存句法分析结果,核心词汇 为“饼干”,“上好 佳为修饰词”。同时根据“自定义”规则,“名词”(这里为“饼干”)的重要程度高一些。因此可以丢掉修饰词,只根据“饼干”召回相关的item。所以,Query丢词策略需要识别Query中哪些是重要词汇最大努力的保留Query的原始语义

2.4 Query同义

preview

比如用户搜索“番茄”,引擎如果可以“番茄 西红柿”一起搜索,零少结果 的可能性就会小很多。

参考资料:

1.搜索引擎中同义词的挖掘及使用http://www.mamicode.com/info-detail-2486542.html

  1. Random walks on the random graphhttps://arxiv.org/abs/1504.01999
  2. 基于MapReduce的SimRank++算法研究与实https://blog.csdn.net/yangxudong/article/details/24788137
  3. Querying Word Embeddings for Similarity and Relatedness http://aclweb.org/anthology/N18-1062
  4. Learning Query and Document Relevance from a Web-scale Click Graph https://www.researchgate.net/publication/305081382_Learning_Query_and_Document_Relevance_from_a_Web-scale_Click_Graph
  5. 基于点击图模型Query和Document相关性的计算

https://blog.csdn.net/qq_27717921/article/details/80549350

  1. 面向检索信息的同义词挖掘(后续补充到图中)

面向检索信息的同义词挖掘

2.5 Query向量化

preview

相比于传统的基于关键词的精准检索方式,向量化召回直接从全库向量集合中依据向量相似度定义检索最相近的候选集合。得益于向量表示较好的泛化能力语义表达能力,可以作为传统方法的补充。对检索结果的多样性

2.5.1 Query向量生成

用户输入的Query具有很大的自由度,无法离线预先生成向量。目前可参考的Query向量生成模型有很多,简单介绍下了解的几种。

1).Simple BOW方法

将Query每个Word的Embedding向量简单平均。
preview

2). NN Method

preview

就是将离线生成的Word Embedding向量经过一个NN网络,有点类似于NLP领域目前比较时髦的Transformer

3). Deep Average Network Method
preview

4).Bi-LSTM + Self-attention

参考文档:

  1. A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING

https://arxiv.org/pdf/1703.03130.pdf

2.论文笔记:A Structured Self-Attentive Sentence Embedding

https://www.cnblogs.com/wangxiaocvpr/p/9501442.html

  1. A Self-Attention Setentence Embedding 阅读笔记

https://blog.csdn.net/weixin_41362649/article/details/88806420

4.《A Self-Attention Setentence Embedding》阅读笔记及实践

https://blog.csdn.net/john_xyz/article/details/80650677

2.5.2 向量化检索的基础设施

实践中向量化检索主要有以下几种方式:

1).hash函数族空间划分法

2).PQ积量化方法

索引过程:

preview

检索过程:

preview

在工程落地方面,向量化检索在阿里、滴滴等厂都有应用。其中阿里在将开源的Faiss单机引擎改造成分布式版本,支持全库候选集的召回。同时阿里与浙大合作研发了基于图的向量化检索引擎(NSG算法),也已经在线上大规模应用。

preview

详情参考Paper:Fast Approximate Nearest Neighbor Search With The Navigating Spreading-out Graph

Fast Approximate Nearest Neighbor Search With The Navigating Spreading-out Grapharxiv.org

可喜可贺的是京东开源了分布式的向量化检索引擎Vearch,同样也是基于开源Faiss库。降低了需要向量化检索的探索成本。

Vearch 系统介绍 - zh_docs 0.1 文档vearch.readthedocs.io

2.6 Query意图识别
preview

用户输入关键词“Apple”,有可能是想搜索一种水果,也有可能是想搜索电子产品。如果引擎可以准确“猜”到用户的意图,就可以将最相关的Item呈现给用户。所以,引擎对用户意图理解的正确与否对提高搜索的相关性至关重要

再举一个例子(从网上找的):

多意图

如:仙剑奇侠传

游戏?--> 游戏软件?……

电视剧?--> 电视剧下载?相关新闻?……

电影?--> 电影下载?查看影评?剧情介绍?……

音乐?--> 歌曲下载?在线听歌?歌词下载?……

小说?--> 小说下载?在线观看?……

意图强度

如:荷塘月色

荷塘月色歌曲 --> 歌曲下载:50%

荷塘月色小区 --> 房产需求:20%

荷塘月色菜 --> 菜谱需求:10%

参考资料:

  1. 搜索引擎算法之关键词类目预测 https://blog.csdn.net/poson/article/details/89672802
  2. Using Search-Logs to Improve Query Tagging https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/38276.pdf
  3. 搜索引擎的查询意图识别(query理解) https://blog.csdn.net/bgfuufb/article/details/83957003
  4. 搜索意图识别浅析

https://blog.csdn.net/w97531/article/details/83892403

  1. 计算广告----query意图识别

https://blog.csdn.net/weixin_30636089/article/details/97092959

  1. 用户搜索意图的理解及其难点解析

https://www.cnblogs.com/bonelee/p/7000113.html

  1. NLP进化史系列之意图识别 https://blog.csdn.net/zengNLP/article/details/94657099

8.意图识别各种模型比较

https://blog.csdn.net/NeilGY/article/details/87882421

2.6 兜底

http://m.alibaba.com中搜索“nuclear weapons(核武器)”,发现并没有相关商品。

在上述种种操作后,如果依然没有结果,就给用户做一些推荐。总之“有总比没有强!”,不错过一点点可能产生转化的机会

2.7 完整流程

综上完整的流程可能是这样的:

preview
出于性能考虑,并不是每次请求都需要走“可选”部分,“二次召回”与“三次召回”相比于“一次召回”在相关性上会有所减弱。

参考资料:

  1. 美团点评旅游搜索召回策略的演进

https://tech.meituan.com/2017/06/16/travel-search-strategy.html

  1. 电商搜索广告召回匹配

吴海波:电商搜索广告召回匹配

结语

本章只是介绍了搜索召回的基本流程和策略点,具体的策略原理,比如纠错、语义识别等后续会单独介绍!


本文地址:https://www.6aiq.com/article/1599345196009
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出