从 Word2Vec 到多模态:词嵌入技术的演进全景
用直观的方式,讲清楚嵌入模型每一代是如何工作的,以及它们为什么被发明出来。
引言:把世界翻译成数字
想象你要向一个外星人介绍地球上的所有东西------桌子、苹果、音乐、悲伤的感觉。外星人听不懂中文或英文,它只懂数字。
"嵌入"(Embedding)就是把人类理解的东西翻译成一组数字 ,让计算机能够处理它们。关键技巧是:意思相近的东西,它们的那组数字也要相近。
整个嵌入模型的历史,就是"怎么把意思翻译成一串数字"的进化史。这篇文章将带你走过从 2013 年到 2026 年的技术演进路线。
第一阶段:静态词嵌入(2013-2018)
为什么需要词嵌入?
在词嵌入出现之前,文本用"独热编码"(One-Hot Encoding)表示:
"猫" → [0, 0, 0, 1, 0, 0, ...]
"狗" → [0, 1, 0, 0, 0, 0, ...]
这种方式有三个致命问题:
- 维度灾难:词汇表通常是 10 万~300 万维,极其稀疏
- 语义鸿沟:任意两个词的向量正交,"猫"和"狗"的相似度为 0
- 无法泛化:模型无法从"猫吃鱼"泛化到"狗吃肉"
词嵌入将每个词映射为一个低维稠密向量(通常 100~300 维),语义相近的词在向量空间中距离更近。
Word2Vec --- 用上下文猜词
核心假设:一个词的含义由它的上下文决定(Distributional Hypothesis)。
Word2Vec 像一个用"放大镜"(滑动窗口)读书的学生。它用一个窗口从左到右扫描语料库,每次看几个词,任务是:给你中间的词,猜它周围是什么词。
"我每天早上喝一杯热 _____"
根据"我""每天""早上""一杯""热",猜出横线处应该是"咖啡"或"茶"。它读了几十亿个这样的句子,渐渐学会了:"咖啡"和"茶"经常出现在相似的场景中 → 所以它们的向量应该很接近。
Word2Vec 有两种架构:
| 方式 | 意思 | 训练速度 | 擅长 |
|---|---|---|---|
| Skip-Gram | 从中心词猜周围词 | 较慢 | 罕见词,向量质量高 |
| CBOW | 从周围词猜中心词 | 较快 | 常见词 |
训练完成后,我们把整个神经网络扔掉,只保留隐藏层那 300 个数字------那就是每个词的嵌入向量。
神奇的效果:词向量之间可以做数学运算:
"国王" - "男人" + "女人" ≈ "女王"
"巴黎" - "法国" + "意大利" ≈ "罗马"
局限:每个词只有一张"名片"。"苹果"在水果摊和手机店里的意思完全不同,但 Word2Vec 给它们的向量完全一样。
GloVe --- 统计全班投票
GloVe(Global Vectors)的思路不同:它统计所有词在整个语料库中是怎么一起出现的。
读完整本书后,GloVe 构建了一本"共现字典":
"冰" "固体" "液体"
"水" 568 120 340
"石头" 2 310 5
"GloVe 发现了一个规律:如果'水'和'冰'共现 568 次,而'石头'和'冰'才共现 2 次,那'水'和'冰'的关系就更近。"它调整每个词的向量,让向量之间的距离反映这些共现次数。
FastText --- 拼积木学单词
Word2Vec 遇到从未见过的词(比如拼写错误的 "wonderfull")就无计可施------这个词没有向量。
FastText 想了个聪明办法:不按词发名片,按"小积木"(字符 n-gram)发名片。
"running" = v(<ru) + v(run) + v(unn) + v(nni) + v(nin) + v(ing) + v(ng>)
词的向量 = 所有碎片向量的和。这带来三个好处:
- 拼错也不怕:"wonderfull" 和 "wonderful" 大部分碎片是一样的
- 学新词很快:包含见过的碎片就能猜出意思
- 形态丰富的语言也能处理:土耳其语一个词根能衍生出几百个词,但它们共享大量碎片
第二阶段:上下文词嵌入(2018-2020)
ELMo --- 同一个词,不同脸
ELMo 解决了早期词嵌入最大的问题:一词多义。
"bank"在 "river bank"(河岸)和 "bank account"(银行账户)中是完全不同的意思。ELMo 的做法是:同一个词,根据上下文,给出不同的向量。
ELMo 像一个读书非常仔细的学生:
- 从左到右读一遍:看到"猫坐在_____上",猜后面是什么
- 从右到左读一遍:看到"_____坐在猫上",猜前面是什么
- 把两遍的结果合起来:综合左右信息,决定"猫"在这个句子里的向量
它是第一个做到"上下文相关"的大规模模型。
BERT --- 超级填空题高手
BERT 和 ELMo 的关键区别在于:它能同时看左边和右边的信息,而不是分开读两遍再合并。
核心训练方法:掩码语言建模(MLM)
原句: "今天 [MASK] 真好,我们去 [MASK] 玩吧"
任务: 根据左右两边的词,猜出被遮住的两个词是"天气"和"公园"
BERT 随机把句子中 15% 的词遮住,让模型猜。它做了几十万道的"填空题"后,就变成了一个超级会理解语言的学生。
BERT 的嵌入:每一层都给每个词生成一个向量,我们通常取最后一层的输出作为词的最终嵌入。如果在另一个句子中遇到同一个词,BERT 会给出一个不一样的向量------因为它考虑了上下文。
第三阶段:句子嵌入(2019-至今)
Sentence-BERT --- 一句话的摘要数字
BERT 虽然聪明,但用它比较两个句子的相似度特别慢------1 万个句子需要两两比较 1 亿次,大约 65 小时。
SBERT 想了一个办法:先把每个句子变成一个"摘要名片"(一个向量),然后再比较就快了 。整个流程缩短到约 5 秒,快了超过 4 万倍。
它怎么做:
句子A: "今天天气真好" → 经过 BERT → 平均所有词的向量 → 句子向量A
句子B: "今天阳光明媚" → 经过 BERT → 平均所有词的向量 → 句子向量B
然后用余弦相似度比较两个向量------数字越接近,意思越相似。
训练方法------对比学习:
- 正样本:意思相近的句子对("今天天气很好"和"今天阳光明媚")→ 拉近
- 负样本:意思不同的句子对("今天天气很好"和"股票涨了很多")→ 推开
SentenceTransformers 框架让这个过程变得非常简单:
python
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('all-MiniLM-L6-v2')
sentences = [
"The weather is lovely today.",
"It's so sunny outside!",
"The cat sits on the mat."
]
embeddings = model.encode(sentences)
cosine_scores = util.cos_sim(embeddings[0], embeddings[1])
# 输出: ~0.66
第四阶段:多语言嵌入(2021-至今)
E5 --- 一个模型学 100 种语言
E5 就像一个会说 100 种语言的翻译官------不管是中文、英文、阿拉伯文还是斯瓦希里语,它都能把它们变成同一种"语言"(向量空间)。
怎么做到的:
- 先学"世界语":底座 XLM-RoBERTa 已经用 100 种语言训练过,学会了各种语言的基本模式
- 做配对游戏:把翻译对拉近("今天天气很好" ↔ "Today the weather is nice"),把无关对推开
经过上亿次训练,E5 学会了跨语言的语义对齐------中文的"猫"和英文的"cat"在向量空间中几乎在同一个位置。
关键创新:在输入前加一个"使用说明"(instruction):
查询: "query: 猫吃什么?" → 生成查询向量
文档: "passage: 猫是肉食动物" → 生成文档向量
这样模型就知道"这个是用来搜索的"vs"这个是用来被搜索的"。
现代多语言嵌入模型对比
| 模型 | 团队 | 特点 |
|---|---|---|
| Multilingual E5-Large | Microsoft/UXLing | 开源最强之一,100+ 语言,95% 检索命中率 |
| Qwen3-Embedding (0.6B/4B/8B) | 通义千问 | MTEB 多语言 No.1(70.58),embedding + reranking 一体 |
| Qwen3-VL-Embedding (2B/8B) | 通义千问 | 文本+图像+视频统一嵌入空间 (2026.01) |
| Voyage-multilingual-2 | Voyage AI | 2024 中文检索命中率 97% |
| Gemini Embedding 2 | 2026 年推荐为 RAG 生产最优 |
第五阶段:多模态嵌入(2025-至今)
Qwen3-VL-Embedding --- 文字和图片说同一种语言
以前的嵌入模型只能处理文字。Qwen3-VL-Embedding 把文字、图片、视频全部变成了同一种"语言"。
三个组件:
- 视觉编码器(眼睛):把图片变成一组数字
- 语言模型(大脑):把文字变成一组数字
- 连接器(桥梁):把视觉嵌入"翻译"成语言模型能懂的语言
训练方法:对比学习:
配对1(正): 图片[一只猫的照片] + 文字"一只可爱的橘猫在睡觉" → 拉近
配对2(负): 图片[一只猫的照片] + 文字"一辆红色的汽车" → 推开
训练完成后,猫的照片和"猫"的文字 → 向量很近,可以实现用文字搜图片、用图片搜视频。
技术演进全景
时期 模型 核心思想 能做什么
─────────────────────────────────────────────────────────────────────────────
2013 Word2Vec 用上下文猜词 词相似度、类比
2014 GloVe 统计全班投票 更好的类比关系
2016 FastText 拼积木学单词 处理没见过的新词
↓
2018 ELMo 同一个词,上下文不同→向量不同 解决一词多义
2018 BERT 超级填空题高手 全面理解语言
↓
2019 SBERT 一句话变一张名片 快速比较句子
↓
2022+ E5 100种语言共享同一个向量空间 跨语言搜索
↓
2025+ Qwen3-VL-Embed 文字+图片+视频→统一语言 跨模态搜索
关键演进逻辑
| 阶段 | 解决的问题 | 引入的新能力 |
|---|---|---|
| 静态嵌入 | 离散符号 → 稠密向量 | 语义相似度计算 |
| 上下文嵌入 | 一词多义 | 上下文感知的词表示 |
| 句子嵌入 | 句子级语义比较 | 固定维度句子向量、快速相似度检索 |
| 多语言嵌入 | 跨语言场景 | 多语言统一语义空间 |
| 多模态嵌入 | 跨模态检索 | 文本/图像/视频统一表示 |
评测:MTEB 基准
衡量嵌入模型好坏,最权威的基准是 MTEB(Massive Text Embedding Benchmark),由 Hugging Face 维护。
- 覆盖:56+ 数据集,7 类任务
- 任务类型:分类、聚类、检索、语义文本相似度、摘要、速度、重排
- 官方排行榜 :https://huggingface.co/spaces/mteb/leaderboard
总结
从 Word2Vec 给每个词发一张固定"名片",到 ELMo/BERT 让同一个词在不同语境中有不同"脸",到 SBERT 把一句话变成一个向量,到 E5 让 100 种语言共享同一个向量空间,再到 Qwen3-VL 把文字、图片、视频统一到同一种语言------嵌入模型的演进方向非常清晰:
从孤立到关联,从单一到多元,从静态到动态。
每一次突破,都让计算机离真正"理解"人类的信息更近了一步。
参考来源
- Mikolov et al., 2013 - Word2Vec (arXiv)
- Pennington et al., 2014 - GloVe (PDF)
- Bojanowski et al., 2016 - FastText (arXiv)
- Devlin et al., 2018 - BERT (arXiv)
- Reimers & Gurevych, 2019 - Sentence-BERT (arXiv)
- Wang & Yang, 2022 - E5 (arXiv)
- Qwen3-Embedding (官方 GitHub)
- Qwen3-VL-Embedding (官方博客)
- SentenceTransformers 官方文档 (sbert.net)
- MTEB Leaderboard (Hugging Face)