搜索算法概要

Posted by OAA on October 25, 2024

相关链接

前言

众所周知,系统架构由组织结构决定,纵然如此,作为一个复杂系统,搜索引擎仍然可以抽象出相对统一的方法论,其体系下算法策略同样也是朴素且普适的。找准作为指挥棒的业务指标和中间指标,建设实时准确的多维反馈机制,制定平衡收益和成本的算法策略,样本挖掘、模型训练、工程开发等协同迭代…总之要从系统全局角度以避免合成谬误,即是如此

本文简要介绍了搜索算法流程中的关键节点和技术概要,旨在展现搜索整体结构。

在如今有关搜索领域的开源技术文章中,其算法策略百花齐放,尤其在细分方向上各有千秋。究其原因,一个角度的思考,搜索算法高度依赖产品定位、生态环境、平台支持、历史背景,作为一个复杂系统,其出发点、选择路径和目标的不同,最后导致该领域在细节上有一定差异化和多样性。

不过,即使如此,在众多的搜索策略中,仍可以抽象出一些统一的方法论,且这种基础的哲学思想具有较高的指导意义,并在搜索大方向和细分领域中处处可见,影响深远。

本章节则从搜索的基本技术概念的介绍出发,逐渐展开工业界曾经通用、常用且有效的算法策略,以抛砖引玉,共同学习。

什么是搜索?

搜索(Search)是指通过计算机系统来查找、获取信息的过程。它涵盖了从简单的文本匹配到复杂的模式识别和内容理解的各种技术。 在互联网领域中,搜索引擎可以分为两个大类,综合搜索和垂类搜索:

  1. 综合搜索(General Search): 最常见的搜索形式,用户可以在搜索引擎中输入关键词或短语,搜索引擎会返回与之相关的网页链接、新闻、图片、视频等内容,即搜索结果是非结构化的,用户的检索意图非常多样。典型的代表有Google、百度、Bing等
  2. 垂类搜索(Vertical Search): 指专门针对某一特定领域或行业的搜索引擎或搜索功能。与通用搜索引擎(如Google、百度)相比,垂类搜索引擎专注于某一特定的主题或领域,提供更为精准和深入的信息检索服务,如:
    • 电商搜索:针对电子商务平台上的商品和服务进行搜索和推荐,常见平台如:淘宝、京东、拼多多、亚马逊
    • 旅游搜索:提供酒店预订、航班查询、旅游攻略、景点介绍等服务,常见平台如:携程、去哪儿、同程
    • 本地生活搜索:专注于本地服务和信息的搜索服务,旨在帮助用户找到附近的商家、服务、活动等,常见平台如:美团、饿了么(淘宝闪购)
    • 地图搜索:主要用于查找地理位置、路线规划等信息。用户可以搜索地点、查看地图、导航等,常见平台如:高德、Google Maps
    • UGC内容搜索:UGC(User Generated Content)内容搜索针对用户生成的内容进行的搜索活动。UGC是指由普通用户而非专业内容创作者创建和分享的内容,常见的平台如:抖音、快手、B站、小红书、知乎

以综合搜索为例,搜索引擎的主要流程包括:

  1. 网页抓取

    通过网络爬虫程序从互联网上收集网页信息。网络爬虫会按照一定的规则遍历互联网上的网页,跟踪页面间的URL链接,并将这些URL收集到一个专门的库中

  2. 索引构建

    抓取到的网页内容会被存储在搜索引擎的数据库中,在构建索引的过程中对网页的内容进行分析和分类,提取关键词和标签,并建立索引以便后续的检索

  3. 查询处理

    当用户输入查询关键词后,搜索引擎会对查询进行处理,以便深入理解用户的查询意图。这个过程包括分词、语义理解等步骤

  4. 检索召回

    根据查询处理的结果,搜索引擎会从网页索引中检索出相关的网页,即使用各种算法(如TF-IDF、BM25、向量空间模型等)对查询和文档进行匹配,并计算文档与查询的相关性得分,返回最相关的文档给到下游

  5. 排序

    对搜索结果进行排序,搜索引擎的排序算法通常会考虑多个因素,包括网页的权重、链接的质量、用户的历史行为等,以提供最符合用户需求的搜索结果

  6. 结果展示

    最后,搜索引擎会将排序后的搜索结果呈现给用户。搜索结果通常包括标题、摘要和链接等信息,用户可以根据搜索结果快速浏览和访问相关网页。此外,搜索引擎还会提供一些额外的功能,如相关搜索、过滤和排序等,以帮助用户更快地找到所需的信息

