记得去年某个时候,某一款内容资讯产品的Feeds流持续1天刷到重复的内容,从产品角度讲,这无形中浪费了很多推荐位资源,若换成广告位则是直接的收入损失。当时特意看了一下,文章的ID(url)是一样的,基本可以确定是推荐系统排重那里出了问题。对于ID不一样、但相似度极高的文章,同样也不能推荐给用户。今天咱们就深入讲一下,作为一款成熟的信息流产品,是如何避免给用户推荐重复或者相似度极高的内容的。
信息流产品的系统构成
我们先简单看一下信息流产品分成哪几个子系统,分别需要在哪些子系统做重复检测,下图是一个信息流产品的主要构成图:
内容引入:这个环节负责文章的引入,对于一款内容资讯产品来说,文章是多多益善,不仅年轻人需要内容资讯,年长者也同样需要,文章来源多样化可以保证各年龄人群的覆盖,这个环节不用考虑文章是否重复。
内容处理:这个环节会进行重复文章的检测与处理,对于达到一定相似度的多篇文章(包括图文、视频),按照一定策略只保留其中一篇。
内容分发:对于内容领域,现在基本采用的都是App工厂模式,通俗来讲就是群战,每款App进行目标人群或者内容的细分,比如漫画App、短视频App,短视频又分PGC视频、UGC视频等。虽然内容触达渠道有多个,但是内容处理系统最好全局唯一,这样能增强对内容的处理能力。内容分发和内容处理逻辑上是两个独立的子系统,实际实现的时候可能会放在一起,因为内容处理的时候也会考虑内容最终在哪个渠道触达用户。
内容推荐:按照用户的兴趣进行推荐,所谓千人千面,已经推荐给用户(曝光)的文章,内容推荐系统需要记录下来,用户再次刷的时候需要剔除掉。
从上面几点看,需要内容处理系统和内容推荐系统通力合作,从而保证用户不会刷到重复(或者相似度很高)的文章。下面就分别讲一下这两个子系统具体是如何实现的。
内容推荐系统中的去重逻辑
推荐系统主要由数据层、召回层、排序层构成,如下图所示:
数据层:包括数据的生成和存储,C侧用户的行为数据(曝光、点击、阅读时长、负反馈、评论、Biu、分享、收藏、点赞、文章的分类、Tag等)通过埋点上报到后台构成用户的行为数据,结合用户的基础属性(性别、年龄、地域