作者: 洪九

来源: 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. 计算广