
1. 项目概述从点击到时长视频推荐的下一个关键战场如果你在视频平台工作或者对推荐系统感兴趣那你肯定对CTR点击率和CVR转化率预测模型耳熟能详。这些模型在过去十年里几乎定义了整个内容分发的游戏规则——预测用户会不会点点了之后会不会有后续行为。但不知道你有没有发现当我们把用户“骗”进来点击之后真正的考验才刚刚开始用户看了多久是3秒就划走还是津津有味地看完了整集这个“看了多久”的指标就是视频观看时长Video Watch Time。它比单纯的点击更能反映内容的真实吸引力和用户满意度也逐渐成为衡量推荐系统商业价值和用户体验的核心KPI。然而预测观看时长是个“硬骨头”。它不像点击0或1那样是非分明而是一个连续的、高度偏态分布的正数。大部分视频的观看时长都很短几秒到几十秒只有少数优质或恰好对用户胃口的内容能获得很长的观看。这种数据分布让传统的回归模型比如预测一个平均时长或者简单的分类模型比如预测是否超过30秒都显得力不从心。它们要么对极端值长尾部分无能为力要么丢失了时长信息中丰富的分布形态。最近读了一篇挺有意思的论文标题是《Multi-Granularity Distribution Modeling for Video Watch Time Prediction via Exponential-Gaussian Mixture Network》我们姑且叫它EGMN模型。这篇论文直击了观看时长预测的痛点提出了一种全新的建模思路不对单一的时长数值进行回归而是去建模整个时长的概率分布。并且它认为这个分布应该由多个不同“粒度”的组件混合而成从而更灵活、更精准地捕捉从“秒弃”到“完播”的各种用户行为模式。这个想法在我看来是把观看时长预测从“猜数字”游戏提升到了“理解行为模式”的层面对于想要优化视频留存和用户粘性的团队来说非常有启发性。这篇笔记我就结合自己之前在内容平台做增长的经验来拆解一下EGMN的核心思想、技术实现以及我们能从中借鉴到什么。无论你是算法工程师、产品经理还是对数据建模感兴趣的同学相信都能从中看到一些将复杂用户行为“掰开揉碎”进行量化的美妙之处。2. 核心思路拆解为什么是“多粒度”与“混合分布”在深入模型细节之前我们得先搞清楚两个核心概念“多粒度”和“混合分布”。这不仅是论文的标题更是其方法论的精髓。2.1 观看时长数据的“反直觉”特性首先我们直观感受一下观看时长数据。假设我们统计一个短视频平台上千万条观看记录绘制时长的直方图你大概率会看到这样的图形在0秒附近有一个极高的尖峰大量瞬间划走的行为然后随着时长增加频率急剧下降但在相对较长的位置比如几分钟或几十分钟又会有一个虽然低但不可忽视的“长尾”。整个分布是极度右偏的均值远大于中位数。这种分布给建模带来了几个挑战异方差性时长的波动范围极大从0到数小时。一个模型很难同时处理好秒级和小时级的数据。多峰性数据可能不是来自单一模式。例如存在“误点击-立即退出”、“浏览-中途退出”、“沉浸式-完整观看”等多种用户意图每种意图对应的时长分布模式不同。零膨胀与长尾大量数据堆积在0附近或一个很小的正数同时存在少数极大的值。传统的MSE均方误差回归模型会严重受到长尾极端值的影响预测结果偏向于拉高对主流短时长样本预测不准。而分桶做分类如预测是否大于30秒、60秒等又损失了具体的时长信息且桶的边界划分非常武断。2.2 混合分布一种优雅的解决方案论文的核心洞察是与其用一个统一的分布去硬拟合所有数据不如用几个简单的分布组件“混合”起来共同去描述数据。每一个组件可以代表一种典型的用户行为模式。他们选择了指数分布Exponential和高斯分布Gaussian作为基础组件。指数分布非常适合描述“短时长”行为。它的概率密度函数从最高点开始单调递减能够很好地捕捉那些用户快速失去兴趣、观看时长集中在较短区间的模式。比如封面党、标题党或者内容开头不佳导致的快速流失。高斯分布正态分布则更适合描述“中等及以上时长”的行为。当用户被内容吸引其观看时长会围绕一个相对稳定的均值波动呈现出类似正态分布的特点。比如观看一个知识类视频或一段剧集。通过将多个指数分布和高斯分布线性组合形成一个混合模型这个模型就具备了同时刻画短时尖峰、中等时长聚集和长尾拖尾的能力。模型的任务不再是输出一个点估计值而是输出一组定义了这个混合分布的参数如每个组件的权重、指数分布的率参数、高斯分布的均值和方差。2.3 多粒度更精细的行为模式刻画那么“多粒度”又体现在哪里呢论文认为即使是同一种“组件类型”比如都是高斯分布其参数均值也可以代表不同的时间尺度粒度。细粒度组件均值较小的组件负责捕捉以秒或十秒为单位的观看行为。中粒度组件均值在分钟级别的组件。粗粒度组件均值在十分钟甚至小时级别的组件用于捕捉深度观看或完播行为。“多粒度”的提法强调了模型在设计时就有意识地去覆盖和区分不同时间尺度上的用户行为模式而不是让模型在训练中盲目地学习。这种设计先验Design Prior的引入往往能让模型更快收敛学到更有解释性的特征。打个比方预测观看时长就像预测一个人的行程。传统方法只猜他最终走了多远一个数字。而EGMN的方法是先判断他这次出门是“下楼取快递”短时指数模式、“去超市购物”中时高斯模式还是“长途旅行”长时高斯模式并且允许行程可能是“取了快递又去超市”的混合模式。最后我们不仅能预测总行程还能说出每种模式的可能性有多大。这无疑提供了更丰富的洞察。3. EGMN模型架构深度解析了解了核心思想我们来看EGMN具体是怎么实现的。整个模型可以看作一个端到端的深度概率生成网络其目标是为每一个“用户-视频”对生成一个观看时长t的概率密度函数p(t | x)其中x是输入特征用户特征、视频特征、上下文特征等。3.1 模型整体框架模型主要分为四个部分特征嵌入与融合层处理高维稀疏特征如用户ID、视频ID得到稠密的特征向量。多粒度基分布生成器这是模型的核心。它接收融合后的特征并行地生成K个指数分布组件和L个高斯分布组件的参数。门控网络同样基于融合特征生成一个(KL)维的权重向量用于混合各个基分布组件。这个权重经过了Softmax归一化代表每个组件对当前样本的“重要性”或“贡献度”。混合分布构建与损失计算将上述生成的参数组合起来形成最终的混合分布并利用真实观看时长t通过最大似然估计MLE来训练整个网络。3.2 核心组件基分布参数化这是技术实现的关键细节我们展开说说。对于第k个指数分布组件 其概率密度函数为f_exp(t; λ_k) λ_k * exp(-λ_k * t)其中λ_k 0是率参数rate parameterλ_k越大分布越集中在0附近。 在模型中我们通过一个全连接层 Softplus激活函数保证正值从特征向量z预测出λ_kλ_k Softplus(W_k^exp * z b_k^exp)对于第l个高斯分布组件 其概率密度函数为f_norm(t; μ_l, σ_l) (1/(σ_l√(2π))) * exp(-(t-μ_l)^2/(2σ_l^2))。 这里需要对均值和标准差进行预测均值μ_l同样通过全连接层预测。为了体现“多粒度”论文采用了一种巧妙的参数化方式。他们不是直接预测μ_l而是预测一个相对于某个基粒度base granularity的偏移量。例如可以预设一组基粒度{b_1, b_2, ..., b_L}如1秒30秒5分钟30分钟然后预测一个缩放因子α_lμ_l b_l * exp(α_l)其中α_l W_l^μ * z b_l^μ。 这样做的好处是将μ_l的先验知识多粒度注入模型让每个高斯组件更容易聚焦到特定的时间尺度上加速训练并提升可解释性。标准差σ_l为了保证正值使用Softplus激活σ_l Softplus(W_l^σ * z b_l^σ)。注意这里指数分布没有对均值进行类似的“基粒度”设计因为指数分布本身的性质均值1/λ决定了其形态其“粒度”主要通过率参数λ来体现λ大则粒度细短时λ小则粒度粗长时。3.3 门控网络与混合门控网络是一个简单的全连接层加Softmax输出KL维的混合权重π [π_1, ..., π_K, π_{K1}, ..., π_{KL}]满足Σπ_i 1。最终对于输入特征x对应隐向量z观看时长t的混合分布概率密度为p(t | x) Σ_{k1}^K [π_k * f_exp(t; λ_k)] Σ_{l1}^L [π_{Kl} * f_norm(t; μ_l, σ_l)]3.4 训练目标最大似然估计模型的训练非常直接就是最大化所有训练样本的似然函数。对于一条样本其真实观看时长为t_true模型给出的分布是p(t | x)那么损失函数就是负对数似然Negative Log-Likelihood, NLLLoss -log p(t_true | x)通过反向传播优化这个损失模型会学习调整特征嵌入、基分布参数生成器和门控网络的参数使得对于任意样本x其对应的混合分布p(t|x)在真实值t_true处的概率密度尽可能大。一个重要的实操细节由于观看时长t是连续值直接计算概率密度在数值上可能很小导致对数似然出现极负值。通常需要保证分布的参数如σ不要过小或者在计算log时加一个极小的保护项epsilon防止数值下溢。4. 从理论到实践实操要点与经验分享读论文是一回事把思想落地又是另一回事。EGMN模型虽然结构清晰但在实际工业场景中应用有几个关键点需要特别注意。4.1 特征工程什么信息决定了观看时长模型的上限由特征决定。对于观看时长预测特征体系需要比CTR预测更细致。除了常规的用户侧历史平均观看时长、活跃时段、兴趣标签、设备类型。视频侧类别、标签、热度、时长、生产者信息、封面/标题的吸引力分数可用CV/NLP模型提取。上下文推荐位置、当前时间、网络环境。还需要重点考虑序列和交叉特征用户实时兴趣序列用户最近点击/观看的10个视频的ID和类别用Transformer或GRU编码成一个向量这能捕捉用户当前的兴趣流。视频内容质量信号例如视频的完播率、平均观看进度、点赞/评论/分享率。这些是视频内在吸引力的强信号。特别是完播率和平均观看进度它们与目标观看时长直接相关但又不是同一个指标可以作为非常有效的特征。用户-视频匹配度计算用户兴趣标签与视频标签的余弦相似度或基于Embedding的匹配分数。对抗特征为了防止模型过于依赖视频本身的平均时长这会导致“热门视频通吃”可以加入一些“去偏”特征如视频在冷启动期的表现或者对视频ID的嵌入进行降维或正则化。实操心得在我们的一次A/B测试中引入由视频前30秒的互动数据暂停、重播、倍速构成的“开局吸引力”特征对短时长1分钟的预测精度提升非常明显。这说明用户是否愿意看下去在视频开头几秒就很大程度上决定了。4.2 模型配置与调参组分数K和L的选择这是最重要的超参数之一。论文中可能使用了K2 L3之类的配置。实践中需要通过验证集上的对数似然或业务指标来选择。起始策略可以从较小的数量开始如1个指数2个高斯观察每个组件学习到的参数均值、权重是否具有明确的物理意义例如一个组件专攻0-10秒一个专攻30-60秒一个专攻长尾。如果发现某个组件学到的参数很模糊或者两个组件高度重叠可以考虑减少数量。反之如果发现数据中存在明显的多个模式未被捕捉可以增加。监控组件权重训练时可以定期查看门控网络输出的平均权重。如果某个组件的权重长期接近于0说明它可能是多余的。基粒度b_l的设定这是注入“多粒度”先验的关键。不建议随机初始化。可以根据训练数据中时长的分位数来设定。例如计算时长的25% 50% 75% 90%分位数将其作为高斯组件基粒度b_l的初始值。这样能给模型一个很好的起点。损失函数与正则化NLL Loss是主损失。确保数值稳定。权重正则化可以对门控网络的输出权重π加入L1或L2正则鼓励模型使用更少的组件来解释数据防止过拟合。方差下限为高斯组件的标准差σ_l设置一个下限如0.1防止其变得过小导致分布过于尖锐在训练初期出现数值问题。训练技巧时长归一化由于时长跨度大建议对真实时长t_true进行对数变换或分位数变换使其分布更接近正态有助于训练稳定。但要注意如果你变换了t那么你预测的分布就是变换后变量的分布。在评估和线上服务时需要进行相应的逆变换。课程学习可以先训练一个简单的模型如单高斯分布作为热身然后用其参数初始化EGMN的对应部分再进行精细调优。多任务学习可以将观看时长预测与CTR预测作为多任务一起训练共享底层的特征嵌入层。这通常能提升嵌入的质量特别是对于稀疏特征。4.3 线上服务与指标评估模型训练好后如何上线并评估效果线上预测线上服务时对于给定的(user, item, context)模型前向传播得到混合分布的参数{π, λ, μ, σ}。点估计需求如果下游排序需要单个分数我们可以用该分布的期望值作为预测时长E[t] Σ_{k1}^K [π_k / λ_k] Σ_{l1}^L [π_{Kl} * μ_l]。因为指数分布的期望是1/λ高斯分布的期望是μ。分布信息利用更高级的用法是利用整个分布。例如可以计算观看时长超过某个阈值T如30秒的概率P(t T) 1 - CDF(T)其中CDF是混合分布的累积分布函数。这个概率可以作为衡量“深度观看”可能性的指标用于排序。评估指标不能只看MSE或MAE。主要指标对数似然Log-Likelihood, LL或负对数似然NLL。这是与训练目标一致的指标直接衡量模型拟合数据分布的好坏。业务指标在线上A/B测试中关注人均观看时长、总观看时长、完播率等核心业务指标的提升。辅助指标MAE / RMSE虽然不完美但可以看预测期望值与真实值的误差。分位数损失例如计算在50%分位数中位数和90%分位数上的预测误差这能评估模型在不同时长区间上的预测能力。Calibration校准度。将预测的期望值按大小分桶看每个桶内实际时长的平均值是否与预测平均值一致。一个好的模型应该是校准良好的。踩坑记录我们第一次上线分布模型时直接使用预测期望值排序发现业务指标有负向。后来分析发现模型对于极短时长5秒的样本预测过于“自信”方差小但对长尾样本预测期望值虽然准但方差很大。这导致一些“高风险高收益”可能很长也可能很短的视频排名靠后。后来我们调整了排序公式结合了期望值和超过某个阈值的概率P(t T)取得了更好的效果。这说明将分布信息转化为排序分数需要精心设计最好能与业务目标如最大化总时长直接挂钩。5. 常见问题、扩展思考与未来方向5.1 常见问题排查训练不稳定NLL Loss变成NaN或无穷大检查首先检查输入特征是否有异常值NaN或极大值。然后检查高斯分布的标准差σ确保其不会训练到0添加下限。检查指数分布的率参数λ确保其不为无穷大添加上限或梯度裁剪。操作对特征进行更严格的清洗和截断为σ和λ的输出层激活函数后添加clamp操作如torch.clamp(var, min1e-4, max1e4)降低初始学习率使用梯度裁剪。模型退化某个组件权重始终为1其他为0原因可能是特征区分度不够或者某个组件过于“强势”容易拟合大多数样本。操作增强特征工程在门控网络的Softmax之前加入Dropout对组件权重π加入更强的L1正则鼓励稀疏性但避免单一化尝试减少组件数量。预测期望值系统性偏高或偏低原因数据分布偏移或损失函数中不同区域的样本权重不平衡长尾样本的极端值对NLL影响大。操作检查训练集和线上数据分布是否一致可以对样本进行加权例如给中短时长样本更高的权重以平衡长尾样本的影响或者采用分位数损失作为辅助损失。线上推理速度慢原因混合分布模型需要计算多个分布的概率密度比单点回归模型计算量大。操作使用模型剪枝剔除权重接近0的组件将模型转换为TensorRT或ONNX格式进行加速在排序阶段可以先用一个轻量级模型进行粗排再用EGMN进行精排。5.2 模型扩展与变种思考EGMN提供了一个强大的框架但仍有改进和扩展的空间更灵活的基分布除了指数分布和高斯分布还可以考虑对数正态分布天生适合处理右偏的正数数据可能比高斯分布更适合长尾。韦伯分布比指数分布更灵活可以描述更多形态的故障率这里可类比为“流失率”曲线。混合的混合允许每个组件本身也是一个混合分布形成层次化混合模型表达能力更强但也更复杂。引入隐变量与变分推断将用户的行为模式如“浏览模式”、“沉浸模式”建模为一个离散隐变量z通过变分自编码器VAE的框架来学习。这样可能学到更有解释性的模式并且能进行“what-if”分析如果用户处于沉浸模式预测时长会是多少。动态多粒度现在的“多粒度”基粒度b_l是预设的静态值。是否可以设计一个网络根据输入内容动态地生成或调整这些基粒度例如对于一个短视频模型应该更关注秒级和分钟级的组件对于一个长电影则应该启用小时级的组件。与序列模型结合用户的一次观看不是孤立的。可以将EGMN作为序列模型如Transformer在时间步上的输出层来预测用户下一次观看的时长分布从而建模观看时长的动态变化。5.3 业务价值再思考最后跳出技术细节我们想想为什么要在推荐系统中投入精力做观看时长预测。对于用户体验更准确的时长预测意味着系统能更好地理解用户的兴趣深度从而推荐那些真正能吸引用户、让其沉浸的内容减少无效曝光和用户挫败感。对于内容生态系统不再仅仅追逐点击而是奖励那些能留住用户、提供价值的“优质内容”。这有助于激励创作者生产更用心、更完整的内容而不是仅仅做“封面党”和“标题党”。对于商业变现观看时长是广告加载、会员付费等商业模式的核心基础。更长的观看时长直接意味着更多的广告展示机会和更高的付费转化潜力。预测时长可以帮助平台更精准地进行流量规划和商业化决策。我个人在实际应用中的体会是从CTR/CVR模型切换到时长预测模型不仅仅是模型指标的改变更是整个团队思维方式的转变——从关注“入口”到关注“留存”从优化“瞬时决策”到优化“长期价值”。这个过程肯定会遇到数据和工程上的挑战但一旦走通它对产品健康度的提升往往是全局性的。EGMN这类分布建模方法为我们提供了一把更精细的尺子去度量用户与内容之间那段宝贵的“共处时光”。