一篇文章看懂Facebook和新浪微博的智能FEED
本文来自网易云社区
作者:孙镍波
众所周知,新浪微博的首页动态流不像微信朋友圈是按照时间顺序排列的,而是按照一种所谓的“智能排序”的方式。这种违背了用户习惯的排序方式一直被用户骂,但是无论是Facebook还是微博都执意做下去,这是为什么呢?
本来早想写一篇科普文给大家介绍一下智能FEED,但是由于比较懒一直拖着。直到上次发布了《改进网易云音乐的“音乐社交”构想》一文后,有一位同学说到想了解一下微博点赞的故事,所以促使我写下这篇文章。
1 为什么要做智能FEED?
1.1 什么是FEED
FEED最早是指RSS订阅中用来接收该信息来源更新的接口,后来就指代站点用来和其他站点之间共享内容的一种简易方式(也叫聚合内容),其本质其实是一种站内推送,通常被用于新闻和其他按顺序排列的网站,例如Blog。到后来社交媒体盛行之后,FEED几乎成为了所有社交媒体的标配。因为其交互简单,用户上手容易,后端信息配置灵活,又契合移动设备单屏操作的特点,已经被证明为内容型软件的最佳呈现方式。(甚至连支付宝在其上个大版本更新中都把首页改成了FEED)
1.2 FEED的重要性
FEED的本质是信息分发的一种方式,所以称其为内容型产品的两大命脉之一(内容生产+内容分发)。同时因为FEED通常出现在产品的第一屏,大家知道,对于大部分APP而言,首屏流量几乎占了全站的90%以上,而其余几屏其实是不怎么被关注的。所以与其大费精力对其余屏幕的功能迭代更新,不如小小优化一下首页的FEED流算法,带来的收益反而高的多。
1.3 原来的按时间排序的方式有何问题?
首先总结用户需求:
信息分发效率低下,发布者无法获得更多浏览,内容消费者依赖主动寻找内容,进而导致社区互动不足
信息过载,当一个用户关注过多其它用户时,其每天使用微博的时间里无法看完所有更新的内容,所以会错过很多有价值的内容
信息垃圾,我们会关注很多企业、网红的账号,这些账号一天发数十条消息,把我们真实好友发布的内容都冲散了,这个必须要限制
中心化现象严重,大部分用户都缺乏主动探索的动力,那么如果都按照好友转载的大号来关注,很快流量都会中心化集中到少数营销号
信息流通能力弱,大部分用户都是只浏览点赞,不发布转载,如果我们的好友都这么做,我们的动态流中将不再出现新的用户发布的内容
再总结下产品方的需求:
主要是从商业角度,将 Feed 排序交给上帝的做法,非常不利于商业化,营销号可以使用很多伎俩吸引用户关注,然后肆无忌惮发广告,即一干营销号赚得盆满钵满,而平台方得不到半点好处。
如果看明白这些,你就明白了为什么朋友圈不需要使用智能FEED,因为首先它是个封闭的熟人圈子,本身消息质量少而精,不会出现营销号和中心化,不需要担心信息流通问题;同时大家花在朋友圈的时间非常多,不必担心内容过载的问题。
2 怎么做智能FEED
既然原来的自然FEED流存在诸多问题,那么我们怎么优化呢?
2.1 优化策略
核心思路很简单,就是把有价值的内容权重提高,把低价值甚至垃圾内容权重降低。那如何判断一条信息的价值呢?可以拿Facebook早期的EdgeRank为例介绍:
EdgeRank 主要有三个因素在起作用:
亲密度(Affinity Score)
生产成本(Edge Weight)
新鲜程度(Time Decay)
亲密度的量化就是考虑该信息的来源者和你之间交流是否频繁密切。例如你女朋友发的状态比某个高中同学发的要重要。
生产成本指产生一条新鲜事的成本,成本越高权重越大。例如好友发布了9张图片的成本比起发了9个字成本高,前者就会被优先推荐;又例如发布的成本远高于点赞,所以原创内容的优先级高于因为好友点赞而被你获知的消息。
新鲜度最好理解,就是越近发生的事约容易被推荐,一般都是用一个指数衰减函数来量化动态的新旧程度。
三个分数,最终用相乘的方式共同作用于每一条新鲜事的分数,用于排序和筛选。
大家可以看出来,EdgeRank算法只考虑了社交因素,而没有考虑内容本身是否对用户有吸引力。因此后续Facebook引入机器学习,通过图像识别、语义分析等去预估新鲜事的质量,同时引入更多判断维度,例如阅读时长、视频内容、用户反馈等,去综合判断一条消息的权重。同时,FB 严格限制商业广告和普通用户的触达,网红营销号的消息曝光率从2016年的16%降低到2014年的6%。
总结一下:
智能FEED让用户在使用应用的有限时间内阅读到最感兴趣的内容,从而提高用户的粘性。
不按时间线排序,可以更自由安排广告的插入。这也是Facebook上广告大卖的原因。
自由控制内容,人为干预削减社区内的不利内容(如段子、鸡汤、微商)
得益于此,Facebook多年来一直保持高速增长,社区氛围没有崩坏。而隔壁坚持时间信息流的Twitter早已增长乏力。
2.2 微博的策略
微博大体上借鉴了Facebook的算法思路,主要也是基于LR算法(协同过滤)来做的。但是做了以下创新:
微博发现用户错过的90+%信息中,只有部分内容是对用户具有极高价值且不容错过的,所以这里无需对未读Feed全排序,只需要将最高价值的信息找出来并推荐给用户,其它的Feed仍按正常时间序排列。这样做一方面可以让Feed流整体上符合Timeline的排序,用户感觉自然流畅;另一方面,与用户对最高价值的信息认知上比较接近,算法效果比较理想。
推出了“未读池”功能 即你关注的用户发布的内容,只要是你还没看到过的都会进入未读池。当你刷新FEED的时候,会按照算法权重高低每次取出15~30条。未读池功能很好地解决了“有价值的内容没有被看到”和“无聊的时候没内容可以看”两大难题,是一个不错的点子。然而,因为未读池里内容的时间限制为3天,导致用户习惯性去刷新看看朋友有没有发布新消息的时候,却刷出了3天前的消息,从而又引来一片骂声。
3 总结和风控
智能FEED对于普通用户而言,可以帮助其提升阅读效率,第一时间看到感兴趣的内容,剔除没营养的垃圾信息,无论是关注太少没内容可看还是关注太多内容泛滥的用户,都能获得一个更佳的阅读体验。对于平台而言,可以提升用户的活跃度、互动率、留存率,同时控制社区氛围的质量,最重要的是为商业变现做好了铺垫(大幅降低网红、营销号的内容曝光,迫使企业必须使用平台自身的广告服务)
但是,智能FEED带来的一系列负面影响,包括:
将用户的操作行为公布给其所有粉丝,损害了用户隐私,让用户不敢随意点赞
混乱的时间线,让用户在看好友动态的时候一头雾水
普通用户主动发布的部分正常内容(如长图、转发等)也会被降权
这些问题虽然远不及智能FEED带来的好处,但是长此以往会给社区带来不佳的口碑,而口碑的损害可不是一朝一夕可以挽回的,因此一定要慎重处理,尽量做好每一个细节,才能让智能FEED发挥出最大的价值。
网易云免费体验馆,0成本体验20+款云产品!
更多网易研发、产品、运营经验分享请访问网易云社区。
相关文章:
【推荐】 GDB抓虫之旅(中篇)
一篇文章看懂Facebook和新浪微博的智能FEED的更多相关文章
- 一篇文章看懂JS闭包,都要2020年了,你怎么能还不懂闭包?
壹 ❀ 引 我觉得每一位JavaScript工作者都无法避免与闭包打交道,就算在实际开发中不使用但面试中被问及也是常态了.就我而言对于闭包的理解仅止步于一些概念,看到相关代码我知道这是个闭包,但闭包 ...
- 一篇文章看懂angularjs component组件
壹 ❀ 引 我在 angularjs 一篇文章看懂自定义指令directive 一文中详细介绍了directive基本用法与完整属性介绍.directive是个很神奇的存在,你可以不设置templa ...
- angularjs 一篇文章看懂自定义指令directive
壹 ❀ 引 在angularjs开发中,指令的使用是无处无在的,我们习惯使用指令来拓展HTML:那么如何理解指令呢,你可以把它理解成在DOM元素上运行的函数,它可以帮助我们拓展DOM元素的功能.比如 ...
- 一篇文章看懂spark 1.3+各版本特性
Spark 1.6.x的新特性Spark-1.6是Spark-2.0之前的最后一个版本.主要是三个大方面的改进:性能提升,新的 Dataset API 和数据科学功能的扩展.这是社区开发非常重要的一个 ...
- 一篇文章看懂JS执行上下文
壹 ❀ 引 我们都知道,JS代码的执行顺序总是与代码先后顺序有所差异,当先抛开异步问题你会发现就算是同步代码,它的执行也与你的预期不一致,比如: function f1() { console.lo ...
- rabbitMQ教程(二)一篇文章看懂rabbitMQ
一.rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. 学过websocket的来理解rabbitMQ应该是 ...
- 一篇文章看懂Java并发和线程安全
一.前言 长久以来,一直想剖析一下Java线程安全的本质,但是苦于有些微观的点想不明白,便搁置了下来,前段时间慢慢想明白了,便把所有的点串联起来,趁着思路清晰,整理成这样一篇文章. 二.导读 1.为什 ...
- rabbitMQ教程(三)一篇文章看懂rabbitMQ
一.rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. 学过websocket的来理解rabbitMQ应该是 ...
- 一篇文章看懂iOS代码块Block
block.png iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返 ...
随机推荐
- ArcGIS中合并空间有压盖关系的要素属性
1.前言 在客户单位, 被客户问道这样一个问题“如何合并两个有压盖关系图层的属性信息?” 在工具箱里面可以使用以下工具解决: 2.处理过程 (1)在工具箱中选择Spatial Join工具,并设置相关 ...
- hadoop balance均衡datanode存储不起作用问题分析
前段时间因为hadoop集群各datanode空间使用率很不均衡,需要重新balance(主要是有后加入集群的2台机器磁盘空间比较大引起的),在执行如下语句: bin/start-balancer.s ...
- URL跨项目调用方法,获取返回的json值,并解析
package com.mshc.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...
- 【BZOJ1562】[NOI2009] 变换序列(匈牙利算法)
点此看题面 大致题意: 给你一个长度为\(n\)的序列\(D\),让你找到一个字典序最小的\(n\)的排列\(T\),满足\(D_i=min(|T_i-i|,n-|T_i-i|)\). 建图 我想建图 ...
- Linux运维工程师是什么鬼?
第一部分:定义 运维工程师,字面理解运行维护. linux运维即linux运维工程师,集合网络.系统.数据库.开发.安全工作于一身的“复合性人才”. 除了传统IT运维部分,运维人员还是管理制度.规 ...
- 为什么L1稀疏,L2平滑?
使用机器学习方法解决实际问题时,我们通常要用L1或L2范数做正则化(regularization),从而限制权值大小,减少过拟合风险.特别是在使用梯度下降来做目标函数优化时,很常见的说法是, L1正 ...
- elasticsearch RestHighLevelClient 使用方法及封装工具
目录 EsClientRHL 更新日志 开发原因: 使用前你应该具有哪些技能 工具功能范围介绍 工具源码结构介绍 开始使用 未来规划 git地址:https://gitee.com/zxporz/ES ...
- Softmax回归(Softmax Regression
多分类问题 在一个多分类问题中,因变量y有k个取值,即.例如在邮件分类问题中,我们要把邮件分为垃圾邮件.个人邮件.工作邮件3类,目标值y是一个有3个取值的离散值.这是一个多分类问题,二分类模型在这里不 ...
- Bootstrap 历练实例-轮播(carousel)插件方法
方法 下面是一些轮播(Carousel)插件中有用的方法: 方法 描述 实例 .carousel(options) 初始化轮播为可选的 options 对象,并开始循环项目. $('#identifi ...
- React后台管理系统-后台接口封装
1新建文件夹 service ,里边建4个文件,分别是statistic-service.jsx 首页数据统计接口, user-service.jsx用户接口, product-service.jsx ...