引言
SentiMarket这个项目的诞生,源于一年前我对自己许下的一个承诺。
作为我的本科毕业设计,它的初版虽然成功地实现了模型微调,但我内心始终有一份不安:为了赶上有限的截止日期,我最终选择了一条捷径——使用网络上公开的预标注数据集,而不是亲自完成数据标注这一最关键、也最耗时的奠基工作。
这个选择,让这个项目在之后的一年里,成为了我“没底气”的根源。我知道,它没有达到我设想中最好的状态,它的根基并不像我想象中那样坚实。在构思了许多新想法之后,我最终决定,在开启新篇章前,先回头将这个遗憾圆满。
我决定从头开始,亲自标注每一条数据,重新走一遍从0到1的全过程,去探索我最初的设想,在不妥协的情况下,到底能达到怎样的高度。本文将记录的,就是这段“回头路”的完整旅程:我如何通过高质量的数据、精细的优化和完整的工程实践,将一个学生时代的作品,打磨成一个在验证集上达到100%准确率的、专业的AI应用。
第一步:奠定基石 - 高质量的数据标注
项目的第一步,也是最关键的一步,是构建一个高质量的、值得信赖的数据集。我最终手动整理和标注了309条金融新闻标题。
我的核心标注原则是“寻找主导情绪”:在每一条新闻中,识别出最主要、最强烈的情感倾向,并以此为依据进行分类。当然,这个过程并非一帆风顺。最大的挑战来自于那些情感模糊或纯粹叙述性的新闻标题。
例如,“XX公司宣布将于下周公布财报”。这样一条纯粹的事实陈述,本身不带有明显的情感色彩。在“积极/消极”二元分类的框架下,我不得不依据最细微的语境线索,做出一个最接近的、主观的判断。这让我深刻体会到,高质量的数据标注,不仅是体力劳动,更是一种充满挑战的认知和解读过程。
经过这样的精细打磨,我最终获得了一个类别均衡的数据集,为后续的模型微调,奠定了坚实的基础。
第二步:初试牛刀 - 模型微调与初步评估
在准备好高质量的数据集后,我进入了核心的模型微调阶段。我对此抱有期待:我知道微调会提升性能,也相信我亲手标注的数据,会比网络上的通用数据集带来更好的效果。
但当结果出来时,我还是感到非常震惊。
模型在验证集上的准确率直接达到了90.3% 。相较于微调前约51%的、几乎是随机猜测的基线水平,这是一个质的飞跃。那一刻,我才真正切身体会到,高质量、高相关性的数据集,对于模型微调的成功有多么关键。它不是一个微小的变量,而是决定最终效果的杠杆。
当然,90.3%是一个令人兴奋的起点,但从下方的混淆矩阵中,我能看到模型依然犯了几个错误。这让我不禁思考:微调后的模型还能不能做得更好?
第三步:追求卓越 - 性能优化之旅
90.3%的准确率虽然很高,但混淆矩阵中那3个刺眼的“伪阳性”错误,让我无法接受。我坚信,基于我亲手标注的高质量数据,微调后的模型不应该犯这样的错误。
为了探究问题的根源,我决定不再只看最终的“积极/消极”标签,而是深入到模型为每一次预测给出的原始“概率分数”。我绘制了模型的精确率-召回率(Precision-Recall)曲线,希望从中找到线索。
结果令人惊喜。P-R曲线的AUC(曲线下面积)达到了完美的1.000。这意味着,我的模型本身,已经具备了将所有正负样本完美区分开的潜力!这说明问题并非出在模型的能力上。
真正的原因,在于默认的50%“决策阈值”过于草率。于是,我通过计算所有可能阈值下的F1分数,来寻找那个能最大化综合性能的“黄金分割点”。最终,我找到了它:0.7707。
当我将决策阈值从0.5调整为0.7707后,奇迹发生了。模型在验证集上的准确率,提升到了无可挑剔的100% ,之前所有的分类错误都消失了。
第四步:从代码到产品 - 部署的挑战
一个在本地能跑出100%准确率的模型,离一个任何人都能使用的产品,还有很长的一段路。这段“最后一公里”,往往充满了预想不到的工程挑战。
从解决Git LFS大文件存储的难题,到克服Hugging Face Spaces云端环境的依赖和版本冲突,再到为了一个完美的缩略图预览而与平台缓存“斗智斗勇”,这个过程,是对一个开发者全栈能力的真正考验。
最终,SentiMarket成功上线,拥有了支持三种语言、带有多组动态示例的专业界面,真正实现了从抽象代码到具象产品的跨越。
总结与展望
SentiMarket (Gen 1) 的旅程,始于一个弥补遗憾的简单初心,最终收获了一个远超预期的、专业且完整的AI应用。它证明了,以严谨的态度对待数据,以追求卓越的精神优化模型,并以用户为中心去打磨产品,完全有可能将一个看似简单的想法,做到极致。
但这仅仅是一个开始。未来,我将继续探索“SentiMarket宇宙”的更多可能性,包括能识别更复杂情绪的Spectra模型、能输出精确情感分数的Score模型等。如果您对我的旅程感兴趣,欢迎通过以下方式关注我的最新动态。为了获得更深入的幕后故事和开发日志,欢迎免费加入我的Patreon社区,成为第一批见证者。
- 在线体验Demo:
https://huggingface.co/spaces/charlieskyward/SentiMarket - 项目源码 (GitHub):
https://github.com/charlieskyward/SentiMarket - 在Patreon上关注我的旅程 (免费):
https://www.patreon.com/CharlieSkyward