全景架构:搜索/推荐系统流水线
scss
用户输入
│
▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Query理解 │ │ 词推荐 │ │ 意图识别 │ ← Qu 层
│ (QU) │ │(Suggest) │ │ (Intent) │
└────┬─────┘ └──────────┘ └──────────┘
│
▼
┌──────────┐
│ 检索召回 │ ← 多路召回:文本/向量/个性化/缓存 ← Retrieval 层
│(Recall) │
└────┬─────┘
│ 候选集 10K~100K
▼
┌──────────┐
│ 粗排 │ ← 轻量模型快速过滤 ← Rough Ranking
│(Coarse) │
└────┬─────┘
│ ~1K
▼
┌──────────┐
│ 精排 │ ← 复杂模型精准打分 ← Fine Ranking
│(Fine) │
└────┬─────┘
│ ~100
▼
┌──────────┐
│ 重排 │ ← 全局最优、多样性、业务规则 ← Re-ranking
│(Re-rank) │
└────┬─────┘
│
▼
展示给用户
一、Query 理解(QU, Query Understanding)
是什么
用户输入的 query 往往"短、模糊、有噪声"。QU 的目标是把原始 query 转化为系统能理解的结构化表示,为下游各环节服务。
核心子任务
| 子任务 | 说明 | 示例 |
|---|---|---|
| 分词(Tokenization) | 将 query 切分为词/短语 | "包子机价格" → 包子机 / 价格 |
| 词性/实体标注(NER) | 识别实体类型 | "北京到上海机票" → LOC北京/LOC 到 LOC上海/LOC PRODUCT机票/PRODUCT |
| 意图识别(Intent Detection) | 判断用户想干什么 | "iPhone 15 多少钱" → 意图=询价 |
| query 改写(Query Rewriting) | 同义改写/纠错/补全 | "儿童积木机" → "儿童积木"(纠错) |
| query 扩展(Query Expansion) | 扩展相关词提升召回 | "手机壳" → + "保护套" |
| 核心词识别 | 区分主词和修饰词 | "红色连衣裙" → 核心=连衣裙,修饰=红色 |
| Session 上下文 | 利用多轮搜索历史 | 上搜"北京",当前"酒店" → "北京酒店" |
| 属性抽取 | 提取价格、品牌、规格等约束 | "华为手机 3000以下" → brand=华为, price<3000 |
技术演进
规则/词典 → CRF/Seq2Seq → BERT/ERNIE → LLM in-context
需要掌握的知识
- NLP 基础:分词算法(HMM/CRF/BPE)、序列标注模型
- 预训练模型:BERT / ERNIE 的微调与部署
- 信息检索基础:TF-IDF、BM25
- 知识图谱基础(实体链接)
- LLM 提示工程(用 LLM 做 zero-shot 意图识别和改写)
二、检索 / 召回(Retrieval / Recall)
是什么
从亿级文档库中快速筛出与 query 相关的候选集(10K~100K 级),核心要求是高覆盖率 + 低延迟。单路召回容易"漏",所以大厂都是多路融合。
多路召回架构
scss
Query
│
┌──────┬───────┼───────┬──────┐
▼ ▼ ▼ ▼ ▼
文本召回 向量召回 个性化 图谱 缓存
(BM25) (DSSM/ 召回 召回 召回
ANN) (CF)
│ │ │ │ │
└──────┴───────┴───────┴──────┘
│
合并去重 → 候选集
关键技术
| 召回方式 | 原理 | 典型模型 |
|---|---|---|
| 文本召回 | 词项匹配,BM25 打分 | Elasticsearch、Lucene |
| 语义向量召回 | query 和 doc 编码为向量,最近邻检索 | DSSM、双塔模型、Sentence-BERT |
| 个性化召回 | 基于 user-item 协同过滤 | ItemCF、UserCF、Swing |
| 图召回 | 利用知识图谱或 user-item 图 | GraphSAGE、PinSage |
| 缓存召回 | 直接复用历史高频 query 的结果 | Query Cache |
向量检索核心
scss
离线: Doc → Encoder → 向量 → 入 ANN 索引 (Faiss / Milvus / HNSW)
在线: Query → Encoder → 向量 → ANN 检索 → Top-K
双塔模型训练正负样本构造至关重要:负采样策略(随机负采样 / 困难负采样 / 批内负采样)。
需要掌握的知识
- IR 基础:TF-IDF、BM25、倒排索引原理
- 向量检索:ANN 算法(HNSW、IVF、PQ)、Faiss / Milvus 使用
- 表示学习:双塔模型、对比学习(InfoNCE loss)
- 负采样策略
- 倒排索引与向量索引的工程实现
三、相关性(Relevance)
是什么
衡量 query 与 doc 之间的语义匹配程度 。不同于召回(快但粗),相关性建模更精细,为排序提供核心特征信号。它是排序模型的最重要特征之一。
相关性建模层次
scss
浅层匹配 深层语义匹配
│ │
▼ ▼
词面匹配 (BM25) 交互式模型 (Cross-Encoder)
关键词覆盖率 Bi-Encoder (双塔)
位置加权 Late-Interaction (ColBERT)
| 层次 | 方法 | 特点 |
|---|---|---|
| 词面匹配 | BM25、TF-IDF | 快,但无法处理同义/近义 |
| 语义匹配 | 浅层 → BERT 双塔 → BERT 交互式 | 捕获同义、意图匹配 |
| 用户行为匹配 | CTR/点击反馈 | 间接信号 |
| 多维融合 | 标题/正文/锚文本分别算相关性再融合 | 不同字段权重不同 |
经典相关性特征
diff
- 标题 BM25 分
- 正文 BM25 分
- query 点击率
- 匹配词覆盖率
- 命中位置(标题首词 > 末尾)
- 同义改写后的匹配
- 命中比例
需要掌握的知识
- IR 经典理论:概率检索模型、语言模型
- BERT / 交互式模型的在线推理优化
- 多字段相关性融合
- 点击模型(Position Bias 校正)
四、词推荐 / 搜索 Suggest(Query Suggestion)
是什么
用户在搜索框输入过程中,实时推荐下一段 query(下拉提示词),目标是引导搜索、提升体验。类似百度搜索框的联想功能。
核心挑战
- 低延迟:需 < 50ms 返回
- 高并发:每秒百万级请求
- 个性化:同一前缀不同用户看到不同建议
- 质量:推荐结果既要相关又要"有用"
技术架构
scss
用户输入前缀 "北京"
│
▼
┌────────────────┐
│ 候选生成 │ ← 前缀匹配 Trie 树 + 历史搜索日志
│ (Candidate Gen)│ 从 query 库中找出以"北京"开头的 query
└───────┬────────┘
│ ~1000 候选
▼
┌────────────────┐
│ 排序 │ ← 模型打分:热度 + 相关性 + 个性化
│ (Ranking) │
└───────┬────────┘
│ Top-10
▼
┌────────────────┐
│ 过滤/规则 │ ← 去重、敏感词、商业化
│ (Filter) │
└────────────────┘
候选生成方式
| 方式 | 说明 |
|---|---|
| 前缀 Trie | 从 query 日志构建 Trie 树,按前缀匹配 |
| session-based | 利用用户搜索 session,推荐 next query |
| LLM 生成 | 用大模型实时生成候选(高端做法) |
| 热词表 | 维护热门 query 前缀索引 |
排序信号
scss
score = w1 × 热度(PV) + w2 × 相关性(prefix 匹配) + w3 × CTR
+ w4 × 个性化(用户历史) + w5 × 时效性
需要掌握的知识
- 数据结构:Trie / FST / DFA(前缀匹配 + 高效压缩)
- 在线服务工程:高 QPS 缓存设计、近实时索引更新
- 排序模型:GBDT、浅层 DNN
- NLP:query 补全、拼音转汉字、纠错
- 用户行为建模
五、粗排(Coarse Ranking)
是什么
召回结果太多(10K~100K),直接用复杂精排模型不现实。粗排用轻量模型 快速过滤到 ~1K,核心要求是高吞吐 + 不漏正相关结果。
经典方法演进
markdown
1. 规则/加权打分 → 各信号线性加权
2. LR / GBDT → 浅模型快速打分
3. 双塔模型 → query/doc 各自编码,内积打分(可离线预计算 doc 向量)
4. 蒸馏模型 → 用精排模型蒸馏一个小模型
5. 向量索引 + 粗排一体化 → 召回和粗排边界模糊化
双塔粗排(当前主流)
ini
离线: Doc 特征 → DNN → doc embedding → 预计算存储
在线: Query 特征 → DNN → query embedding
score = dot_product(query_emb, doc_emb)
- 优势:doc 向量预计算,在线只需算 query 向量 + 近邻检索
- 劣势:query-doc 无深度交互(不如精排准)
需要掌握的知识
- 浅层模型:LR、FM、GBDT
- 双塔模型 + 对比学习
- 模型蒸馏(精排 → 粗排)
- 性能优化:INT8 推理、向量预计算
六、精排(Fine Ranking)
是什么
对粗排后 ~1K 候选精准打分,核心目标是排序精度最大化。模型复杂度不限,但仍需控制延迟(通常 < 100ms)。
核心模型演进
markdown
LR → FM → DeepFM → Wide&Deep → DIN → DIEN → 多任务模型
↓
大模型时代
↓
预训练 + 行为序列 + LLM 特征
关键模型
| 模型 | 核心创新 |
|---|---|
| Wide & Deep | 记忆(wide)+ 泛化(deep)结合 |
| DeepFM | FM 替代 wide 部分,自动二阶交叉 |
| DIN(Deep Interest Network) | 引入 target-attention,按候选商品激活用户历史兴趣 |
| DIEN | + 兴趣演化 GRU |
| MMoE / PLE | 多任务学习(同时预测点击 + 转化) |
| CAN / FiBiNet | 特征交叉新方式 |
特征工程
sql
user 特征:画像、历史行为序列、实时上下文
item 特征:属性、质量分、统计特征
context 特征:时间、地域、设备
cross 特征:user-item 交叉(相关性、历史点击率)
需要掌握的知识
- 推荐系统理论:CTR 预估、特征交叉
- 深度学习模型架构(DNN、Attention、Sequence Model)
- 多任务学习
- 特征工程与在线特征服务
- 训练框架:TensorFlow Recommenders / PyTorch
- 在线推理优化:TF-Serving、模型压缩
七、重排(Re-ranking)
是什么
精排只看单个 item 的分数,不考虑全局视角。重排从 list-wise 角度优化最终展示顺序,解决多样性、新鲜度、业务规则等全局目标。
核心目标
markdown
精排分 → 重排
├── 多样性:避免同类内容扎堆
├── 新鲜度:给新内容曝光机会
├── 业务规则:广告位、置顶、去重
├── 公平性:不同来源/商家公平分配
└── 全局收益最大化
经典方法
| 方法 | 说明 |
|---|---|
| 规则重排 | 简单规则:去重、打散、置顶 |
| MMR(Maximal Marginal Relevance) | 每次选一个 item,兼顾相关性和与已选的差异 |
| DPP(Determinantal Point Process) | 行列式点过程,数学上保证子集多样性 |
| RL 重排 | 用强化学习优化 list-wise reward |
| Seq2Seq 重排 | 用序列模型直接生成最优排列 |
| List-wise 模型 | LambdaMART、ListNet |
MMR 示意
ini
已选 S = {}
每一步:
argmax_{d ∉ S} [ α·relevance(d) - (1-α)·max_{d'∈S} sim(d, d') ]
↑ 相关性 ↑ 与已选的最大相似度(惩罚)
需要掌握的知识
- 排序理论:List-wise ranking、DPP
- 强化学习基础(RL 重排)
- 业务规则系统设计
- 多目标优化
八、大模型在搜索推荐中的落地
各环节的大模型赋能
erlang
Qu → LLM 做 query 改写、意图理解、属性抽取
召回 → LLM 生成 dense embedding;LLM 生成 query 扩展词
相关性 → LLM 作为 Cross-Encoder 重打分
词推荐 → LLM 生成候选 query
精排 → LLM 生成特征(user/doc 文本表征)
重排 → LLM 做 list-wise 重排
→ LLM 做搜索结果摘要生成
代表性工作
| 方向 | 代表 |
|---|---|
| LLM 检索 | ColBERT、REPLL、Encoder-Decoder retriever |
| LLM 排序 | RankGPT(list-wise rerank) |
| RAG(检索增强生成) | 把检索结果喂给 LLM 生成答案 |
| 生成式推荐 | P5、GPT4Rec |
需要掌握的知识
- LLM 基础:Transformer、预训练、SFT/RLHF
- RAG 架构设计
- 向量数据库 + LLM 结合
- Prompt 工程 + Tool Use
- LLM 推理优化(vLLM、量化)
知识体系总览
css
┌─────────────────────────────────────────────────────┐
│ 基础层 │
│ 线性代数 / 概率论 / 最优化 / 信息论 │
├─────────────────────────────────────────────────────┤
│ ML/DL 层 │
│ 机器学习 / 深度学习 / NLP / 推荐系统理论 │
├─────────────────────────────────────────────────────┤
│ 模型层 │
│ BERT / GPT / 双塔 / DIN / 多任务 / LLM │
├─────────────────────────────────────────────────────┤
│ 系统层 │
│ 倒排索引 / 向量检索 / 特征服务 / 模型推理服务 │
├─────────────────────────────────────────────────────┤
│ 工程层 │
│ 高并发 / 低延迟 / A-B 实验 / 监控告警 │
└─────────────────────────────────────────────────────┘
| 环节 | 核心知识关键词 |
|---|---|
| QU | NLP、序列标注、意图识别、query 改写 |
| 检索 | BM25、ANN、双塔模型、对比学习、负采样 |
| 相关性 | 语义匹配、Cross-Encoder、多字段融合 |
| 词推荐 | Trie、session 建模、高并发服务 |
| 粗排 | 轻量模型、双塔、模型蒸馏、预计算 |
| 精排 | CTR 模型、特征交叉、多任务、行为序列建模 |
| 重排 | MMR/DPP、List-wise、强化学习、多目标优化 |
| LLM 落地 | RAG、Prompt 工程、LLM 推理优化 |