作者: 洪九

来源: https://zhuanlan.zhihu.com/p/97357462

1.召回策略

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

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

2. 搜索召回

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

2.1 Query多粒度切词

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

比如:

Query:结婚的和尚未结婚的

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

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

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

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

参考资料:

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

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

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

2.2 Query纠错

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

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

参考资料:

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

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

2.3 Query丢词

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

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

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

2.4 Query同义

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

参考资料:

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

  1. Random walks on the random graph https://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向量化

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

2.5.1 Query向量生成

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

1).Simple BOW方法

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

2). NN Method

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

3). Deep Average Network Method

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积量化方法

索引过程:

检索过程:

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

详情参考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意图识别

用户输入关键词“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. 计算广