策略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理解:理解用户意图
- 召回:不漏掉相关结果
- 粗排:快速过滤候选集
- 精排:精准预测用户偏好
- 重排:优化结果多样性
核心思想:将复杂问题拆解为多个层级,每层解决不同的问题。通过"减法"提升效率,通过"加法"保证精度。
在大模型时代,搜索引擎的技术手段会不断演进,但分层设计和权衡平衡的核心思想不会改变。
因为无论技术如何进步,效率和精度的权衡始终存在,用户体验始终是最终目标。
#卷__卷不过你们,只能卷__了#
查看11道真题和解析