策略PM入门第3讲:搜索引擎架构解析:毫秒响应的核心四段式设计

电商领域,最重要的就是搜索和推荐。淘宝的搜索渗透率在65%左右,推荐的渗透率更高;而搜索和推荐作为“流量指挥棒”,是融合了平台、买家、商家多个角色的复杂系统,需要同时兼顾买家体验与效率、平台营收与商业化、商家经营等多个视角的平衡。

那么当你在搜索框内

在搜索框中输入一个query词,系统在几百毫秒内从亿级商品库中筛选出最相关的结果。这看似简单的交互背后,是一套精密的四段式架构设计:Query理解 → 召回 → 粗排 → 精排 → 重排。

---

一、Query理解:自然语言处理层

Query理解是搜索链路的入口。核心任务是将用户的自然语言查询转换为系统可理解的结构化表示。这一阶段的质量直接决定了后续检索效果的天花板。

1.1 查询预处理

预处理层对原始查询进行清洗和标准化,主要包括以下操作:

- 大小写转换:统一转换为小写,避免大小写差异影响匹配

- 简繁体转换:简繁体统一,确保跨地区搜索体验一致

- 全半角转换:全角字符(如:ABC)转换为半角(ABC)

- 特殊字符处理:去除或转义特殊符号,避免影响查询逻辑

- 长度截断:限制查询最大长度(通常为50字),防止异常输入

1.2 分词与词性标注

分词是中文搜索的基础任务。将连续的字符串切分为有意义的词汇单元。

主流分词算法对比:

暂时无法在飞书文档外展示此内容

词性标注(POS Tagging)在分词后进行,为每个词标记词性(名词、动词、形容词等),用于后续的权重计算和意图识别。

1.3 意图识别

意图识别是将用户查询归类到预定义的意图类别,常见类别包括:

- 信息型(Informational):用户想获取信息(如"手机测评"、"什么牌子的手机好")

- 导航型(Navigational):用户想访问特定网站(如"淘宝官网"、"京东APP下载")

- 事务型(Transactional):用户想进行交易(如"买手机"、"手机优惠券")

技术实现:

- 基于规则:关键词+规则引擎,适合意图明确的查询

- 基于机器学习:文本分类算法(如SVM、随机森林)

- 基于深度学习:TextCNN、BERT、RoBERTa等预训练模型

1.4 扩展与纠错

query纠错:针对用户输入错误,系统通过编辑距离算法或语言模型检测并修正。

示例:

- "火才人" → "火柴人"(同音字纠错)

- "阿果手机" → "苹果手机"(品牌纠错)

query扩展:通过同义词、相关词扩展查询,提高召回率。

示例:

- "电脑" → ["计算机"、"PC"、"笔记本"]

- "手机" → ["智能手机"、"移动终端"]

query改写:

- 基于同义词词典:如《同义词词林》

- 基于语义相似度:使用词向量(Word2Vec、FastText)

- 基于用户行为:挖掘用户搜索历史中的共现词

1.5 类目预测

类目预测是电商中query理解中的一个步骤,核心是通过多分类问题将用户需求映射到站内的类目体系上,在召回、排序等阶段进行范围筛选及计算相关性。

---

二、召回阶段:海量候选集筛选

召回阶段的核心任务是从全量商品库(通常为亿级)中快速筛选出最相关的候选集。通常为千级到万级。

2.1 召回策略详解

2.1.1 关键词召回(BM25)

基于倒排索引的关键词召回是最基础的召回策略,通常使用BM25算法计算相关性分数。

那什么是倒排索引?

倒排索引 = 从「词」到「文档」的映射,用来支持快速全文检索。

对比一下「正排索引」就更好理解:

- 正排索引:

文档 → 里面有哪些词

比如:

- 文档1:华为、手机、5G

- 文档2:苹果、手机、2025

- 倒排索引:

词 → 出现在哪些文档里

比如:

- “华为” → 文档1

- “手机” → 文档1、文档2

- “5G” → 文档1

搜索的时候,用户输入关键词,系统只需要去查“这个词对应哪些文档”

典型倒排索引由两部分组成:

1. 词项词典(Term Dictionary)​

- 存所有不重复的词(term),比如:华为、手机、5G、苹果……

- 每个词都指向一个「倒排列表」。

- 实现上可以是 B+树、哈希等,用来支持高性能查询。

2. 倒排列表(Posting List)​

