新年后第一周的周三,林晨召开了新团队的正式启动会议。
会议室里坐了二十个人。陈铭坐在左手第一排,面前是打开的笔记本电脑。张雨坐在陈铭旁边,手里端着一杯还在冒热气的咖啡。李婷负责投屏,正在调试ppt的显示比例。其他人依次坐在长桌两侧,有人拿着笔记本,有人只带了手机,有人面前什么也没有——新人还不知道该带什么。
林晨站在投屏前,第一页ppt上只有一行字:
FinGpt:金融大模型的微调项目,代号FinGpt。目标:在13b基座模型上,通过金融领域数据微调,实现金融场景下超越通用模型30%以上的效果。
他拿起马克笔,在旁边的白板上写下了三个词:数据、标注、评测。
这三个词就是FinGpt的全部。他转过身,数据质量决定模型能力的上限。标注精度决定微调效果的天花板。评测标准决定我们是否真的比别人好。三个环节,任何一个掉了链子,整个项目就是白做。
他花了四十分钟讲解技术方案。从基座模型选型——为什么选13b而不是7b或70b,到LoRA的参数设置——rank、alpha和dropout的初步配置,再到训练方案——8张A100的并行策略和预估训练时间。
数据组负责收集和清洗金融语料。来自金融部门的研报数据、内部研究报告和客户问答记录,总量超过五十万条。但林晨对数据组说了一句让数据组长有些意外的话:五十万条太多了。大部分是垃圾。你的第一件事不是收集更多数据,而是删数据。
删多少?数据组长问。
删到剩下五万条。每一轮删完之后让我看删除记录,我要知道哪些被删了、为什么删。删数据比加数据更需要判断力。
标注组负责对筛选后的五万条核心数据做人工标注。标注不是贴标签那么简单——金融场景下的标注需要专业知识。每条数据至少由两个标注员独立标注,不一致的需要第三方仲裁。标注标准要用金融从业者的专业能力作为参照,不能用通用的众包标注。
评测组由张雨牵头,负责构建专门的金融评测集。张雨在会前已经把方案发给林晨了——评测集覆盖八个金融子任务,从金融问答到研报摘要,从风险提示到合规检查。每个任务有独立的参考答案和评分标准,不依赖通用评测集。
通用评测集里的金融题太基础了,张雨对着ppt解释说,比如mmLU里的金融题考的是什么是通货膨胀——这种题目只测了基础知识,完全区分不出模型在真实金融场景下的能力。我们自己的评测集要能测出——模型能不能读懂一份四十页的研报,能不能从一个两百页的招股说明书里找到关键风险提示。
这个工作量多大?林晨问。
很大。评测集每道题都需要专业金融人员审核——不是标注员,是真正的金融从业者,分析师级别的。我已经跟金融部沟通过了,他们愿意出人配合。
好。评测的质量比速度重要,不用赶。
会议结束后,陈铭留了下来。
13b模型比7b大四倍,他说,8张A100做一次微调大约需要十二个小时。如果效果不好,我们要反复调参数,一轮一轮地试。一个礼拜最多跑两次。如果微调效果达不到30%怎么办?
那就分析原因,调整方法,再训一版。林晨把ppt关了,电脑盖合上,第一版达不到目标是正常的。重点是找原因——是数据的问题还是方法的问题。数据不好就继续删,方法不对就换方法。不要指望第一版就完美。
但时间呢?我们只有三个月。
三个月是底线,不是天花板。如果时间不够,我去跟陈博士争取更多时间。但前提是我们的每一版都要比上一版更好。他拍了拍陈铭的肩膀,别焦虑。做就行了。
接下来的两个月,是林晨在t厂最忙的一段时间。
早上七点到公司,晚上十一点离开。除了吃饭和必需的会议,几乎所有时间都花在了FinGpt上。苏婉有一次凌晨两点起来上卫生间,发现书房灯还亮着,推门进去看到林晨对着三篇论文的对比表格在记笔记,旁边半杯速溶咖啡已经干了,杯壁上结了一层褐色的垢。
她没有说话。去厨房换了一杯热水,放在他手边,然后默默退出去。
她知道林晨在做什么。他在做一个他真正相信的东西——不是被安排的任务,不是KpI要求的指标,而是一件他自己想做的事。这样的人不需要被催,也不需要被叫去睡觉。
第一个月底,问题出现了。
数据组把清洗后的数据交上来,林晨花了两个晚上逐一检查。他随机抽检了五百条标注结果,发现其中约百分之十五有明显问题——术语翻译错误、日期标注不一致、风险等级的判断缺乏一致性。
他把数据组长叫到会议室。
十五个点的错误率太高了。这些数据喂给模型,效果会大打折扣。
数据组长是一个从金融部门转来的分析师,叫刘明,做数据工作做了五年。他接过抽样报告看了两分钟,表情从意外变成了认同。
标注标准不够细。他说,比如风险等级——轻度、中度、重度——三个等级的边界没有用具体的案例去定义。标注员凭感觉判断,当然不一致。
那就用案例定义边界。找金融部的分析师,拿二十个典型案例,让标注员在标注前先通过测试——判对十八个以上的才能上岗。不合格的不能标。
这样成本会增加,时间也会拉长。
成本增加比模型效果差要好。林晨说,用高质量数据微调的效果,远超用大量低质量数据微调的效果。这个道理在投资里叫信号比噪声更重要——同样的本金,抓住正确信号比处理更多信息更有效。大模型也是一样:五万条精选数据,比五十万条杂音数据好一百倍。
刘明想了几秒,然后站起来:我重新设计标注标准。一周内给你新方案。
第二个周末,第二版标注标准出来了。每条数据类型都有详细的案例定义,边缘情况列了三十多条。标注员上岗前必须通过测试。林晨看了之后在方案上批了两个字:通过。
第二个月末,第一个微调版本的结果出来了。
13b模型在金融评测集上的总分超过通用模型22%。
陈铭看着评测报告,表情从紧张变成了轻松了八成。22个点,比7b的12个点高了不少。但没达到30%。
足够了。林晨说,第一版22%超出我的预期。证明了方向是对的——高质量数据确实能带来质的提升。接下来的8个点,靠优化数据质量、调整LoRA的rank参数、增加难样本的权重来补。
他在笔记本上写下了FinGpt v1的总结:
FinGpt v1:金融场景超通用模型22%。未达30%目标,但方向正确。数据分析显示微调数据中研报摘要风险提示两个子任务提升空间最大——这两块的数据噪声还比较高,需要进一步清洗。下一步:数据二次清洗完成后启动v2训练。
写完,他没有关灯。
打开IdE,开始写v2的数据清洗脚本。
v2训练期间有一个细节林晨记得很清楚。
那是训练的第三天晚上,陈铭在监控训练loss的时候发现了一个异常——验证集上的困惑度在某一个batch之后突然跳升了十几个点,然后又在下一个batch降了回来。这种脉冲式的波动在训练初期偶尔会出现,但这一波特别明显。
陈铭发消息问林晨要不要暂停训练检查一下数据。
林晨当时在书房里做投资复盘,看到消息后让陈铭把那个batch的数据样本发了几条过来。他看了一遍——那几条数据是一个研报里提取的长句被截断了,截断的位置正好卡在一个金融术语的中间,导致那半句话在语义上完全不通。模型读不懂这种碎片化的输入,困惑度自然就跳了。
不用停,这波是数据噪声不是训练问题。继续跑。等这轮训练结束后把那几条截断数据标出来,v2的数据清洗脚本里加一个长句完整的检查规则。
陈铭回。
然后林晨加了一句:你看到困惑度异常的第一反应是怀疑数据而不是怀疑模型,这个判断是对的。大模型的问题80%以上出在数据上。
这件事后来被陈铭在团队内部分享时提过——林总当时一眼就看出是数据截断的问题。林晨听到后说:不是一眼看出来的,是我之前在自己的投资系统里踩过一模一样的坑。数据噪声导致的信号偏差,在投资里叫过拟合,在大模型里叫困惑度脉冲——本质是同一件事。
他把这句话写在了自己的笔记本上。然后在旁边加了一条标注:把投资系统的方法论迁移到大模型——这是我最核心的竞争力,不是某一个具体的算法。