第 7 章

算法开始有了脾气

朱文佳的目光又一次掠过电脑屏幕边框上那张便签纸,梁汝波潦草的字迹和那个巨大的问号,像一道未解的题悬在那里。

那是春节前的事了。现在春节已经过去三周,抖音的日活曲线像被谁从底部猛推了一把,陡得让人不敢盯着看太久。

运营团队在正月初七那天提交了六份专题策划案,明星合作、主题挑战赛、春节返乡故事征集。每份方案都经过三轮内部评审,每一条视频都设定了明确的调性标准。陈默在方案封面上写了一句话:让抖音被看见的方式,配得上它被喜欢的程度。

这句话后来被证明是一个分水岭。正月初十,运营团队的第一批专题内容上线。三位明星的入驻视频,每条都经过调色和配乐处理。画面干净,节奏舒缓,文案克制。陈默在群里发了一条消息:标杆内容,让算法学一学。

算法没有学。或者说,算法用它的方式给出了回答。上线第三天,后台跑出第一组对比数据。运营团队策划的专题内容,平均完播率百分之二十三,互动率百分之一点七,次日留存百分之三十一。

而算法在同一时段自然推荐的内容——那些没有策划、没有明星、没有人工干预的视频——平均完播率百分之四十一,互动率百分之四点三,次日留存百分之五十七。

陈默看到这组数据的时候正在吃午饭。他放下筷子,把表格放大,又缩小,再放大。数字没有变。

他给朱文佳发了一条消息:这个数据你看了吗?朱文佳回得很快:看了。算法那边也在讨论。陈默问:讨论什么?朱文佳没有立刻回复。过了十分钟,他发来一句话:讨论要不要干预。

那场会在正月十二晚上八点开始。会议室里坐了七个人。张一鸣站在白板左侧,手里捏着一支黑色马克笔,笔帽被他反复拔开又扣上,发出细微而急促的咔嗒声。白板上贴着那张打印出来的数据表格,边缘被胶带粘得不太平整,右下角微微翘起。

梁汝波坐在长桌中段靠窗的位置,面前摊着一份打印出来的用户行为报告。朱文佳坐在他旁边,笔记本电脑的屏幕上是推荐系统的后台参数界面。另外三位是运营团队成员,分散坐在桌子另一侧。

陈默坐在他们中间,面前放着那六份专题策划案的打印稿,封面上的那行字朝上,正对着张一鸣的方向。没有人立刻说话。窗外是海淀区中关村南大街的车流声,隔着双层玻璃传进来,像某种持续的低频噪音。陈默先开口。他的声音不大,但很清晰。“我们是不是应该干预一下?”

张一鸣把马克笔帽扣上,又拔开。他的目光从左边那组数据移到右边那组,再移回来。“干预什么?”

陈默愣了一下。他显然准备了更详细的方案,但张一鸣的问题把讨论直接拉回到了起点。“干预权重,”他说,“这类内容的互动数据确实好,但它的调性和我们最初想要的不太一样。如果放任算法继续推——”

“算法没有放任。”张一鸣打断他,“算法在服务用户。”

这句话落在会议室里,像一颗石子投进水面。陈默的嘴唇动了动,但没有发出声音。坐在他旁边的运营同事低头翻着面前的笔记本,手指停在某一页上,没有翻过去。

梁汝波始终没有说话。他的视线越过白板,落在窗外某栋建筑的玻璃幕墙上。那栋楼的每一层都亮着灯,灯光排列整齐,像某种被精确计算过的阵列。

他想起了三个月前抖音刚上线时的场景。那时候团队只有十几个人,挤在锦秋家园的民房里,每天盯着后台数据看用户增长曲线。那时候的每一个决策都是具体的——某个按钮的位置,某段配乐的时长,某个滤镜的饱和度。那时候他们知道自己在做什么。

现在日活突破百万了。增长曲线陡峭得让人眩晕。但梁汝波发现自己越来越难回答一个简单的问题:他们到底在服务谁?

朱文佳在笔记本电脑上敲了几个键,调出了一组新的数据。他的手指在触控板上滑动,屏幕上的图表滚动了几次才停下来。

“我补充一个维度,”他说,“右边这组内容的用户画像和左边那组有显著差异。高互动内容的用户更年轻,三四线城市占比更高,使用时长更长,但——”他停顿了一下,“但他们对平台的忠诚度指标反而更低。”

“什么意思?”陈默问。“意思是他们来得快,走得也快。”朱文佳说,“高互动不等于高留存。这两组数据的留存率差异可能不是内容类型导致的,而是用户群体本身的差异。”

