下一章 上一章 目录 设置
3、第一个算法分歧 ...
-
第二天下午两点,苏念准时推开了三教306的门。
陆寒舟已经在里面了。他坐在昨天那个位置,面前摊着一台笔记本电脑和几张写满代码注释的打印纸。窗外的光线比昨天暗了一些,云层压得很低,看起来像是要下雨。
苏念走过去坐下,从包里抽出两份东西。第一份是她昨晚整理好的数据清洗方案,一共四页纸,包含了数据字段定义、缺失值处理逻辑、异常值判定标准和标注规范。第二份是她从学校就业中心公开渠道下载的近三年毕业生就业数据样本,已经初步清洗过一轮。
“这是数据清洗方案。”她把第一份推过去,“清洗逻辑按照建模需求分了三层:第一层是格式标准化,第二层是缺失值补全,第三层是异常值剔除。另外我在最后附了一页数据字典,所有字段的类型、取值范围、业务含义都写清楚了。”
陆寒舟没有立刻看那份方案,而是先看了她一眼。
“你花多久做的?”
“昨晚回去之后,从八点做到凌晨一点。”苏念没打算掩饰投入的时间,“你说要跑一遍,我就跑一遍。”
陆寒舟没再说什么,低下头开始看她的方案。
教室里安静下来。苏念看着他一页一页地翻,翻到第三页的时候他的手指停了一下——那一页是她处理异常值的逻辑,她用的是基于三倍标准差和业务规则相结合的复合判定法,这在金融交易中很常见,但在校园项目里确实显得有些“过度工程”了。
他继续往下翻,翻到最后一页的数据字典时停顿的时间最长。苏念注意到他的目光在“字段12:实习经历关键词提取”那一行停留了很久。
然后他合上方案,把自己的电脑转向她。
“数据清洗方案没问题,可以直接用。”他说,“现在来看算法框架。”
屏幕上是一个已经搭好的代码框架,函数命名规范,注释清晰,模块划分干净利落。苏念虽然不精通编程,但她在投资工作中接触过足够多的技术尽调,看得出这不仅仅是“能用”的水平——这套框架的设计思路,放在创业公司的技术面试里也完全拿得出手。
“匹配算法的核心逻辑是这样的,”陆寒舟开始讲解,声音不大,但语速稳定,“基于用户的五维特征向量——专业、技能关键词、期望岗位类型、城市偏好、薪资下限——计算余弦相似度。冷启动阶段用问卷采集初始向量,后期用学生的点击行为和投递行为做隐式反馈加权更新。”
他停下来,看着苏念。
苏念在听。她听得很认真,但她的眉头微微皱了起来。
“算法层没问题。”她说,“但我有一个关于产品定位的问题。”
“说。”
“你这个方案是基于一个假设——学生的期望和企业需求之间,存在可计算的匹配关系。这个假设成立的前提是,企业发布的需求描述是准确的,学生填写的期望是真实的。”苏念顿了顿,“但实际情况不是这样。”
陆寒舟没有打断她。
“企业发布的岗位描述,超过百分之六十是HR模板改出来的,实际工作内容和描述之间差距很大。学生填的期望岗位类型,超过百分之四十是因为不知道能做什么所以随便选了一个大概方向。”苏念从包里抽出那张数据样本,“我昨天清洗这批数据的时候做了一个初步统计,大三学生中,有百分之三十二的人在求职意向一栏选了‘其他/待定’。这意味着,你的算法在冷启动阶段拿到的初始向量,可能有将近三分之一是无效数据。”
陆寒舟靠在椅背上,表情没有变化,但苏念注意到他的手指在桌面上轻轻叩了两下——这是她昨天观察到的,他在思考。
“所以你的建议是?”
“不做全量匹配,做细分场景切入。”苏念说,“不要一上来就做所有人的智能招聘系统,先做一个东西——校内兼职岗位的即时匹配。”
“为什么?”
“因为兼职岗位的需求更明确、容错空间更大、用户反馈周期更短。学生找兼职不在乎‘是不是最适合我的长线发展’,他在乎的是‘这个岗位今天发布,我明天能不能开始赚钱’。企业发兼职岗位不在乎‘候选人有没有五年规划’,他在乎的是‘这个人下周能不能来上班’。”苏念语速加快,因为她发现自己在说的过程中思路越来越清晰,“在这个场景下,匹配算法的核心指标不是‘长期匹配度’,而是‘即时可用性’——距离、时间段、技能标签的精确匹配。这是一个约束条件更少、数据噪声更低、更容易验证的场景。”
陆寒舟安静地听完了。
然后他说了四个字:
“太保守了。”
苏念的眉头皱得更紧了。
“你的逻辑是商业上的,不是技术上的。”陆寒舟说,“你觉得兼职场景更容易验证,所以应该从这里切。但是你有没有想过,做兼职匹配系统,和做一个真正的校园智能招聘系统,底层算法的复杂度差了一个量级。兼职匹配只需要做规则过滤加简单的相似度计算,而真正的招聘匹配需要处理冷启动、稀疏数据、多目标优化等一系列问题。”
他顿了一下,声音依然平静,但每一个字都带着某种不容置疑的力度。
“如果我先做兼职匹配,三个月后数据跑通了,我要从兼职匹配升级到全职招聘匹配,整个算法架构要推翻重来。这不是迭代,这是重做。”
“那如果一上来就做全职招聘匹配呢?”苏念反问。
“如果做成了,就是一个完整的、可扩展的产品。”
“如果做不成呢?”
陆寒舟看着她,没有立刻回答。
苏念替他说了:“如果做不成,你花了两个月时间写了一个跑不起来的算法,我的商业计划书写得再漂亮也没用。我们没有数据做训练,没有用户做验证,初赛都过不了。”
两个人之间的空气陡然冷了下来。
这不是讨论,这是对峙。
苏念知道自己现在面对的不是一个妥协型的人。陆寒舟做事的逻辑是从终局倒推的——他要做一个真正有技术壁垒的东西,而不是一个“够用就行”的产品。这个思维方式和她是完全相反的。她是投资思维,从风险出发,先找最小可行性方案,验证之后再逐步放大。他是技术思维,从架构出发,先搭好地基,然后在上面盖最高的楼。
这两种思维方式没有对错之分,但它们碰撞在一起的时候,产生的不是火花,是裂痕。
“我有一个提议。”苏念说。
“说。”
“我不要你相信我的商业判断,我要你自己看到数据的结论。”苏念从包里拿出笔记本电脑,打开,连上教室的Wi-Fi,“你不是说我的数据清洗方案可以吗?我现在就用就业中心三年的数据,跑一个对比模型。”
陆寒舟微微倾身向前。
“你跑什么对比?”
“两个场景的可行性评估。”苏念的手指在键盘上飞速敲击,她打开了学校的就业数据平台——这是她昨天申请的数据权限,用金融系学生的身份申请了校内研究用途,“第一个场景是兼职岗位匹配,约束条件少,数据密度高。第二个场景是应届生全职匹配,约束条件多,数据稀疏。我计算两个场景下,基于现有数据量,匹配准确率达到百分之六十以上所需的最少训练样本量。”
她说话的时候手指没有停。Excel打开,数据导入,公式编写,图表生成。一套动作行云流水,不像是在大学教室里临时起意的演示,更像是一个做了无数次交易数据分析的专业人士的本能反应。
陆寒舟安静地看着她的屏幕,一句话都没有说。
十分钟后,苏念把电脑转向他。
屏幕上是一张对比柱状图,两条柱子一高一低,差距明显。
“兼职场景,”她指着左边那条蓝色的柱子,“只需要八百条有效用户行为数据,就可以让匹配准确率达到百分之六十以上。南城大学每年有超过三千名学生做兼职,数据收集周期大约四周。”
她指向右边那条红色的柱子,高出了将近一倍。
“全职场景,需要至少两千条有效数据。问题是,应届生每年只有一届,一届大约两千四百人,但愿意在招聘平台填全信息的通常不到一半。这意味着,就算我们把所有数据都收集到,也可能达不到模型训练的最低门槛。而且这个场景的反馈周期长达三个月——学生投了简历之后,要等企业反馈,才知道这个匹配有没有效。”
她抬起头,直视陆寒舟的眼睛。
“我不是反对做全职招聘系统。我是说,现在做,技术可行性上存在风险。而我们有且只有一个月的时间来准备初赛。不能按期交付,比做出来的产品不够好,更致命。”
教室里安静了整整五秒钟。
窗外忽然传来一声闷雷,雨点开始稀疏地砸在玻璃上。
陆寒舟看着那张对比图,脸上的表情从“审视”慢慢变成了“重估”。他在重新评估她。不是她的商业判断——那个他已经大致了解了。他在重新评估她的思维方式。
她不是那种只会在商业计划书里写漂亮话的人。她会拿数据来说服你,而且她拿出来的数据,角度刁钻、逻辑严密、直击要害。
更重要的是,她刚才说的最后一句话,击中了他一个不愿承认的软肋。
他有完美主义的倾向。他想做最好的东西,哪怕超出当前资源约束也在所不惜。而她用一张十分钟画出来的图表告诉他:超出资源约束的野心,不叫野心,叫风险。
“你那个数据清洗方案,”陆寒舟开口,声音比刚才低了一些,“异常值处理那一页的复合判定法,不是学校里教的。你是从交易场景里学的。”
这是第二次了。
他又在踩那条线。
苏念没有回答。她把电脑慢慢转回来,关掉了图表。
“我在问你方案的事,”她说,“不是在问你我的数据清洗能力从哪来的。”
陆寒舟看了她几秒,嘴角动了一下——不是笑,而是一种更复杂的表情,像是某种确认。
“方案的事,”他说,“你的数据证明了兼职场景的可行性更高。但这不代表我放弃全职匹配的方案。”
“我没要你放弃。”苏念说,“我在要求你做阶段性取舍。先做兼职匹配的算法原型,数据跑通之后,在同一个架构上叠加全职匹配的模块。这样不会推翻重做,但也不用一上来就扛全部复杂度。”
陆寒舟沉默了很久。
久到苏念以为他要直接拒绝。
然后他说了一句让她意外的话:
“把你的数据清洗方案和刚才那张对比图发给我。”
“做什么?”
“改代码。”陆寒舟把电脑转回去,手指落在键盘上,已经开始动作,“为了拿助学金,过初赛的人是你。既然你的数据证明了做全职匹配有风险,我会调整算法框架,让它同时兼容两个场景的数据结构。”
他没有说“我同意你的方案”,但他用行动给出了回答。
苏念看着他专注敲代码的侧脸,心里涌起一种很奇怪的感觉。这个人确实像传说中一样不好相处——他不会轻易接受别人的观点,不会为了和和气气就放弃自己的判断。但他有一个比“好相处”更珍贵的品质:他尊重严谨的数据和严密的逻辑。
窗外雨声渐大。
苏念打开自己的电脑,开始整理刚才那组对比数据的详细说明。两人面对面坐着,各自工作,偶尔交流一两句技术细节或数据格式。教室里只有键盘敲击声和雨声交织在一起。
时间不知不觉过去了两个小时。
“差不多了。”陆寒舟合上电脑,“数据结构我已经调好了,明天开始写兼职匹配的核心模块。你那边需要给我一份兼职岗位的标准字段映射表。”
“明天给你。”
陆寒舟站起来,把打印纸整理好塞进电脑包。苏念也站起来,开始收拾东西。
“苏念。”陆寒舟忽然叫住她。
她抬头看他。
“你在就业中心的数据权限,”他顿了一下,“普通学生申请至少需要三到五个工作日。你昨天申请,今天就有了。”
苏念的手指攥紧了书包的肩带。
“你的辅导员帮你催的?”陆寒舟问。语气很随意,像只是随口一问。
“嗯。”苏念说,“李老师效率高。”
陆寒舟点点头,没再说什么。他拿起包朝门口走去,走到门口时停了一下,侧过头来看了她一眼。
那一眼的内容很复杂,苏念读不全。但她读出了一种东西——怀疑。不是恶意的那种,而是他在把一块拼图反复翻转,试图找到它应该卡入的位置。
门在他身后关上了。
苏念站在原地,心跳很快。
她知道问题出在哪了。就业中心的数据权限审批,李老师确实帮忙催了,但真正让审批通过的,是她填在申请理由里的那一行备注——“课题已获得校外投资机构前期研究支持”,后面跟了一个注册编号。
那个编号是她用来申请校园数据权限的“壳”。它指向一家真实存在的投资顾问公司,法人代表不是她的名字,但背后的实际控制人,是她。
陆寒舟如果去查那个编号——
苏念把书包拉链猛地拉上,快步走出了教室。
走廊里很安静,雨还在下,天色彻底暗了下来。她的手机震了一下,是陆寒舟发来的消息:
“数据清洗方案收到了。有一个问题:你第四页的异常值判定基准,用的是最近三年的市场波动区间。这个区间值不是从就业中心的数据里算出来的。你用的外部数据源是什么?”
苏念站在走廊尽头,握着手机,手指悬在键盘上方。
窗外雨越下越大。
她没有回复。