
Feed 流的排序算法时间线、热度与个性化的融合排序一、如果只按时间排序用户看到的全是三天前的广告如果只按热度用户看不到朋友刚发的动态Feed 流排序是一个经典的三维决策问题。三个维度分别是时间新的排前面、热度点赞多评论多的排前面、个性化用户可能感兴趣的排前面。这三个维度天然存在矛盾。刚发出来的内容热度肯定低按热度排就沉底了。朋友发的生活动态热度一般但用户想看——个性化维度需要给这类内容加权。单一维度的排序都会让用户体验变差。纯时间排序导致优质内容被淹没纯热度排序让新内容没有曝光机会马太效应纯个性化排序需要准确的用户兴趣模型冷启动困难。所以 Feed 流排序的核心是把这三个维度融合成一个统一的排序公式每个维度设置合理的权重。二、排序公式的设计一个典型的 Feed 流排序公式如下Score w1 × TimeDecay(age) w2 × Popularity(interactions) w3 × Relevance(user, content)时间衰减TimeDecay(age) 1 / (1 α × age_hours)。随着内容发布时间的增长得分逐渐下降。α 控制衰减速度α 越大衰减越快。对于新闻类 Feedα 应该设大几小时内就沉底对于知识类 Feedα 应该设小好内容可以保持较长的曝光期。热度分Popularity log(1 likes 2×comments 3×shares)。评论和分享的权重高于点赞因为这些操作的互动深度更大。取对数是为了抑制马太效应——如果直接用原始值一篇 10000 赞的文章会把所有其他内容都压死。个性化相关性Relevance cosine_similarity(user_embedding, content_embedding)。通过用户的行为历史看过哪些内容、点了哪些赞学习用户的兴趣 embedding计算与内容 embedding 的余弦相似度。 Feed 流排序引擎 核心公式Score w1 * time_score w2 * hot_score w3 * relevance_score 权重设定原则 - 社交类 Feed朋友圈w1 更高时效性优先 - 资讯类 Feed新闻w1 很高 - 知识类 Feed知乎w2 更高优质内容优先 - 推荐类 Feed抖音w3 更高个性化优先 import math import numpy as np class FeedScorer: def __init__(self, w_time0.4, w_hot0.3, w_relevance0.3): 三个维度的权重根据业务场景调整 为什么总和是 1.0 - 让最终得分有明确的物理意义和范围 - 方便不同版本排序公式之间的效果对比 self.w_time w_time self.w_hot w_hot self.w_relevance w_relevance def score(self, content, current_time, user_embeddingNone): 对单条内容打分 Returns: float: 0~1 之间的得分 # 维度1时间衰减 age_hours (current_time - content.publish_time) / 3600.0 # α 设为 0.1意味着 10 小时后得分降为原来的一半 time_score 1.0 / (1.0 0.1 * age_hours) # 维度2热度分取对数抑制马太效应 # 对数底数影响热度分的增长速率 # 2 为基础互动避免 log(0) 的情况 hot_score math.log( 2 content.likes 2 * content.comments 3 * content.shares ) / math.log(100) # 归一化到 0~1 # 维度3个性化相关性 relevance_score 0.5 # 默认值未知用户兴趣时给中间分 if user_embedding is not None and content.embedding is not None: relevance_score self._cosine_similarity( user_embedding, content.embedding ) # 映射到 0~1cosine 范围是 [-1, 1] relevance_score (relevance_score 1) / 2 # 加权融合 final_score ( self.w_time * time_score self.w_hot * hot_score self.w_relevance * relevance_score ) return final_score def _cosine_similarity(self, a, b): 余弦相似度 return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))三、排序后的业务规则干预纯算法排序的结果有时候会出现不合理的现象同一个用户连发 5 条动态全部排在 Feed 流的前面。这会让其他内容完全没有曝光机会。业务规则干预的目的是修正算法排序中不合常理的结果。打散规则同一作者的内容之间至少间隔 3 条其他内容。实现方式是遍历排序结果如果当前内容的作者和上一条相同则把它下沉到后面的位置。去重规则多个关注对象转发了同一内容Feed 中只显示第一条后面的去重。置顶规则运营指定的内容活动公告、系统通知强制排在第一位。多样性规则确保相邻的内容在类目上不同。如果连续 3 条都是同一类目第 3 条下沉。这些规则在执行上需要谨慎过多的业务规则会让排序失去一致性用户刷新时可能出现结果剧烈波动。四、A/B 测试的评估框架Feed 流排序的效果评估用传统指标CTR、点赞率是不够的。需要加入用户体验相关的指标互动率看到 Feed 后有点赞/评论/分享的用户比例。内容多样性用户一次 Feed 刷新中看到的不同作者数量。停留时长用户在 Feed 流上的停留时间不是刷走的秒数。长尾曝光率粉丝少的用户发布的内容被看到的比例。五、总结Feed 流排序不是一个单一公式的问题而是一个加权融合 规则干预 A/B 验证的持续迭代过程。三维度的权重设定高度依赖内容平台的定位——社交型重时间、知识型重热度、推荐型重个性化。排序公式只是框架后续的业务规则打散、多样性保障、效果评估这些看似不属于算法的工作往往比调权重对最终用户体验的影响更大。