· liyu · algorithm · 11 min read · — 次浏览

文本向量化演进:从 Word2Vec 到现代 Embedding 模型

文本向量化是搜索、推荐与 RAG 共同的地基。本文快速回顾 one-hot、TF-IDF、Word2Vec 等经典方案的思路与局限,重点拆解现代 Embedding 模型的三大支柱:BERT 上下文表示、Sentence-BERT 句向量专用化与对比学习训练范式,并盘点 BGE、GTE、E5、OpenAI text-embedding-3 等主流模型与 MRL、指令前缀等关键技术。

一、文本向量化:一切语义检索的地基

无论搜索、推荐还是 RAG,第一步都是同一个动作:把文本变成向量。向量是语义的坐标——两个向量足够近,就意味着两段文本语义足够相关。上一篇写 TF-IDF 时讲了它作为稀疏向量化的角色,这篇文章把镜头拉远,看文本向量化的完整演进线:老方案是怎么想的、为什么被淘汰,以及现代主流 Embedding 模型到底强在哪。

二、快速回顾:前三代方案

第一代  one-hot / 词袋       → 向量有了,语义为零
第二代  TF-IDF / LSA         → 加权与降维,统计语义
第三代  Word2Vec / GloVe     → 分布式词向量,语义涌现
第四代  BERT → SBERT → 对比学习 → 现代 Embedding 模型(本文重点)

one-hot:词表多大,向量就多长,当前词的位置是 1、其余全 0。任意两个词都正交,「电脑」和「计算机」的相似度严格为 0——语义信息完全缺失。

TF-IDF:用词频 × 稀缺度给词加权,向量有了轻重之分,还能算余弦相似度。但它依旧建立在「词与词独立」的假设上,只是比 one-hot 聪明的统计,不是语义。

LSA(潜在语义分析):对词-文档矩阵做 SVD 降维,把共现模式压缩进低维潜空间,算是「语义」的第一次尝试,但线性假设太弱。

Word2Vec(2013):真正的分水岭。核心思想是 distributional hypothesis——看一个词的邻居,就知道它的意思。Skip-gram 用中心词预测上下文,训练出的词向量 300 维左右,「国王 − 男人 + 女人 ≈ 女王」的类比性质惊艳了整个行业。GloVe 补上全局共现矩阵的视角,FastText 用子词(n-gram)解决了未登录词。

但第三代有个致命天花板:静态。一个词只有一个向量,「苹果发布了新手机」和「晚饭吃个苹果」里的「苹果」共享同一个表示——一词多义无从谈起。静态词向量的时代,就此让位。

三、现代主流:三大支柱

支柱一:上下文动态表示(BERT)

BERT 用 Transformer 双向编码器替代查表:每个词的向量由整句话共同决定,一词多义自然解决——「苹果」在两句里得到两个不同的向量。这是现代 Embedding 的表达力来源(Transformer 内部机制见我之前写的注意力机制)。

但一个新的尴尬出现了:BERT 不是为「句向量」设计的。直接取 [CLS] 或对词向量做平均池化,得到的句子向量在语义相似度任务上效果很差,甚至不如训练了十年的 Word2Vec 平均。原因是各向异性(anisotropy):BERT 原始输出向量挤在一个狭窄的锥形区域里,随便两句的余弦相似度都高达 0.9+,区分度极低。

支柱二:句向量专用化(Sentence-BERT)

Sentence-BERT(2019)补上第二块拼图:用孪生网络微调 BERT,让「编码句子」本身成为训练目标。Query 和文档过同一个(或两个)编码器得到句向量,再用余弦相似度 / 三元组损失训练,使语义相近的句子在向量空间靠近。

这正是双塔架构在文本侧的应用:编码器把句子映射进同一个语义空间,检索阶段 Query 编码一次,候选向量全部离线预算好。

支柱三:对比学习——统一训练范式

现代 Embedding 模型几乎都用同一个损失函数:InfoNCE。给定查询 q、正样本 d⁺ 和一堆负样本 dᵢ⁻:

                exp( sim(q, d⁺) / τ )      ← 正样本得分
L = −log ─────────────────────────────
          Σᵢ exp( sim(q, dᵢ) / τ )         ← 正样本 + 全部负样本得分之和

直觉:在所有候选里把正样本「拔」到第一名。τ 是温度系数,控制难例的惩罚梯度;sim 通常是余弦相似度;dᵢ 依次取正样本与各个负样本。这个公式的威力全在负样本策略上:

  • In-batch Negatives:batch 内其他样本的正例全是我的负例,零成本拿到几十个负样本,GPU 利用率极高;
  • 难负例(Hard Negatives):用 BM25 或已有模型检索出「看着相关实则不是答案」的文档当负例,这是 BGE 系列效果好的关键——只见过随机负例的模型,分不清「相关」和「最相关」;
  • SimCSE:极端优雅的数据增强——同一句话过两次编码器(dropout 不同)互为正样本,无标注数据也能对齐空间。

