空白分类
一
闹钟响的时候,程海早就醒了。
他看着它叫,没动。叫了大概半分钟,他才伸手按掉,然后继续躺着,看天花板。窗帘是薄棉布的,透光,整个房间是那种很软的白。
他在床上又躺了一会儿,然后起来了。
穿衣服的时候发现昨天的衬衫领子有点皱,换了一件。去厨房,往锅里磕了个蛋,蛋黄完整地落下去,边缘煎成金色。
新闻开着。播音员在说绿化覆盖率,声音很平,程海听了一会儿,觉得这个播音员咬字很清楚,今天听着格外的好听。
吃完饭换鞋出门。楼道里三楼那盆绿萝又长了,垂下来一截新的,嫩绿色,比下面老叶子的颜色浅很多。
空轨站离程海家不远,走路五分钟。进站的时候检票口前面有个小孩,大概三四岁,非要自己刷卡。他妈妈蹲在旁边扶着他的手,刷了两次没过,小孩急得直跺脚。后面排了四五个人。程海站在队里看着,小孩第三次刷过去了,转头冲他妈妈咧嘴笑,嘴里还说了句什么。程海没听清,他妈妈笑着把他抱起来走了。
程海跟着笑了一下,没有人看到,他也不知道为什么要这么做,往前走了两步,刷卡进站。
站台上有个老太太抱着包裹,伸出来两根法棍。程海看了一眼,想,这应该是今早烤的,说不定的开面包店的,对,面包,自己很久没吃过面包了,有时间该去尝尝了。
列车来了,很安静地停下来。
他找了个靠窗的位置坐下,对面坐了个戴耳机的女生,闭着眼睛,脚跟随着什么节奏轻轻点着地。列车出了城区,开始穿丘陵。轨道架得高,往下看是松树林,树顶被雾压着,深绿色,很沉。再远处有条河,河面宽,反着白光,像是有人把一整块镜子铺在山谷里。坡上散着几栋房子,红屋顶,周围是菜地,从这个高度看下去,垄和垄之间的间距很整齐,不知道种的是什么。
程海把额头抵在玻璃上,看了很久。
一只鸟从树顶飞出来,往河的方向去了,很快就看不见了。他想,那是什么鸟?
列车进城,楼房变密,天空被切成一条一条的窄缝。程海把额头从玻璃上抬起来,玻璃上留了个淡印子,他用袖子蹭了两下,没蹭干净,算了。
公司在城区东边,从空轨站出来还要走一段。这条路他走了两年,路边有家包子铺,每天早上都排队,今天也排着,队伍拐了个弯。程海经过的时候往里看了一眼,锅里的蒸汽往上冒,老板娘用夹子夹包子,动作很快,夹一个,纸托,递出去;夹一个,纸托,递出去。像是一台很顺的机器,但又不像机器,因为她偶尔会跟客人说一句什么,也不停手。
程海在队伍外面站了一会儿,然后继续走。
公司楼下有个保安,姓陈,五十多岁。程海在这里上班两年,每天进门,这人从来都是一张脸,不凶,就是没有表情,像是门边放了一块牌子。程海每次刷卡进门都不说话,对方也不说话,两年了,就这样。
今天程海刷完卡,往里走了两步,回头说了声:“陈师傅早。”
保安抬头看了他一眼,点了点头:“早。”
程海进楼,等电梯。电梯门上有块不锈钢板,能照出人影,他在里面看见自己,头发有点乱,他用手压了压,没什么用,算了。电梯上来,门开了,里面站着两个他不认识的人,正在说什么项目的事,说到一半停了,等他进去。他进去,按了楼层,三个人一起看着楼层数字往上跳。
到了,他先出去,往工位走。
办公室这个时间人还不多,靠窗那排有两个人已经在了,其中一个在吃早饭,另一个盯着屏幕,手放在键盘上,但没在打字。程海走到自己的工位,把包放下,坐进椅子里。
椅子发出一声很轻的响。
他把电脑开机,等待的时候往窗外看了一眼。楼下是条街,早高峰刚过,人和车都少了一些。对面楼的玻璃幕墙反着光,把旁边一棵树的影子映进去,风一吹,影子跟着动。
屏幕亮了。
他打开昨天的文件,找到上次停下来的地方,看了一眼,然后把手放到键盘上。
今天应该能收尾。
二
程海打开文件,看了一眼上次停下来的地方,没有立刻动手,就那么坐着。
窗外那棵树的影子还在对面楼的玻璃幕墙上动。
他想起一年前,也是这个位置,也是这个窗户。那天下午,几个人把椅子拖过来围在一起,桌上摆着从楼下买回来的东西,有人拿了杯奶茶,有人拿了袋薯片,刘姐买了一盒泡芙,结果泡芙盒子打开发现压坏了两个。她盯着那两个压坏的泡芙看了一眼,说:“也能吃。”
就是那天下午,程海说:“你们有没有想过,如果能让人的品质直接看得见,会怎么样?”
当时脑机接口那边刚出了个新结果,神经信号的采集精度上了一个台阶,程海看完那篇报告,脑子里有个东西一直转,转了两天,转到那个下午才说出来。
他说:“不是测谎,不是情绪识别,是品质。一个人诚不诚实,善不善良,有没有耐心,这些东西其实都有对应的神经模式,现在的技术已经能采集到了,剩下的问题是怎么把它变成别人能直接感受到的东西。”
有人问:“怎么个直接法?”
程海说:“就是看一眼就知道。不需要相处,不需要对话,看一眼这个人,就能感受到他是个什么样的人。”
薯片的声音停了一下。
然后有人说:“这个有意思。”
后来他们把这个想法整理成了一份提案,程海写的,写了三稿,第一稿太技术,第二稿太飘,第三稿交上去,一周后被叫去开会,会议室里坐了他没见过的人。再后来项目组成立,程海负责映射层的设计,技术部那边来了五个人对接硬件。
这一年里他们遇到的麻烦比预想的多很多。
最早的问题是信号噪声。神经信号本身就很微弱,采集的时候环境干扰极大。早期的版本,测试者只要动一下头,信号就会出现漂移,漂移一大,映射出来的形象就会抖,像是信号不好的老电视。技术部的陈工为了这个问题连续好几周都没怎么回家,最后是在信号处理层加了一套自适应滤波,才把抖动压下去。
然后是跨个体的一致性问题。同样是“诚实”这个品质,不同的人神经激活的模式不完全一样,早期的映射在一个人身上校准好了,换一个人就会偏,偏得厉害的时候,诚实的人映射出来的形象反而显得很奇怪,像是在撒谎。这个问题折腾了将近两个月,最后用的是大样本聚类,把个体差异压进一个可接受的范围里。
延迟是最后一个拦路的问题,也是最难的一个。映射形象需要实时跟随神经信号变化,延迟太高,形象的变化就会滞后于人的状态,看起来像是在演戏。早期版本的延迟在两百毫秒左右,这个数字在视觉上非常明显,测试者普遍反映看着不舒服,有种说不清的违和感。把延迟压下去需要重新设计整个渲染管线,这件事技术部做了四个月,上周发来消息说压到了八毫秒。
程海当时在工位上看到那条消息,坐了几秒,然后站起来去接了杯水。
他把思绪收回来,发现自己一直盯着屏幕,但什么都没输入。
这时候旁边传来椅子的声音,他转头,王浩来了,把包往桌上一放,外套搭在椅背上,坐下来,看了程海一眼。
“来了。”
“来了,”程海说,“昨晚睡得怎么样?”
“还行。”王浩已经在开电脑了,“你今天开始写映射表?”
“嗯,”程海说,“你那边数据集准备好了?”
“上周就好了,”王浩说,“你要用直接拉取,我把路径发你。”
“好。”
两个人就都不说话了,各自看着自己的屏幕。办公室里陆续有人进来,有人去倒水,有人在跟人说什么,声音很低。窗外那棵树的影子还在玻璃幕墙上,风停了,影子也停了。
程海把手放到键盘上,开始工作。
三
程海打开映射表的主文件,看了一眼结构,然后打开旁边一个文档,那是他之前整理的设计逻辑,他想再过一遍,做这种工作,细心点准没错,不然做到一半做错了就尴尬了。
最初的方案是直接调控感受。品质信号采集到之后,直接刺激观察者对应的神经区域——看到诚实的人,愉悦回路激活;看到恶意,厌恶回路激活。干净,直接,效果可预期。
但这个方案在内部讨论的时候被否掉了,否得很快。有人说,这跟给人下药有什么区别?程海当时没说话,但他觉得这个比喻是对的。直接调控感受,跟注射多巴胺一样,是看起来没问题的说法,但细想觉得可怕。
所以最后用的是美学映射。
逻辑是这样的:人对美丑有天然的感受,看到美的东西会舒服,看到丑的东西会不舒服,这个反应是自发的,不是被强制的。那么只需要把品质翻译成视觉形象,好的品质对应美的形象,坏的品质对应丑的形象,中性的品质对应中性的形象,剩下的交给观察者自己的感受系统去处理。
而且这套系统会学习。每个用户的美学偏好不完全一样,系统会在使用过程中逐渐摸清楚,然后在一个合理的范围内做微调。不是改变映射的方向,只是调整形象的具体呈现,让它更贴近这个用户觉得美的那个版本。
程海看完,关掉文档,打开映射表。
第一组,女性,令人不舒服的形象。
这部分他昨天已经想得差不多了。不协调的五官比例,皮肤状态差,体态失衡,服装和身体之间没有呼应关系。他把几个参数填进去,调了一下权重,觉得差不多,提交训练。
屏幕上出现一个进度条。
他从抽屉里拿出一块小牌子,放到键盘前面,上面写着:训练中,请勿触碰。然后站起来,往外走。
楼下的街这个时间人不多。程海出了楼,往右走,这条路他遛过很多次,走到头是个小广场,广场边上有几棵树,树下有长椅。他走到广场,在长椅上坐了一会儿,看着广场上的鸽子。鸽子有五六只,在地上走来走去,其中一只在啄一个塑料袋,啄了几下,没啄开,换了个角度,又啄了几下。
程海看了一会儿,站起来往回走。
回到工位,进度条走完了。他把牌子收起来,打开结果看了看,调了两个参数,觉得可以,关掉,打开第二组。
第二组,女性,中性形象。
这组最简单,干净,整洁,没有突出的特征,不引发明显的感受。他填完参数,提交,放上牌子,下楼。
这次他没去广场,就在楼门口站着,看对面路口的红绿灯变换。一辆自行车在红灯前停下来,骑车的人把一只脚踩在地上,低头看手机。绿灯亮了,他还在看,后面没有人催,他自己抬头看见了,蹬上去走了。
程海回楼上。
第三组,女性,令人舒服的形象。
他打开参数面板,开始填。
柔顺有光泽的头发,五官精致,皮肤状态好,身材比例匀称,服装和身体之间有一种呼应关系——裙摆的弧度,丝袜拉长腿部线条的方式,高跟鞋改变重心之后整个体态的变化。这些参数他填得很顺,因为这套语言是现成的,他只是在做翻译,把一套已有的视觉语言转成系统能读的格式。
填完,提交,放牌子,下楼。
这次他去了旁边的便利店,买了瓶水。在收银台前等的时候看见货架上有一排新上的饮料,包装是那种很鲜的绿色,他拿起来看了看,放回去了,还是买了水。
回到工位,检查结果,微调了一个参数,关掉。
女性部分,完成。
他往椅背上靠了靠,看了眼时钟,十一点五十。
王浩这时候转过来:“去吃饭?”
“去,”程海站起来,“你今天吃什么?”
“不知道,看看再说。”
两个人一起往外走。食堂在二楼,这个时间刚开始有人来,还不算挤。程海打了份盖浇饭,王浩要了面,两个人找了个靠窗的位置坐下。
吃了一会儿,王浩问:“上午怎么样,顺利吗?”
“相当顺利,”程海说,“女性部分做完了,下午把男性做完,就可以开始封装了。”
王浩点了点头,夹了口面:“那今天能收尾了。”
“能。”程海说。
窗外能看见楼下的街,午饭时间人多了一些,有人从包子铺出来,手里拿着纸袋,边走边吃。程海看了一眼,低头继续吃饭。
四
下午的阳光斜进来,把程海工位旁边的地板切出一条亮边。
男性部分,他从令人不舒服的形象开始,填参数,提交,放牌子,下楼。回来检查,没问题。中性形象,同样,填参数,提交,放牌子,下楼。这次他在楼下站的时间稍微长了一点,广场那边有人在遛狗,一条很小的狗,跑得很快,绳子绷得直直的,主人被拽着小跑。程海看了一会儿,上楼。
中性形象的结果出来了,没问题。
他把牌子收起来,打开第三组的参数面板。
男性,令人舒服的形象。
他开始填。
二十分钟后他下楼,在便利店买了杯咖啡,在门口站着喝。楼对面有个外卖员停下来看地图,看了一会儿,掉头往另一个方向去了。程海喝完咖啡,把杯子扔进旁边的垃圾桶,上楼。
进度条走完了。
他坐下来,把牌子收起来,打开结果。
屏幕上跳出一个红色的提示框。
他愣了一下,点开。
训练异常终止——数据集样本量不足,模型过拟合,置信度低于阈值,建议检查数据源。
他盯着这行字看了几秒,然后转头:“王浩。”
王浩抬起头:“怎么了?”
“男性美这组报错了,”程海把屏幕转过去,“过拟合,说数据量不够。”
王浩皱了下眉,把椅子滑过来,看了看:“不对啊,这个分类我记得数据量不小的。”他拉过来自己的电脑,打开数据管理后台,查了一会儿,“我这边显示正常啊,接口传过去的量应该够的。”
两个人对着两块屏幕排查了一会儿,数据管道没问题,格式没问题,传输没问题。
“那就是数据本身的问题,”王浩说,他拿起手机,“我打给数据公司问一下。”
电话打过去,那边接了,王浩说明情况,对面让他把AI打标的工作报告发过去,王浩发了。等了几分钟,对面回来了,声音很轻松。
“老兄啊,”对面说,“这不是我们的问题,你看你们的报告,这个分类下面,肌肉男这个标签,数据量很大的,怎么说没有呢?是你们自己分类的时候没归进去吧。”
王浩把手机递给程海。
程海接过来:“这个不能算,”他说,“肌肉这个方向是中性的,有人觉得好看,有人不觉得,顶多算一种特化方向,不能代表整个分类。”
“那你举个例子,”对面说,“什么样的才算?”
程海张了张嘴。
窗外有辆车按了一声喇叭,然后没有声音了。
“那,”对面的声音还是很轻松,“就不是我们数据的问题了,你们内部自己解决吧。”
电话挂了。
程海把手机还给王浩,坐回椅子里。
他看着屏幕上那个红色的提示框,想了一会儿。好像是这样的。他在脑子里过了一遍,想找出一个反例,一个能放进这个分类里的形象,清晰的,没有争议的,像女性那组一样顺手的。
没有。
他又想了一会儿。还是没有。
那就从中性里面挪一部分过来。他打开中性形象那组的数据,翻了翻,把里面相对好看的挑出来,准备归到美的分类里。但他看着这些数据,发现幅度太小了,中性就是中性,好看一点的中性还是中性,硬要把它归到美的分类里,和女性那组一比,落差太大,整个映射会失衡,观察者感受到的不是美,是将就。
他把那些数据放回去。
“怎么处理?”王浩问,“空着肯定不行,会一直报错的。”
“我知道。”程海说。
“要不,”王浩想了想,“镜像女性那部分?把那边的参数拿过来用,反正女装就是这个道理,男用户肯定没意见的。”他看了眼时钟,“快点弄吧,封装晚上就要开始了。”
程海点了点头。
他打开女性美形象那组的参数,复制,粘贴到男性美这边,做了几处调整,提交训练。进度条开始走。
他放上牌子,但没有站起来。
窗外那条亮边已经移到墙上去了,下午的光变得低了一些,颜色也深了一点。程海看着进度条,一格一格往前走。
王浩已经转回去继续工作了,键盘的声音很均匀。办公室里有人在接电话,声音压得很低。
程海把手放到桌上,等着。
五
训练完成的提示音响的时候,程海正在看窗外。
他转回来,点开结果,扫了一遍,没有异常,置信度在正常范围内。他关掉结果窗口,开始打包文件,检查了一遍目录结构,压缩,发给对接的同事,然后打开训练报告,点了打印。
打印机在他工位斜后方,他走过去,等着报告一页一页出来,把几张纸整理好,回到工位,夹进文件夹里。
王浩那边也差不多了,打印机又响了一阵。
“完了?”王浩问。
“完了。”程海说。
王浩把自己的报告整理好,往椅背上靠了靠,伸了个懒腰:“那就等检查了。”
“嗯。”
检查在小会议室,六点整。
项目组的人陆续进来,把各自的文件夹放在桌上。程海坐在靠墙的位置,把文件夹放在面前,翻到第一页,等着。
领导姓张,进来的时候手里拿着一杯茶,在主位坐下,扫了一眼在场的人,说:“那开始吧。”
检查从硬件组开始。张工翻着报告,不时问一两个问题,对方回答,他点头,翻下一页。信号采集模块,渲染管线,个体差异补偿算法,一项一项过,没有大问题,偶尔有几个参数被要求说明一下,说明完了,继续往下。
轮到王浩,数据打标的部分,张工看了看,问了一个关于样本分布的问题,王浩答了,张工点头,好。
然后是程海。
张工翻开他的报告,从头开始看。程海坐着,看着张工的手在纸上移动。前几页翻得很顺,张工偶尔点一下头。翻到后半段,他的手停了。
他皱起眉,把那页报告往前推了推:“这个,”他抬头看程海,“男性美这组,训练操作是怎么回事?”
程海把整个过程讲了一遍。数据量不足,排查,打电话给数据公司,对方的回应,最后镜像了女性美的参数。
张工听完,把报告放下,看着程海,脸上是那种还没有发作的表情。
“怎么可能?”他说,“亏你还是技术出身。”他把报告推到一边,往椅背上靠了靠,“我给你举几个例子,比如——”
他停了一下。
“比如。”他又说了一遍。
会议室里没有人说话。空调的声音很低,均匀。
张工端起茶杯喝了一口,把杯子放回桌上,发出一声很轻的瓷器碰桌面的声音。他看着桌面,没有看任何人。
沉默持续了大概十秒。
“好吧,”他说,“这个问题我去问一下技术部。”他合上程海的报告,把它推到一边,“封装推迟,今天先到这里,散会。”
椅子响,人开始站起来。程海把文件夹收起来,跟着其他人往外走。走廊里有人在小声说什么,他没听清。
他往电梯走,按了下行的按钮,等着。
电梯门打开,他进去,门关上,里面只有他一个人。
不锈钢门板上有他的影子,模糊的,他看了一眼,然后看着楼层数字往下跳。
六
程海回到工位,把文件夹放进抽屉,关掉电脑,收拾包。
动作很慢,不是因为有什么要收拾的,只是慢。他把桌上的咖啡杯拿起来,发现是空的,放回去。把那块“训练中,请勿触碰”的牌子从抽屉里拿出来看了一眼,放回去。
王浩已经走了,工位上的椅子没有推回去,斜着。
程海把包背上,往外走。
这是他最近半年头一次这么早出公司。天还没黑,楼下的街还亮着,人比他平时下班的时候多很多。有人推着自行车,有人站在路边等人,包子铺已经关门了,卷帘门拉下来,门缝里透出一点灯光。
他走到空轨站,刷卡进站,站台上人不少。列车来了,他上去,找了个靠窗的位置坐下。
列车出了城区,天色开始变,西边的云压得很低,橙色的,往城郊的方向烧过去。程海看着窗外,那条河又出来了,这个时间河面的颜色和早上不一样,深一些,像是沉了什么东西进去。
下一站,车门开了,一群孩子涌上来。
声音一下子大了很多。程海转过头,看见一群十四五岁的少年男女,脸都红着,说话声音很高,互相推搡,抢着找位置坐。女孩子们穿着裙子,各种颜色,有人的裙摆还没整理好,坐下来之后用手压了压。男孩子们穿着西装,领带有的歪了,有的已经塞进口袋里了,头发也乱了,但没有人在意。
看起来是刚散场的舞会。
程海看着这些孩子,想起下午那个红色的提示框,想起张工端起茶杯的那个动作。
他旁边坐着一个小女孩,裙子是淡黄色的,手里拿着一个发光的小玩意儿,正在摆弄。程海看了她一眼,说:“小朋友,你们是舞会散场了吗?”
小女孩抬头看了他一眼,点头:“对啊。”
“你们舞会上,男孩子除了西装,还有别的服装吗?”
小女孩想了想:“没有了,就西装。”
程海点了点头,看着窗外。
列车在丘陵里穿行,天色越来越深,树顶变成了剪影。他想,男孩子可以穿西装,女孩子也可以穿,这没什么问题,是实用的,是中性的。但女孩子可以穿裙子,舞会上的女孩子穿裙子是理所当然的,没有人觉得奇怪。那男孩子有没有什么对应的东西,只属于他们的,女孩子不会穿的,穿上去会让人觉得很美的?
他在想这个,旁边的小女孩戳了他一下。
“叔叔,”她说,“你为什么要问我这个问题啊?你在想什么呢?”
程海回过神,看了她一眼,想了想,说:“叔叔问你一个问题,如果你们舞会要挑一种衣服,专门突出男孩子的魅力,那种你们女孩子不会穿的,你觉得会是什么?”
小女孩认真地想了一会儿,然后站起来,跑到前面几排,跟一个女人说了几句话,那个女人低头听着,回答了什么。小女孩跑回来,坐下,看着程海。
“妈妈说她也不知道,”她说,然后歪着头,“叔叔,你想的问题好奇怪啊。”
程海笑了笑:“那就当叔叔在胡思乱想吧。”
小女孩盯着他看了一秒,觉得这个答案还算满意,转回去继续摆弄她手里的发光玩意儿。
列车开始减速,报站的声音响起来,程海站起来,把包背好。
“我要下车了。”他说。
小女孩头也没抬:“拜拜,叔叔。”
程海往车门走,门开了,他下去,站台上风很大,把他的头发吹乱了。列车关门,开走,车窗里那群孩子的声音被隔在里面,越来越远,然后看不见了。
站台上只剩他一个人。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!