- 记录某个词在哪些文档里出现过,以及一些细节信息。

- 一个词对应一条倒排列表,里面是很多倒排“索引项(posting)”。

典型的一个 posting 里会包含:

- 文档ID(doc_id)

- 词频 TF(Term Frequency):这个词在该文档里出现了几次

- 位置 Position:这个词在文档里的第几个词,用于短语匹配、高亮等

召回的过程为:

用户输入:华为 手机

1. Query 分词

→ 「华为」「手机」

2. 查词典

- 找到 “华为” 对应的倒排列表

- 找到 “手机” 对应的倒排列表

3. 做集合运算

- 如果是要“同时包含”华为和手机 → 做 交集

- 如果支持复杂语法,还可以做并集(OR)、差集(NOT)等组合。

4. 得到候选文档集合

这是召回阶段的一个主要候选集来源。

2.1.2 向量召回(Embedding-based Recall)

向量召回通过稠密向量表示文档和查询,计算向量相似度进行召回。

向量表示方法:

- Word2Vec/GloVe:词向量平均,适合简单场景

- Sentence-BERT:句子级向量,适合语义搜索

- M3E/BGE:中文预训练模型,适合中文场景

- 多模态向量:结合文本、图像等多模态信息

相似度计算:

- 余弦相似度:cos(A, B) = (A · B) / (||A|| * ||B||)(适合向量已归一化,不受长度影响)

- 点积:dot(A, B) = Σ A[i] * B[i](适合向量未归一化,计算效率高)

- 欧氏距离:dist(A, B) = √(Σ (A[i] - B[i])²)(适合聚类、绝对距离度量)

2.1.3 协同过滤召回

基于用户行为数据进行召回,分为两种类型:

基于用户的协同过滤(User-based CF):

- 找到与目标用户相似的其他用户

- 推荐这些用户喜欢但目标用户未购买/浏览的商品

基于物品的协同过滤(Item-based CF):

- 找到与用户已购买/浏览商品相似的其他商品

- 推荐这些相似商品

相似度计算:

- 余弦相似度

- 皮尔逊相关系数

- Jaccard相似系数

2.1.4 多路召回融合

单一召回策略往往难以满足所有场景,因此实际系统通常采用多路召回,最后进行融合。

召回源示例:

1. 关键词召回(2000条)

2. 向量召回(1500条)

3. 协同过滤召回(1000条)

4. 热门召回(500条)

融合策略:

- RRF(Reciprocal Rank Fusion):基于排名融合

- 加权融合:基于相关性分数加权

- 去重:基于商品ID去重

---

三、粗排阶段:轻量级快速过滤

粗排阶段对召回的候选集(万级)进行轻量级排序。筛选出数百个高质量候选集,降低精排的计算压力。

3.1 粗排特征设计

粗排使用轻量级特征,注重计算效率:

用户基础特征:

- 用户ID(embedding)

- 用户年龄、性别、地域

- 用户历史行为统计(近7天点击数、收藏数、购买数)

物品基础特征:

- 商品ID(embedding)

- 商品类别、品牌、价格

- 商品热度(点击率、转化率)

- 商品分词后的文本特征

简单交叉特征:

- 用户-商品交互特征:是否点击过、是否收藏过

- 用户-类别交互特征:用户历史点击该类别的次数

3.2 粗排模型选择

逻辑回归(Logistic Regression, LR):

- 优势:速度快、易于解释、工程成熟

- 劣势:无法捕捉特征间非线性关系

因子分解机(FM):

- 优势:自动学习特征交叉、参数量少

- 劣势:需要手动设计特征

深度兴趣网络(DIN)的Wide部分:

- 优势:结合线性模型和深度模型

- 劣势:计算成本略高于LR/FM

---

四、精排阶段:深度精准排序

精排是搜索链路的核心。使用复杂深度学习模型对候选集进行精准排序,预测用户的点击/转化概率。

[图片]

图:DIN/DIEN深度学习模型架构示意图

4.1 精排特征工程

精排使用高维度特征,注重表达能力:

用户行为特征:

- 用户实时行为序列:最近7天点击/收藏/购买的N个商品

- 用户长期兴趣画像:基于历史行为聚类生成的兴趣标签

- 用户上下文特征:搜索时间、地理位置、设备类型

物品特征:

- 商品详细属性:品牌、型号、规格、材质、颜色

