马斯克同志几小时前如约开源了 X 平台的信息流推荐算法,虽然有人叭叭说马圣有所保留,不过咱普通人总算能借此一窥天宫一角。
作为自媒体创作者,谁没有深受算法之害呢?
简单写下这次 X 开源中比较有价值的部分信息,因里面比较艰涩难懂的专业术语太多,我只能挑我能理解的部分来介绍,还是建议有能力的直接去看代码。
一、用户的行为数列
你最近在平台点赞过什么、看过哪些帖、收藏过什么、停留最久的是哪类内容、你关注了谁、屏蔽了谁……这些互动数据都会被储存起来,作为整个排序模型最主要的信息输入。
这些数据有个专有名词:用户的行为数列。
这不用多费口舌解释了吧?如果连用户都不了解,怎么可能做好后面的内容推荐?
二、系统初步筛选内容
知道了你大概的喜好,系统就要开始动手为你开始找匹配的内容。
第一种很简单,如果有你关注的人最近发了帖,系统就把它捞出来随时备用,这就是所谓的关注流,专有名词叫 In-Network。
有 In,当然就有 Out-of-Network,即那些你目前没关注、但系统觉得你可能喜欢的内容。
它分两个打捞办法:
第一个办法是 Phoenix 检索。
它会把你表示成一个向量(你可以想成一串数字,编码了你的偏好),把每条帖子也表示成一个向量,然后算『你』和『每条帖子』之间的距离,把离你最近的帖子捞出来。
形象点说,这有点像在一个高维空间里,以你为圆心画圈,圈里的帖子就是候选的推荐内容。
第二个办法是 SimClusters。
它会观察哪些人经常点赞同一类内容、哪些账号被同一拨人转发。然后把这些互动模式聚成一团一团的『簇』,用这些簇来找候选。
只要你跟某个簇有交集,那这个簇里的帖子就可能合你胃口。
这两种方法通常会被地球上所有的推荐系统都会使用,算是粗筛。找到的结果合并去重,便组成了最初的数千条候选推荐内容。
总不能把几千条都推给用户看吧?那些看到猴年马月…所以接下来要做的事就是过滤。
三、过滤候选池
从目前开源的内容看,这个过滤环节有十七个工序,其实我也很难解释得清楚 … 就挑些好理解的吧。
比如,超过四十八小时的帖子、你已经看过的帖子、你屏蔽的用户和关键词正常都会被过滤掉。
如果池子里内容的作者是新注册的账号,系统则会更严格一点:如果互动数据太低也会大概率排除。
但上面的规则也不绝对,大家都知道每个平台的算法机制都会时常调整,尤其在大规模调整之前通常要做数据测试。
比如 X 里就有个过滤器叫 InventoryHoldoutFilter,它会故意对某些本该过滤掉的内容网开一面,目的就是不断优化和调整算法。
过滤完,候选内容就会从从几千条降到几百条,进入随后的打分环节。
四、打分环节
这应该就是整套系统的核心,很多人说的『触发推荐』,主要就是在这个环节拿到算法模型的高分。
具体到 X 这次公布的机制,这里存在两个独立的角色:
PhoenixScorer 负责预测 —— 它用 Phoenix 这个基于 Transformer 架构的神经网络(跟你听过的 GPT 是同一类架构),对每条候选帖子预测你接下来会对它做各种事情的概率。
RankingScorer 则负责合成 —— 它把这些概率加权求和,再做调整,得到最终分数。
OK,先来说说会预测哪几类用户行为:
第一类是互动:你会收藏、回复、转发、分享吗?
第二类是点击:你会点开这条帖阅读详情、点开作者主页、展开图片、打开视频吗?
第三类是注意力,除了大家都知道的停留时间,还包括用户在停留的时候是否活跃等。
第四类是与创作者相关:你会因为这条帖子去关注作者吗?
第五类大家可能想不到,这个算法还会考虑读者会不会点『不感兴趣』、屏蔽作者、举报等负面动作。
以上每个预测行为都有一个权重,正行为带正权重,负行为带负权重。这些权重的具体数值甚至都列了出来,我找几个让诸位感受一下:
回复的权重是 5.0,引用也是 5.0,分享是 2.0,转发是 1.0,收藏是 0.5,点击是 0.4,打开链接是 0.2,视频质量观看只有 0.05。
能读懂吧?从这里可以看得出,在 X 平台回复和引用最值钱,转发又比收藏来得更加重要。
用户停留则被拆成了更细的维度(停留时间、点击后停留时间、活跃秒数),会单独建模,避免重复计权。
但这些权重要不是固定的,某些情况下,他们还会发生变动:
第一种情况叫『双向关注加权提升』。
如果你和某位作者是互关状态,而且这条帖子是他的原创,那么这条帖子里『回复』和『停留』这两个行为的权重会被额外提高。
我猜这背后的道理是:如果你俩互相关注,那他发的原创内容对你来说更值得认真对待,互动的可能性也更高。
第二种情况叫『帖子未探索』。
模型会预测『这条帖子对你来说是不是没探索过的新东西』。如果是,它的停留时间权重会被提升。要么作为独立的一项加进总分,要么以乘法的方式放大停留时间的贡献。
这相对就比较好解释了,鼓励系统给你推一些你平时不太会看到的内容,避免信息流越刷越窄嘛。
第三种情况叫『点击停留低收藏率惩罚』
你可以简单把它理解为一个反标题党机制。当一条帖子被点击了,但它的收藏概率又很低时,它的『点击后停留时间』权重会被压缩。
换句话说,一条帖子如果吸引人点进去却留不住人(典型标题党的特征),它就会被狠狠扣分。
第四个是『停留后悔』模式。
它会把你的停留跟『平均会产生的正行为』对比。如果一条帖子让你停留了,但按平均来看它本该让你收藏或回复而你没这么去做,这种停留的『价值』就要打折。
第五个是『分数的偏移归一化』。
名词看起来很唬人,大致是说负分并不会简单地线性拉低总分。因为当一条帖子的净分为负时,它会被压缩归一化到一个固定的负值区间里,净分为正时则加上一个偏移。
按我粗浅的理解,这意味着排序主要靠正面分数的较量来决定,至于那些垃圾内容就不参与排序了,反正都是垃圾。
五、三项调整
好了,现在候选池里内容每条都有了分数和排序,那是不是应该推到用户眼前了呢?
非也非也,还要进行三项调整。
第一项叫作者多样性折扣。
如果同一个作者连发好几条内容,只有第一条照常算分,第二条开始乘衰减因子,一直衰减到一个下限为止。这就是为什么你很少在信息流里连续刷到同一个创作者的好几条帖子。
第二项叫网络外折扣。
信息流更想优先展示原创内容。你关注的人转发别人的东西,或者跑去回复别人,权重就会被压低,让位给真正的原创帖。
第三项叫新作者扶持。
如果发帖的人曝光量太少,系统会主动把他的帖子往上提,扶持新创作者嘛,几乎每个平台都在做。
但这里有个细节跟我原本猜测的不同:它竟然是『插槽式』的。
什么意思呢?系统给冷启动作者保留了特定的位置槽位(有一个最小位置和最大位置范围),把他们的帖子直接提升到这些目标位置上去,不用改变分数。
纯纯就是开挂飞升了。
而且,这个扶持机制本身算是 A/B 实验的一部分:观众和作者都被分到了对照组、实验组或留出组里,X 团队自己也在在不断测试衡量『扶持新作者』到底有没有真的改善用户体验。
这也解释了一个很多人困惑的现象:为什么我有时会刷到一些莫名其妙的全新的账号?原因可能就是这个机制在背后起作用。
六、最后闯关
到这是不是就能直接排序了?还不行。
如果完全按分数排,可能出现一种尴尬情况:用户连续刷十条,全都是同一个话题、同一种风格。
于是 X 还有一个叫 VMRanker 的独立服务。它会把分数稍微低一点、但内容更不一样的帖子往前挪一点,让信息流的『相邻几条』看起来更丰富。
至此,一个包含几十条内容的推荐流已经准备完毕。
但在展示到用户面前时,它还要经过最后一轮审核,让系统最后再来判定下这个内容适不适合展示给你看。
毕竟这个世界上每个国家每个地区都有自己的风俗,也有自己的禁忌,总之同一条帖子,对不同的人、在不同的地区,可见性肯定不能相同。
与前面的过滤相比,这里的最终过滤会更严格。只要触发了任意一条规则,这条内容就会从推荐流中被立刻丢弃。
至此,你能看到的推荐信息已经定了下来。
而在你浏览时,系统会记录这一次给你推了哪些帖子,以及你对这次的推荐做出了哪些行为,为下一次刷新和系统优化提供新的数据。
七、另一条看不见的线
不知道大家有没有听过一个词,叫『账号权重』。而这次 X 的开源,真的验证了有这回事 —— 模型也随时随地在对账号进行打分。
这个系统额外注重屏蔽、举报这些负面行为反应,以及账号有没有虚假或滥用的迹象。最终算出来的『质量』(mass)就会成为每个账号的潜在信誉分。
对了,这里面还有个特殊的设计哲学忘了提。
模型给帖子的打分是个绝对值,而不依赖于『这一批进入候选内容中其他帖子的质量』,所以同一个帖子对同一个用户的打分结果是可以缓存的,下次再用就不用重算,这就可以节约算力,算是个工程层面的巧妙设计。
好吧,基本就是这些内容了(事实上我能看得一知半解的就是这些)。
另外 X 还做了一个叫 Under the Hood 的工具,这个工具的作用是让你能看到你的账号和帖子被打了哪些标签,以这些标签怎样影响了你的可见性。
虽然这次开源并不彻底,没法像网上说的那样直接复刻一个全新社交平台,但看到这里你会明白,它们真的展示了尽可能多的干货。
至少目前没有任何一家如此体量的社交平台敢做同样的事,从这点上来说,马斯克和 X 真的都挺牛的。
