4月1日愚人节,马斯克宣布Twitter的源代码开源了,并且会根据用户反馈及时调整推荐算法。


看到这个消息,我第一时间打开Github,去搜索了一下,果然Twitter开源了,不是愚人节的笑话。在Twitter账号下面有两个开源项目:


1. the-algorithm 这个项目源代码是用Scala写的,是Twitter的推荐算法源代码。


Twitter最早使用Ruby on rails写的,后来访问量太大,用Scala重写了大部分代码。从这个项目来看,果然如此:整个项目5000多个源文件,大部分是Scala代码,从代码风格来看,还是很标准的,代码质量看起来还不错。


2. the-algorithm-ml 这个项目源代码是用Python写的,是Twitter推荐算法的机器学习部分。


这个机器学习的项目不大,100多个源文件。


我们打开 the-algorithm 项目的git提交记录,会发现一个非常有意思的 commit, log是这样写的:


Remove stats collection code measuring how often Tweets from specific user groups are served


也就是删除了测量特定用户组的统计信息收集代码。很好奇,这个特定用户组指的是谁?看看commit记录就清楚了:


咦,有四类特殊的用户:


1. Elon Musk,好吧,这是针对老板进行hard code啊。


2. power_user,很好理解,估计是对Twitter来说很重要的大V用户,要打特殊标记。


3. democrat,民主党人,为什么要标记用户的党派信息?


4. republican,共和党人,越来越有意思了!


仔细翻翻相关的代码,有段注释信息有所解释:


/**


意思是说:


这些作者 ID 列表纯粹用于指标收集。我们跟踪我们提供来自这些作者的推文的频率,以及他们的推文给用户留下深刻印象的频率。这有助于我们在我们的 A/B 实验平台中验证我们不会发布对一组产生负面影响的更改。


似乎是说选择特定的用户来跟着推荐算法的调整不会产生负面影响。那么这些用户是怎样定义的呢?


object HomeMixerResourcesModule extends TwitterModule {    private val AuthorsFile = "/config/authors.yml"    @Provides    @Singleton    @Named(DDGStatsAuthors)    def providesDDGStatsAuthors(): YamlMap = YamlMap.load(AuthorsFile)}


这段代码倒是很清楚的,这四类用户:马斯克,大V,民主党人,共和党人的用户列表,是写在一个外部配置文件 /config/authors.yml 里面的。


标记这四类用户进行特殊的跟踪和统计。实在是很值得玩味:


1. 标记 Elon Musk 单个人,从哪个统计学角度去看,都和度量推荐算法无关,这是赤裸裸的面向老板编程,哈哈。


2. 标记 大V 用户,特别是 power user,这对于一个面向全球的社交媒体平台,恐怕本身就意味着信息的不平等吧?


3. 当然,最令我意外的是标记民主党人和共和党人的用户列表。如果说坊间传言Twitter的推荐算法是有政治倾向性的话,这毫无疑问就是实锤了。从任何角度看,都不应该单独区分用户的政治立场去度量推荐算法的有效性。


当然,这些代码已经从Twitter最新版本开源文件中删除了,但还是可以从代码提交历史中看到。说Twiter不干涉政治的想法,真的可以休矣!


其实我很赞赏马斯克决定开源Twitter推荐算法的决定。推荐算法有没有夹带私货,不是你老王卖瓜自卖自夸出来的。要真的想建设信息平台的平台,就得开源出来,接受程序员的监督。从这一点来说,Twitter迈出了很好的第一步。