嵌入模型
经典和现代Embedding模型的原理、架构与应用场景。
共 3 篇文章·阅读时间:约30分钟
01Word2Vec
Word2Vec是最具影响力的词向量模型,由Google于2013年提出,开启了词嵌入时代。
Word2Vec原理
Word2Vec的核心思想是"分布假说":一个词的意义由它的上下文决定。 相似的词有相似的上下文,因此在向量空间中距离更近。
训练目标
通过神经网络学习词向量,使得语义相似的词在向量空间中具有相似的表示。 训练完成后,只保留输入层到隐层的权重矩阵作为词向量。
CBOW与Skip-gram
CBOW
Continuous Bag of Words
根据上下文词预测中心词。
"我 昨天 买 了 西瓜" → 预测"苹果"
Skip-gram
Skip-gram with Negative Sampling
根据中心词预测上下文词。
"苹果" → 预测"昨天"、"买"、"了"
Word2Vec的特点
- 训练速度快,适合大规模语料
- 每个词对应一个固定的向量(静态表示)
- 能够捕捉词语之间的线性关系
- 无法处理一词多义问题
02BERT嵌入
BERT采用动态语境化表示,同一个词在不同上下文中得到不同的向量表示。
BERT的Embedding机制
BERT的Embedding由三部分组成,每个词的最终表示是这三部分的和:
Embedding = Token Embedding + Segment Embedding + Position Embedding
- Token Embedding:词表中的词嵌入
- Segment Embedding:区分句子对中的句子A和句子B
- Position Embedding:表示词在序列中的位置
BERT vs Word2Vec
| 特性 | Word2Vec | BERT |
|---|---|---|
| 表示类型 | 静态(每个词一个向量) | 动态(语境化) |
| 上下文 | 仅考虑局部上下文 | 双向上下文(Self-Attention) |
| 多义词 | 无法区分 | 自然区分 |
| 计算量 | 相对较小 | 较大 |
示例:多义词"bank"
Word2Vec:无论在"river bank"还是"bank account"中,"bank"的向量都是一样的。
BERT:根据上下文,"bank"的向量在两个句子中完全不同。
03OpenAI Embedding
OpenAI提供的Embedding API将文本转换为高维向量,支持多种模型和用途。
text-embedding模型
- text-embedding-3-large:1536维,最强性能
- text-embedding-3-small:1536维,性价比高
- text-embedding-ada-002:1536维,稳定可靠
使用场景
语义搜索
将文档和查询都转为向量,通过余弦相似度找到最相关的结果。
文本分类
使用Embedding作为特征,结合简单的分类器(如逻辑回归)进行分类。
聚类分析
将文本聚类为语义相近的组别,用于主题发现或用户分群。
推荐系统
基于用户和物品的Embedding相似度进行个性化推荐。
API调用示例
import openai
response = openai.Embedding.create(
model="text-embedding-3-small",
input="The quick brown fox jumps over the lazy dog"
)
embedding = response['data'][0]['embedding']