zoukankan      html  css  js  c++  java
  • Facebook日赚千万美元的NewsFeed,到底是怎么运转的?

     NewsFeed 怎么来的

    2004 年,Facebook 问世,两年后的 9 月份,NewsFeed 问世,同时问世的还有 MiniFeed(个人动态)。今年是 NewsFeed 上线十周年了,这 10 年里,Facebook 是怎么一步一步把 NewsFeed 打造成了日收入几千万美金的现金牛的?不管你对这充满铜臭的问题感不感兴趣,反正我很感兴趣。

    今天我们都已经习惯了把照片、文字等内容主动分享给好友,但是当时 Facebook 上线了这个功能时,引起了广泛的争议,焦点就是“隐私”问题,用户认为我发的动态怎么能让别人看见呢[1]?用户一直不停质疑和抗议,又忍不住继续使用,Facebook 就这样在争议声中增加了最初的隐私控制,比如隐藏自己的动态,而 NewsFeed 就这样坚持了下来。看来,小扎真是一个撩妹高手,看穿了用户们“嘴上说不要,身体却诚实”的内在。

    随着用户们渐渐地爱上了浏览好友的分(xuan)享(yao)了,2009 年,Facebook 加上了赞(like)功能(FriendFeed 在 2007 年发明了赞按钮,FriendFeed 后来于 2009 年被 Facebook 收购,并将赞这个功能整合进来),开始按照热门程度对 Feed 重排序,不出意外,这又引起了用户们的反抗,因为大家已经习惯按照时间顺序阅读。

    伴随这么多争议,为什么 Facebook 一直坚持做兴趣 feed?从数据上看,平均每个用户每天待看的新鲜事有 1500 条之多,但平均每个用户每天只能阅读 300 条;从商业角度,将 Feed 排序交给上帝的做法,非常不利于商业化且有损用户体验,公共主页可以使用很多伎俩吸引用户关注,然后肆无忌惮发广告。

    10 年来,NewsFeed 有数不清的改进,甚至每天线上会同时部署很多算法版本进行 AB 测试。但 EdgeRank 是这条优化迭代之路上的一个标志性建筑。我们可以将 NewsFeed 排序策略按照 EdgeRank 分为 PreEdgeRank 时代、InEdgeRank 时代、PostEdgeRank 时代。

      EdgeRank 算法

    EdgeRank,顾名思义,就是对边(Edge)进行排序(Rank)[2]。

    每一个朋友的每一个操作(Action)都可能以新鲜事(News)的方式呈现在用户面前,比如朋友发布了一条新鲜事,朋友赞了朋友的朋友一条新鲜事,朋友评论了朋友的朋友一条新鲜事,朋友给自己的照片加了一个标签,等等。稍微用脚后跟想一想就知道,按照这样罗列的话,每个用户得看多少新鲜事?于是 FB 就想在一条动态呈现给一个用户之前,先预估一下这个用户对这条新鲜事感兴趣程度。在 FB 的定义下,一个 Action 就是一个 Edge,所以这套量化兴趣的算法就叫做 EdgeRank。

    别看今天 Facebook 各种高大上,又是深度学习又是人工智能,要知道,在 EdgeRank 提出之前,FB 也是有过刀耕火种时代的,FB 的首席产品官 Chris Cox 谈及早期 NewsFeed 是这样说的[3]:

    “In the beginning, News Feed ranking was turning knobs. Turn up photos a little bit, turn down platform stories a little bit.”(最初,NewsFeed 排序就是在主观拍脑袋,给照片加点权重,给平台动态消息降点权重)

    “a photo might be worth 5 points, while joining a group was worth 1 point” (把照片权重定为 5,把加群权重定为 1)

    国内算法工程师们听到这些,想必都要会心地笑了:原来 FB 也是从这个时代走过来的。但 Facebook 不同的是,这只是暂时的情形,他们已经走到更高级的阶段了。

    Serkan Piantino 在 2010 年左右领导并开发了第一版 EdgeRank 算法[4]。下面说说大名鼎鼎的 EdgeRank 是怎么回事。

    EdgeRank 主要有三个因素在起作用:

    1. 亲密度(Affinity Score)
    2. 边的权重(Edge Weight)
    3. 新鲜程度(Time Decay)

    想象一条内容诞生后,途经什么路径流动到你的面前?

    1. 首先经你的一个朋友(或者你的关注源)的之手产生了一条新鲜事(他发布、赞、加标签这些产生了新鲜事);
    2. 然后经过你这个朋友(或者你的关注源)的介绍,到了你家门口,你一开门(登录)就可能看见它;
    3. 内容不多时,开门一个一个寒暄可能还行,它们也等得起,也无所谓先来后到,内容太多时,就得考虑个先来后到了。

    这三个步骤,就大致刻画了 EdgeRank 的思想了,其实还是很简单直接的。

    亲密度对应了第二个步骤背后的思想,那么多人介绍过来,我们当然要优先照顾更“喜欢”的人了,亲密度的量化要考虑平常里你和这个朋友“走动”是否频繁,连接是否紧密。主要考虑下面几点:

    1. 你们连接的强度,点赞之交,还是评论之交,或是私信之交,连接方式不同,强度就不同;
    2. 你们连接的频繁程度,一日百赞,还是百日一赞,差别也很大;
    3. 你们有多久没有建立连接了,一年没有了,关系自然就更淡了;
    4. 亲密度是单向的,也就是说你对朋友的亲密度,和朋友对你的亲密度可能不一样哦。

    你看,看似神秘的 EdgeRank 算法,其实跟大家不太待见的鸡汤居然意思是一样的,是不是觉得它竟然如此平易近人?

    边的权重也很直接,其实它反映了产生一条新鲜事的成本,成本越高的,权重越大。点赞、评论、发一条文字、发一张照片、发一个链接,背后用户付出的成本不一样,反应在边的权重上也就不一样。显然,你点个赞的成本,和你发布一条新鲜事的成本差别很多。

    最后,新鲜程度,也是一个符合直觉的自然假设:NewsFeed 总是青睐 New 一些的 Feed,新的新鲜事总体上更可能得到用户的临幸。FB 用了一个类似指数衰减的函数来量化动态的新旧程度。

    三个分数,最终用相乘的方式共同作用于每一条新鲜事的分数,用于排序和筛选。

    这个排序方法的确是很简单,基本上只考虑了社交方面的因素,而没有考虑太多内容本身对用户吸引力。

    从公开的资料看 EdgeRank,并不是什么高深的算法,它只是量化了三个主要因素,然后主观地相乘,而没有任何目标优化思想在背后,根据 Facebook 披露的消息看,早期的 EdgeRank 的确没有引入机器学习,所以根本称不上是智能的算法。

    为什么 EdgeRank 这么有名?因为它是在 F8 开发者大会上公开介绍过的,经过一知半解的媒体渲染,变成了一个神秘高深的存在。

      后 EdgeRank 时代

    2011 年之后,Facebook 内部就不再提 EdgeRank 算法了,因为用户数和广告主的飞增,导致 NewsFeed 的排序算法必须要更上一层楼。如今月活跃超过 10 亿用户,约 2000 万的公共主页,移动设备贡献了大多数流量,复杂的上下文因素,必须引入机器学习才能 Hold 住整个场面。

    在原来 EdgeRank 的基础上,更加细致地定义了不同层级的亲密度。用深度神经网络理解图片内容和文字内容[5],从而可以知道相片中的物体是不是用户感兴趣的,可以知道新鲜事的讨论话题。随着产品迭代,也加入了更多产品特征,诸如阅读时间长短、视频内容、链接内容等,取关、隐藏一个源。前前后后一共考虑了 10 万 + 的变量(模型的特征空间应该会更高),如果还按照原来的方式去调节权重,显然既不科学又很低效。

    从 Facebook 的机器学习应用博客页面可以看到,2010 年之后就开始逐渐有机器学习方面的文章出现了[5]。

    相关资料显示[6],2011 年之后的 NewsFeed 排序算法,全面转向了机器学习,用优化理论来决定每个因素的权重,将人从繁杂的策略量化中解放出来。

    在被机器学习接管后的 NewsFeed,很多地方都更加细致。

    用机器学习预估新鲜事的质量[7]。通过构造了一份问卷调查,访问了若干用户来收集数据,用收集的数据构建了一个机器学习模型,用于 NewsFeed 排序时预测一条动态的质量,将预测的质量分数作为最终排序的一个特征。用树模型构造离散特征,结合最常见的 LR 模型预估广告点击率[8]。

    除了全面转向机器学习之外,NewsFeed 团队也在重新思考人和算法的关系。他们要关心的是到底“如何把用户真正最关心的找出来”,而不仅仅是“提高点击率”。Facebook 一直是数据驱动的,也是他们能够在争议中把 NewsFeed 坚持下来的信念来源,而是不是唯数据马首是瞻,团队内部有很多思考,也有很多变化。

    仅举几例:

    • 团队发现有 85% 的隐藏新鲜事操作来自 5% 的人,经过与这些用户沟通才发现,原来这 5% 的人把“隐藏”当作邮件里的“标记已读”了,对喜不喜欢的新鲜事只要看过就会点击隐藏。
    • 对于悲伤的事情,用户可能关心但不会点赞的。
    • 对于有些点赞,用户可能并不是真的感兴趣,只是“点赞狂魔”发狂而已。
    • 用户阅读一篇长帖子,读到一半不读了,也并不能说明他对这篇帖子不感兴趣。

    这些 case,都让他们开始关注到机器学习和数据的局限[9]。

    于是,在算法团队之外,Facebook 搭建了一个遍布全球的人肉评测小组。人肉评测小组不是简单地对算法筛选结果进行喜欢 / 不喜欢的标注,而是会非常深入地阐述为什么喜欢 / 不喜欢算法筛选结果,而且会与工程师详细交流评测结果,因为这种人肉评测方式可以有效地拆穿数据说谎,让产品远离一味追求提高数据指标的怪圈。

    除此之外,产品上还加强了过滤器功能(Filter):你可以选择你的动态给谁看,你可以选择不看谁的动态(Hide),你也可以选择优先看到谁的动态(See first),当然你可以取消关注一些人或者公共主页,将这些控制权交给用户,一方面安抚了用户被算法接管的不安,另一方面也是一项重要的数据来源。事实上,如今的过滤器已经复杂到大多数用户都不会使用这些控制权。

    “如何衡量用户真的感兴趣”这个问题也许远远没有最终答案,为什么?因为人的非理性占据了绝大多数时候,而“不一致性”又是非理性的最重要表现,根据心情不同,用户有不同的感兴趣的标准,而且这些标准也许还是相互矛盾的。

      NewsFeed 的配套设施

    NewsFeed 存在的前提是要依赖用户建立大量的社交联系,这样才会出现信息过载,因此 NewsFeed 的一个重要的配套设施就是“你可能感兴趣的人”(People you may like)推荐系统。

    这是一个我们在产品形式上比较熟悉的推荐系统,它是一套大规模矩阵分解算法[10],利用已有的协同矩阵为你推荐你可能想建立联系的新 Item,包括用户、app、公共主页等。

    NewsFeed 还有另一个配套设施,也是它为什么每天能吸金几千万刀的原因:广告系统。Facebook 的广告形态多样[11]:

    • Suggested Page (你可能喜欢的公众页)
    • Page Post (公众号帖子推广)
    • Suggested App (你可能喜欢的应用)
    • Video Ads (视频广告)

    现在,每一次 NewsFeed 调整算法都会引来广告主们的抗议,他们都是在 FB 上拥有公共主页的商业机构。

    在以前,FB 鼓励这些商业机构花钱投广告增加粉丝,彼时的 NewsFeed 算法允许随意发广告(以原生的新鲜事形式)。而现在,FB 严格限制商业广告和普通用户的触达。商业机构感觉自己被耍了,花钱买粉之后却不能发原生广告,无独有偶,根据微博 CEO(@来去之间)在微博上的披露,现在微博企业号也是被限制博文达到粉丝 feed 次数的[12]。

    据国外某专门做 NewsFeed 推广的公司追踪,1000 个公共主页的 50000 条内容以原生方式触达用户的比例,从 2012 年 16% 降低到了 2014 年的 6.51%,降了一倍还多,这当然也可能因为用户平均关注的公共主页增多了[13]。

    世界上最遥远的距离,就是:手握大把粉丝,却不能随心所欲地曝光自己的产品。

    当然,所有的公共主页们,不要灰心,并不是没有办法,NewsFeed 的广告系统大门永远向你们敞开。

      对 NewsFeed 的展望

    具体 NewsFeed 会怎么发展,无法预测,但是可以肯定的有三点:

    1. NewsFeed 的算法会一直进化下去。
    2. NewsFeed 团队把人和算法的关系处理得更好,从数据驱动(Data-Driven)到数据启示(Data-Informed)。
    3. 越来越多的 Feed 型产品会效仿 NewsFeed,加入到兴趣 feed 的潮流中去。

      参考资料:

    1. https://en.wikipedia.org/wiki/Criticism_of_Facebook#News_Feed_and_Mini-Feed
    2. http://edgerank.net/
    3. http://marketingland.com/edgerank-is-dead-facebooks-news-feed-algorithm-now-has-close-to-100k-weight-factors-55908
    4. https://research.facebook.com/serkan-piantino
    5. https://research.facebook.com/publications/machinelearning
    6. http://www.dailydot.com/technology/facebook-news-feed-algorithm-edgerank/
    7. https://www.facebook.com/business/news/News-Feed-FYI-Showing-More-High-Quality-Content
    8. https://pdfs.semanticscholar.org/daf9/ed5dc6c6bad5367d7fd8561527da30e9b8dd.pdf
    9. http://www.slate.com/articles/technology/cover_story/2016/01/how_facebook_s_news_feed_algorithm_works.html
    10. https://code.facebook.com/posts/861999383875667/recommending-items-to-more-than-a-billion-people/
    11. http://zhihu.com/question/20553088/answer/78721851
    12. http://weibo.com/1111681197/D0qNcDlcc
    13. http://techcrunch.com/2014/04/03/the-filtered-feed-problem/

    原文地址:http://it.lindukj.cn/archives/1689

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/clschen/p/5604324.html
Copyright © 2011-2022 走看看