总之,搜索引擎的工作流程涉及多个关键步骤,从内容数据获取、索引构建、查询解析、检索召回、排序到结果展示和反馈机制。每个步骤都有其特定的功能和作用,共同协作以提供高效、准确和个性化的搜索服务。

搜索的核心要素:Query、Doc、User 与 Context

对于用户来说,整个搜索交互过程中,最直接的可以被感知的主要有两块:Query 和 Doc。其中 Query 指用户在检索中自行输入的查询词,反映了用户的需求和意图;Doc 可以被认为是检索系统返回给用户的结果,在 Google 中主要就是网页,在淘宝里主要是商品,在抖音中主要就是短视频。

然而,在如今高度个性化的垂类搜索引擎中,仅仅依靠 Query 和 Doc 的文本/语义匹配是远远不够的。为了提供更精准的个性化结果,现代搜索引擎必须引入另外两个核心基石:User(用户)和 Context(上下文)。

  • User(用户): 包括用户的长期画像(如基础属性、偏好类目)和短期实时行为序列(如最近点击、购买、观看的 Doc)。这使得不同用户在搜索同一个 Query 时(如搜索“苹果”),系统能够精准区分其意图是想买水果还是购买电子产品。
  • Context(上下文): 包括用户发起搜索时的时间、LBS 地理位置、设备信息甚至是网络状态。例如,在本地生活平台搜索“外卖”,深夜和中午的召回与排序结果截然不同;在异地旅游时搜索“景点”,系统会优先基于当前的 LBS 召回本地的 Doc。

Query、Doc、User 和 Context 这四大要素的多维交互与相关性计算,以及 Doc 本身的内容质量、时效性等,共同决定了最终的用户搜索满意度。我们可以通过直接或间接的指标以衡量搜索系统的好坏,在后面的文章中,会详细介绍搜索常用指标。

搜索三件套:QP-召回-排序

简单来说,搜索可以抽象成查询理解(Query Parsing 或 Query Processing)、召回(Retrieval)、排序(Ranking),这三部分构成了整个搜索系统的核心,甚至可以作为搜索算法的方法论,在各个细分方向中,解析-召回-排序都可以作为一个行之有效的解决问题的思路(即大搜索里套着一个个小搜索),所以本系列将围绕这三个模块展开。

QP

查询理解是搜索链路中的第一阶段,主要采用 NLP 技术实现对 Query 的信息抽取,目的是理解用户需求,并把这个需求通过一系列的处理后交付给下游,建立用户和检索结果的桥梁。

QP 模块中的主要环节有:归一化(简繁转化、表情符处理等)、纠错、分词、词权重(Term Weighting)、NER、Query 改写、类目识别、意图识别等。

  • 分词: 将查询词 Query 切分成一个个独立的、有意义的词或词组,这些词或词组被称为“词元”(Token)。分词主要用在文本召回中,搜索引擎能够将 Doc 中的词汇与 Query 中的词汇进行匹配,从而找到最相关的 Doc,如 Query = “中国最好的搜索引擎推荐”,可以被切分为“中国 最好 的 搜索 引擎 推荐”,搜索引擎则会检索出包含这些词的 Doc

  • 词权重: 对分词后的 Query 中的每个词进行打分,以表示这些词的重要性,当搜索引擎数据库中没有全部包含所有分词的 Doc 的时候,就可以根据词权重选择重要的词进行检索。另外词权重可以用在 Query 和 Doc 的相关性计算中。总之,词权重用来区分哪些词更重要,从而影响文档的排名和相关性

  • Query 改写: 通过对用户输入的原始查询(Query)进行修改或扩展,旨在解决用户查询中存在的模糊性、不完整性和不准确性等问题(即解决用户输入表达习惯和检索 Doc 表述中存在 gap 的问题)

  • 类目识别: 将 Query 其归类到一个或多个预定义的类目中,如:“iphone” 可以归类为 “科技数码”,“黑悟空” 可以归类为 “游戏”,这一过程有助于搜索引擎更好地理解用户的查询意图,并根据类目信息优化搜索结果的相关性和呈现方式

  • 意图识别: 用来满足搜索 Query 在地域性、时效性等上需求,如时效性意图指用户查询中对于时间敏感度的需求,反映了用户希望获取最新信息或特定时间段内信息的期望,例:“上海空气质量指数” 这个 Query 具备较强的时效性意图,在搜索结果展示的时候需要将最新的数据展出