张一鸣摇了摇头。“留存率就是留存率,”他说,“不管用户是谁,他们用行为投了票。”

陈默把面前的笔记本合上又打开。“张总,我不是说数据不重要。我是说数据之外还有别的东西。如果我们只看互动和留存,那最后平台上全是——”

他没有说完这句话。会议室里再次陷入沉默。那种沉默和刚才不同。刚才的沉默是等待,现在的沉默是回避。张一鸣把马克笔放回白板槽里,笔身和塑料槽壁碰撞出清脆的响声。“我给你们看一个东西。”

他走到会议桌尽头,打开自己的笔记本电脑。屏幕亮起来的时候,桌边几个人都看到了一个熟悉的界面——抖音的用户端首页。张一鸣点开了一个视频。画面里是一个中年男人在自家院子里表演用扫帚转篮球。背景音是嘈杂的环境噪音和偶尔传来的狗叫。视频时长十五秒。播放量显示为三百二十万。“这个视频,”张一鸣说,“运营团队没有推过。明星没有拍过。它的创作者是一个河北的农民,粉丝不到一千。算法发现它的时候,它的初始播放量只有两百。”

他关掉视频。“两百到三百二十万。算法做的事只有一件:把用户愿意看完的东西推给更多人。”

陈默看着屏幕上那个静止的封面帧。“我知道算法能做什么,”他说,“我是说我们作为运营团队的价值在哪里?如果算法能解决所有问题——”

“算法解决不了所有问题。”张一鸣说,“算法解决的是效率问题。审美问题、价值观问题、调性问题——这些需要人来判断。”

“但数据否决了我们的判断。”陈默的声音低了下去。张一鸣看着他。“数据没有否决你们的判断,”他说,“数据只是告诉你们用户的选择是什么。”

梁汝波这时候开口了。他的声音不高,但会议室里所有人都安静下来听他说。“我同意一鸣说的,”他说,“算法解决效率问题。但有个前提——我们得先弄清楚效率服务的目标是什么。”

他站起来,走到白板前,拿起张一鸣刚放下的马克笔。他在两组数据之间画了一个问号。“左边这组内容,”他用笔尖点了点蓝色圆珠笔画过的那条线,“体面。右边这组内容——”他的笔尖移到另一边,“高互动。我的问题是,体面和高互动之间是不是必然冲突?”

没有人回答。梁汝波把笔放回去。“如果冲突,”他说,“我们选哪个?”

这个问题像一根针扎进了会议室的空气里。陈默看着梁汝波,眼神里有一种被理解的感激,但更多的是困惑。他不知道梁汝波是在帮他说话还是在帮张一鸣说话。朱文佳盯着自己电脑屏幕上的参数界面,手指悬在键盘上方没有落下。他在想一个更技术性的问题:推荐系统的目标函数里到底有没有“调性”这个变量?如果没有,那运营团队的所有坚持都只是在系统外面喊话。

张一鸣没有立刻回答梁汝波的问题。他走到窗边,手插进口袋里。中关村南大街上的车灯连成一条流动的光带,从北往南移动。

他想起了自己创业初期写过的一句话:算法是工具。那时候他相信工具是中性的——你给它什么目标它就优化什么目标。但现在他开始意识到一个更复杂的问题:当工具足够强大时,它会反过来定义目标本身。“先不选。”他终于开口,“让数据再跑一段时间。”

陈默张了张嘴想说什么,但最终只是点了点头。会议在一种未完成的氛围中结束了。

散会之后朱文佳没有立刻离开会议室。他坐在原位,把电脑合上又打开,反复了三次。屏幕上那个推荐系统的参数界面他已经看了无数遍——特征权重、召回策略、排序模型、冷启动规则——每一个变量他都亲手调过。但他第一次觉得这些参数背后藏着一个他回答不了的问题。

当算法把那个河北农民的扫帚转篮球视频推给三百二十万人看的时候,它到底在优化什么?是用户的满意度还是用户的停留时长?如果两者冲突呢?

他想起自己刚加入字节跳动时的想法。那时候他觉得推荐系统像一个精密的仪器——输入用户行为,输出内容排序——干净、理性、可解释。但现在他发现这个仪器有了自己的脾气。它会自己决定什么内容值得被看见,什么内容不值得。而他们这些工程师能做的只是事后调整参数——像驯兽师面对一头已经长大的猛兽,只能修修指甲,剪剪鬃毛。

梁汝波从走廊尽头走回来的时候看见朱文佳还坐在会议室里。“还不走?”他问。

