抖音为什么总知道你爱看什么?短视频推荐算法的技术内幕
你刚在抖音上搜了一下"露营装备",接下来三天你的推荐页全是帐篷、睡袋、户外炉具。你不禁想:它怎么知道我在想什么?其实推荐系统不是什么读心术,而是一套数学驱动的工业流水线——召回、排序、重排,三大环节环环相扣。这篇文章把短视频平台的推荐算法从原理到工程实现拆开来讲:协同过滤怎么找"和你相似的人",深度学习怎么预测你会不会看完这个视频,以及为什么你越刷越停不下来。
TL;DR:推荐系统 = 召回(从海量视频中筛出几百个候选)+ 排序(用深度学习模型预估你对每个候选的点击率/完播率)+ 重排(打散同类内容、插入广告、去重)。核心数据不是你的搜索记录,而是你的"行为序列"——看了哪些视频、看了多久、点赞了谁、划过什么。这些数据构成了你的用户向量,和视频向量做相似度计算,就是你看到的内容。
目录
- 一、推荐系统的三阶段架构
- 二、召回:从亿万视频中找到几百个候选
- 三、排序:深度学习模型在打分什么
- 四、重排:为什么刷不到同一类视频
- 五、冷启动:新视频和新用户怎么破局
- 六、推荐系统对视频下载的影响
- 七、合规与温馨提示
一、推荐系统的三阶段架构
当你打开抖音,服务器要在毫秒级时间内,从几十亿个视频中选出最可能让你停留的几个。这个量级下,不可能对每个视频都跑一遍深度学习模型——太慢了。
所以推荐系统采用漏斗架构:
几十亿个视频
│
┌───────────────▼───────────────┐
│ 召回(Recall) │
│ 多路召回策略,粗筛 │
│ 从 10 亿 → 几千个候选 │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ 排序(Ranking) │
│ 深度学习模型,精排打分 │
│ 从几千个 → 几百个候选 │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ 重排(Re-ranking) │
│ 打散、去重、插入广告 │
│ 最终呈现 10-20 个结果 │
└───────────────────────────────┘
每个阶段追求的目标不同:
| 阶段 | 核心目标 | 模型复杂度 | 候选数量级 |
|---|---|---|---|
| 召回 | 快,宁可多召回不能漏掉 | 简单(向量内积) | 10亿 → 5000 |
| 排序 | 准,精准预估用户行为 | 复杂(深度神经网络) | 5000 → 500 |
| 重排 | 多样性,避免内容疲劳 | 规则+轻量模型 | 500 → 20 |
二、召回:从亿万视频中找到几百个候选
召回的核心思想是"用简单的模型快速过滤"。一个视频能被你看到,通常经过了多路召回策略的共同作用:
2.1 协同过滤(Collaborative Filtering)
思路:找到和你行为相似的用户,把他们喜欢的内容推荐给你
用户A:看了视频1、2、3,点赞了视频4
用户B:看了视频1、2、3,点赞了视频5
→ A和B的行为模式相似
→ 把视频5推荐给A,把视频4推荐给B
实现上,所有用户和视频被表示成向量(Embedding)。向量的训练目标很简单:如果一个用户看了某个视频,它们的向量就应该在空间里挨得近。
# 简化的 Embedding 训练逻辑
# 实际工业实现用 TensorFlow/PyTorch + 分布式训练
import torch
import torch.nn as nn
class RecallModel(nn.Module):
"""双塔召回模型——用户塔 + 视频塔"""
def __init__(self, user_feature_dim, item_feature_dim, embedding_dim=128):
super().__init__()
self.user_tower = nn.Sequential(
nn.Linear(user_feature_dim, 256),
nn.ReLU(),
nn.Linear(256, embedding_dim),
)
self.item_tower = nn.Sequential(
nn.Linear(item_feature_dim, 256),
nn.ReLU(),
nn.Linear(256, embedding_dim),
)
def forward(self, user_features, item_features):
# 用户向量和视频向量做内积 = 相似度分数
user_vec = self.user_tower(user_features)
item_vec = self.item_tower(item_features)
return (user_vec * item_vec).sum(dim=1)
实际线上召回时,把用户向量和几亿个视频向量做最近邻搜索。ANN(近似最近邻)库如 Faiss 可以在毫秒级完成这个操作。
2.2 多路召回策略
单一召回策略不够,实际系统会并行跑多路:
召回通道 1:协同过滤 → "和你相似的人也喜欢"
召回通道 2:内容标签 → "都是露营类视频"
召回通道 3:热门视频 → "全网都在看"
召回通道 4:关注作者 → "你关注的 up 主更新了"
召回通道 5:地理位置 → "同城的视频"
召回通道 6:实时热点 → "现在最火的挑战/话题"
召回通道 7:探索兴趣 → "你没看过但可能感兴趣的新领域"
每条通道召回几百个候选,合并后去重,进入排序阶段。
三、排序:深度学习模型在打分什么
3.1 多目标优化
排序模型不是简单地预测"你会不会点击"。它同时优化多个目标:
目标 1:点击率(CTR) → 你会不会点进来看?
目标 2:完播率 → 你会不会看完?
目标 3:点赞率 → 你会不会点赞?
目标 4:评论率 → 你会不会评论?
目标 5:转发率 → 你会不会分享?
目标 6:关注率 → 你会不会关注这个作者?
目标 7:停留时长 → 你会在这个视频上停留多久?
最终分数是这些目标的加权组合。不同的平台有不同的侧重点:
抖音:停留时长权重最高(让你刷得停不下来)
B 站:完播率 + 点赞率(鼓励高质量内容)
YouTube:观看时长 + 点击率(长视频生态)
快手:互动率(评论 + 分享,社交属性强)
3.2 模型输入的特征
排序模型吃进去的特征远比你想的多:
用户侧特征:
- 年龄、性别、地域
- 近 30 天的观看历史(视频 ID 序列)
- 近 7 天的互动行为(点赞/评论/分享序列)
- 活跃时段(你是夜猫子还是早起党)
- 设备型号、网络环境(WiFi/4G/5G)
视频侧特征:
- 视频时长、分辨率、码率
- 作者的历史表现(粉丝数、平均完播率)
- 视频的标签和分类
- 标题和封面的文本特征
- 发布时间(新鲜度)
上下文特征:
- 当前时间(工作日晚上 vs 周末早上)
- 你刷了多少个视频了(session 内的位置)
- 上一个视频的类型(避免连续推荐同类)
3.3 模型架构演进
第一代:逻辑回归(LR)
→ 简单线性组合,可解释性强,但表达能力有限
第二代:FM/FFM(因子分解机)
→ 引入特征交叉,比 LR 效果好很多
第三代:Wide & Deep
→ Wide 部分记忆历史,Deep 部分泛化新内容
→ Google Play 2016 年提出,工业界广泛使用
第四代:DIN/DIEN(深度兴趣网络)
→ 引入 Attention 机制,关注用户行为序列中"相关"的部分
→ 阿里 2018 年提出,抖音/快手的核心模型
第五代:多任务学习(MMOE/PLE)
→ 同时优化多个目标,不同目标共享底层特征
→ 当前主流方案
四、重排:为什么刷不到同一类视频
排序模型打分后,直接按分数排列会导致一个问题:你可能连续刷到 5 个露营视频——虽然每个分数都很高,但你会觉得内容单一、无聊。
重排阶段解决这个问题:
4.1 打散(Diversification)
排序前:[露营视频1, 露营视频2, 露营视频3, 美食视频1, 旅游视频1]
打散后:[露营视频1, 美食视频1, 露营视频2, 旅游视频1, 露营视频3]
打散策略保证同类内容不会连续出现超过 N 条(通常 N=2)。
4.2 广告插入
在重排阶段,广告系统会竞争推荐位。广告的出价(CPM)× 预估点击率 = eCPM,和自然内容的推荐分数比较,高的排前面。
4.3 冷启动扶持
新发布的视频、新注册的作者,排序分数天然低(没有历史数据)。重排阶段会给予一定的流量扶持——随机插入到推荐流中,收集初始数据。
五、冷启动:新视频和新用户怎么破局
5.1 新视频的冷启动
一个新视频发布后,平台会把它推给一个小的"种子用户群"(通常几百到几千人)。根据这些用户的行为反馈(完播率、点赞率、互动率),决定是否扩大推荐范围。
第一轮:推给 500 人 → 完播率 40% → 数据一般
第二轮:推给 2000 人 → 完播率 35% → 数据下降
→ 停止推荐,视频进入"长尾"
或者:
第一轮:推给 500 人 → 完播率 65% → 数据不错
第二轮:推给 5000 人 → 完播率 60% → 持续优秀
第三轮:推给 5 万人 → ... → 成为爆款
这就是为什么你偶尔会刷到"0 赞 0 评论"的视频——平台在给它机会。
5.2 新用户的冷启动
新用户没有历史行为数据,推荐系统无从下手。所以抖音首次打开会让你选兴趣标签。之后的前 20-30 次滑动,系统在快速试探——给你推送各种不同类型的内容,观察你的反应。
前 10 条:随机热门内容(建立基线)
第 10-30 条:探索性推荐(测试你对各类型的兴趣)
第 30 条后:个性化推荐(基于前 30 条的反馈)
六、推荐系统对视频下载的影响
推荐系统直接影响你"能下载到什么":
第一,去水印下载被限制。 推荐算法喜欢"新鲜内容",所以平台会鼓励原创。而下载工具获取的水印版/无水印版视频,很多时候是同一个 CDN 文件的不同 URL 参数。平台通过推荐系统引导用户消费内容,同时通过 DRM/水印机制保护内容不被批量下载。
第二,热门视频更容易被下载工具收录。 下载工具通常从热门推荐流中抓取视频 ID。推荐系统决定了哪些视频"热门",间接决定了你能下载到的内容范围。
第三,长尾视频难以下载。 推荐系统不给流量的视频,下载工具也很难发现。这就是为什么你能轻易下载到百万播放的爆款视频,却很难找到某个小众 up 主的冷门作品。
七、合规与温馨提示
- 推荐算法是各平台的核心商业机密,本文内容基于公开论文和行业通用实践,不代表任何特定平台的实现
- 理解推荐算法有助于你更好地使用平台,但不应被用于操纵推荐结果(刷量、刷赞等)
- 更多讨论见 下载视频算侵权吗?聊聊个人备份与版权的那条线
推荐系统的本质,就是把"你可能想看什么"这个模糊的问题,变成了一个可以优化的数学函数。每一次滑动、每一次停留、每一次点赞,都在为这个函数提供新的训练数据。你刷得越多,它越懂你——这不一定是坏事,但值得你知道背后的原理。
本文由 VidDown 技术博客原创发布。VidDown 支持 30+ 平台的视频下载,不管推荐算法怎么推,你都能把喜欢的视频保存到本地。访问 VidDown 了解更多。