1. 从猫到向量:理解Embedding的本质
当我说"猫"这个词时,你脑海中可能会浮现出一只毛茸茸的、会喵喵叫的小动物。但在AI的世界里,这个生动的概念被转化为一串冰冷的数字,比如[0.12, -0.58, 0.99,...]。这种转换不是简单的编码,而是让计算机能够"理解"语义的关键技术——Embedding。
1.1 为什么需要向量表示?
计算机本质上只能处理数字。当我们想让机器理解语言时,最原始的方法是one-hot编码:用一个很长的向量,其中只有一个位置是1,其余都是0。比如:
- 猫:[1,0,0,0,...]
- 狗:[0,1,0,0,...]
- 汽车:[0,0,1,0,...]
这种方法有两个致命缺陷:
- 维度灾难:每增加一个新词就需要增加一个维度
- 无法表达语义关系:"猫"和"狗"的距离与"猫"和"汽车"的距离相同,这显然不符合我们的认知
Embedding通过将词语映射到一个稠密的低维空间(通常是几百到几千维)解决了这些问题。在这个空间里:
- 语义相似的词距离相近
- 语义无关的词距离较远
- 甚至能捕捉到"国王-男人+女人≈女王"这样的类比关系
1.2 Embedding的工作原理
现代Embedding模型(如OpenAI的text-embedding-3-small)通常基于Transformer架构,通过自监督学习从海量文本中捕捉语义信息。训练过程中,模型会学习到:
- 上下文相似性:出现在相似上下文中的词应该具有相似的向量
- 语义关系:不仅能捕捉同义词,还能捕捉反义、上下位等复杂关系
- 多义词处理:同一个词在不同语境下会有不同的向量表示
以二维空间为例(实际维度要高得多),我们可以这样可视化一些词的分布:
| 词语 | 维度1(动物性) | 维度2(家用性) |
|---|---|---|
| 猫 | 0.9 | 0.8 |
| 狗 | 0.85 | 0.7 |
| 老虎 | 0.95 | 0.1 |
| 沙发 | 0.1 | 0.9 |
从这个简化示例可以看出,"猫"和"狗"在语义空间中的距离要比"猫"和"老虎"更近,尽管从生物学分类上看后者更接近。这是因为Embedding捕捉的是词语在实际使用中的语义关系,而非严格的分类学关系。
注意:实际应用中,Embedding模型的维度远不止两个。OpenAI的text-embedding-3-small模型使用1536个维度,能够捕捉极其细微的语义差别。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 向量搜索:超越关键词匹配的语义理解
2.1 传统搜索的局限性
传统的关键词搜索(Keyword Search)基于精确的字符串匹配,存在几个根本性问题:
- 词汇不匹配问题:用户搜索"智能手机",但文档中使用的是"移动电话"
- 语义鸿沟问题:搜索"苹果"时,无法区分
