第三章晚高峰
陈序发现自己开始注意苏皖的消息了。
不是刻意的那种注意。是手机震了一下,他会先看一眼是谁——以前他不会,以前所有的消息对他来说都是一样的,工作消息和私人消息在通知栏里排成等长的队列,没有优先级。但现在,如果那个头像上方出现一个红色的数字,他会点开看,即使点开之后发现只是她发了一个句号。
苏皖最近很喜欢发句号。
不是那种“无话可说”的句号,是那种“我没什么特别的事要说但还是想发个什么东西”的句号。陈序不知道怎么定义这种行为,但如果非要起个名字,大概叫“存在感的试探”。就像两个人走在路上,一个人突然停下来系鞋带,另一个人也跟着停了,不是因为鞋带松了,是因为不想走得太远。
陈序不太擅长应付这种试探。他以前的做法是——不回。“句号”不需要回复,就像“嗯”不需要追问。但苏皖的句号之后往往跟着别的东西,像一颗种子种下去了,你不知道什么时候会发芽。
周一早上,陈序到公司的时候,发现桌上放了一杯咖啡。热的美式,不加糖不加奶,杯壁上贴了一张便利贴,上面写着:“上次泼在你袖口上的咖啡,赔你的。——苏皖”
陈序拿起咖啡喝了一口。是楼下那家店的,味道很普通,但温度刚好。他看着那张便利贴,犹豫了一下,没有撕掉,压在键盘下面。
他给苏皖发了条消息:“收到了。”
“好喝吗?”她回。
“还行。”
“还行是什么意思?”
陈序想了想,打了两个字:“能喝。”
苏皖发了一个捂脸的表情。然后又说:“你这个人说话真的很好笑。”
“哪里好笑?”
“就是不好笑的地方好笑。”
陈序看不懂这句话,但他没有问。他发现苏皖说话的时候,经常在句子的末尾留一个很小的、微微上翘的尾巴,像一只猫把尾巴卷起来,不是要攻击你,就是随便卷一下。
他把手机放下,开始工作。
上周情感分析的初稿已经发给运营部了,反馈不太好。不是结论有问题,是运营那边的人看不懂那些分类标签。他们说“正面”“负面”“中性”太笼统了,他们想知道用户具体在说什么。陈序理解这个需求,但如果要把语义聚类做到“具体”的程度,需要的标注样本量是现在的十倍。他评估了一下时间,结论是:不现实。
他把这个问题挂在心里,想了大概一个上午。中午吃饭的时候,他一个人坐在食堂靠窗的位置,面前摆着一份看起来不太新鲜的香菇鸡丁饭。他拿起筷子,刚要动,苏皖端着餐盘过来了。
“这里有人吗?”
陈序抬头看她。她今天穿了一件白色的高领毛衣,头发还是低马尾,脸上的妆比前几天淡了一点,眼睛下面有一小片青色的阴影。
“没有。”他说。
苏皖坐下来,把餐盘放在桌上,里面是一份同样的香菇鸡丁饭。
“你也吃这个?”陈序问。
“食堂今天只有这个。”
两个人沉默地吃了几口。陈序不太习惯在吃饭的时候说话,他吃饭很快,嚼几下就咽了,像在处理一件不需要投入太多注意力的事务。苏皖吃得很慢,她先把香菇挑出来放在盘子边上,然后一小口一小口地吃饭。
“你不吃香菇?”陈序问。
“不吃。”
“那你为什么要点这份?”
“因为食堂只有这个。”
陈序看了她一眼,没说话。他把自己的饭吃完,用纸巾擦了擦嘴,把餐盘推到一边。
“运营那边反馈你看过了吗?”苏皖突然问。
“看了。”
“你怎么想的?”
陈序想了想,他不太想在食堂这种地方谈工作,周围都是人,隔桌有人在聊周末去哪玩了,另一桌在说新来的实习生不好带。但他发现自己对苏皖问的问题有回应的意愿——不是“需要回”,是“想回”。
“他们的需求是对的,但现在的资源做不到。”陈序说,“所以我需要找到一个折中的办法。”
“比如?”
“比如不做全量文本,只做差评的部分。差评的数量是好评的三分之一,样本量小了,就可以做更细的聚类。”
苏皖夹起一块鸡丁,停了停,说:“那你需要有人帮你标注数据吗?”
陈序看着她。
“我会。”苏皖说,“我以前在上一家公司帮运营标过用户反馈,不算专业,但能帮你分担一部分。”
陈序想了想。苏皖是产品部的,做这件事不是她的份内工作,他不能理所当然地让她帮忙。但如果她主动提了,而且确实能帮上忙……
“你不用加班做这个,”陈序说,“上班时间能标多少标多少,标不完的我晚上自己弄。”
“行。”苏皖说。
她把盘子里的香菇一颗一颗地夹到盘子最边上,码得很整齐,像在排一队即将被处决的囚犯。陈序注意到她手指的动作很轻,夹香菇的时候几乎不碰到盘子,像是在做一件需要高度专注的事。
“你小时候是不是也被逼着吃香菇?”他问。
苏皖抬起头,眼睛里有一点意外。
“你怎么知道?”
“猜的。”
苏皖笑了一下。这次的笑比之前几次都大一点,嘴角的弧度很明显,眼睛弯了一下。
“我妈以前逼我吃香菇,说吃了会变聪明。我没变聪明,但我学会了把香菇藏到米饭底下,假装吃完了。”她说,“后来她发现了,气得不行。”
陈序想象了一下那个画面:一个小女孩,埋头扒饭,把香菇一颗一颗地塞进米饭最深处,脸上带着一种“我没在干坏事”的严肃表情。他不知道苏皖小时候长什么样,但那个画面很清晰。
“你现在还藏吗?”他问。
“不藏了。我现在直接不吃。”
他们吃完午饭,一起走回电梯间。陈序按了十五楼,苏皖按了十二楼。电梯上行的时候,苏皖站在他左边,低头看手机。她今天换了一双白色的帆布鞋,鞋带系得很紧,在脚踝处打了一个小小的蝴蝶结。
“你周六在干嘛?”她突然问。
陈序愣了一下。他周六在干嘛?他周六在家。林知意周六加班,他早上起来发现冰箱里只有两个鸡蛋和半盒牛奶,他做了早餐,一个人吃了,然后坐在书房里看了半天数据。下午睡了两个小时,晚上看了半部电影,没看完,觉得没意思,关了。
“在家。”他说。
“我也是。”苏皖说,“我周六在家写PRD,写到下午两点,然后出去买了杯咖啡,回来接着写。”
陈序不知道她为什么要说这些。不是不重要,是他不太确定自己应该是那个听她说这些的人。
电梯到了十二楼,门开了。苏皖走出去,走了两步,转身说了一句:“咖啡明天还有。”
门关了。
陈序站在电梯里,脑子里重复了一遍“咖啡明天还有”。什么意思?意思是她明天还会给他买?意思是今天这杯不是“赔你的”,是“请你的”?他不太确定。但他发现自己在意这件事——不是在意咖啡,是在意“明天还有”这四个字里的那个“还”。
回到工位,陈序打开那个情感分析的程序,调出差评数据,开始看。
差评里出现频率最高的词确实是“没意思”。不是“不好”,不是“烂”,就是“没意思”。这个词太常见了,常见到以前的数据分析从来不会把它单独拎出来——它太普通了,普通到不像一个“信号”。但陈序现在觉得,恰恰是这种“普通”,才是它最有价值的地方。用户不会特意说“我觉得没意思”,他们只是在随口说。随口说出来的东西,往往比精心组织的反馈更接近真实的感受。
他把带了“没意思”关键词的记录单独拉出来,逐条看。
“刷了半天,没看到什么有意思的。”
“以前每天都会打开,现在打开也不知道看什么。”
“算法推荐的东西越来越像,翻来覆去就那几个话题。”
“说不上哪里不好,就是不想点了。”
这些留言都不是恶意的,甚至算不上抱怨。它们更像是一种疲惫的陈述,像一个人在说“今天下雨了”或者“今天好累”。不是试图改变什么,只是描述一种状态。
陈序把这几条复制下来,存进一个新文档里。他打算拿这些去做运营部同事的培训素材——“没意思”不是一个数据指标,它没法被量化,没法被画进图表。但它是真实的,是用户真实说出来的东西。数据分析不能只看“能测量的”,有时候“能说出来的”比“能测量的”更重要。
下午三点多,苏皖发了一个文档过来。标题是“用户行为事件定义_V2.1_苏皖_标注版”。陈序打开一看,她在之前那个版本的基础上,把每一个指标对应的数据表、字段名、计算逻辑都标了出来,还用不同颜色标记了优先级。陈序往下翻了翻,发现她甚至在文档末尾加了一个流程图,把不同指标之间的关系画了出来——谁是谁的子集,谁是谁的加总,谁和谁是互斥的。画得不专业,但很清楚。
陈序盯着那个流程图看了很久。不是因为它有多复杂,是因为她知道他看文档的时候会先看结构。她不知道他看文档的习惯,但她猜到了。或者她不是猜到的,是她本身就是一个会先看结构的人。
“收到了。”他回。
“流程图可能不太规范,”苏皖说,“你能看懂就行。”
“能看懂。”
“那就好。”
陈序把文档存到本地,在手机里打开相册,把那个流程图截了图。不是因为他需要它,是因为他觉得自己以后可能会想再看一眼。
下班之前,陈序又跑了一轮情感分析。这次的参数调整之后,分类准确率从百分之七十二涨到了百分之七十五。离他的目标还差一点,但已经是目前能做到的最好水平了。他把结果打包发给运营部的同事,附了一条消息:“初版,先看趋势,不建议直接用于决策。”
然后他关了电脑,开始收拾东西。
手机震了一下。苏皖的消息:“你今天几点走?”
“现在。”
“我也现在。等我一下?三分钟。”
陈序站在工位旁边,背上包,等了三分钟。他不知道自己为什么要等——不是因为顺路,是因为她说了“等我一下”。他在走廊尽头的消防通道门旁边站着,看手机上的时间一分一分地走。三分钟到了,苏皖从走廊那头走过来,背着那个鼓鼓囊囊的托特包,手里端着一杯新的咖啡。
“你今天没泼。”她说。
陈序低头看了一眼自己的袖口。深灰色夹克上什么都没有。
“今天运气好。”他说。
他们一起走向电梯。这一次电梯里人很多,他们被挤在两个不同的角落,陈序的位置看不到苏皖,只能看到面前一个人的后脑勺。电梯在十二楼停了一下,有人下去了,人群松了一点,陈序侧过头,看到苏皖正把手里的咖啡举高,怕被人挤洒了。她的表情很认真,眉头微微皱着,像在完成一项需要高度专注的任务。电梯到了一楼,他们被人流裹挟着走了出去,直到走出大厅,两个人才重新走到并排的位置。
“你今天骑车吗?”苏皖问。
“骑。”
“我也骑。”
他们走到单车停放点,扫码,取车。陈序跨上车的时候,看到苏皖站在她的车旁边,正在把托特包的带子往车筐里塞。包太大了,塞不进去,她试了几次都失败了。
“给我。”陈序说。
他把自己车停好,走过去,把她的包接过来,调整了一下背包带子的方向,塞进车筐里,压平,然后把车筐的盖子扣上。
“好了。”他说。
苏皖看着他做这些事的时候没说话,等他做完了才说了句“谢谢”。陈序跨上自己的车,等她先骑出去,然后跟在后面。他们沿着非机动车道一前一后地骑着,陈序的视线偶尔落在她的后背上——白色的高领毛衣,头发被风吹得有点散了,几缕发丝从马尾里逃出来,在她耳边飘着。
骑到第一个红绿灯路口,他们并排停下来。
“你平时骑车都听歌吗?”苏皖问。
“不听。”
“为什么?”
“听不到车的声音,不安全。”
苏皖想了想,“有道理。”然后她把耳机摘下来,绕在手腕上。
“你不用摘。”陈序说。
“没事,反正我也没什么好听的。”
绿灯亮了。他们继续骑。陈序留意了一下速度,他平时骑车比较快,今天刻意放慢了一点,不是怕她跟不上,是不想让她觉得他在赶。他知道这种“刻意放慢”的事,林知意以前也说过——刚在一起的时候,他走路会放慢步子,等她。后来慢慢就不等了。不是不爱了,是那件事从“需要刻意做”变成了“不需要做”。“不需要做”有时候是习惯了,有时候是忘了。
他们在静安寺路口分开。陈序要往左,苏皖要往右。她停下来,把包从车筐里拿出来,背好,然后说了一句:“明天咖啡还有。”
“你不用每天买。”陈序说。
“我就是想买。”
她说得很自然,像在说“今天天气不错”或者“我也觉得这家好吃”。陈序没接话。苏皖看了他一眼,蹬上车,骑走了。
陈序回到家的时候,林知意已经在厨房了。她今天下班早,做了两菜一汤,菜还冒着热气,餐桌上的碗筷摆了两副。陈序换了鞋,把包放下,走到厨房门口看着她。
林知意围着一条浅蓝色的围裙,头发用夹子盘起来,正在擦灶台。她听到脚步声,没有回头,说了一句:“洗手,吃饭。”
陈序洗了手,坐下来。林知意端着一碗汤出来,放在他面前,然后在他对面坐下。两个人面对面吃饭,中间隔着三个菜和一大碗汤,谁都没说话。客厅的电视开着,声音不大,是某个频道在放纪录片,有人在讲非洲草原上的角马迁徙。
“昨天你说晚上聊,”陈序放下筷子,“聊什么?”
林知意也放下了筷子。她看着桌子中间的汤碗,碗里飘着几片青菜和几朵香菇,蒸汽还在往上冒。
“你觉得我们最近怎么样?”她问。
陈序知道这个问题不是用来回答“挺好的”的。这个问题是一个入口,通向一片他不太想走进去的森林。他沉默了几秒,脑子里在快速检索“最近”发生的事——没有吵架,没有冷战,没有谁对不起谁。但也没有别的。没有一起吃饭的周末,没有靠在一起看完的电影,没有半夜睡不着聊的那些不着边际的话。他们像两条并行的铁轨,在同一个方向延伸,但中间隔着枕木和碎石,从来没有真正交汇。
“还好。”陈序说。
林知意看了他一眼。那一眼里的东西很复杂,有疲惫,有失望,有一种“我就知道你会这么说”的平静。
“陈序,我不是在问你‘还好吗’。我在问你,我们还能这样多久?”
陈序没有回答。他低头看着碗里的饭,米饭已经冷了,粘在一起,像一个白色的、凝固的块。
“你每天几点回来我都不知道,”林知意说,“你周末在书房坐一整天,我不知道你在想什么。你发的消息永远是‘嗯’‘好’‘知道了’。我想跟你说话,但我说三句,你回一句,那一句还是‘嗯’。”
陈序想说他不是故意的。他不是不想跟她说话,是他不知道说什么。他每天做的事情只有数据、报表、PPT,他不知道这些东西有什么好分享的。她的工作和他的工作不一样,她在外企做项目管理,每天跟人开会、跟人沟通、跟人吵架、跟人和好。她的一天是由对话构成的,而他的一天是由沉默构成的。
“那份便当,你忘带了。”林知意说。