一文学会【内容推荐算法】

Moon
1852 阅读
5

# 01 


认识推荐算法


在资讯类产品中,我们希望把一些热门的文章推荐给读者,那么如何来确定哪些文章是真正热门的呢?
我们用一个热度值来表示,而这个热度值,如果用于排序,则可以称之为权重
权重是一个经过计算的值,主要用于检索结果排序。
网站中并不需要搜索引擎一样非常精确的文章排序,因此,我们可以认准几个重要参数,作为衡量权重的要素。
我在自己的设计中,主要使用了4个参数浏览量、点赞数、回复数、发布时间
很多网站采用单一的要素,比如只采用浏览量作为权重,就会出现刷浏览的情况,比如一些用户投稿的文章,投稿者为了让自己的文章排在前面,就不停的刷浏览。当然,这种情况对于个人站影响并不是很大。但是,综合考虑多个要素,还是有一定价值。
# 02

避免马太效应



马太效应,名字来自圣经一则寓言:“拥有多的,还要加倍给他;拥有少的,连他所有的也要夺过来”。表面看起来“马太效应”与“平衡之道”相悖,与“二八定则”类似,但是实则它只不过是“平衡之道”的一极。
后来“马太效应”归纳为:任何个事物,在某一个方面(如金钱)获得成功和进步,就会产生一种积累优势,就会有更多的机会取得更大的成功和进步。
同理,在推荐体系中很容易存在马太效应。当由于某篇文章在一些情况下,浏览量上去了,后面进来的读者就会继续点击阅读,又增长了其浏览量,这样周而复始,这篇文章可能永远都是浏览量第一。所以要警惕,浏览量大的,不一定真的是好文章,这里面涉及到一个马太效应的问题。
这也不是没有解决办法,比如你可以要求,必须是最近一个月的文章才能参与排名。但是,这也可能埋没好文章。
如何避免马太效应呢?就是使用综合的衡量要素。让各个要素之间的影响差距减小,甚至人为的增加一个额外的值,使得即使浏览量极大,也不会完全占据主导。

好了,下面来进行具体解释吧。(权重为10分制)


权重 = 浏览量占比*2.5 + 评论数占比*2.5 + 点赞数占比*3 + 时间值占比*2



占比是什么?就是一个比值。怎么计算?就是用当前文章的值,比上最大值。比如浏览量最大的文章的浏览量为1200次,而当前文章的浏览量为600次,那么浏览量占比就是 600/1200 = 0.5 。
为什么要以最大的浏览量作为参照进行占比计算呢?因为这样就可以让这个最大浏览量的文章比值为1,从而获得浏览量权重部分的满分。
为什么系数要按2.5、2.5、3、2来进行分配呢?这就是我设计的权重系数,当然,你也可以根据你的需要来重新设定,总之所有系数加起来为10(方便计算,你也可以设计为5分制)。
这样的设计可以减弱马太效应的影响,但是也不可能完全消除,比如某篇文章浏览量比较大,评论数和点赞数肯定也会比较多,评论和点赞一定是要先浏览才会进行的。如果能够找到更多的一些要素,相互之间没有影响就更好了。
时间占比也很重要,一篇文章发布的时间越久远,它的时间占比权重就越低,但是因为它不涉及用户的行为,所以权重系数分配肯定也比较小。
根据这种思维,你可以设计自己的权重体系,加入更多的要素,比如把用户停留时间、收藏量、二次阅读次数、分享到朋友圈次数等等加进来。


# 03

进阶推荐算法


以上排序方式虽然比较简单粗暴,但却是很有效和流行的方式,大部分网站都是这样简单计算权重。
即使到了APP时代,不少新闻类app也是如此计算排序。
一些巨头公司会采用更复杂的计算,比如微博等,同一个栏目里每天能产生几万条资讯,如果简单的计算很容易被人识破和刷热度。

接下来我们看一个进阶的算法:



文章得分 = (P-1) / (T+2)^G



其中:
1)P表示文章得到的赞数,之所以要使用 (p – 1),是想去掉文章提交者的那一票
2)T表示当前时间与文章提交时间间隔的小时数。随着T的增加(即时间的流逝),得分将下降,意味着更早被提交进来的文章将会得到越来越低的分数;
3)G是Gravity,“引力参数”,更早的文章,如果Gravity增加,得分将会下降得更快,就行自由落体的物体一样。




在一些网站G=1.5,这是个试错的结果。因为G越大,得分随时间下降趋势就越快。

image.png

定参Gravity为默认值1.8,随着时间的流逝,文章得分都会迅速下降。你还能看出来,24小时后(即t=24时)无论你的文章得到多少投票,它依然会得到一个非常低的得分。



最后
以上只是内容热度排序算法,远谈不上智能。
而现在大公司会更偏向人工智能的研究。
如今日头条的推荐算法在基础排序上再加一层个性推荐标签,就更加复杂了。
这是一个比较大的体系,
如果你想深入研究的话,关注我们或留言与我讨论~