推荐语: 抖音的算法早已不靠"打标签"理解你,而是直接计算"你会不会看完、点赞、转发"。 本文从推荐系统架构、神经网络机制到核心打分公式,完整剖析抖音算法从"标签逻辑"到"行为建模"的深度进化。 如果你在做算法、内容推荐、或者希望让你的内容更受算法青睐,这篇文章能让你彻底看懂它的底层逻辑。

1、打标签的时代为什么结束了?
在推荐系统的早期,世界是用"标签"来描述的。每个用户被贴上"爱美食""爱旅行""爱萌宠"的标签,每条内容也被分入"搞笑""街舞""Vlog"的类别。系统通过简单的"用户标签 × 内容标签"匹配来推荐,这种方式在内容量不大的年代很有效。但在今天的抖音,这一套逻辑几乎已经崩塌。
原因其实很现实。首先,规模彻底失控。面对每天数亿用户和上千万条短视频,人工打标签的成本巨大,规则标签又无法更新得那么快。其次,兴趣变化太快。一个用户早上可能看健身,中午刷美食,晚上又被街头音乐吸引,静态的标签根本捕捉不到这种时序兴趣。更重要的是,短视频的表达方式本身变得复杂,画面、字幕、节奏、音效、情绪共同构成吸引力,而一个"萌宠"标签显然无法涵盖这一切。
过去,标签是系统理解世界的"语言";现在,用户的行为才是。完播、点赞、停留、滑走、转发,这些实时信号才是兴趣的真相。于是,抖音的推荐逻辑从"人为标签"全面转向"行为信号 + 神经网络建模",让算法学会直接预测"下一秒你会怎么做"。

2、抖音推荐系统的神经网络架构
抖音推荐系统的核心,是一种高度动态的"行为学习机器"。它的输入不是标签,而是行为轨迹。
当你滑动屏幕的那一刻,系统会捕捉几乎所有可能的行为特征:停留时长、是否完播、是否点赞、是否评论或转发、是否点进主页、是否收藏、使用的设备类型、所处时间段等。这些行为共同组成一个巨大的特征向量,实时输入模型。而内容端也在被全面向量化------视觉网络识别画面主体与色调,音频模型分析音乐节奏与情绪,语言模型解析标题与字幕语义。于是每条视频都不再是一个"标签",而是一组多模态向量。
在建模层面,抖音使用了经典的 Wide & Deep 和 Two-Tower 架构。Wide 部分负责"记忆"常见特征共现,例如"点赞+音乐类型"的组合;Deep 部分负责"泛化",挖掘潜在的兴趣模式。而 Two-Tower 模型中,一个塔负责生成用户向量,另一个塔生成内容向量,两者通过向量相似度(通常是内积或余弦距离)来衡量推荐匹配度。这意味着推荐已不再是"标签匹配",而是高维语义空间中的"距离计算"。