在传统的 NLP 技术之外,近年来大语言模型(LLM)在 QP 阶段展现出了降维打击的能力。LLM 被广泛应用于复杂及长尾 Query 的深层次意图理解、生成式 Query 改写与同义词扩展。它能够处理传统规则或小模型难以覆盖的模糊语义边界,极大提升了系统对用户非标准长句提问的解析与泛化能力。

召回

搜索召回是搜索链路中的第二阶段,即根据用户输入的查询,从海量的 Doc 中筛选出与查询相关的候选集合。召回的目标是尽可能准确和全面,以保证在后续的排序和展示环节提供用户满意的结果。因此,召回环节决定了整个搜索引擎能够提供多少有价值的信息给用户。通常搜索引擎有多个召回通路,并可以分成两种召回方式:文本召回、向量召回。

  • 文本召回: 文本召回通常有两种实现方式,倒排索引召回和 KV(Key-Value)索引召回。
    • 倒排索引召回: 将 Doc 中的每个词作为索引的条目,并记录每个词出现在哪些 Doc 中。在查询时的 QP 阶段获取 Query 的分词结果,通过交集运算来找到同时包含这些词的所有 Doc。
    • KV 召回: 主要通过离线挖掘和构建 Query-Doc 或 Query-Anchor-Doc 等 KV 关联索引,线上给到 Query 可以通过 Query-Doc 实现 Doc 召回,或根据 Query 扩展出 Anchor,最终实现 Doc 召回。
  • 向量/语义召回: 即近似最近邻搜索(ANN)。将 Query 和 Doc 通过双塔模型学习和获得各自的向量表征,在检索中通过相似度计算(余弦相似度、内积、欧氏距离等)召回与查询向量最相关的候选 Doc。
  • 协同/行为召回(i2i / u2i 等): 本质上不再依赖纯文本层面的匹配,而是基于海量用户的历史协同行为(点击、购买、停留时长等)构建图网络或共现矩阵。通过挖掘 Item-to-Item(如 Swing 算法、ItemCF)或 User-to-Item 的关系,召回那些在行为空间上与用户兴趣高度相关的 Doc。

常见召回通道

通道名称 召回方式 实现方式
分词倒排召回 文本召回 对 Query 进行粗/细粒度分词后采用倒排索引召回
丢词召回 文本召回 对 Query 分词后,保留并采用核心词完成倒排召回
同义词召回 文本召回 在 QP 阶段获取 Query 的同义词,并用同义词完成 Doc 召回
ANN召回 向量/语义召回 对 Query 和 Doc 进行向量表征,并通过相似度召回相关的 Query 和 Doc
i2i召回 协同/行为召回 基于用户历史交互的 Doc(item),召回与这些 Doc 在用户行为空间上高度共现或相似的 Doc

在各召回通道完成召回后,通常会有一个聚合模块将各通道结果打分聚合,最终筛选保留数千篇 Doc 给到下游,这个阶段叫做海选。

排序

