3. Embedding基础

在金融场景中,我们面对的不是抽象文本,而是研报、公告、财报、新闻、客服对话与监管文件。要让机器“理解”这些内容并完成检索、聚类、推荐与风控匹配,第一步就是把文本映射为可计算的向量,也就是Embedding。本节从词向量讲到句向量,再落到稠密检索与相似度度量,帮助你建立后续向量库与重排模块的数学直觉。

一、核心原理:从离散符号到连续语义空间

传统关键词检索把词视为离散符号,无法处理“营收下滑”与“业绩承压”这类同义表达。Embedding的核心思想是:把词、句、段落映射到同一个高维连续向量空间,使语义相近的对象在空间中距离更近。词向量阶段以Word2Vec、GloVe为代表,通过上下文共现学习每个词的稠密表示;句向量阶段则通过Pooling、Sentence-BERT或对比学习,把整句压缩为一个定长向量。

金融文本的难点在于:专业术语多、缩写多、时效性强,且同一词在不同语境下含义差异大。例如“头寸”在债券、外汇、期货语境下指向不同对象。因此,Embedding模型不仅要“懂语言”,还要在领域语料上微调,才能让“久期”“凸性”“信用利差”等概念在向量空间中形成合理的邻域结构。

文本到向量的语义空间映射 原始文本 “公司营收同比下滑” “业绩承压明显” “净利润不及预期” 词向量层 Word2Vec / GloVe 上下文共现学习 金融领域微调 句向量层 Pooling / SBERT 对比学习压缩 定长稠密向量 向量库 ANN索引 余弦/内积 Top-K召回 语义空间中的相似度关系 营收下滑 业绩承压 净利润下降 营收增长 利润改善 语义距离较远

二、方法流程:相似度度量与检索链路

得到向量后,检索的核心是“比较”。常见度量包括欧氏距离、余弦相似度与内积。在文本Embedding中,余弦相似度最常用,因为它只关注方向、忽略向量长度,适合处理长短文本差异。当向量已做L2归一化时,余弦相似度与内积等价,这也是很多向量库默认使用内积的原因。

稠密检索的典型流程是:离线阶段将金融文档切块、编码为向量并写入向量库;在线阶段将用户Query编码为同空间向量,通过近似最近邻(ANN)索引召回Top-K候选,再交给重排模型精排。金融场景中,Query可能是“某公司近三年现金流变化”,也可能是“某债券违约风险”,需要模型同时理解实体、时间与指标。

度量方式 公式直觉 适用场景 注意事项
余弦相似度 向量夹角余弦,关注方向 文本语义匹配、长短文本混合 需归一化,否则长度影响大
内积 方向与长度共同作用 已归一化向量、ANN索引加速 未归一化时偏向长向量
欧氏距离 空间直线距离 图像、聚类、低维嵌入 对量纲和长度敏感

三、案例场景:金融研报检索中的Embedding选择

假设我们要构建一个研报检索系统,用户输入“新能源车补贴退坡对电池企业利润的影响”。如果只用关键词,可能召回大量含“补贴”但不相关的宏观新闻。使用句向量后,模型会把“补贴退坡”“利润承压”“电池成本”等语义相近的段落拉近。

实践中,常见Embedding模型可分为三类:通用模型如text-embedding-3、BGE、GTE;多语言模型如m3e、multilingual-e5;金融领域模型如FinBERT衍生句向量、BloombergGPT相关嵌入。选择时需关注维度、最大输入长度、推理成本与领域适配度。例如BGE-large-zh在中文语义检索上表现稳定,而金融领域微调模型在术语匹配上更精准。

# 以sentence-transformers为例,加载BGE模型并编码
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('BAAI/bge-large-zh-v1.5')
texts = ["公司营收同比下滑", "业绩承压明显", "净利润不及预期"]
embeddings = model.encode(texts, normalize_embeddings=True)
# 归一化后,内积即余弦相似度
scores = embeddings @ embeddings.T
print(scores)
提示:金融文本常包含表格、数字与单位。编码前建议做结构化预处理,把“营收:12.3亿元”转为“营收 12.3 亿元”的自然语言片段,避免数字被切碎导致语义丢失。

四、误区与复盘:别让向量“看起来像”却“搜不对”

  • 误区一:维度越高越好。高维可能带来“维度灾难”,检索速度下降,且并非所有任务都受益。金融短文本用768维通常足够。
  • 误区二:忽略归一化。若使用内积检索却未归一化,长文档会因向量模长更大而获得虚高分数。
  • 误区三:用通用模型直接处理金融术语。“久期”与“持续时间”在通用空间中可能很近,但在金融语境下含义完全不同,需领域微调或加入业务词典。
  • 误区四:只做向量召回,不做重排。稠密检索擅长语义召回,但精度有限,金融合规场景必须叠加Cross-Encoder重排与规则过滤。
复盘建议:上线前用真实Query构造评估集,分别计算Recall@10、MRR与NDCG。若Recall高但NDCG低,说明召回阶段尚可,重排需要加强;若Recall本身低,则应检查切块策略、模型领域适配与相似度度量是否匹配。

理解Embedding的本质,是在“语义空间”中建立可计算的相似性。词向量解决词的表示,句向量解决整句压缩,稠密检索则把这种表示用于大规模召回。掌握余弦相似度与内积的关系,选对领域模型,并配合重排与评估,才能让金融文本检索从“关键词匹配”走向“语义理解”。