4、Embedding模型:文本向量化原理、金融领域Embedding模型(FinBERT等)、模型评估与选择
好,咱们进入Embedding模型这一章。说实话,这是整个RAG系统的地基。地基不稳,上面检索、生成全白搭。我见过太多团队,花大把时间调Prompt、优化生成逻辑,结果检索出来的东西驴唇不对马嘴——问题就出在Embedding上。
4.1 文本向量化:把文字变成数学
先聊原理。文本向量化,说白了就是把一句话、一段文字,变成一个固定长度的数字列表。比如「今天股市大涨」变成 [0.23, -0.45, 0.78, ...]。这个数字列表就是向量。
为什么这么做?因为计算机不懂语义,只懂数字。你给它「金融」和「财经」,它不知道这两个词相关。但转成向量后,两个向量在空间里的距离很近,计算机就知道它们意思相近。
常见的向量化方法有几种:
- 词袋模型(Bag of Words):统计词频,不考虑顺序。太粗糙,基本不用了。
- TF-IDF:考虑词的重要性,但仍是稀疏向量,维度爆炸。
- Word2Vec / GloVe:静态词向量,一个词只有一个向量,无法处理一词多义。
- BERT类模型:动态上下文向量,同一个词在不同语境下向量不同。这才是主流。
我个人习惯用BERT类模型做Embedding。为什么?因为它能理解上下文。比如「银行」在「我去银行取钱」和「河岸银行」里,向量完全不同。这在金融场景里太重要了。
核心要点:Embedding的质量直接决定检索的准确率。好的Embedding能让相似语义的文本在向量空间里「抱团」,不相关的文本「各奔东西」。
4.2 金融领域Embedding模型:FinBERT与它的朋友们
通用Embedding模型(比如OpenAI的text-embedding-ada-002)在金融场景下表现如何?说实话,够用,但不够好。金融文本有大量专业术语、缩写、特定表达方式,通用模型没专门训练过,容易翻车。
举个例子。我做过一个项目,要检索「央行降准对债市的影响」。通用模型把「降准」和「降息」的向量搞得很近,结果检索出一堆降息的文章。你说这能忍吗?
所以,金融领域需要专门的Embedding模型。目前主流的有:
| 模型名称 | 特点 | 适用场景 |
|---|---|---|
| FinBERT | 基于BERT,在金融文本上继续预训练 | 金融新闻、研报、公告 |
| FinBERT-Tone | FinBERT的变体,专门优化情感分析 | 市场情绪分析、舆情监控 |
| Sentence-BERT (FinBERT版) | 用FinBERT做基座,训练句子级别的相似度 | 语义检索、问答匹配 |
| BloombergGPT | 基于金融数据从头训练的LLM,也可做Embedding | 综合金融任务,但模型太大 |
FinBERT是我用得最多的。它是在大量金融文本(财报、新闻、研报)上继续训练的,对「市盈率」、「ROE」、「流动性陷阱」这些词的理解比通用模型好得多。
避坑指南:我曾经以为FinBERT直接拿来用就行,结果发现它输出的向量维度是768,而我的向量数据库默认支持1536维。要么降维,要么换模型。后来我统一用768维的模型,省去很多麻烦。
4.3 模型评估:怎么知道Embedding好不好?
选模型不能靠感觉。我见过有人拍脑袋选了个模型,上线后检索准确率不到60%。怎么评估?几个关键指标:
- 检索召回率(Recall@K):前K个结果里,有多少是真正相关的。这是最直接的指标。
- 平均倒数排名(MRR):第一个相关结果排在第几位。排得越靠前越好。
- 归一化折损累计增益(NDCG):考虑排序位置和相关性等级。更精细的评估。
- 语义相似度一致性:人工标注的相似对,模型给出的余弦相似度是否与标注一致。
具体怎么做?我一般这么搞:
- 准备一个金融领域的测试集。比如1000个查询,每个查询对应5个相关文档。
- 用候选模型对所有文档生成向量,建索引。
- 对每个查询,检索Top-10结果,计算Recall@10、MRR等指标。
- 对比不同模型的表现,选最优的。
实战经验:我建议至少准备200个以上的测试查询,覆盖不同金融子领域(股票、债券、宏观、监管等)。否则评估结果可能有偏差。
4.4 模型选择:不是越贵越好
选Embedding模型,我总结了三步走:
第一步:明确需求
你的文本是什么类型?金融新闻?研报?还是内部数据?如果是中文金融文本,FinBERT中文版是首选。如果是英文,BloombergGPT或FinBERT英文版都不错。
第二步:考虑成本
通用模型(如OpenAI的)按token收费,量大了成本很高。FinBERT这类开源模型可以本地部署,一次投入长期使用。我有个项目,每天处理100万条文本,用OpenAI一个月要花几万块,换成FinBERT后成本几乎为零。
第三步:实测对比
别信宣传,自己跑一遍评估。我习惯用同样的测试集,对比3-5个模型,选Recall@10最高的那个。
注意:模型参数量不是越大越好。大模型推理慢、占用资源多。对于Embedding任务,BERT-base级别(约1亿参数)通常就够用了。我见过有人用GPT-3做Embedding,效果没提升多少,延迟却翻了好几倍。
4.5 知识体系图:Embedding模型全景
下面这张图,是我梳理的Embedding模型知识体系。从原理到选型,一目了然。
嗯,这张图基本把本章的核心逻辑串起来了。从原理出发,到金融领域模型,再到评估选择,最后落地实战。你想想看,每一步都环环相扣。
4.6 我的建议
最后说几句掏心窝的话。Embedding模型选型,别追求最新最贵。我见过有人一上来就上GPT-4做Embedding,结果延迟高、成本高,效果还没FinBERT好。适合的才是最好的。
另外,别忘了持续迭代。金融领域在变,新词、新概念层出不穷。模型需要定期用新数据微调或重新训练。我一般每季度评估一次,如果检索准确率下降超过5%,就考虑更新模型。
好了,这一章就到这。记住:Embedding是RAG的基石,花时间把这块搞扎实,后面的路会顺很多。