朱文佳抬起头。“我在想一个问题,”他说,“推荐系统的目标函数里到底有没有‘人的温度’这个变量?”

梁汝波靠在门框上看了他几秒钟。“你觉得呢?”

“我觉得没有。”朱文佳说,“但用户是有温度的。”

梁汝波没有接话。他走进会议室,拿起白板上那张数据表格,折了两折放进口袋里。“温度是需要燃料的。”他说这话的时候声音很轻,像是在自言自语。朱文佳看着他离开的背影,想说点什么,但最终只是关掉了电脑屏幕。

陈默回到工位上的时候,运营团队的三个人已经在群里发了一串消息。他点开看了一眼又关掉了。消息的内容无非是“今天会上说的那些我们接下来怎么办”“专题策划还做不做”“明星入驻的方案要不要继续推进”。

他没有回复,把手机屏幕朝下扣在桌上。他的工位靠窗,能看到对面楼里亮着的灯。

那些灯让他想起刚做运营时的热情——那时候他们相信自己在创造一种新的内容生态,相信好的内容会被更多人看见,相信他们能改变用户对短视频的偏见。现在他不确定了。

他打开电脑,新建了一个文档,开始写下一期专题策划的方案。光标在空白页面上闪烁了很久,他敲下了第一行字:“明星合作方向调整——优先选择算法友好型内容。”

写完之后他看着这行字,觉得哪里不对,但又说不出来哪里不对。他把这行字删掉,重新写:“专题策划方向调整——优先考虑用户互动数据。”

这次他没有删。那天晚上张一鸣最后一个离开办公室。他走过空无一人的走廊,经过运营团队的工位区时,注意到陈默桌上那份打印出来的策划方案草稿。他没有停下来细看,只是扫了一眼标题——“Q2专题策划方向调整”。标题下面有一行小字被笔划掉了,但还能辨认:“优先选择算法友好型内容”。张一鸣站在那张桌子前面停了几秒钟。然后他继续往前走,走到电梯口按下了下行按钮。

电梯门打开的时候,里面的灯光明亮而均匀,照在金属墙壁上反射出模糊的人影。他走进电梯,看着楼层数字从十二跳到十一,跳到十。

他想起了今天会议上陈默说的那句话。“如果我们只看互动和留存,那最后平台上全是——”陈默没有说完的那个词是什么?低俗?粗糙?还是别的什么?

电梯到了地下车库,门打开的时候外面一片漆黑,只有远处的出口指示灯亮着绿光。张一鸣走出去,脚步声在空旷的车库里回响。他坐进车里,发动引擎但没有立刻开走。

手机屏幕亮了一下,是梁汝波发来的消息:“今天会上那个问题——体面和高互动之间是不是必然冲突——我还没有答案。”

张一鸣看着这条消息想了很久,最后回复了四个字:“会有的。”

他把手机放在副驾驶座上,开车驶出车库,汇入中关村南大街的车流中。路灯一盏接一盏地从车窗两侧掠过,光线在他脸上明灭交替。那一夜北京的风很大,刮得路边的行道树沙沙作响。第二天早上朱文佳到办公室的时候,发现自己的工位上多了一张便签纸。上面是梁汝波的字迹:“推荐系统的目标函数里能不能加一个变量?”下面画了一个问号。朱文佳把便签纸贴在电脑屏幕边框上,打开后台调出了推荐系统的完整参数列表。他从第一行看到最后一行,看了很久。然后他在笔记本上写下了一行字:“系统可以优化一切可量化的指标,但‘温度’不在其中。”

他没有把这行字给任何人看。运营团队的早会比平时早了半个小时开始。陈默站在白板前重新画了一张表格,这次他把左边那组数据和右边那组数据的标签换成了“A类内容”和“B类内容”。他不再用“体面”和“高互动”这样的词,而是用更中性的表述——“人工策划内容”和“算法推荐内容”。“接下来的专题策划,”他说,“我们会增加一个评估维度——算法友好度。”

会议室里没有人反对,也没有人支持。散会之后一个运营同事在走廊里追上了陈默。“陈哥,”他说,“算法友好度是什么意思?”

陈默停下脚步想了想。“就是——”他说,“就是做之前先想想算法会不会喜欢。”

那个同事点了点头走开了。陈默站在原地,觉得这句话有什么地方不对,但又说不出来哪里不对。那天下午朱文佳在调试推荐系统参数的时候发现了一个细节:在排序模型的训练数据里,有一组特征权重被系统自动调高了——那是“完播率”相关的特征,而“点赞率”和“评论率”的权重相对下降了。他查了一下调整记录,发现是系统自动优化的结果。前一天晚上,算法根据最新的用户行为数据自动调整了参数。没有人手动干预过。