搜索排序是搜索链路中的第三个阶段,也是对系统算力消耗最为密集的一环。工业界通常采用 “粗排 (Pre-ranking) -> 精排 (Ranking) -> 重排/混排 (Re-ranking/Mix-ranking)” 的多级漏斗过滤架构。采用这种逐层过滤的策略主要是出于对算力解耦的考量,粗排可以采用复杂度低的轻量模型从庞大的候选结果中快速筛选出一个数量较小的候选集,精排阶段则是对粗排筛选出的候选集进行更加精细和复杂的排序。比如在模型选择上,粗排会采用双塔模型,精排会采用单塔模型。

在排序阶段,通常需要计算相关性、点击率、转化率、内容质量、时效性等多个分数,并通过这些分数完成排序,具体的:

  • 相关性约束: 保证结果不偏题是搜索的底线。通常采用 BERT + GBDT 完成对 Doc 的相关性打分(根据算力分配模型)。
    • BERT: 粗排通常采用双塔6层 BERT,精排通常采用12层 BERT,模型输入通常为 [cls] query [sep] title content [sep]
    • GBDT: 输入特征为 BERT 分以及 Query 侧特征、Query-Doc 匹配特征,输出为相关性分数或分档。
  • 粗排 (Pre-ranking): 核心使命是“快速截断”。要求在极短的时间内(几十毫秒)对几万甚至十几万的召回结果进行打分过滤,通常采用双塔模型(如 DSSM 及其变体)或极致优化的轻量级网络结构。
  • 精排 (Fine Ranking) 与多目标预估: 精排阶段面对的是几百到几千个精挑细选的 Doc,可以采用更加复杂的深度神经网络(DNN)。如今工业界普遍采用多任务学习(MTL),例如利用 MMOE / PLE 等模型对点击率(CTR)和各类交互率(CVR、点赞、收藏、分享、关注、评论等)进行联合预估;同时引入 DIN / DIEN 等序列模型来精准捕捉用户的长短期兴趣演进。
    • Sparse 特征: Query、Doc、User、Author 等基础特征,User 的行为序列特征,交叉特征等。
    • Dense 特征: 各实体的 Embedding 向量、统计类特征、BERT Score 等。
  • LTR (Learning to Rank): 通常采用 GBDT 或 MLP 模型,以满意度或点击率为主要目标,融合 QP 信号、相关性、多目标预估分、质量分等进行综合打分。
  • 重排与混排 (Re-ranking & Mix-ranking): 这是决定最终用户体验、产品生态和商业营收的最关键一环。重排不再是 Point-wise(单点视角)的绝对打分,而是基于 List-wise(列表视角) 的全局最优解计算。
    • 生态调控干预: 执行同类目/同作者打散(防止用户一整屏看到同质化内容)、价格带穿透、弱势作者流量扶持、多样性保证等策略。
    • 混合排序: 将自然搜索结果与商业广告、垂类内容卡片进行合理的混排。前沿的业务场景甚至会引入强化学习(RL)来动态决定整个页面的最佳布局结构,以实现单次搜索曝光的全局收益最大化。

总结

img

综上,搜索引擎的流程可以总结为 QP、召回和排序三个阶段。QP 是建立用户查询词 Query 和目标结果 Doc 的桥梁,完成意图理解并把信号传递给下游;召回阶段通过多路通道从不同角度探索候选结果的边界,尽可能在海选阶段找全满足需求的 Doc;排序阶段则通过多级漏斗过滤的方式,在相关性的严格约束下对候选集优中选优,并结合业务生态完成最终的重排展现。

搜索是一个各模块相互依赖的复杂链路,每个模块在相互制约中不断迭代,每一次优化都需要结合系统全局现状以避免 “合成谬误”。最后,站在当前技术演进的十字路口,大语言模型(LLM)的崛起正在深刻重塑传统的搜索架构。搜索引擎正在从单一的 “信息分发与链接跳转” 工具,向着 “信息总结、推理与问答” 的知识引擎演进。诸如 RAG(检索增强生成) 等技术的落地,使得搜索链路不仅仅停留在单纯的检索排序,而是进一步延伸到了阅读理解与内容生成。

— OAA