- 商品文本特征:标题、详情、评论的向量表示

- 商品视觉特征:商品图片的CNN特征

- 商品统计特征:点击率、转化率、复购率、好评率

交叉特征:

- 用户-商品匹配度:基于历史行为的相似度计算

- 用户-类别偏好:用户对该类别的历史偏好分数

- 商品-场景匹配:商品与搜索场景的匹配度(如促销、新品)

4.2 精排模型架构

4.2.1 深度兴趣网络(DIN)

DIN(Deep Interest Network)由阿里巴巴提出,核心创新是自适应注意力机制,根据候选商品动态激活用户兴趣序列中的相关部分。

核心机制:

- 将用户行为序列输入到Embedding层

- 通过注意力机制计算每个行为与候选商品的相关性

- 加权求和得到用户兴趣表示

- 与商品特征拼接后输入MLP

优势:

- 能够捕捉用户兴趣的动态变化

- 相比静态兴趣模型,CTR预测精度提升显著

4.2.2 深度兴趣演化网络(DIEN)

DIEN(Deep Interest Evolution Network)在DIN基础上,引入了GRU建模用户兴趣的演化过程。

核心机制:

- 兴趣抽取层:使用GRU从行为序列中抽取兴趣状态

- 兴趣演化层:使用AUGRU(Attention-updated GRU)更新兴趣

- 与候选商品交互,预测点击概率

优势:

- 能够建模用户兴趣随时间的演化

- 对长尾商品有更好的预测能力

4.2.3 多任务学习模型

精排通常需要优化多个目标,如CTR(点击率)、CVR(转化率)、GMV(销售额)。

这是个大问题:你优化哪个指标?点击率高不代表买的人多。多任务学习就是为了解决这个问题。

多任务学习架构:

- 共享底层:提取通用特征表示

- 任务专属塔:每个任务有专属的深度网络

- 损失函数:加权多个任务的损失

损失函数示例:

L_total = α * L_CTR + β * L_CVR + γ * L_GMV

其中α、β、γ为任务权重,根据业务目标调整。

---

五、重排阶段:结果优化调整

重排阶段在精排输出的有序结果基础上,进行多样性优化和商业干预,提升用户体验和商业价值。

这一步主要是调优结果,让展示更合理、更丰富。

5.1 多样性打散

打散策略详解:

5.1.1 类别打散(Category Diversification)

限制同一类别的商品连续展示数量。

算法:

遍历精排结果列表

对每个商品,检查其类别

如果该类别在最近K个结果中已出现M次,则跳过

否则,加入最终结果

参数:

- K:窗口大小(通常为5-10)

- M:最大连续次数(通常为2-3)

5.1.2 商家打散(Merchant Diversification)

限制同一商家的商品集中展示,防止搜索结果被头部商家垄断。

算法:

- 统计每个商家在结果中的数量

- 按照规则限制:每个商家最多出现N次

- 优先选择长尾商家的优质商品

5.1.3 热度打散(Hotness Diversification)

在热门商品中插入长尾但优质的内容,提升商品多样性。

算法:

- 将商品分为热门池和长尾池

- 按照一定比例混合(如80%热门 + 20%长尾)

- 保持整体相关性不大幅下降

5.2 商业干预

商业目标优化:

- 加权排序:根据广告费用、佣金比例调整排序

- 促销活动:在促销期间提升促销商品的展示权重

- 库存优先:优先展示库存充足的商品

- 新商品扶持:给予新商品一定曝光量

干预原则:

- 不破坏用户核心体验(相关性损失< 10%)

- 商业目标与用户体验的平衡

- A/B测试验证干预效果

---

六、性能优化与系统架构

6.1 完整链路性能指标

暂时无法在飞书文档外展示此内容

6.2 系统架构设计

分层架构:

┌─────────────────────────────────────┐

│ 用户界面层 │

└──────────────┬──────────────────────┘

┌──────────────▼──────────────────────┐

│ 网关层(API Gateway) │

│ 负载均衡、熔断、限流、降级 │

└──────────────┬──────────────────────┘

┌──────────────▼──────────────────────┐

│ 业务逻辑层 │

│ Query理解 → 召回 → 粗排 → 精排 → 重排 │

└──────────────┬──────────────────────┘

┌──────────────▼──────────────────────┐

│ 数据访问层 │

│ 缓存、索引、特征库、在线特征服务 │