朱文佳盯着屏幕上的参数变化看了很久。他想起了昨天会议上张一鸣说的那句话——“算法解决的是效率问题”。但现在他意识到,算法解决的不仅是效率问题,它还在解决另一个问题:它自己在决定什么指标更重要。

他把这个发现告诉了梁汝波。梁汝波听完之后沉默了一会儿。“你的意思是,”他说,“算法在教我们怎么定义好内容?”

朱文佳点了点头。“或者说,它在用数据告诉我们用户觉得什么内容好,然后我们把这个定义内化成自己的标准。”

梁汝波走到窗边看着外面的中关村南大街。“那你觉得这是好事还是坏事?”

朱文佳没有回答这个问题。“我只知道一件事,”他说,“我们当初写推荐引擎的时候,想的是让它帮用户找到喜欢的内容,没想过它会反过来定义‘喜欢’是什么。”

那天晚上朱文佳加班到很晚。离开办公室的时候已经过了午夜。他走进电梯按下一楼按钮,电梯门关上的一瞬间,他感到一种奇怪的陌生感——就像你走进一个房间,发现里面的家具都被移动过,但你不知道是谁移动的,也不知道是什么时候移动的。

他掏出手机打开抖音刷了几个视频。第一个是一个农村女孩在田埂上唱歌,背景是金黄色的麦田,歌声清亮,但画面晃动得厉害。第二个是一个城市青年在地铁里表演魔术,周围乘客的表情从漠然变成惊讶。第三个是一个中年男人在夜市摊位上炒饭,火焰从锅底蹿起来,照亮了他满是汗水的脸。

每一个视频都很短。每一个视频都很真实。每一个视频都让他觉得——世界在加速。

他关掉手机,走出电梯,走进深夜的北京街头。风还在刮,路边的行道树还在沙沙作响。他想起今天在笔记本上写的那行字:“系统可以优化一切可量化的指标,但‘温度’不在其中。”

然后他又想起梁汝波说的那句话:“温度是需要燃料的。”

燃料是什么?他想,也许燃料就是那些被否决的方案,那些深夜的沉默,那些重新站起来的瞬间。但这些燃料在燃烧之后,留下的是灰烬还是光,没有人知道。

他走到路口等红灯的时候,注意到对面大楼的广告屏幕上正在播放一条抖音的推广广告——“记录美好生活”。广告画面里是一群年轻人在各种场景中笑着跳着闹着,配乐欢快,节奏明快。朱文佳看着那条广告,突然觉得那个“美好生活”和他手机里那些刷不完的视频之间隔着一层什么东西。说不清是什么,但就是隔着。

绿灯亮了。他迈步走过斑马线,脚步声在空旷的街道上回响。在城市的另一端,张一鸣还没有睡。他坐在书房的电脑前看着后台的数据面板——日活曲线还在上升,今天的数字比昨天高了百分之七点三。他看着那条曲线,想起今天会议上陈默说的那句话——“如果我们只看互动和留存,那最后平台上全是——”

那个词到底是什么?他想了很久,没有想出来。然后他打开一个空白文档,开始写一封邮件。收件人是梁汝波和朱文佳,主题栏写着:“关于推荐系统目标函数的讨论”。他在正文第一行写下:“我们需要重新思考一个问题——”

光标在冒号后面闪烁了很久。他没有写完这封邮件,关掉了文档,关掉了电脑,走到窗前看着外面稀疏的灯光。北京的夜很深了,但数据面板上的数字还在跳动。每分每秒都有新的用户在下载抖音,每分每秒都有新的视频被上传,每分每秒都有新的互动在发生。

算法没有休息。它不会休息。它不需要休息。它只是按照自己的逻辑运转着——冷酷、精确、不知疲倦——像一个有了脾气的生命体,在数字世界里持续生长。

而造浪机第一次反噬操作者的时刻已经悄然来临,只是没有人知道它到底意味着什么。

第二天早上陈默走进办公室的时候,发现自己的工位上多了一份打印出来的文件。是昨天后台自动生成的用户行为分析报告,封面页上有一行小字:“本报告由推荐系统自动生成”。

他翻开报告,看到第一页的分析结论:“根据最新用户行为数据,平台内容生态正在向高互动类型倾斜,建议运营团队调整内容策略以匹配用户偏好。”

