今日头条算法原理—— 3分钟了解今日头条推荐算法原理( 四 )


今日头条算法原理—— 3分钟了解今日头条推荐算法原理

文章插图
当然最简单的用户标签是浏览过的内容标签 。但这里涉及到一些数据处理策略 。主要包括:一、过滤噪声 。通过停留时间短的点击 , 过滤标题党 。二、热点惩罚 。对用户在一些热门文章(如前段时间PG One的新闻)上的动作做降权处理 。理论上 , 传播范围较大的内容 , 置信度会下降 。三、时间衰减 。用户兴趣会发生偏移 , 因此策略更偏向新的用户行为 。因此 , 随着用户动作的增加 , 老的特征权重会随时间衰减 , 新动作贡献的特征权重会更大 。四、惩罚展现 。如果一篇推荐给用户的文章没有被点击 , 相关特征(类别 , 关键词 , 来源)权重会被惩罚 。当然同时 , 也要考虑全局背景 , 是不是相关内容推送比较多 , 以及相关的关闭和dislike信号等 。
今日头条算法原理—— 3分钟了解今日头条推荐算法原理

文章插图
用户标签挖掘总体比较简单 , 主要还是刚刚提到的工程挑战 。头条用户标签第一版是批量计算框架 , 流程比较简单 , 每天抽取昨天的日活用户过去两个月的动作数据 , 在Hadoop集群上批量计算结果 。
今日头条算法原理—— 3分钟了解今日头条推荐算法原理

文章插图
但问题在于 , 随着用户高速增长 , 兴趣模型种类和其他批量处理任务都在增加 , 涉及到的计算量太大 。2014年 , 批量处理任务几百万用户标签更新的Hadoop任务 , 当天完成已经开始勉强 。集群计算资源紧张很容易影响其它工作 , 集中写入分布式存储系统的压力也开始增大 , 并且用户兴趣标签更新延迟越来越高 。
今日头条算法原理—— 3分钟了解今日头条推荐算法原理

文章插图
面对这些挑战 。2014年底今日头条上线了用户标签Storm集群流式计算系统 。改成流式之后 , 只要有用户动作更新就更新标签 , CPU代价比较小 , 可以节省80%的CPU时间 , 大大降低了计算资源开销 。同时 , 只需几十台机器就可以支撑每天数千万用户的兴趣模型更新 , 并且特征更新速度非常快 , 基本可以做到准实时 。这套系统从上线一直使用至今 。
今日头条算法原理—— 3分钟了解今日头条推荐算法原理

文章插图
当然 , 我们也发现并非所有用户标签都需要流式系统 。像用户的性别、年龄、常驻地点这些信息 , 不需要实时重复计算 , 就仍然保留daily更新 。
四、评估分析
上面介绍了推荐系统的整体架构 , 那么如何评估推荐效果好不好?
有一句我认为非常有智慧的话 , “一个事情没法评估就没法优化” 。对推荐系统也是一样 。
今日头条算法原理—— 3分钟了解今日头条推荐算法原理

文章插图
事实上 , 很多因素都会影响推荐效果 。比如侯选集合变化 , 召回模块的改进或增加 , 推荐特征的增加 , 模型架构的改进在 , 算法参数的优化等等 , 不一一举例 。评估的意义就在于 , 很多优化最终可能是负向效果 , 并不是优化上线后效果就会改进 。
今日头条算法原理—— 3分钟了解今日头条推荐算法原理

文章插图
全面的评估推荐系统 , 需要完备的评估体系、强大的实验平台以及易用的经验分析工具 。所谓完备的体系就是并非单一指标衡量 , 不能只看点击率或者停留时长等 , 需要综合评估 。过去几年我们一直在尝试 , 能不能综合尽可能多的指标合成唯一的评估指标 , 但仍在探索中 。目前 , 我们上线还是要由各业务比较资深的同学组成评审委员会深入讨论后决定 。
很多公司算法做的不好 , 并非是工程师能力不够 , 而是需要一个强大的实验平台 , 还有便捷的实验分析工具 , 可以智能分析数据指标的置信度 。
今日头条算法原理—— 3分钟了解今日头条推荐算法原理

文章插图
一个良好的评估体系建立需要遵循几个原则 , 首先是兼顾短期指标与长期指标 。我在之前公司负责电商方向的时候观察到 , 很多策略调整短期内用户觉得新鲜 , 但是长期看其实没有任何助益 。


推荐阅读