└──────────────┬──────────────────────┘

┌──────────────▼──────────────────────┐

│ 数据存储层 │

│ Elasticsearch、Milvus、Redis、HBase │

└─────────────────────────────────────┘

6.3 性能优化策略

5. 并行化处理

- 多路召回并行执行

- 特征提取并行化

- 模型预测批量处理

6. 缓存策略

- 热门查询结果缓存

- 商品特征缓存(Redis)

- 向量索引缓存

7. 模型优化

- 模型量化(FP16/INT8)

- 模型剪枝

- 知识蒸馏

8. 异步处理

- 用户画像更新异步化

- 特征计算异步化

- 日志统计异步化

---

七、设计哲学与权衡

7.1 效率与精度的权衡

搜索系统的核心设计哲学是在有限的计算资源下,最大化用户体验。

说直白点,就是在算力有限的情况下,尽可能让用户满意。

权衡示例:

暂时无法在飞书文档外展示此内容

7.2 召回率与精确率的权衡

召回率(Recall):相关商品被召回的比例

精确率(Precision):召回商品中相关商品的比例

权衡曲线:

- 召回率↑ → 精确率↓(召回越多,噪音越多)

- 精确率↑ → 召回率↓(筛选越严,漏得越多)

实际策略:

- 召回阶段:召回率优先(> 80%),精确率次之

- 粗排阶段:平衡召回率和精确率

- 精排阶段:精确率优先(AUC > 0.75)

7.3 相关性与多样性的权衡

相关性:结果与查询的匹配程度

多样性:结果的丰富程度

权衡场景:

- 用户搜"手机":需要多样性(品牌、价格、类型)

- 用户搜"iPhone 15 Pro":需要相关性(特定型号)

实际策略:

- 明确查询(长尾词):相关性优先

- 模糊查询(热门词):相关性+多样性平衡

- 个性化查询:根据用户历史行为调整

---

八、大模型时代的技术演进

8.1 大模型在搜索链路中的应用

Query理解层:

- 意图识别:使用LLM(如GPT-4)进行零样本或少样本意图分类

- 查询扩展:利用LLM生成同义词、相关词、改写查询

- 实体识别:使用NER模型识别商品品牌、型号、属性

召回层:

- 语义召回:使用预训练模型(如BERT)生成文档和查询的向量表示

- 多模态召回:结合文本、图像、视频等多模态信息进行召回

- 生成式召回:使用LLM生成候选文档摘要,作为召回依据

排序层:

- LTR(Learning to Rank):使用大模型进行特征提取和排序

- 生成式排序:直接生成排序结果,而非预测分数

- 多任务学习:同时优化CTR、CVR、停留时间等多个目标

8.2 技术趋势与挑战

趋势:

- 生成式搜索:从"检索排序"到"直接生成答案"

- 个性化推荐:从"大众推荐"到"千人千面"

- 实时优化:从"离线训练"到"在线学习"

挑战:

- 计算成本:大模型推理成本高,需要优化和加速

- 数据隐私:用户行为数据敏感,需要隐私保护技术

- 系统复杂度:引入大模型后系统架构更复杂,需要更强的工程能力

8.3 架构演进方向

从四段式到多段式:

- 传统:Query理解 → 召回 → 粗排 → 精排 → 重排

- 演进:Query理解 → 多路召回 → 多层粗排 → 多个精排塔 → 融合 → 重排

从串行到并行:

- 传统:各阶段串行执行

- 演进:并行召回、并行预测、异步更新

从离线到在线:

- 传统:离线训练模型,在线推理

- 演进:在线学习,实时更新模型参数

---

总结

搜索引擎的四段式架构——Query理解、召回、粗排、精排、重排——体现了分层思维和权衡艺术的设计哲学。

每一层都有明确的职责和优化目标:

- Query理解:理解用户意图

- 召回:不漏掉相关结果

- 粗排:快速过滤候选集

- 精排:精准预测用户偏好

- 重排:优化结果多样性

核心思想:将复杂问题拆解为多个层级,每层解决不同的问题。通过"减法"提升效率,通过"加法"保证精度。

在大模型时代,搜索引擎的技术手段会不断演进,但分层设计和权衡平衡的核心思想不会改变。

因为无论技术如何进步,效率和精度的权衡始终存在,用户体验始终是最终目标。

#卷__卷不过你们,只能卷__了#
全部评论

相关推荐

评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务