3、向量化与嵌入模型:文本嵌入原理、金融领域嵌入模型选型
好,咱们进入第三章。这一章聊的是RAG系统的“翻译官”——向量化与嵌入模型。
你想想看,大模型再聪明,它也不认识原始文本。它只懂数字。所以,我们必须把金融研报、财报、新闻这些文字,翻译成一串串数字(也就是向量),模型才能理解。这个翻译过程,就是文本嵌入。
3.1 文本嵌入原理:从词到向量的魔法
说白了,嵌入模型就是把每个词、每个句子,映射到一个高维空间里的一个点。这个点用一串浮点数表示,比如 [0.12, -0.45, 0.78, ...]。
为什么这么做?因为语义相近的词,在空间里距离也近。比如“涨停”和“飙升”这两个词,它们的向量距离就很近。而“涨停”和“跌停”虽然字面相反,但在金融语境下它们经常一起出现,所以向量距离其实也不远。嗯,这里要注意,语义相似不等于逻辑相反。
我记得早期做文本匹配时,用的是词袋模型(Bag of Words)。那玩意儿太粗糙了,完全不管词序和上下文。“苹果好吃”和“好吃苹果”在它眼里一模一样。后来有了Word2Vec、GloVe,算是进步了,但依然是静态的——一个词只有一个向量,无法处理一词多义。
现在的做法,基本都是基于Transformer的上下文嵌入。比如BERT,它会给同一个词在不同语境下生成不同的向量。比如“银行”在“我去银行存钱”和“河边的银行”里,向量是完全不同的。这一点在金融领域特别重要,因为金融术语经常有歧义。
核心原理一句话:嵌入模型的目标,是让语义相近的文本在向量空间中距离更近,语义无关的文本距离更远。这个“距离”通常用余弦相似度来衡量。
3.2 金融领域嵌入模型选型
选模型这事儿,我踩过不少坑。市面上模型很多,但适合金融场景的,我重点说三个:OpenAI的text-embedding-ada-002、BGE系列、还有FinBERT。
3.2.1 OpenAI text-embedding-ada-002
这是目前最通用的选择。1536维,性能均衡,API调用简单。我在做通用金融问答系统时,首选就是它。
优点:
- 通用性强,中英文都支持得不错
- API稳定,延迟低
- 不需要自己部署模型,省心
缺点:
- 有成本,量大了烧钱
- 数据要传到OpenAI服务器,合规风险要注意
- 对金融专业术语的敏感度一般,比如“逆回购”、“MLF操作”这些词,它不一定能区分得很细
我的经验:如果你做的是面向C端的金融助手,对数据隐私要求不高,预算也够,直接用ada-002是最省事的。我曾经在一个项目里,用ada-002做了一版原型,三天就上线了。
3.2.2 BGE (BAAI General Embedding)
BGE是智源研究院开源的模型,中文场景下表现非常出色。我强烈推荐在金融场景里试试它。
优点:
- 中文语义理解能力强,尤其对金融术语
- 开源,可以本地部署,数据安全
- 支持多种尺寸(small、base、large),灵活
缺点:
- 英文能力稍弱于OpenAI
- 需要自己管理模型和推理服务,运维成本高一些
我曾经在一个内部研报检索系统里,用BGE-base替换了ada-002。结果召回率提升了8%,而且数据不用出公司内网,合规部门非常满意。
3.2.3 FinBERT
FinBERT是专门在金融语料上微调的BERT模型。如果你做的是非常垂直的金融任务,比如情感分析、实体识别,FinBERT是首选。
优点:
- 对金融文本的语义理解最深
- 在金融情感分析任务上,准确率比通用模型高10%以上
缺点:
- 模型较小,通用能力有限
- 主要支持英文,中文FinBERT效果一般
- 不适合做大规模检索,更适合分类任务
避坑指南:我曾经在一个项目里,想用FinBERT做检索。结果发现它生成的向量维度只有768,而且没有经过对比学习训练,检索效果远不如BGE。FinBERT更适合做“理解”,而不是“检索”。
3.3 向量维度与性能权衡
这是个经典问题。维度越高,信息越丰富,但计算成本也越高。维度越低,检索快,但可能丢失语义信息。
我直接给结论:
| 维度 | 代表模型 | 检索速度(相对) | 语义精度 | 适用场景 |
|---|---|---|---|---|
| 384 | MiniLM, BGE-small | 快 | 一般 | 对速度要求极高,精度要求不高的场景 |
| 768 | BGE-base, FinBERT | 中等 | 良好 | 大多数金融场景,平衡之选 |
| 1024 | BGE-large | 较慢 | 优秀 | 对精度要求高的场景,如法律合同检索 |
| 1536 | OpenAI ada-002 | 取决于API | 优秀 | 通用场景,不差钱 |
我个人习惯,在金融场景里,首选768维。为什么?因为768维在精度和速度之间取得了很好的平衡。你想想看,一个金融RAG系统,可能每天要处理上百万条查询。如果每个向量都是1536维,检索延迟会明显增加,而且存储成本也翻倍。
但如果你做的是高频交易相关的实时检索,那384维的模型可能更合适。虽然精度差一点,但速度快啊。嗯,这里要权衡。
我的建议:先用BGE-base(768维)做一版。如果精度不够,再升级到BGE-large(1024维)。如果速度不够,再降级到BGE-small(384维)。不要一上来就追求最高维度。
3.4 核心逻辑流程图
下面这张图,展示了从原始文本到向量检索的完整流程。我特意用SVG画了,方便你理解。
3.5 实战建议
最后,给你几个实战建议:
- 先小规模测试:不要一上来就全量数据跑。拿1000条样本,对比不同模型的召回效果。
- 关注领域术语:金融领域有很多特殊词汇,比如“非标”、“固收”、“量化宽松”。选模型时,一定要测试这些词的效果。
- 考虑混合检索:有时候,向量检索+关键词检索(BM25)效果更好。我做过一个项目,纯向量检索召回率只有75%,加上BM25后提升到了88%。
- 定期评估:模型会过时,数据会变化。建议每个月跑一次评估,看看召回率有没有下降。
一个小技巧:如果你用BGE模型,记得在输入文本前加上任务前缀。比如检索任务加“Represent this sentence for searching relevant passages:”,分类任务加“Classify this sentence:”。这个细节能提升3-5%的效果。
好了,这一章就到这里。向量化是RAG系统的地基,地基不牢,地动山摇。下一章我们聊聊检索策略,看看怎么从向量库里找到最相关的信息。