拆解抖音推荐算法:从一段视频到你的手机屏幕,背后发生了什么?

0 阅读8分钟

本文是我跨领域学习推荐系统的笔记整理。我并非算法出身,但当我以工程视角拆解这套系统时,发现它的底层逻辑极其优雅——数学、工程、产品思维在此交汇,像一台精密的机器,每一环都值得深究。


一、先问一个反直觉的问题:谁在刷谁?

487b33946045dfbd6234b848572bddc3.jpg

打开抖音,手指一划,视频一个接一个。我们以为自己在"刷抖音",但从系统视角看,是抖音在"刷"我们

你每滑动一次,停留多一秒,点了个赞,甚至嘴角微微上扬——这些都在反向训练抖音对你的认知模型。每天几千万用户产生的行为数据,让系统对"你是谁"的画像越来越清晰。

这不是哲学思辨,而是推荐系统运转的第一性原理:推荐不是单向推送,而是系统和用户之间持续的双向博弈。


二、用户画像:你不是你,你是一串向量

663315abef2d4705832b8c84443feab7.png 在推荐系统的世界里,你被抽象为数百万个维度的数学对象。

  • 你凌晨 2 点刷到"野外求生"并多停留了 3 秒 → 一个兴趣标签被记录下来
  • 你秒划一个跳舞视频 → 系统知道你此刻对跳舞不感兴趣
  • 你完整看完一个 NBA 集锦并分享到群里 → 权重极高的正向信号

用户画像的标签可以粗略分为:

唱跳 | NBA | 新闻 | 科技 | 萌宠 | 美食 | 搞笑 | 旅行 ...

但"标签"只是人类能理解的表层。真正的用户画像是这样的:

[0.85, 科技]  
[0.05, 幽默]  
[0.03, 西班牙语]
[0.12, 忧郁情绪]
...

一个 512 维的向量,每一维代表一个隐含特征。这些维度不是人工设计的,而是模型在海量数据中自动学习出来的。你可能都不知道自己喜欢"下雨天 + 爵士乐 + 第一人称运镜"的组合,但模型知道。


三、多模态解构:一段视频如何被机器"理解"

dd0d0d05d490460181b2f6248344ec33.png

这是整个推荐系统的第一步,也是最容易被外行低估的一步。

抖音上的内容本质是非结构化的多媒体数据——画面、声音、文字混在一起。让机器"理解"一段视频,需要多模态解构:

3.1 视觉特征:逐帧提取

以帧为单位捕捉画面信息,底层用到 Vision Transformer(ViT) 这类视觉预训练模型。

它能识别:

  • 画面里是一只猫,还是一个程序员在写代码
  • 是一群室友围在一起看世界杯,还是一个人深夜独处
  • 甚至通过色彩分布和光影变化,判断视频的情绪基调——温暖治愈还是冷峻硬核

视觉模态是抖音视频数据量最大的一块,也是算力消耗的大头。

3.2 音频特征:声音里的信息密度

音频的解构至少有两条路径:

  • ASR(语音识别)→ 文本 → NLP 语义分析:把视频里的说话、旁白变成可处理的结构化文字
  • 声学特征直接建模:音量曲线、语速、BGM 的情绪属性——同一段配乐出现在不同视频里,可能传递截然不同的情感

抖音的前身 Musical.ly 本身就深耕音视频技术,这块他们有深厚的积累。

3.3 文本特征:标题、字幕、评论

视频标题、OCR 提取的字幕文字、用户评论——这些都是天然的 NLP 输入源,进一步丰富视频的语义向量。

最终产出

每一段视频,经过多模态解构后,被压缩成一个 512 维的稠密向量。这个向量是后续所有运算的基础。

思考:为什么是 512 维?

这是一个工程和效果的权衡。维度太低,表达能力不够,区分度差;维度太高,存储和计算开销指数级增长。512 是业界经验证的一个甜点区——既能充分表达语义,又能在向量检索时保持可接受的性能。


四、推荐漏斗:从 1000 万到 10 条的筛选艺术

a1e22f403be15baa5791de8c1b248c0a.jpg

这是整篇文章最重要的部分。理解了漏斗的四层结构,你就理解了推荐系统的骨架。

假设你打开抖音的那一刻,后台候选池里有 1000 万条视频,系统要做的是逐层筛选:

1000 ──召回──▶ 1000 ──粗排──▶ 100 ──精排──▶ 10 ──重排──▶ 你的屏幕

每一层都有不同的模型、不同的目标,像一个精密的分馏塔。

4.1 第一层:召回(双塔模型)

6e2892f6912a4653854cdf858fa8a33c.png 目标:从 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% 里。

cfcb8dafc176863e6baf6cf29cd3dd79.jpg

五、我的视角:这套系统为什么令人着迷

说几个我作为非算法背景的学习者,对这套系统的感触:

5.1 一切都是向量

向量是现代推荐系统的通用语言。视频是向量,用户是向量,两者之间的关系是向量运算。一旦把万物嵌入到同一个向量空间,相似度计算、聚类、检索——所有这些数学工具都可以统一调用。

这和 Transformer 架构里把词变成 embedding 然后做 attention 的思路如出一辙。底层逻辑是共通的。

5.2 漏斗是系统设计的通用范式

推荐漏斗的"召回 → 粗排 → 精排 → 重排"四层架构,本质上和搜索引擎的 "索引 → 粗排 → 精排 → 重排" 是一回事,甚至和计算机的"L1 Cache → L2 Cache → L3 Cache → 内存"的层级存储设计有相似的智慧:

逐层缩小范围,越往后越精细,在性能和精度之间找到平衡。

5.3 数学才是最后的裁判

标签、画像、兴趣——这些是人类理解系统的概念工具。但系统真正运行的,是向量空间中的点积、是梯度下降的权重更新、是概率模型打分。理解这一点,你就不会停留在"推荐算法就是打标签"的肤浅认知上。


六、如果你想去抖音做推荐

本文不敢说让你直通面试,但如果你带着这样的认知去和面试官聊推荐系统——

  • 能说清楚多模态解构的技术路径
  • 能讲明白四层漏斗每一层的输入输出和设计权衡
  • 能理解 Explore/Exploit 问题在产品体验层面的意义

我认为,你不是在背八股文,你是在用系统思维理解问题。这正是大厂面试官想看到的能力。


本文是我从工程领域跨入推荐系统学习的阶段性笔记,欢迎交流指正。