关谷的料理对决过去三天后,爱情公寓迎来了一位久违的住户——陆展博。
他是胡一菲的弟弟,在美国硅谷工作了好几年,这次回国休假一个月。本来计划好好放松,结果人还没倒完时差,公司的越洋电话就追过来了。
周六上午,乔卫东晨跑回来,看见一个戴着黑框眼镜、头发乱糟糟的年轻男人正坐在三楼楼梯口,抱着笔记本电脑疯狂敲代码,嘴里还念念有词。
“该死的……这个优化怎么就是不行……”
乔卫东认出这是陆展博,胡一菲给他看过照片。
“陆展博?”他停住脚步。
展博猛地抬头,眼镜滑到鼻尖:“你……你是?”
“乔卫东,新邻居。”乔卫东伸出手。
“哦哦!乔先生!一菲跟我提过你!”展博连忙合上电脑站起来握手,“她说你很厉害,什么都会!”
“过奖了。”乔卫东看了眼他的电脑,“工作很忙?”
“何止是忙……”展博苦着脸,“公司新项目,AI推荐系统优化,deadline就在下周。我都回国休假了,还被拉着远程debug……”
他看起来很疲惫,黑眼圈很重,身上的t恤皱巴巴的,一看就是熬了夜。
乔卫东想了想:“要不要来我那儿坐坐?我泡壶茶,你慢慢弄。”
“可以吗?不会打扰你吧?”展博有些犹豫。
“不会。”
五分钟后,两人坐在3603的客厅里。乔卫东泡了一壶普洱,展博重新打开电脑,屏幕上密密麻麻的代码让人眼花缭乱。
“具体是什么问题?”乔卫东给他倒了杯茶。
展博推了推眼镜:“是这样,我们在做一个电商平台的个性化推荐系统。传统的协同过滤算法准确率不够高,我们想引入深度学习,但训练成本太大,线上推理速度又跟不上……”
他说了一堆专业术语,语气越来越烦躁:“我试了三种模型架构,优化了七次参数,准确率才提升了0.3个百分点,根本达不到产品要求。老板说再搞不定就要换方案了……”
乔卫东安静地听着,偶尔点点头。等展博说完,他问:“能给我看看你们的数据特征工程吗?”
展博愣了一下:“乔先生也懂这个?”
“略懂一点。”乔卫东说,“以前投资过几家AI公司,看过一些。”
展博将信将疑,但还是调出了代码。乔卫东凑过去看,手指在屏幕上滑动,目光快速扫过一行行代码。
看了大概三分钟,他开口:“问题出在这里。”
“哪里?”
“特征交叉的方式。”乔卫东指着一段代码,“你们只用了一阶和二阶交叉,对于用户行为这种高维稀疏数据来说,信息损失太大了。”
展博眼睛一亮:“对!我也想过这个问题!但高阶交叉计算量太大……”
“可以用Fm(Factorization machines)。”乔卫东说,“或者更好的,deepFm,把深度神经网络和因子分解机结合起来。既保留了低阶特征交互,又能捕捉高阶非线性关系。”
展博张大了嘴巴:“deepFm……我听说过,但没实际用过……”
“现在用的人不多,但效果不错。”乔卫东拿过一张纸,开始画示意图,“你看,这里用dNN处理高阶特征,这里用Fm处理低阶特征,最后融合。这样既能保证效果,又能控制模型复杂度。”
他在纸上写下几个公式和架构图。展博看得如痴如醉,眼镜后面的眼睛越来越亮。
“还有这里,”乔卫东又指向另一段代码,“负采样策略可以优化。你们现在用的是随机负采样,效果不稳定。可以试试基于流行度的负采样,或者更高级的,对抗式负采样。”
“对抗式?”展博完全没听过这个词。
“简单说,就是用一个生成器来产生‘难负例’。”乔卫东又画了个图,“这样模型能学到更有区分度的特征。”
展博彻底服了。他从硅谷回来,自以为算是技术前沿的人,但乔卫东说的这些,有些他都没听过!
“乔先生,您……您这些是从哪儿学的?”他结结巴巴地问。
“多看论文,多实践。”乔卫东轻描淡写,“AI发展很快,每天都有新东西。不过万变不离其宗,底层逻辑是一样的。”
他喝了口茶,继续说:“另外,我觉得你们的方向可以调整一下。”
“怎么调整?”
“现在大家都在做精排,就是最后那一步的排序模型。”乔卫东说,“但真正决定推荐效果的,往往是前面的召回阶段。如果召回池里没有好东西,再怎么精排也排不出花来。”
展博猛点头:“对对对!我们cto也说过这话!但召回怎么做?我们试过ItemcF、UsercF,效果都一般……”
“试试多通道召回。”乔卫东在纸上又画,“一条通道做协同过滤,一条通道做内容匹配,一条通道做热点补充,还有一条……做探索。最后用一个简单的模型做融合,把各通道的结果汇总到召回池里。”
他边说边写,思路清晰得像在说今天吃什么。展博赶紧打开笔记本,疯狂记录,生怕漏掉一个字。
“探索通道很重要。”乔卫东强调,“现在的推荐系统太‘功利’了,只推用户可能点击的,导致信息茧房越来越严重。得适当推一些用户可能喜欢但没接触过的内容,打破茧房。”
展博停下笔,若有所思:“这个思路……我们产品经理肯定喜欢。他一直说要增加推荐的多样性……”
“技术要为产品服务。”乔卫东说,“但也要有前瞻性。我猜,你们接下来应该会做多模态推荐吧?把图像、文本、视频都融合进来。”
展博瞪大眼睛:“您怎么知道?这是我们下一个季度的规划!”
“趋势而已。”乔卫东笑,“现在纯文本的推荐已经到瓶颈了,多模态是必然方向。不过要做好不容易,跨模态对齐是个大问题。”
“对对对!”展博激动起来,“我们就在为这个头疼!图像特征和文本特征怎么对齐?用什么损失函数?”
“可以试试cLIp那套思路。”乔卫东说,“用对比学习,拉近相关图像和文本的距离,推开不相关的。不过具体到推荐场景,得做一些调整……”
他又讲了十几分钟,从技术细节讲到工程实践,从算法优化讲到系统架构。展博听得如痴如醉,笔记本上记满了密密麻麻的要点。
讲完后,乔卫东问:“听懂了吗?”
展博用力点头:“听懂了!而且……我有种醍醐灌顶的感觉!乔先生,您太厉害了!这些思路,比我们公司那些资深架构师都超前!”
“只是站在巨人的肩膀上。”乔卫东谦虚地说。
“不!您就是巨人!”展博站起来,深深鞠躬,“谢谢您!真的谢谢您!这些建议,够我消化一个月了!”
“能帮上忙就好。”乔卫东看了眼时间,“快中午了,你该吃饭了。”
“我不饿!我要把这些思路整理出来,马上开始改代码!”展博抱着电脑,眼睛放光,“乔先生,我能……我能经常来请教您吗?”
“随时欢迎。”乔卫东微笑。
展博千恩万谢地走了。回到3601时,胡一菲正准备叫他吃饭。
“展博,你跑哪儿去了?一上午不见人。”
“姐!我遇到高人了!”展博激动地说,“乔先生!他太厉害了!他给我讲的推荐系统思路,比我在硅谷听的顶尖讲座都牛!”
胡一菲挑眉:“乔老师还懂这个?”
“何止是懂!简直是大师!”展博手舞足蹈,“什么deepFm、对抗式负采样、多通道召回、多模态对齐……他全都门儿清!而且不是纸上谈兵,说的都是工程实践里的干货!”
吕子乔凑过来:“展博,你确定你说的是乔先生,不是某个大学教授?”
“大学教授都没他厉害!”展博斩钉截铁,“不行,我得赶紧去写代码!灵感来了挡不住!”
他冲回房间,“砰”地关上门。留下胡一菲和吕子乔面面相觑。
“得,又沦陷一个。”吕子乔耸肩,“乔先生的迷弟队伍又壮大了。”
……
接下来的几天,展博成了3603的常客。
每天早上,他准时抱着电脑来报到。乔卫东晨跑回来,就能看见他坐在门口等。两人一个讲,一个听,一个写代码,一个提建议,配合得居然很默契。
周三下午,展博遇到了新问题。
“乔先生,多通道召回我搭起来了,效果确实有提升。”他皱着眉头,“但线上服务延迟增加了30毫秒,这个产品不能接受……”
“服务架构怎么设计的?”乔卫东问。
“就是传统的微服务,每个召回通道一个服务,最后融合。”
“试试分级缓存。”乔卫东说,“热数据放内存,温数据放Redis,冷数据走db。另外,并行调用改成异步,最后用pletableFuture做同步。”
他给展博画了个架构图。展博边看边点头:“这个思路好!我回去就改!”
“还有,模型可以量化。”乔卫东补充,“浮点数转整型,推理速度能快一倍,精度损失很小。”
“量化我试过,但我们的模型太大了……”
“试试分层量化。”乔卫东又写了几行公式,“敏感层用8比特,不敏感层用4比特。这样既能压缩模型,又能保证效果。”
展博记下来,眼睛亮得像灯泡:“乔先生,您脑子里到底装了多少东西?”
“装了很多失败的经验。”乔卫东笑,“我以前投资的公司,踩过太多坑了。这些经验,现在倒是能帮到你。”
展博感动得不知道说什么好。
周五,展博的最新代码上线了。他紧张地守了一下午,直到晚上八点,数据终于出来了——准确率提升了5.2个百分点,服务延迟反而降低了15毫秒。
“成功了!成功了!”展博在3601的客厅里跳起来,抱着胡一菲转圈,“姐!我成功了!乔先生的思路太牛了!”
胡一菲被他转得头晕:“好了好了,知道你厉害了!快给乔老师报喜!”
展博这才反应过来,冲出门,跑到3603,把数据报表怼到乔卫东面前:“乔先生!您看!上线数据!效果远超预期!”
乔卫东看了看报表,点点头:“不错。不过这里,A\/b测试的置信区间还可以再收窄一点,样本量不够。”
“我明天就加!”展博现在是乔卫东说什么他听什么。
“另外,下周开始可以尝试在线学习了。”乔卫东说,“现在的模型是离线训练,更新频率太低。改成在线学习,效果会更好。”
“在线学习……我们还没做过……”
“我教你。”乔卫东说,“不过今天先庆祝吧。你熬了一周了,该休息休息。”
展博这才感觉到累。但他很兴奋,兴奋得睡不着。
那天晚上,爱情公寓举行了一场小小的庆祝会。主角是展博,但大家都知道,幕后英雄是乔卫东。
“乔老师,我敬您!”展博举起果汁——他酒精过敏,“您不仅是我的技术导师,更是我的人生导师!我从您身上学到的,不只是技术,还有思考问题的方式!”
他说得很真诚。乔卫东和他碰杯:“是你自己努力。”
“不,没有您指点,我再努力也走弯路。”展博说,“乔先生,等我这个项目做完,公司肯定给我升职加薪。到时候我请您吃饭!吃大餐!”
“好,我等着。”乔卫东笑。
庆祝会到十点才散。展博回房前,忽然想起什么:“对了乔先生,我们公司最近在招人,您……您有兴趣吗?我可以内推!以您的水平,至少是首席科学家级别!”
乔卫东摇头:“不了,我现在想过点清静日子。”
“那太可惜了……”展博惋惜,“您这样的技术大牛,应该在更大的舞台上……”
“每个人都有自己的舞台。”乔卫东说,“这里就是我的舞台。”
展博似懂非懂地点点头,走了。
乔卫东回到房间,手机刚好响了。是他在北京投资的一家AI公司的cto打来的。
“乔总,您上次说的那个多通道召回架构,我们试了,效果确实好!不过在线学习那块,还得请您再指导指导……”
乔卫东耐心地讲了半小时。挂电话后,他站在窗前,看着夜色。
前世,他也曾经像展博一样,为了一个技术难题熬通宵,为了0.1个百分点的提升兴奋不已。后来钱越赚越多,但那种纯粹的快乐反而少了。
现在,通过帮助展博,他好像找回了那种感觉。
不是为钱,不是为名,只是为了解决问题本身带来的成就感。
手机又震了一下,是展博发来的微信:“乔先生,我决定了,我要把您教我的这些整理成系列文章,发在技术博客上。当然,会注明是您指导的!让更多人受益!”
乔卫东回复:“可以。不过别署我的名,用你自己的名字就好。”
“那怎么行!这是您的成果!”
“知识应该共享。”乔卫东打字,“谁的名字不重要,重要的是能帮到人。”
展博发来一个流泪的表情:“乔先生,您真是……圣人啊!”
乔卫东笑了。
圣人?不,他只是个活了两辈子的普通人。
但这一辈子,他想活得更纯粹一点。
帮助值得帮助的人,做喜欢做的事,过简单的生活。
这就够了。
窗外,上海的夜景依旧璀璨。但乔卫东觉得,这间小公寓里的灯光,比外面任何高楼大厦都温暖。
因为他在这里,找到了久违的“活着”的感觉。
不是作为富豪,不是作为投资人。
就是作为一个普通人,陆展博的邻居,爱情公寓的住户,乔卫东。
这就够了。