“嗯。”
“你知道我几点起来给你装便当的吗?六点。我六点起来,给你煮了鸡蛋,切了水果,把米饭装盒,然后你忘了。”
陈序张了张嘴,想说“我明天一定带”,但这句话太薄了,薄得撑不住这个对话的重量。
“我不是在怪你忘带了,”林知意的声音低下去,低到几乎被电视里的角马迁徙盖住,“我是在怪你连忘带了都不跟我说一声。你发个消息说‘今天我忘带了’有那么难吗?”
陈序想说“下次会记得”,但他意识到“下次”不是她现在要的。她要的不是下一个便当,是他在这个空间里的存在感。是他在加班到深夜的时候,能主动发一条消息说“我还在公司,你先睡”。是他坐在书房里的那些周末,能把门打开,让她看到他在做什么。是那些可以被量化的时间、可以被标记的行为、可以被确认的在意。
“对不起。”陈序说。
林知意笑了一下。那个笑容比哭还难看。
“你每次都这么说。”她站起来,开始收碗筷。陈序想帮忙,她把他的手挡开了。
“你去忙你的吧。”
陈序坐在餐桌前,看着林知意把菜端进厨房,把碗放进水槽,打开水龙头。水声很大,盖住了她的声音,也盖住了电视里角马过河的解说。他站起来,走到厨房门口,站了一会儿,然后回到书房。
他打开电脑,那个情感分析的程序还在后台运行。屏幕上是一行行的日志,绿色的“SUCCESS”一行一行地往上滚动,像空白的承诺。他盯着屏幕看了几分钟,什么都没做。
手机震了一下。苏皖的消息:“你到家了吗?”
“到了。”
“吃了什么?”
“饭。”
苏皖发了一个问号。
“两菜一汤。”陈序补了一句。
“谁做的?”
陈序看着这个问题。他不知道怎么回。说“我妻子做的”是事实,但这四个字在屏幕上看起来太正式了,像一份证词。说“家里做的”又太含糊。他打了“爱人做的”,看着这三个字,觉得有点陌生。“爱人”这个词他很少用,他跟林知意之间很少用这种称呼。他们叫名字,叫“你”,叫“喂”,叫“那个谁”。
“家里人做的。”他回了。
“好吃吗?”
“还行。”
“你这个人没有味觉吗?问什么都‘还行’。”
陈序发了一个句号。
苏皖又发了一个捂脸的表情。
陈序看着那个捂脸的表情发呆。他不是没有味觉,他是不知道怎么描述“好不好吃”。林知意做的饭不难吃,但也说不上多好吃,跟食堂的香菇鸡丁饭一样,是为了填饱肚子吃的。他想起苏皖昨天在食堂把香菇一颗一颗地挑出来码在盘子边的样子,那个画面比今天晚饭里的任何一个瞬间都更清晰。
他关掉手机,继续看屏幕上的日志。
程序跑完了。分类准确率还是百分之七十五,没有提升。陈序知道再调参数也不会有质的飞跃,他需要更多的训练样本。他需要有人帮他标注数据。
他拿起手机,打开和苏皖的对话框,打了几个字:“明天有空的话,帮我标一下数据。”
然后他看到了上面那条“家里人做的”。他没有删,也没有改。他盯着那条消息看了一下,觉得“家里人”这三个字说得太生分了,像是在跟一个外人描述一段跟自己无关的关系。但苏皖就是外人。她确实是外人。
他退出了对话框,把手机放到一边。
窗外没有声音。他把书房的门关上,在黑暗中坐了一会儿。然后他打开门,走廊的灯还亮着,厨房的灯已经灭了,卧室的门关着,门缝里没有光。林知意睡了。
他站在走廊中间,灯在他头顶发出很轻的电流声。他忽然想起一件事——上次和林知意一起看的电影是什么?他想了很久,没有想起来。不是记性不好,是那件事没有发生过。他们很久没有一起看过电影了。
第二天早上,陈序到公司的时候,桌上没有咖啡。他坐下来打开电脑,发现有一封未读邮件,发件人是苏皖,标题是“数据标注模板”。他点开,附件是一份Excel表格,她把差评数据分成了十个小批次,每个批次二十条,还在旁边列了标注指南——正面、负面、中性、其他,每个类别的判断标准都写清楚了。
苏皖的消息在九点发来的:“咖啡今天没买,我迟到了。”
陈序看了看时间,九点零一分。
“不算迟到。”他回。
“差一分钟。我骑太快了,心跳好快。”
陈序不知道“心跳好快”是在描述一个生理状态,还是在跟他分享一种感受。他想了想,回了四个字:“慢点骑。”
“你这是在关心我吗?”
陈序看着那行字,手指在键盘上停了一下。
“安全第一。”他说。
苏皖发了一个“哦”。
陈序打开那份数据标注模板,开始一条一条地看。他标得很快,每一条大概十几秒就能判断类别,因为他已经看过这些数据很多次了。标到第四批的时候,他发现苏皖在表格里加了一列“备注”,里面写了几句话。
“这条用户说的‘内容越来越无聊’,其实是在抱怨推荐同质化,不是内容本身差。建议算作‘负-内容质量’子类。”
“这条用户的‘没意思’,结合他之前的反馈‘看了几天就腻了’,可能是新鲜感的问题,不是内容质量的问题。”
“这条用户写的‘没什么值得看的’,语气比其他的更激烈一点,可能是多个不满累积后的爆发。”
陈序逐条看过去。苏皖的备注不是随便写的,她在试着理解用户在说什么,不是机械地贴标签。她在用自己的方式,把他的假设往前推了一步。
他在表格最后加了一行批注:“备注里的建议很好,可以纳入第二版标注规则。”
然后把表格发了回去。
苏皖回了一个笑脸。
陈序继续做自己的事。上午十点多,他去找运营部的同事开会,讨论情感分析结果的落地问题。运营经理姓孙,叫孙敏,是个四十多岁的女人,说话节奏很快,喜欢在别人说完之前就开始回应。陈序不太适应这种沟通方式,但他学会了在她打断的时候停下来,等她说完,再继续。
“你这个分析方向是对的,”孙敏翻着陈序的报告,“‘没意思’这个点确实值得深挖。但你知道运营现在最大的问题是什么吗?不是不知道用户为什么不满意,是不知道哪些不满意是‘值得改’的。用户天天说‘没意思’,但‘没意思’能变成需求吗?能变成功能吗?我们要的是可执行的方案,不是感受。”孙敏的语气不重,但话里的意思是清楚的:你的分析有价值,但还没落地。
陈序没有反驳。他知道孙敏说得对。“没意思”是一个感受,不是一个需求。把感受翻译成需求,是他的工作,不是用户的工作。
“我会在两周内出一版更细的分类,”陈序说,“把‘没意思’拆成具体的问题类型——比如‘内容同质化’‘新鲜感不足’‘互动性弱’‘推荐不准’。每一类都会对应可落地的产品建议。”
孙敏看了他一眼,点了点头。陈序从会议室出来的时候,看到苏皖正站在走廊尽头的茶水间门口,端着一杯水,跟产品部的同事在说话。她今天穿了一件深蓝色的卫衣,头发散着,看起来比平时放松很多。她看到陈序的时候,微微点了一下头,没说话,继续跟同事聊。
陈序走回工位,路上在拆解“没意思”的问题类型。内容同质化,对应推荐多样性;新鲜感不足,对应内容更新频率和类型分布;互动性弱,对应社交功能和用户参与机制;推荐不准,对应算法本身的优化方向。他把这些打了一个草稿,存在备忘录里。
下午两点,苏皖发来一个消息:“标注标完了。”
陈序打开表格,看到苏皖把十批数据全部标完了。她的标注速度比他预想的快,而且准确率不低——他随机抽查了几条,判断跟她的一致。她在备注里又加了一些新的话,有些是针对单条数据的分析,有些是对整体趋势的观察。
“我发现大部分用户说‘没意思’,其实是在说‘我想看点新鲜的,但你给我的都是我看过的’。”她写在一行备注里,“这不是算法的问题,是内容库的问题?我不确定。”
陈序看完这条备注,给她回了一条:“你说得对。不完全是算法的问题,内容库的更新频率和质量是上游。我之前的假设偏了。”
苏皖回了一个句号。
陈序盯着那个句号看了两秒,打了两个字:“谢谢。”
“谢什么?”
“谢你帮我标数据,还谢你指出我的问题。”
“你的问题不是我指出来的,是你自己看到的。”
陈序没回。
他坐在工位上,把苏皖说的那句话在脑子里又过了一遍——“大部分用户说‘没意思’,其实是在说‘我想看点新鲜的,但你给我的都是我看过的’。”不是算法读不懂用户,是内容读不懂用户。用户不是想要更多的同类项,用户想要的是未知项。这个修正改变了陈序整个假设的方向。他之前把问题定位在推荐层,现在他才意识到,推荐层只是内容层的问题的放大镜。内容池的多样性不够,算法推得再准也是同质化的准。
他拿出手机,给孙敏发了条消息:“关于‘没意思’的问题,我有了新想法,周四之前给你一版方案。”
孙敏回了一个“好”。
下班的时候,陈序发现苏皖没有发消息问他几点走。他看了一下时间,六点四十,不算晚。她可能已经走了。他把电脑合上,收拾东西,走到电梯间,看到苏皖正站在电梯门口,低头看手机。
“你今天不加班?”陈序问。
苏皖抬起头,“今天不加。你呢?”
“也不加。”
电梯到了,门开了。两个人走进去,里面没有别人。
“我标的那些数据,你看了吗?”苏皖问。
“看了。”
“有什么问题吗?”
“没有。”陈序顿了顿,“你写得比我预期的好。”
苏皖偏过头看着他,“你预期我写得不好?”
“不是。我预期你只是帮忙标一下类别,没想到你会加备注,还会分析。”
“我这人话多。”苏皖说。
电梯到一楼了。
他们走出大厅,外面的天还没全黑,西边的云被晚霞烧成了橘红色,薄薄的一层,像一张被揉皱的纸。空气里有桂花的味道,甜丝丝的,被晚风推着,一阵一阵地来。
“你今天骑车吗?”苏皖问。
“骑。”
“我也骑。”
他们走到单车停放点,各自扫码、取车。苏皖今天骑了一辆新的车,车筐很大,她的托特包塞进去还有空余。她没急着骑走,跨在车上,一只脚撑地,看着天边的云。
“好看吗?”她问。
陈序顺着她的目光看过去。橘红色的云正在慢慢变暗,边缘染上了一层灰紫色,像一幅正在褪色的水彩画。
“还行。”他说。
苏皖笑了一声。“还行。你说话真的好没意思。”
陈序愣了一下。然后他也笑了一下。不是从喉咙里挤出来的那种笑,是真的觉得好笑的那种。他笑起来的时候嘴角只动了一点点,但苏皖看到了。
“你笑起来还挺好看的。”她说。
陈序不知道该怎么接这句话。他看着苏皖,她的脸在晚霞的光里泛着一层浅浅的暖色,眼睛很亮,嘴唇微微弯着,带着那种“我就是随便说说你别多想”的表情。
“走吧。”陈序说。
他们骑上车,沿着非机动车道,一前一后。陈序今天第一次注意到,晚高峰的时候,这条路的两边种满了法国梧桐,叶子已经开始黄了,有些已经落了,被车轮碾过,发出细碎的声响。他以前从来没有注意过这些树。以前的晚高峰,他在这条路上骑了两年,看到的是红灯、绿灯、前面人的后脑勺和刹车灯。今天的路不一样,他不知道为什么。也许是因为夕阳的角度,也许是因为风的方向,也许不是。
他们在静安寺路口分开。苏皖没有说“明天咖啡还有”,她说了“明天见”。
“明天见。”陈序说。
他骑回家的路上,脑子里反复播放苏皖说的那句话——“你笑起来还挺好看的。”他知道这不是一个需要回应的评价,但他发现自己在意这句话的每一个字。“挺好”是一个程度,“看”是一个动作,“的”是一个收尾。整句话没有一个多余的词。
他到家的时候,林知意还没回来。客厅的灯关着,厨房的灯关着,冰箱上的那张便签纸还在,“晚上聊”三个字被磁贴压着,像一只被钉在墙上的蝴蝶。陈序站在冰箱前看了一会儿,拿出手机。
“你今天几点回来?”他给林知意发了条消息。
“大概九点。项目会延迟了。”
“我等你。”
发完这三个字,陈序觉得有点不像自己说的话。“我等你”是他以前经常说的,刚在一起的时候,他会等她下课,等她下班,等她化完妆,等她挑完餐厅。后来慢慢不说了,不是不等了,是不说了。他把这三个字发出去,像一个太久没写的字,笔画突然想不起来了。
他把手机放在餐桌上,走进厨房,打开冰箱,看到里面还有昨天剩的菜。他把菜拿出来,准备热一下。锅里的水烧开了,蒸汽往上冒,模糊了他的视线。他把火调小,等林知意的消息。手机在餐桌上震了一下,他走过去看。
不是林知意的消息,是苏皖的。她说:“我到家了。你呢?”
“到了。”他回。
“在干嘛?”
“热饭。”
“又是你家里人做的?”
陈序看着“家里人”三个字。他昨天用了这个词,苏皖记住了。
“嗯。”
“好吃吗?”
“还行。”
苏皖发了一个打哈欠的表情。
陈序把手机放下,回到厨房,把菜热好,端到餐桌上。一个人坐在餐桌前吃饭,对着两个空盘子和三双筷子。他把筷子收了两双,只留了一双。窗外不知道什么时候开始下雨了,雨声不大,细细密密的,像有人在远处翻一本很厚的书。他的手机又震了。
林知意的消息:“项目可能要到十点,你先睡。”
陈序看着那行字,打了几个字,删掉,又打了几个字,又删掉。最后他只回了一个字:“好。”
他吃完饭,洗完碗,坐在客厅的沙发上听雨。没开灯,没开电视,雨水打在窗玻璃上,顺着往下流,像无数条透明的虫子在爬。他拿起手机,苏皖没有发新消息。他打开她的对话框,往上翻了几页——他们这几天的聊天记录,比他和林知意过去三个月的都多。
陈序把手机放下,闭上眼睛。
雨还在下。
他在黑暗中坐着,像一块被水冲刷了很久的石头。不是不想动,是不知道该往哪里动。