第二天下午,武佩兰端着一杯冰茶走到杜衡桌边。杯壁上挂满了水珠。
“鲜邻又在群里问了。”
她没坐下,“模型是十四个月前训的?”
“对,后来没人动过。”
“那就用五月的订单重新训一遍。数据是新的,总比去年的强吧?这周能出来吗?”
“脚本我还没跑过。”
“那就跑。”
她喝了口茶,“客户五月的销售月报我转你了,他们说推荐一点用都没有。你先把模型换了,我好有个交代。”
杜衡在笔记本上写:五月订单,重训。又在外面画了个框。
脚本比他想的难跑。数据路径写死在熊叙川的个人目录里,那个目录已经跟着他的账号一起停用了。几个依赖库装上新版本,第一步就报错。有一段特征处理只写了一半,后面跟着一行注释:“临时,以后改”。交接说明里一个字也没提。当天晚上他走的时候,楼下保安已经在锁侧门了。第二天晚上过了十二点,日志最后才跳出一行“训练完成”。
他没急着松口气,先跑测试集。新模型的命中率比旧模型低了一截。他以为自己把两个结果文件弄反了,重新跑了一遍,还是低。他又看了看新模型排出来的前几名:大米、酱油、卷纸。火锅底料不见了,西瓜也没有。
隔天上午他去找武佩兰。她刚挂了电话,凑过来看他的屏幕。
“新数据训出来,反而比旧的差?”
“嗯。”
“为什么?”
杜衡张了张嘴:“……我还不知道。”
武佩兰拿起冰茶,喝了一口又放下。“是不是参数没调对?以前熊叙川——”她停住了,摆摆手,“算了。你再看看,过两天我得给客户回话。”
回到座位上,杜衡盯着那两个数字。换了熊叙川,大概扫一眼就知道毛病在哪儿。很简单,看代码就知道了。可他已经看了两天代码。
他开始换参数。学习率调小,训练轮数加倍,去掉几个特征又加回来。每跑完一组,他就在笔记本上记一行:参数,结果。到了晚上,那一页记满了。数字有高有低,没有一次追上那个十四个月前的旧模型。
办公室的人陆续走光了。空调到点自动关了,屋里一点点闷起来。杜衡不想再看那一页,就点开了武佩兰转来的月报。
鲜邻五月的月报,第一页就是全月订单总数。
他看着那个数,这才发现,自己两天来跑了那么多遍,却从来没数过训练数据里到底有几条订单。他写了一条查询语句,把五月的订单从头到尾数了一遍。
结果出来了。两个数差得很远,远得不像误差。
他翻到新的一页,把两个数一上一下抄好,拿手机除了一下:零点六六几。训练数据里的五月,只有超市自己账上的三分之二左右。
他在这个数下面画了两道线。前面那一页参数,他没有再翻回去。