本文是我跨领域学习推荐系统的笔记整理。我并非算法出身,但当我以工程视角拆解这套系统时,发现它的底层逻辑极其优雅——数学、工程、产品思维在此交汇,像一台精密的机器,每一环都值得深究。
一、先问一个反直觉的问题:谁在刷谁?
打开抖音,手指一划,视频一个接一个。我们以为自己在"刷抖音",但从系统视角看,是抖音在"刷"我们。
你每滑动一次,停留多一秒,点了个赞,甚至嘴角微微上扬——这些都在反向训练抖音对你的认知模型。每天几千万用户产生的行为数据,让系统对"你是谁"的画像越来越清晰。
这不是哲学思辨,而是推荐系统运转的第一性原理:推荐不是单向推送,而是系统和用户之间持续的双向博弈。
二、用户画像:你不是你,你是一串向量
在推荐系统的世界里,你被抽象为数百万个维度的数学对象。
- 你凌晨 2 点刷到"野外求生"并多停留了 3 秒 → 一个兴趣标签被记录下来
- 你秒划一个跳舞视频 → 系统知道你此刻对跳舞不感兴趣
- 你完整看完一个 NBA 集锦并分享到群里 → 权重极高的正向信号
用户画像的标签可以粗略分为:
唱跳 | NBA | 新闻 | 科技 | 萌宠 | 美食 | 搞笑 | 旅行 ...
但"标签"只是人类能理解的表层。真正的用户画像是这样的:
[0.85, 科技]
[0.05, 幽默]
[0.03, 西班牙语]
[0.12, 忧郁情绪]
...
一个 512 维的向量,每一维代表一个隐含特征。这些维度不是人工设计的,而是模型在海量数据中自动学习出来的。你可能都不知道自己喜欢"下雨天 + 爵士乐 + 第一人称运镜"的组合,但模型知道。
三、多模态解构:一段视频如何被机器"理解"
这是整个推荐系统的第一步,也是最容易被外行低估的一步。
抖音上的内容本质是非结构化的多媒体数据——画面、声音、文字混在一起。让机器"理解"一段视频,需要多模态解构:
3.1 视觉特征:逐帧提取
以帧为单位捕捉画面信息,底层用到 Vision Transformer(ViT) 这类视觉预训练模型。
它能识别:
- 画面里是一只猫,还是一个程序员在写代码
- 是一群室友围在一起看世界杯,还是一个人深夜独处
- 甚至通过色彩分布和光影变化,判断视频的情绪基调——温暖治愈还是冷峻硬核
视觉模态是抖音视频数据量最大的一块,也是算力消耗的大头。
3.2 音频特征:声音里的信息密度
音频的解构至少有两条路径:
- ASR(语音识别)→ 文本 → NLP 语义分析:把视频里的说话、旁白变成可处理的结构化文字
- 声学特征直接建模:音量曲线、语速、BGM 的情绪属性——同一段配乐出现在不同视频里,可能传递截然不同的情感
抖音的前身 Musical.ly 本身就深耕音视频技术,这块他们有深厚的积累。
3.3 文本特征:标题、字幕、评论
视频标题、OCR 提取的字幕文字、用户评论——这些都是天然的 NLP 输入源,进一步丰富视频的语义向量。
最终产出
每一段视频,经过多模态解构后,被压缩成一个 512 维的稠密向量。这个向量是后续所有运算的基础。
思考:为什么是 512 维?
这是一个工程和效果的权衡。维度太低,表达能力不够,区分度差;维度太高,存储和计算开销指数级增长。512 是业界经验证的一个甜点区——既能充分表达语义,又能在向量检索时保持可接受的性能。
四、推荐漏斗:从 1000 万到 10 条的筛选艺术
这是整篇文章最重要的部分。理解了漏斗的四层结构,你就理解了推荐系统的骨架。
假设你打开抖音的那一刻,后台候选池里有 1000 万条视频,系统要做的是逐层筛选:
1000万 ──召回──▶ 1000条 ──粗排──▶ 100条 ──精排──▶ 10条 ──重排──▶ 你的屏幕
每一层都有不同的模型、不同的目标,像一个精密的分馏塔。
4.1 第一层:召回(双塔模型)
目标:从 1000 万中捞出 1000 条。速度优先,精度可以粗糙。
召回层的核心是双塔模型:
- User Tower:把用户画像编码为向量
- Item Tower:把视频特征编码为向量
用户向量和视频向量的点积(dot product) 或 余弦相似度(cosine similarity) 代表两者的匹配程度。数值越接近 1,视频和你的兴趣越接近。
similarity = cos(θ) = (u · v) / (|u| × |v|)
这个运算可以极度并行化,配合向量检索引擎(如 Faiss),在毫秒级完成百万到千万级的高维向量最近邻搜索。
4.2 第二层:粗排
目标:1000 → 100。用轻量模型快速筛一轮。
粗排用相对轻量的机器学习模型,算一些简单的内部特征。模型结构简单、特征数量有限、推理速度快——
4.3 第三层:精排
目标:100 → 10。用重模型确保质量和相关性。
精排是漏斗中最"重"的一环。用更复杂的深度学习模型,融合大量精细特征,预测四个核心行为:
| 指标 | 含义 |
|---|---|
| 点击率(CTR) | 你会不会点进去? |
| 完播率 | 你会不会看完? |
| 互动率 | 点赞、评论、分享? |
最终打分公式:
score = W₁ × 点击概率 + W₂ × 完播率 + W₃ × 点赞率 + W₄ × 评论率 + W₅ × 分享率
不同行为的权重不同。分享的权重大概率远高于播放,因为它代表更强的社交推荐意愿,能给平台带来更多新用户。
4.4 第四层:重排(这块最值得聊)
目标:打破算法的最优解,引入"混乱"。
想象一个场景:精排算出的 Top 10 全是 AI 编程视频。你很爱看,但如果连续喂你十条,你会立刻划走。
这就是信息茧房的物理化表现:纯贪心算法会让体验迅速劣化。
重排层做的事情本质上是在打散:
排序前:[AI-1, AI-2, AI-3, AI-4, AI-5, AI-6, AI-7, AI-8, AI-9, AI-10]
排序后:[AI-1, 跳舞, AI-2, 美食, AI-3, 搞笑, AI-4, 旅游, AI-5, AI-6]
每两条硬核科技内容之间,强制插入一条不同类型的视频,防止「认知疲劳」。
更深一层,重排在做的是推荐系统领域的经典权衡:Explore(探索) vs Exploit(利用)
- Exploit(80%):推荐你已知喜欢的东西,保证留存
- Explore(20%):试探你的潜在兴趣边界,拓展你的画像
那个随机插入的跳舞视频,如果你多停留了 3 秒,一个新的兴趣标签就被悄然记录——下次它会出现在你的 80% 里。
五、我的视角:这套系统为什么令人着迷
说几个我作为非算法背景的学习者,对这套系统的感触:
5.1 一切都是向量
向量是现代推荐系统的通用语言。视频是向量,用户是向量,两者之间的关系是向量运算。一旦把万物嵌入到同一个向量空间,相似度计算、聚类、检索——所有这些数学工具都可以统一调用。
这和 Transformer 架构里把词变成 embedding 然后做 attention 的思路如出一辙。底层逻辑是共通的。
5.2 漏斗是系统设计的通用范式
推荐漏斗的"召回 → 粗排 → 精排 → 重排"四层架构,本质上和搜索引擎的 "索引 → 粗排 → 精排 → 重排" 是一回事,甚至和计算机的"L1 Cache → L2 Cache → L3 Cache → 内存"的层级存储设计有相似的智慧:
逐层缩小范围,越往后越精细,在性能和精度之间找到平衡。
5.3 数学才是最后的裁判
标签、画像、兴趣——这些是人类理解系统的概念工具。但系统真正运行的,是向量空间中的点积、是梯度下降的权重更新、是概率模型打分。理解这一点,你就不会停留在"推荐算法就是打标签"的肤浅认知上。
六、如果你想去抖音做推荐
本文不敢说让你直通面试,但如果你带着这样的认知去和面试官聊推荐系统——
- 能说清楚多模态解构的技术路径
- 能讲明白四层漏斗每一层的输入输出和设计权衡
- 能理解 Explore/Exploit 问题在产品体验层面的意义
我认为,你不是在背八股文,你是在用系统思维理解问题。这正是大厂面试官想看到的能力。
本文是我从工程领域跨入推荐系统学习的阶段性笔记,欢迎交流指正。