3、推荐打分的核心逻辑:行为概率 × 行为价值
抖音的推荐排序机制,本质上是一个期望价值(Expected Value)模型。它不再问"这个视频属于什么标签",而是问"这个用户看完它、点赞它、转发它的概率是多少"。
用一个数学公式可以简洁地表达这一思想:
<math xmlns="http://www.w3.org/1998/Math/MathML"> Score ( u , i , t ) = ∑ k ∈ A Pr ( A k ∣ u , i , t ) ⋅ V k \text{Score}(u,i,t)=\sum_{k\in\mathcal{A}} \Pr(A_k \mid u,i,t)\cdot V_k </math>Score(u,i,t)=∑k∈APr(Ak∣u,i,t)⋅Vk
这里,(A_k) 表示可能的行为(如观看、点赞、分享、关注等),(\Pr(A_k)) 是模型预测行为的概率,而 (V_k) 是该行为的"价值"。例如完播反映内容吸引力,点赞反映情感共鸣,转发反映传播潜力,关注反映长期留存。算法会综合这些概率与价值的乘积,得出每条内容的推荐得分。
4、行为链:让算法理解"先看后赞"的顺序
在实际建模中,抖音并不是把这些行为当作独立事件处理,而是通过条件概率链来建模用户的行为路径。简化公式如下:
<math xmlns="http://www.w3.org/1998/Math/MathML"> Pr ( c o m p l e t e ) = f 1 ( u , i , t ) , Pr ( l i k e ) = Pr ( c o m p l e t e ) ⋅ Pr ( l i k e ∣ c o m p l e t e ) , Pr ( s h a r e ) = Pr ( l i k e ) ⋅ Pr ( s h a r e ∣ l i k e ) , Pr ( f o l l o w ) = Pr ( p r o f i l e ) ⋅ Pr ( f o l l o w ∣ p r o f i l e ) . \begin{aligned} \Pr(\mathrm{complete}) &= f_1(u,i,t),\ \Pr(\mathrm{like}) &= \Pr(\mathrm{complete}) \cdot \Pr(\mathrm{like}\mid \mathrm{complete}),\ \Pr(\mathrm{share}) &= \Pr(\mathrm{like}) \cdot \Pr(\mathrm{share}\mid \mathrm{like}),\ \Pr(\mathrm{follow}) &= \Pr(\mathrm{profile}) \cdot \Pr(\mathrm{follow}\mid \mathrm{profile}). \end{aligned} </math>Pr(complete)=f1(u,i,t), Pr(like)=Pr(complete)⋅Pr(like∣complete), Pr(share)=Pr(like)⋅Pr(share∣like), Pr(follow)=Pr(profile)⋅Pr(follow∣profile).
这让模型学会理解一个自然的行为链: "先看完 → 再点赞 → 可能转发 → 最后关注" 。它避免了重复计算,也更贴近真实心理。
5、从时长到留存:用生存分析建模观看过程
在短视频推荐里,时长是一个核心指标。抖音使用了生存分析(Survival Analysis)的思路来估计用户在不同时间点"滑走"的风险:
<math xmlns="http://www.w3.org/1998/Math/MathML"> h ( t ) = Pr ( T = t ∣ T ≥ t ) h(t)=\Pr(T=t \mid T\ge t) </math>h(t)=Pr(T=t∣T≥t)
其中 (h(t)) 表示在观看到第 (t) 秒时离开的概率。生存函数为 (S(t)=\Pr(T\ge t)),则期望停留时长为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> E [ T ] = ∑ t = 1 T max S ( t ) \mathbb{E}[T]=\sum_{t=1}^{T_{\max}} S(t) </math>E[T]=∑t=1TmaxS(t)
这样模型不只是看"总时长",而是建模整条时间曲线,能区分"前五秒吸引人"和"后半段掉粉"的内容差异。
6、价值权重不是拍脑袋:算法自己学出来的
每种行为的权重 (V_k) 不是靠人工设定,而是通过实验或回归模型得到。例如:
<math xmlns="http://www.w3.org/1998/Math/MathML"> Δ R e t e n t i o n = β 1 N l i k e + β 2 N s h a r e + β 3 N f o l l o w + ε \Delta \mathrm{Retention}=\beta_1 N_{\mathrm{like}}+\beta_2 N_{\mathrm{share}}+\beta_3 N_{\mathrm{follow}}+\varepsilon </math>ΔRetention=β1Nlike+β2Nshare+β3Nfollow+ε
这类模型可以量化每种行为对留存或复访的边际贡献。再结合商业化或生态指标,可以将多个目标合成为综合价值:
<math xmlns="http://www.w3.org/1998/Math/MathML"> V k = α 1 β k + α 2 γ k + α 3 δ k V_k=\alpha_1 \beta_k+\alpha_2 \gamma_k+\alpha_3 \delta_k </math>Vk=α1βk+α2γk+α3δk
不同的 (\alpha_i) 决定了平台当前是更关注时长、互动,还是公平性。
7、冷启动的数学补丁:贝叶斯平滑
对于新内容或小样本数据,直接使用样本均值会很不稳定。抖音通常采用经验贝叶斯(Empirical Bayes)收缩估计:
<math xmlns="http://www.w3.org/1998/Math/MathML"> p ^ = x + α n + α + β \hat{p}=\frac{x+\alpha}{n+\alpha+\beta} </math>p^=n+α+βx+α
这里 (x) 是正样本数,(n) 是总样本数,(\alpha,\beta) 是先验参数。这个平滑能让"只有几个点赞的新视频"不至于被误判为爆款或废片。
8、排序的四层架构:从候选到重排
抖音的推荐排序并非一步完成,而是分为四层流水线:
<math xmlns="http://www.w3.org/1998/Math/MathML"> Recall → PreRank → Rank → ReRank \text{Recall} \rightarrow \text{PreRank} \rightarrow \text{Rank} \rightarrow \text{ReRank} </math>Recall→PreRank→Rank→ReRank
召回(Recall)阶段通过 Two-Tower 模型快速检索语义相似的视频;
粗排(PreRank)用轻量模型初步筛选;
精排(Rank)计算期望价值 EV;
重排(ReRank)则引入多样性、疲劳度、创作者公平等约束,使推荐结果在体验和生态上更平衡。
在重排阶段,优化目标通常写作:
<math xmlns="http://www.w3.org/1998/Math/MathML"> max slate ∑ i = 1 N E V ( u , i ) \max_{\text{slate}} \sum_{i=1}^{N} \mathrm{EV}(u,i) </math>maxslate∑i=1NEV(u,i)
- \lambda_1 D(i)
- \lambda_2 F(i)
- \lambda_3 R(i) $$
这意味着系统不仅在追求"分数最高",还要兼顾"内容不重复""不过度打扰""保持新鲜"。
9、探索与利用的平衡:让算法有点"好奇心"
如果算法只推荐已知热门内容,系统就会陷入"越推越窄"的困境。抖音在打分中加入了不确定性项,使算法保持探索性。
上界置信(UCB)算法的形式为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> S c o r e = μ ^ + β ⋅ σ ^ \mathrm{Score}=\hat{\mu}+\beta \cdot \hat{\sigma} </math>Score=μ^+β⋅σ^
其中 (\hat{\mu}) 是期望收益,(\hat{\sigma}) 是不确定性(方差),(\beta) 控制探索强度。
另一种是汤普森采样(Thompson Sampling):
<math xmlns="http://www.w3.org/1998/Math/MathML"> S c o r e = f θ ( u , i ) , θ ∼ p ( θ ∣ D ) \mathrm{Score}=f_{\theta}(u,i),\quad \theta\sim p(\theta \mid \mathcal{D}) </math>Score=fθ(u,i),θ∼p(θ∣D)
它在后验分布中随机采样参数,让系统在稳定推荐和探索新内容之间自动切换。
10、完整的工程打分公式
综合来看,抖音的精排打分可以写成:
<math xmlns="http://www.w3.org/1998/Math/MathML"> E V = Pr ( c o m p l e t e ) V c o m p l e t e + E [ T ] V t i m e + Pr ( l i k e ∣ c o m p l e t e ) Pr ( c o m p l e t e ) V l i k e + Pr ( s h a r e ∣ l i k e ) Pr ( l i k e ) V s h a r e + Pr ( f o l l o w ∣ p r o f i l e ) Pr ( p r o f i l e ) V f o l l o w . \begin{aligned} \mathrm{EV} &= \Pr(\mathrm{complete})V_{\mathrm{complete}} + \mathbb{E}[T]V_{\mathrm{time}}\ &+ \Pr(\mathrm{like}\mid \mathrm{complete})\Pr(\mathrm{complete})V_{\mathrm{like}}\ &+ \Pr(\mathrm{share}\mid \mathrm{like})\Pr(\mathrm{like})V_{\mathrm{share}}\ &+ \Pr(\mathrm{follow}\mid \mathrm{profile})\Pr(\mathrm{profile})V_{\mathrm{follow}}. \end{aligned} </math>EV=Pr(complete)Vcomplete+E[T]Vtime +Pr(like∣complete)Pr(complete)Vlike +Pr(share∣like)Pr(like)Vshare +Pr(follow∣profile)Pr(profile)Vfollow.
在此基础上,加入负反馈、疲劳、重复、内容新鲜度等约束,得到最终分数:
<math xmlns="http://www.w3.org/1998/Math/MathML"> S c o r e = E V − λ n e g Pr ( n e g a t i v e ) − λ f a t i g u e F ( u , i ) − λ d u p D ( slate ) + λ f r e s h R ( i ) \mathrm{Score}=\mathrm{EV} -\lambda_{\mathrm{neg}}\Pr(\mathrm{negative}) -\lambda_{\mathrm{fatigue}}F(u,i) -\lambda_{\mathrm{dup}}D(\text{slate}) +\lambda_{\mathrm{fresh}}R(i) </math>Score=EV−λnegPr(negative)−λfatigueF(u,i)−λdupD(slate)+λfreshR(i)
11、数值示例:一条视频的"得分"是怎么算出来的?
假设一个用户看到一条视频,其行为概率如下:
<math xmlns="http://www.w3.org/1998/Math/MathML"> Pr ( c o m p l e t e ) = 0.42 , E [ T ] = 9.8 , Pr ( l i k e ∣ c o m p l e t e ) = 0.18 , Pr ( s h a r e ∣ l i k e ) = 0.07 , Pr ( p r o f i l e ) = 0.05 , Pr ( f o l l o w ∣ p r o f i l e ) = 0.12. \Pr(\mathrm{complete})=0.42,\quad \mathbb{E}[T]=9.8,\quad \Pr(\mathrm{like}\mid \mathrm{complete})=0.18,\ \Pr(\mathrm{share}\mid \mathrm{like})=0.07,\quad \Pr(\mathrm{profile})=0.05,\quad \Pr(\mathrm{follow}\mid \mathrm{profile})=0.12. </math>Pr(complete)=0.42,E[T]=9.8,Pr(like∣complete)=0.18, Pr(share∣like)=0.07,Pr(profile)=0.05,Pr(follow∣profile)=0.12.
权重设定为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> V c o m p l e t e = 0.8 , V t i m e = 0.02 , V l i k e = 1.0 , V s h a r e = 5.0 , V f o l l o w = 8.0. V_{\mathrm{complete}}=0.8,\quad V_{\mathrm{time}}=0.02,\quad V_{\mathrm{like}}=1.0,\quad V_{\mathrm{share}}=5.0,\quad V_{\mathrm{follow}}=8.0. </math>Vcomplete=0.8,Vtime=0.02,Vlike=1.0,Vshare=5.0,Vfollow=8.0.
则:
<math xmlns="http://www.w3.org/1998/Math/MathML"> Pr ( l i k e ) = 0.42 × 0.18 = 0.0756 , Pr ( s h a r e ) = 0.0756 × 0.07 = 0.00529 , Pr ( f o l l o w ) = 0.05 × 0.12 = 0.006. \Pr(\mathrm{like})=0.42\times0.18=0.0756,\quad \Pr(\mathrm{share})=0.0756\times0.07=0.00529,\quad \Pr(\mathrm{follow})=0.05\times0.12=0.006. </math>Pr(like)=0.42×0.18=0.0756,Pr(share)=0.0756×0.07=0.00529,Pr(follow)=0.05×0.12=0.006.
最终期望价值:
<math xmlns="http://www.w3.org/1998/Math/MathML"> E V = 0.42 × 0.8 + 9.8 × 0.02 + 0.0756 × 1.0 + 0.00529 × 5.0 + 0.006 × 8.0 = 0.336 + 0.196 + 0.0756 + 0.0265 + 0.048 = 0.6821 \begin{aligned} \mathrm{EV}&=0.42\times0.8 + 9.8\times0.02 + 0.0756\times1.0 + 0.00529\times5.0 + 0.006\times8.0\ &=0.336 + 0.196 + 0.0756 + 0.0265 + 0.048\ &=0.6821 \end{aligned} </math>EV=0.42×0.8+9.8×0.02+0.0756×1.0+0.00529×5.0+0.006×8.0 =0.336+0.196+0.0756+0.0265+0.048 =0.6821
这意味着在当前上下文中,这条视频的"综合行为价值"为 0.682,算法会用它与其他视频的得分比较,决定排序。
12、创作者视角:如何让算法给你更高分?
理解了算法的打分逻辑,你就会明白:算法并不看你"是谁",而看你的内容能不能让用户产生有价值的行为。 要获得高分,关键是让系统预测到更高的完播率、互动率与复访率。
一个简单的近似关系是:
<math xmlns="http://www.w3.org/1998/Math/MathML"> Score ↑ ⟺ Pr ( complete ) , Pr ( like ) , Pr ( share ) , Pr ( follow ) ↑ \text{Score} \uparrow \ \Longleftrightarrow\ {\Pr(\text{complete}),\Pr(\text{like}),\Pr(\text{share}),\Pr(\text{follow})}\uparrow </math>Score↑ ⟺ Pr(complete),Pr(like),Pr(share),Pr(follow)↑
所以你需要优化的,不是标题标签,而是行为驱动的内容结构------前几秒的吸引力、情绪节奏的转折、评论区的互动设计。这些才是算法真正"读得懂"的语言。
13、结语:推荐系统的未来,不是标签,而是行为
从"标签匹配"到"行为预测",推荐系统经历了一场范式迁移。
过去算法在问:"你是谁?"而今天,它在问:"此刻你会做什么?"
在神经网络的深层推理与实时反馈机制下,推荐的核心变成了一种"行为价值最大化"。
抖音用无数次点击与滑动,训练出对人性的统计学理解。
"不是标签定义了你,而是你的每一个停留,正在定义算法的世界。"