今天谈下突发热门话题对于推荐系统的考验。内容推荐系统,本质上是一种人物喜好与内容的信息匹配。在大部分情况下,推荐系统可以离线的根据每名用户的历史观看记录以及每个内容的属性训练模型,并且实现推荐。但是,当一个非常热门的话题爆发了,例如李小璐PGONE事件这样整个平台的内容和人们的关注点都会聚焦到一个问题上,究竟会对推荐系统造成哪些影响呢?傲海为您细细道来。
架构考验
目前市面上绝大部分的内容推荐都是基于离线计算的架构实现的。离线计算的含义是每天系统把全量数据下载到存储空间中,对于每个用户的喜好做计算并把结果反馈给推荐引擎。在离线计算框架下,每个用户的待推荐内容都是前一天算好的,对于新产生的内容往往没有那么强的感知。
但是有的同学会问:“为什么我在每个新闻客户端还是可以看到最新的突发新闻推荐呢?这与离线的推荐架构不符啊?”那是因为很多内容推荐客户端为了防止热门新闻无法被实时推荐的问题,在给用户的推荐列表中添加了一部分有利于最新新闻的规则,比如推荐引擎会设定“李小璐PGONE”新闻出现在每个用户的待推荐列表。这种规则其实并不是一个基于算法的实时推荐实现。
那么如何做到实时推荐热门新闻呢?这要求推荐系统需要建立在一个实时计算框架上,目前业内主流的是Flink或者Spark-streaming。在这种框架下实现的流式推荐引擎,数据通过Kafka流入,通过流式框架实时构建新闻特征,并且代入模型进行推荐排序。
而实时推荐框架相比于离线推荐框架会复杂的多,比如在实时推荐框架下一旦出现数据阻塞或者服务挂掉,failover机制就会比离线系统复杂得多,这点在之后的文章我会再介绍。
性能考验
前面介绍了计算框架,那么光有流式框架是不够的,突发新闻产生后,对于整个架构的性能也有很高要求,因为这种事件会造成系统中的待推荐内容爆发式增长,更会造成每个用户的行为属性大幅度变更。
在推荐系统中,每个待推荐内容、每个用户都会通过一个embedding向量表示,这些向量需要全量数据在一起做很多矩阵运算得到。如果系统中突然增加大量的待推荐内容,比如“李小璐出轨”、“PGONE李小璐视频”、“李小璐PGONE亲嘴”,这些新闻会在短时间爆发性增长,系统如果想基于这些内容作推荐,需要在短时间内消耗大量的计算量去做内容的embedding。
对于每个用户来讲,行为属性也很有可能在短时间内大幅度改变,比如A用户之前可能不是一个很八卦的人,关心的内容都是养生、军事、科技。突然A发现李小璐出轨这个事很好玩,然后大范围查看相关娱乐新闻。对于A的embedding向量需要重新计算才准确。诸如此类的计算能力,也是事实计算系统能否完成基于热点内容推荐的关键。
写到最后~每次这种吃瓜事件出来,都是对各个推荐系统的一次大考,大家可以用心看下哪家的推荐系统推荐的最符合你对这个瓜的预期,用心去感受推荐系统的魅力,谢谢~