四、现代模型全景与关键技术

主流玩家

闭源 API      OpenAI text-embedding-3(small/large)、Cohere Embed、Voyage
开源中文系    BGE 系列(智源)、GTE(阿里)、M3E、Conan
开源多语言    BGE-M3、E5 / multilingual-E5、Jina Embeddings

现代模型的训练配方大同小异:大规模弱监督预训练(标题-正文、问答对,数亿级)→ 高质量有监督微调(标注偏好数据 + 难负例)→(部分)指令微调与蒸馏。

关键技术一:指令前缀

E5 和 BGE 要求在文本前加任务指令:Query 侧加 为这个句子生成表示以用于检索相关文章:,文档侧不加。这不是玄学——它把「这段文本是要被检索的」显式告诉模型,在非对称检索(短 Query 对长文档)场景能带来可观的提升。用 BGE 系列不写指令前缀,等于白丢几个点的召回。

关键技术二:MRL 套娃表示(Matryoshka)

传统上维度定了就不能改。MRL 训练时让向量的前 k 维本身就可用:text-embedding-3-large 输出 3072 维,但你可以直接截断到 256 维,效果只掉一点点,存储和检索成本降 12 倍。这让「一个模型服务多档 SLA」成为可能——高价值场景用全长,海量场景用短维。

关键技术三:多路合一(BGE-M3)

BGE-M3 的「M3」是 Multi-Lingual、Multi-Functionality、Multi-Granularity:100+ 语言、8192 token 上下文,且一个模型同时输出三种检索向量——稠密向量(语义)、稀疏向量(类 learned sparse 的词权重)、ColBERT 式多向量(late interaction)。上一篇讲的稀疏 + 稠密混合检索,现在一个模型就能把两路向量都生产出来,再用 RRF 融合即可。

动手跑一个

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("BAAI/bge-small-zh-v1.5")  # 512 维中文模型

queries = ["为这个句子生成表示以用于检索相关文章:向量数据库怎么选?"]
docs = ["Milvus 适合亿级向量的分布式检索场景", "今天气温骤降注意保暖"]

q_emb = model.encode(queries, normalize_embeddings=True)
d_emb = model.encode(docs, normalize_embeddings=True)

scores = q_emb @ d_emb.T          # 余弦相似度(归一化后点积等价)
# → 文档 0 分数显著高于文档 1,尽管两者与 query 无词面重叠

五、怎么选:评估与选型速览

  • 看榜单:英文看 MTEB,中文看 C-MTEB。榜单只作初筛,拿自己的真实语料做一次召回评测永远比榜单可信;
  • 维度与成本:本地开发与中小规模用 bge-small(512 维)够用;大规模上线时用 MRL 截断降维,或直接选小模型 + 精排(交叉编码器重排)的组合;
  • 私有化约束:数据不能出内网就选开源系(BGE/GTE),CPU 或单卡即可推理;能接受 API 的场景,闭源模型省心且通常质量更稳;
  • 别忘记基线:专有名词、型号、代码检索,TF-IDF / BM25 稀疏向量至今仍然能打,纯 Embedding 方案反而容易在精确匹配上翻车。

六、小结

文本向量化的十年,是「语义」逐步进入向量的十年:one-hot 有了形式,TF-IDF 有了轻重,Word2Vec 有了分布式语义,BERT 有了上下文,而对比学习把这些原料锻造成了真正可检索的语义空间。现代 Embedding 模型的全部工作,归结起来就是一句话:让相关的文本靠近,让无关的文本远离——剩下的,交给向量检索。

配合本博客已写的向量数据库选型与 KNN vs ANN,从向量化到检索的完整拼图已经齐了。

Share:

回看感悟累计回看 — 次

加载中…

Back to Blog

Related Posts

View All Posts »

当双塔模型遇见 RAG:召回与检索,殊途同归

搜广推系统中的双塔模型和 RAG 中的向量检索,一个诞生于推荐系统,一个兴起于大模型时代。当我把两者的架构图放在一起时,突然发现它们竟如此相似——本质上都是在向量空间中寻找最近的"灵魂伴侣"。

TF-IDF 原理与应用:搜索打分与文本向量化的起点

TF-IDF 用「词频 × 稀缺度」给词打分,是信息检索绕不开的经典。本文快速讲透它的核心原理,重点展开两大应用:搜索系统里的相关性打分,以及把文本变成稀疏向量后的分类、相似度与关键词提取。

RRF 倒数排名融合:混合检索里的"排名仲裁者"

向量语义召回与 BM25 关键词召回的分数天然不可比,混合检索需要一个仲裁者。本文以混合检索为例讲解 RRF(Reciprocal Rank Fusion)算法的公式与 k 常数的数学直觉,并横向对比分数级融合、名次级融合与学习排序三类融合策略的取舍。