对于社区类应用来说,内容是否优质大概可从两个维度划分,一是时效性,二是权重。刚刚发生的大事一定是最受关注的,比如最新爆料。
有价值内容如何甄别
内容型社区业务中一般都会有热门文章这个分类,比如新浪微博的热门微博,网易新闻的头条等等。从海量用户生产的海量内容中,甄选出少数相对有价值的信息提供内容消费,对于保障用户阅读效率和质量,维护社区氛围是非常有价值的。现在的社区更讲究人与人的关系,没有绝对的优质内容,只有用户喜不喜欢的内容,所以实际应用中应该是针对不同的用户偏好和消费内容的习惯做个性化的优质推荐。不过本文主要参考新浪微博,简单说说单纯的提取优质内容的思路,不涉及个性化推荐。
对于社区类应用来说,内容是否优质大概可从两个维度划分,一是时效性,二是权重。刚刚发生的大事一定是最受关注的,比如最新爆料。
参考下新浪微博,单位时间内全站发布的微博,会由机器计算热度增量,按照热度由高至低排序,即形成了热门微博榜。热门微博上榜规则如下:
- 热门微博的热度数值是根据该微博转、赞数和微博发布时间等各项因素,算出热度基数,和热度权重相加,得出最终热度值。
- 真实用户(由站方反垃圾策略确定)的转发、赞都会实时影响上榜微博热度,热门微博榜单也会根据每条微博的热度,由高到底,即时变化。
- 热门微博榜小时榜每小时更新上个小时内产生的内容。过期内容由机器自动下榜。
- 热门微博榜24小时榜每小时更新前24小时内产生的内容。过期内容由机器自动下榜。
从以上规则中可以提取几个关键词:热度区间、热度基数、热度权重、热度值、真实用户。
实现思路
- 对用户建模,建立用户信用体系。
- 根据用户信用对不同用户生产的内容进行打分。
- 结合热度区间和内容打分情况筛选出有价值的信息。
影响用户信用的因素
什么样的用户信用度高?
- 各类名人
- 实名认证用户
- 没有违规记录
什么样的用户信用度低?
- 被拉黑过
- 被举报多次
- 有曾经发布的内容被处罚过的记录
- 活跃度低
- 粉丝数少
- 新用户
影响内容价值的因素
什么内容可能价值更高?
- 名人或实名认证用户发的内容
- 点赞高
- 评论多
- 转发、分享多
什么内容价值低?
- 被举报多
- 过短或过长
- 短时间内发多条的非第一条
- 短时间内发相似内容的非第一条
- 被判定为疑似广告(比如含外链、屏蔽词)
信用值的计算
信用值和内容分是相互依存的关系,用户曾经发布过的内容会为计算信用提供依据,信用值也会影响内容分的计算。
举个栗子:
假如一个新用户的初始信用值是100。实名认证+10分。连续十天签到,每天都发至少1条内容认为其活跃度高,+10分。发布的某一条内容被100人点过赞,+20分。但有一条被超过10个人举报-10分。又发了一条带外链的内容被认为疑似广告-15分。那么他的信用值为:100+10+10+20-10-15=115分。
内容分的计算
一个社区里的名人、活跃度高的用户就那么一批人,可能不到社区总人数的5%。上面建立的信用体系在不断学习的过程中,必然会造成一种趋势,即绝大部分的用户信用值的分段是比较小的,信用值高的那部分只占极少数。而且,绝对值的差异是非常大的,实际部署过程中,我们发现信用值高的到达好几万,而低的负几万,绝大部分在0-3000之间。
线性模型(比较粗糙)
线性模型就是直接拿信用值参与内容分计算,那么得到的值差异性会非常大,内容分悬殊必然导致结果的不准确。如果内容较少或者对结果要求不高,可以用,但一般情况下还是建议用下面的平稳模型。
平稳模型(相对更优)
这里用到了log对数。简单介绍一下log。
[外链图片转存失败(img-dXzCM1DO-1568649836057)(http://m1.dwstatic.com/bi_material/20160928/2d2329a536e3643bf3558c8c9b5b6a1b1475050676397306126.jpg)]
**数据处理中会经常将原始数据取对数之后拿来使用,因为对数函数在其定义域内是单调递增的,取对数之后不会改变数据的性质和相对关系,但压缩了变量的尺度,数据更加平稳,也消弱了模型的共线性、异方差。而且对数值小的部分的差异的敏感度,比数值大的部分要高的多。**这也符合绝大部分用户处于信用值低分段的现实,我们要多听听普通用户的声音,而不是只关注社区名人。
举个栗子,同样相差了100,log200-log100 > log600-log500 (0.301>0.079),可以看出两者相差还是非常大的。这个特性在实际生活中也是很有用的,比如去买苹果手机,相差100块钱差别不大,但是去水果市场买苹果,差一百块钱你可能就要骂他奸商了~~同样相差100块,但是价格基数不同很大程度上会影响你的决策。
log函数程逐渐衰减的趋势,值越大,衰减越大。这个趋势适合制造区分区间。即使分数很大也能缩小到一定的区间内进行比较和计算,比较适合信用值的计算:
普通信用值 | log2后的信用值 |
---|---|
4 | 2 |
10 | 3.3 |
50 | 5.6 |
100 | 6.6 |
300 | 8.2 |
1000 | 9.97 |
10000 | 13.3 |
1000000 | 20 |
信用值相差100w,但是取对数之后相差18,非常平稳。所以实际使用中应该将信用值取对数之后再参与内容分计算。
举个栗子:
假如一条内容的初始分数为100分,该用户的信用值是10000,该内容点赞1000,评论500,发表时间戳是1475054286,那么该内容的分数就是:100+log(2,10000)*1000*500+1475054286=1475092014.7495。
假如用户的信用值是负值,计算时要先提取符号,然后取绝对值计算,一般信用值为负值的内容分都很低。
补充
取得内容分后还要经过一系列的过滤机制才可以放出去,比如过滤关键词、广告,过滤不良用户、ip等等。具体的参数值和影响信用、内容分的因素针对不同业务和场景也可能不尽相同,要结合具体业务具体处理。