1. 揭开Embedding的神秘面纱:为什么单个维度没有语义?
第一次接触Embedding概念时,很多人的第一反应和我当初一样:这个向量里的每个数字是不是对应着某种具体的语义特征?比如第一维代表情感极性,第二维代表实体类型,第三维代表时间属性...这种直觉很自然,因为我们习惯了传统特征工程中人工设计的特征。但现实情况要复杂得多。
Embedding本质上是通过神经网络训练得到的高维空间坐标。举个例子,当我们看到"猫"这个词对应的Embedding向量是[0.21, -0.73, 0.11, 0.66, -0.02]时,没有任何一个维度单独对应着"动物"、"宠物"或"四足"这样的具体语义。这就像GPS坐标[39.9042, 116.4074]单独看每个数字都没有意义,只有组合起来才能定位到北京。
关键理解:Embedding的语义信息不是存储在单个维度中,而是编码在整个向量的相对位置关系里。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Embedding的语义究竟来自哪里?
2.1 向量空间中的几何关系
Embedding的核心魔法在于:语义相似的文本在向量空间中距离更近。这种距离通常用余弦相似度来衡量,计算公式为:
cos(θ) = (A·B) / (||A|| × ||B||)
让我用一个完整例子说明。假设我们有三个句子及其Embedding:
code复制句子1:"我喜欢猫" → [0.7, 0.2, -0.1]
句子2:"我喜欢狗" → [0.65, 0.25, -0.08]
句子3:"今天下雨" → [-0.3, 0.8, 0.6]
计算"猫"和"狗"的余弦相似度:
- 点积A·B = (0.7×0.65)+(0.2×0.25)+(-0.1×-0.08) = 0.455+0.05+0.008 = 0.513
- 向量长度||A|| = √(0.7²+0.2²+(-0.1)²) ≈ 0.735
- 向量长度||B|| = √(0.65²+0.25²+(-0.08)²) ≈ 0.701
- 余弦相似度 = 0.513 / (0.735×0.701) ≈ 0.996
这个接近1的值说明"猫"和"狗"在语义上非常相似。而"猫"和"下雨"的相似度计算出来约-0.1,表明它们语义差异很大。
2.2 神经网络如何学习这些关系?
Embedding的训练基于分布式假设(Distributional Hypothesis):出现在相似上下文中的词具有相似语义。例如:
code复制"猫 吃 鱼"
"狗 吃 肉"
模型发现"猫"和"狗"都出现在"吃"前面,就会让它们的Embedding向量在空间中靠近。这种训练方式使得:
- 同义词向量相近("快乐"和"高兴")
- 相关词向量相关("医生"和"医院")
- 词类比关系可计算(king - man + woman ≈ queen)