陈默合上报告放在桌上,没有再看第二眼。然后他打开电脑,新建了一个文档,开始写新一期的专题策划方案。这一次他没有犹豫,直接在标题栏输入了四个字:“算法友好型策划”。光标在标题后面闪烁了一下,他继续往下写正文第一行:“本方案以算法推荐逻辑为基础——”

窗外中关村南大街的车流声照常响起,像某种持续的低频噪音,从未停歇,也从未改变节奏。朱文佳坐在自己的工位上,看着电脑屏幕上的推荐系统参数界面,手指悬在键盘上方没有落下。他知道自己迟早会按下那个键,调整某一个参数,让系统更符合人的判断。但他不确定那个“人”到底是谁——是他自己,还是算法训练出来的那个影子。梁汝波走进办公室的时候经过朱文佳的工位,停了一下。“想好了吗?”他问。朱文佳摇了摇头。“还没想好。”

梁汝波点了点头,继续往前走,走到自己的办公室门口。推开门之前,他回头看了一眼走廊尽头那间会议室的门。门紧闭着,里面没有人,灯也关着。

他想起昨天会议上那个没有答案的问题——“体面和高互动之间是不是必然冲突”——现在他觉得,这个问题本身可能就是一个陷阱。因为当你开始问这个问题的时候,你已经默认了体面和互动是对立的。而事实可能更复杂,也可能更简单。

他走进办公室关上门,坐在椅子上打开电脑。屏幕亮起来的时候,显示的是抖音的后台数据面板——日活曲线还在上升,今天的数字又比昨天高了几个百分点。

他看着那条曲线,想起张一鸣说过的那句话——“数据不会说谎”。但现在他开始怀疑一件事:数据说的可能是另一种语言,一种他们还没有学会翻译的语言。

而在那间空荡荡的会议室里,白板上还留着昨天会议结束时没有擦掉的痕迹——两组数据的对比表格、那个问号、还有梁汝波画的那条线。

保洁人员推门进来准备打扫,看到白板上的字迹犹豫了一下,最终没有擦掉,而是绕过白板去清理桌面上的杂物。白板上的数据和问号就这样留在了那里,像某种尚未完成的论证,等待着下一场讨论,或者永远不会到来的答案。抖音的后台系统继续运转着,每分每秒都在处理着海量的用户行为数据,每分每秒都在调整着推荐策略,每分每秒都在塑造着这个平台上什么内容值得被看见,什么内容不值得。

而运营团队的策划方案正在被重新撰写,标题栏里写着“算法友好型策划”,正文的第一行正在被一个字一个字地敲出来。没有人知道这个方案最终会被执行成什么样子,也没有人知道当它被执行之后,运营团队是否还认得自己创造的东西。

但有一件事是确定的:造浪机已经启动,它第一次反噬操作者的时刻已经过去,而下一波浪潮正在酝酿之中。朱文佳终于按下了键盘上的一个键,调整了一个参数值。屏幕上的曲线微微抖动了一下,然后恢复了平稳。他盯着那条曲线看了很久,最后在笔记本上写下了一行新的字:“音乐响起的时刻,世界没有安静。世界在加速。”

然后他合上笔记本,站起来走向会议室,去参加下一场产品会。那场会上他们要讨论的是另一个议题,另一个决策,另一个可能被数据否决的方案。走廊尽头的会议室门还关着。白板上的数据和问号还留在那里,像某种沉默的证词,等待着下一次争论的到来,或者永远不会到来的答案。陈默在工位上写完了那份“算法友好型策划”的初稿。他保存了文档,但没有提交。他打开手机,翻到和梁汝波的聊天记录。上一次对话停留在三个月前,梁汝波发来一句话:“运营的价值在于判断什么值得被看见。”

陈默盯着这句话看了很久。然后他关掉手机,重新打开那份策划方案,把标题改成了另一个版本。他删掉了“算法友好型”五个字,换成了一句更长的表述:“基于用户行为数据与内容调性平衡的专题策划方案”。光标在标题后面闪烁。

他盯着这行字,觉得它既不像妥协,也不像坚持。它像某种在夹缝中生长出来的东西——形状还不确定,但已经在生长了。他按下了保存键。窗外,中关村南大街的车流声照常响起。抖音的后台数据面板上,日活曲线还在上升。

算法没有停下来。它不会停下来。而在那间空荡荡的会议室里,白板上的那个问号依然留在两组数据之间。它没有被擦掉,也没有被回答。它只是留在那里,像一颗被埋进土里的种子,等待着某一天破土而出。没有人知道那一天什么时候会来。但所有人都知道,它一定会来。