下一章 上一章 目录 设置
3、他们都不习惯输
项目开 ...
-
项目开始后的第三天,沈知夏第一次和江屿吵架。
严格来说,那并不算一场真正的争吵。
没有人提高声音,也没有人摔门离开。甚至在旁人看来,他们只是站在白板前,对一个实验方案进行了二十分钟过于激烈的技术讨论。
可知夏知道,他们谁都没有把那场讨论只当成技术问题。
周四下午四点,项目组第一次跑完基础模型。
结果比预期差。
在干净数据集上,Recall@10达到百分之七十八,勉强可以作为基线。但加入OCR缺失、图像模糊和标签噪声以后,整体指标直接掉到百分之五十一。
其中扫描文档子集只有百分之三十七。
会议室里的投影屏停留在那张下降陡峭的曲线图上。
Ethan靠在椅背上,皱着眉说:“这个跌幅太夸张了。会不会是评估代码有问题?”
“代码没有问题。”知夏说。
“你检查过?”
“两遍。”
她点开日志,把不同噪声强度下的结果依次展开。
“错误集中在两类。第一类是扫描件里的小字体和手写批注,视觉编码器基本没有捕捉到。第二类是文本端OCR缺失以后,模型仍然把错误文本当作可靠信号。”
Priya问:“先做图像增强?”
知夏摇头。
“增强只能缓解第一类问题。”
“那先换OCR?”
“教授提供的数据不允许调用外部商业服务。开源模型可以换,但重新跑完整数据至少需要两天,而且不一定能解决错位标签。”
江屿站在白板旁,一直没说话。
知夏把自己的方案放出来。
“我建议先做噪声感知训练。”
她在屏幕上调出刚写好的方法框架。
“根据OCR置信度、图像清晰度和跨模态相似度,给每个样本计算一个可靠性分数。训练时,低可靠样本降低损失权重。对于置信度过低的样本,直接过滤。”
Ethan点头。
“听起来合理。”
Priya却问:“直接过滤会不会损失太多边缘样本?”
“所以不是只看单一信号。”知夏说,“三个信号加权。”
她把初步阈值写在白板上。
OCR置信度低于零点四。
图像清晰度低于零点三五。
跨模态相似度低于零点二。
同时满足两项,就从第一轮训练中移除。
江屿终于开口。
“不行。”
会议室里安静下来。
知夏转头看他。
“哪里不行?”
“过滤规则。”
“具体一点。”
“你把困难样本和错误样本混在一起了。”
知夏语气平静。
“我用了多信号交叉判断。”
“还是不够。”江屿说,“低清晰度、低OCR置信度,本来就是这个任务需要解决的问题。如果把它们先过滤掉,干净集指标会上升,但模型不会真的变得更鲁棒。”
“我没有说永久移除。”
“第一轮也会影响表示空间。”
“至少可以先建立稳定的初始分布。”
“稳定,还是好看?”
知夏看着他。
Ethan低下头,假装在看电脑。
Priya的手还放在触控板上,没动。
江屿继续说:“你这个方案会很快提高整体指标,但最难的扫描文档子集可能不会改善。最后我们得到的只是一个更会避开问题的模型。”
知夏问:“你的方案呢?”
“保留困难样本。”
“然后让错误标签继续污染训练?”
“做样本分层。”
江屿拿过白板笔,在她的框架旁边画了三个区域。
高置信样本。
可疑样本。
高风险样本。
“高置信样本正常训练。可疑样本降低权重,但不移除。高风险样本单独进入一致性训练,不直接使用原标签。”
知夏看了一眼。
“用伪标签?”
“不是。用两个模态的独立预测做一致性约束。”
“两个模态都错怎么办?”
“所以只约束表示,不约束最终类别。”
“这样训练会很不稳定。”
“可以分阶段。”
“时间不够。”
“还有五周。”
“我们不能把一周花在证明一个复杂方案跑不通上。”
江屿看着她。
“你不是怕方案跑不通。”
“那我怕什么?”
“你怕第一周拿不出好看的数字。”
这一次,会议室里彻底安静了。
知夏的神情没有变化。
只有握着遥控器的手指缓慢收紧了一点。
“你在质疑我的判断,还是在分析我的动机?”
“都有。”
江屿的语气并不尖锐。
但正因为太平静,才更让人无法轻易把它当成一句气话。
知夏把遥控器放到桌上。
“那我也说得直接一点。你的方案理论上更完整,但实现成本高,变量多,失败后很难定位问题。课程项目不是论文预研,我们需要在有限时间里交付一个稳定系统。”
“稳定不代表回避难点。”
“复杂也不代表正确。”
“我没说一定正确。”
“但你在要求整个团队为你的假设承担时间成本。”
江屿停了一下。
“那你的方案呢?”
“我会对结果负责。”
“怎么负责?”
“如果过滤方案导致困难子集继续下降,我会在两天内换方案。”
“已经被过滤掉的样本分布不会自动回来。”
“所以我会保留完整对照组。”
江屿看着她。
“你已经决定了?”
知夏说:“我提出的是当前最可执行的方案。”
“你没有回答。”
“我不需要在每个决定前都先得到所有人的同意。”
Ethan终于抬头。
“要不然我们先各跑一个小规模实验?”
知夏没有看他。
江屿也没有。
两个人仍然隔着一块白板对视。
Priya轻声说:“其实可以把数据缩到百分之十,今晚就能出第一轮结果。”
知夏沉默几秒。
“可以。”
江屿把笔放下。
“那就各跑一组。”
会议结束时,窗外已经黑了。
Ethan和Priya离开得很快。
走之前,Priya拍了拍知夏的肩膀,低声说:“你们两个都挺吓人的。”
知夏问:“哪里吓人?”
Priya想了想。
“像两个人都在等对方先承认自己错。”
知夏没有回应。
江屿正在另一边收拾电脑。
他们一起走出会议室,却没有像前两天那样并肩。
知夏走在前面。
江屿落后半步。
电梯门打开,两个人进去。
狭小的空间里只剩下楼层数字不断变化。
江屿先开口。
“我刚才说话有点重。”
知夏看着电梯门。
“哪一句?”
“说你想要好看的数字。”
“你认为不是?”
江屿沉默了一下。
“我认为你很在意结果。”
“所有做项目的人都应该在意结果。”
“但你比大多数人更在意。”
知夏转头看他。
“这不是缺点。”
“我没说是。”
“可你的语气像是在指责我。”
“我是在提醒你。”
“我不需要你提醒。”
电梯到了一楼。
门缓缓打开。
知夏走出去。
外面又开始下雪。
这次不是昨夜那种细密的雪粒,而是大片柔软的雪花,在路灯下慢慢落下来。
江屿跟在她身后。
“沈知夏。”
她没有停。
“你生气了?”
“没有。”
“你每次说没有,基本就是有。”
知夏终于停下。
“江屿。”
他也停下来。
“我们只是项目伙伴。”她说,“你可以质疑我的方案,也可以证明我错。但不要分析我为什么做一个决定。”
“为什么?”
“因为你不了解我。”
江屿看了她几秒。
“那你可以告诉我。”
知夏觉得这句话没有道理。
“我为什么要告诉你?”
“至少让我知道,我刚才哪里判断错了。”
“你为什么一定要知道?”
“因为我不想误解你。”
雪落在江屿的肩上。
他没有戴帽子,黑色头发很快沾上一层细白。
知夏看着他。
很多时候,别人误解她,她并不在意。
有人觉得她好胜,有人觉得她冷漠,有人觉得她太看重成绩,也有人觉得她在团队里不够温和。
她从不解释。
解释是一件成本很高的事。
而且大多数人并不是真的想理解,他们只是希望她给出一个更容易接受的版本。
可江屿站在雪里,认真问她,他错在哪里。
知夏沉默很久。
“我不是想要好看的数字。”她说。
江屿没有插话。
“我只是习惯先把最确定的部分做出来。”
“为什么?”
知夏看向远处。
教学楼前的台阶刚被清理过,又很快积了一层薄雪。几个学生裹着大衣跑过去,笑声在风里很快散开。
“因为很多事情不会给你第二次机会。”
她说得很轻。
江屿问:“这个项目会。”
“我知道。”
“那你为什么还是这么急?”
知夏没有回答。
她当然知道一门课不会决定人生。
一次项目失败也不会让她失去什么。
可她从很早以前就习惯了不给自己留下失败的余地。
申请学校时,别人会同时投十几所,她只挑了最想去的几所,然后把每一份材料改到没有明显缺口。
做研究时,别人允许自己先试错,她会在动手之前把大多数路径都推演一遍。
不是因为她不能输。
而是因为她不喜欢把希望寄托在“下次”。
她想要的东西,往往都很难。
机会有限,位置有限,时间也有限。
她必须一次做对。
至少尽可能做对。
“这和项目无关。”知夏说。
江屿点头。
“好。”
他没有继续逼问。
知夏看了他一眼。
“你不问了?”
“你不想说,我就不问。”
“那你刚才还一直问。”
“因为我以为你只是嘴硬。”
“现在呢?”
“现在知道不是。”
江屿把手插进羽绒服口袋。
“你是真的不想说。”
不知为什么,知夏心里那点没有散尽的火气,忽然弱了一些。
她转身继续往前走。
江屿跟上来。
“但技术上,我还是认为你错。”
知夏侧头看他。
“很好。”
“你不生气?”
“这是两件事。”
江屿笑了。
“你分得还挺开。”
“本来就应该分开。”
“所以我们今晚继续跑?”
“当然。”
“各用一张卡?”
“教授只给了两张。”
“那正好。”
“凌晨一点看结果。”
江屿问:“输了怎么办?”
知夏说:“改方案。”
“我是问人。”
“什么意思?”
“结果差的那个人,要承认对方对。”
“这不是应该的吗?”
“还要请晚饭。”
知夏看他。
“你缺这一顿饭?”
“不缺。”
“那为什么?”
“想看你输。”
知夏脚步一停。
江屿已经向前走了两步。
他回过头,笑得很坦然。
“怎么?”
知夏走到他旁边。
“你不会看到。”
当晚七点,两组实验同时开始。
知夏采用样本过滤和置信度加权。
江屿采用分层训练与一致性约束。
为了保证公平,他们使用同一份百分之十子集、同一初始化参数和同一训练轮数。
知夏把所有随机种子固定下来,又写了统一评估脚本。
江屿看完以后说:“你对输赢很认真。”
“我对实验严谨。”
“有区别?”
“很大。”
两个人坐在实验室相邻的位置。
Ethan和Priya远程参与了一会儿,确认任务正常后便下线了。
晚上九点,知夏的模型先跑完第三轮。
指标明显上升。
整体Recall@10从百分之五十一提高到百分之五十九。
干净数据表现没有下降。
江屿那边只有百分之五十五。
知夏看了一眼他的屏幕。
“晚饭你请。”
“还没结束。”
“趋势已经很明显。”
“你的困难样本呢?”
知夏切到扫描文档子集。
百分之四十。
比基础模型提高三个百分点。
江屿的数据是百分之四十三。
知夏皱了下眉。
“整体指标更重要。”
“教授的评分里,鲁棒性占百分之三十。”
“准确率占百分之三十五。”
“但困难子集是核心亮点。”
“项目不是只服务困难样本。”
“也不能靠牺牲它们换平均值。”
知夏没再说话。
凌晨十一点,两边都跑到第八轮。
知夏的整体指标达到百分之六十三。
江屿是百分之六十一。
差距缩小。
扫描文档子集上,知夏是百分之四十二。
江屿达到百分之四十九。
江屿靠在椅背上。
“还要提前庆祝吗?”
知夏盯着曲线。
“你的训练不稳定。”
江屿的损失确实波动很大。
第六轮甚至出现过一次明显反弹。
“但还在收敛。”
“如果完整数据上波动会更大。”
“可以调学习率。”
“也可能是伪监督信号的问题。”
“所以要继续实验。”
知夏没有反驳。
她把自己的错误样本抽出来。
很快发现,过滤方案确实有一个明显问题。
被她判定为低可靠度的样本里,有近三分之一并不是标签错误,而是极端模糊、严重缺字却仍然可以被人类判断的困难样本。
她的规则让训练更稳定。
也确实避开了一部分真正需要解决的问题。
凌晨十二点二十二分,实验结束。
最终结果显示:
知夏方案的整体Recall@10为百分之六十四点一。
江屿方案为百分之六十三点七。
整体差距只有零点四。
但在高噪声扫描文档子集上,江屿高出七点八个百分点。
延迟方面,知夏的方案更快。
训练稳定性方面,也是她更好。
会议室里只剩电脑风扇的声音。
江屿问:“怎么算?”
知夏看着结果表。
“没有人赢。”
“总要有一个。”
“多目标任务不能只按单一指标判断。”
“刚才是谁说整体指标更重要?”
“我说的是评分权重,不是唯一标准。”
江屿笑了。
“所以你不想请晚饭。”
“我可以请。”
他愣了一下。
知夏把结果表放大。
“你的判断是对的。直接过滤确实会损伤困难样本。”
她说得很平静。
没有找借口,也没有强调自己整体指标更高。
“我低估了困难样本里有效信息的比例。”
江屿看着她。
“你认输了?”
“我承认这个判断错了。”
“这么痛快?”
“实验已经证明了。”
“我以为你会再辩二十分钟。”
“没有必要。”
江屿沉默片刻,忽然笑了一下。
不是赢了以后得意的笑。
更像某种原本模糊的判断终于被确认。
“沈知夏。”
“嗯?”
“你挺难得的。”
知夏皱眉。
“什么意思?”
“很多聪明的人,不怕不知道。”
江屿说,“但怕自己错。”
知夏看着屏幕。
“错了就改。”
“你刚才看起来很不高兴。”
“因为我需要重新写一部分代码。”
“不是因为输?”
“也有一点。”
江屿笑出声。
“终于承认了。”
知夏关掉结果页面。
“晚饭吃什么?”
“现在?”
“你不是要我请?”
“凌晨十二点半。”
“你不饿?”
“饿。”
“那走。”
江屿合上电脑。
两个人穿好外套,走出学院楼。
雪已经停了。
空气冷得发紧,踩在积雪上会发出细碎的咯吱声。山下还有几家餐厅亮着灯,但大多数已经关门。
他们最后去了一家二十四小时营业的美式餐厅。
店里客人很少。
暖黄色的灯光落在红色皮质卡座上。靠窗的位置坐着一对上了年纪的夫妻,桌上放着两杯咖啡,谁也没有说话。
知夏点了一份鸡肉华夫饼。
江屿看着她。
“你不是不吃甜的?”
“华夫饼可以不加糖浆。”
“鸡肉呢?”
“蛋白质。”
“凌晨一点吃炸鸡,你还挺讲营养。”
“至少比只喝咖啡好。”
服务生离开后,江屿问:“明天怎么改?”
“结合。”
“怎么结合?”
“保留你的分层,但第一轮只对高置信和可疑样本训练。高风险样本先做表示一致性,等空间稳定以后再加入。”
江屿点头。
“延迟呢?”
“训练复杂度不影响推理延迟。”
“异常检测器会。”
“离线完成。”
“数据更新怎么办?”
“定期重算,不放在线上。”
江屿靠在椅背上。
“你已经想完了?”
“路上想的。”
“你刚才一路没说话,就是在想这个?”
“不然呢?”
“我以为你在消化失败。”
知夏看着他。
“我没有失败。”
“好,判断失误。”
“也不完全是。”
“沈知夏。”
“嗯?”
“你确实不太习惯输。”
知夏没有否认。
服务生把咖啡端上来。
她往杯子里加了一点牛奶。
“你习惯?”
“也不习惯。”
“那你凭什么说我?”
“因为我看得出来。”
“你只是赢了一半。”
“所以另一半你也看得出来。”
知夏抬眼。
江屿端着咖啡,眼底带着一点很浅的笑。
她忽然意识到,他今晚很高兴。
不是因为实验结果比她好。
而是因为他们争论了、对抗了,她没有因此疏远他,也没有因为自尊心拒绝承认问题。
对江屿来说,这大概也是一种确认。
确认她不是只能被欣赏的人。
她可以被挑战。
也愿意留下来继续合作。
“你为什么一直看我?”知夏问。
江屿没有移开视线。
“我在想一件事。”
“什么?”
“你以前是不是没遇到过太多会反驳你的人?”
“遇到过。”
“能说服你的呢?”
知夏停了一下。
“很少。”
“那我算一个?”
“今天算。”
“只有今天?”
“以后看表现。”
江屿低头笑了。
“行。”
食物很快端上来。
知夏把枫糖浆推到一边,用刀切开华夫饼。炸鸡外皮很脆,热气从里面冒出来。
她确实饿了。
两个人安静吃了一会儿。
江屿忽然问:“你小时候也这样吗?”
“哪样?”
“什么都要做到最好。”
知夏切食物的动作顿了顿。
“不是。”
“那是什么时候开始的?”
她没有回答。
江屿喝了口咖啡。
“这个也不能问?”
“可以问。”
“但你不想答。”
“嗯。”
“好。”
他果然没有继续。
知夏看着他。
“你为什么总能停下来?”
江屿没明白。
“什么?”
“很多人问了问题,就一定要得到答案。”
“你不想说,我追问也没有意义。”
“你不好奇?”
“好奇。”
“那你不难受?”
江屿想了想。
“有一点。”
“所以?”
“所以等你愿意说。”
他说得太自然。
仿佛等待不是一种牺牲,也不是为了交换未来的回报。
只是一件可以发生的事。
知夏低头看着盘子。
她忽然不知道该说什么。
凌晨两点,他们从餐厅出来。
街上已经没有什么人。
雪后的夜空比平时亮,云层很低,远处高架桥上的车灯缓慢移动。
江屿送她回公寓。
走到半路,知夏忽然踩到一块薄冰。
她反应很快,身体刚倾斜便立即稳住。
江屿却已经伸手抓住她的手腕。
两个人同时停下。
他的手很热。
隔着毛衣袖口,知夏仍然能感觉到手指的力度。
“我没摔。”她说。
“看见了。”
“那可以放开。”
江屿低头看了一眼自己的手。
随后松开。
“抱歉。”
知夏把手收回口袋。
“没事。”
走了几步,江屿忽然笑了。
“你刚才说没事。”
知夏侧头。
“这次是真的。”
“怎么证明?”
“你想要什么证据?”
“没有。”
江屿说,“只是觉得,你说没事的时候,好像也不全是假的。”
知夏没有接话。
她的手腕还残留着一点温度。
走到公寓楼下时,已经两点二十三分。
江屿站在台阶下。
知夏刷开门禁,又回过头。
“明天几点?”
“十一点。”
“十点半。”
“为什么?”
“改完方案再开会。”
“你今晚还准备写?”
“回去先整理。”
江屿皱眉。
“你刚才承认自己需要睡觉了吗?”
“没有。”
“沈知夏。”
“我最晚三点睡。”
“你每次都这样保证?”
“我没有向别人保证过。”
江屿看着她。
知夏也意识到自己说了什么。
她停了一秒。
“总之,明天十点半。”
江屿没有再劝。
“好。”
知夏推开门。
“晚安。”
这一次,是她先说。
江屿明显怔了一下。
楼道里的灯从玻璃门后照出来,映在她的侧脸上。
“晚安。”他说。
知夏走进大厅。
电梯上升时,她拿出手机。
项目群里,江屿刚刚发了一条新消息。
“明天十点半讨论融合方案。今晚不再提交代码。”
下面又单独艾特她。
“尤其是沈知夏。”
知夏盯着屏幕看了几秒。
然后回复:
“项目组里不要发表无关指令。”
江屿回得很快。
“这是风险控制。”
“什么风险?”
“核心开发者猝死。”
知夏皱起眉。
“措辞不吉利。”
“那改成过度疲劳。”
“也没有这么严重。”
“你两天一共睡了不到七个小时。”
知夏没有问他怎么知道。
她走进公寓,换鞋,倒了一杯水。
电脑还在包里。
她原本确实打算再把融合方案写完。
可站在客厅里想了一会儿,她最终没有打开电脑。
她洗完澡,躺到床上。
两点五十一分,她给江屿发了一条消息。
“睡了。”
江屿回复:
“很好。”
隔了几秒,又发来:
“晚安。”
知夏看着那两个字。
她没有立刻放下手机。
窗外积雪反射着路灯的光,房间里并不完全黑。暖气运转时发出轻微的响声,像一场很远的雨。
她回复:
“晚安。”
然后关掉屏幕。
那一夜,沈知夏睡了七个小时。
这是她来美国以后,第一次因为一个刚认识不到一周的人,放下了没有完成的工作。
她当时并不觉得这有什么特别。
只是第二天醒来时,阳光正落在枕边,手机里有一条江屿七点发来的消息。
“今天不用早安。”
“睡醒再说。”
知夏看了很久。
后来她才明白,感情真正开始的时候,往往没有任何标志。
没有告白,没有拥抱,也没有谁忽然承认心动。
只是有一个人出现以后,你第一次愿意相信——
有些事情今天没有做完,明天也还来得及。
有些路不必一个人赶。
而输给一个能够接住你的人,好像也没有那么可怕。