1. 什么是Embedding?
在自然语言处理领域,我们经常需要让计算机理解人类语言的含义。但计算机本质上只能处理数字,这就产生了一个根本性问题:如何将文字、图片、视频等非结构化数据转换为计算机能够处理的数值形式?Embedding技术就是解决这一问题的关键。
Embedding本质上是一种映射函数,它能够将高维度的非结构化数据(如文本中的单词、句子,或是图片、视频等)转换为低维度的实数向量。这个向量通常由几十到几千个维度组成,每个维度都代表了数据的某种潜在特征。例如,当我们用Embedding模型处理"猫"这个词时,可能会得到一个类似[0.23, -0.45, 0.78, ...]的向量,其中每个数值都代表了"猫"在某个语义维度上的特征。
注意:Embedding向量的维度数与模型设计有关,并非越高越好。实践中需要在计算效率和语义表达能力之间取得平衡。
1.1 Embedding的核心特性
Embedding之所以强大,主要因为它具备以下几个关键特性:
- 语义保留:语义相近的词在向量空间中的距离也会相近。例如,"猫"和"狗"的向量距离会比"猫"和"汽车"更接近。
- 向量运算有意义:可以对Embedding向量进行加减乘除等数学运算,并保持语义关系。最著名的例子就是"女王≈国王-男人+女人"。
- 降维能力:能将高维稀疏的原始表示(如one-hot编码)压缩为低维稠密向量,大大减少计算资源需求。
- 跨模态能力:现代Embedding技术可以将不同模态的数据(如文本和图片)映射到同一向量空间,实现跨模态检索和理解。
1.2 主流Embedding模型解析
目前业界广泛使用的Embedding模型主要分为以下几类:
1.2.1 Word2Vec
Word2Vec是Google在2013年提出的经典词嵌入模型,它基于"词的语义由其上下文决定"这一分布式假设。Word2Vec包含两种主要架构:
- CBOW(Continuous Bag of Words):通过上下文预测当前词,适合小型数据集
- Skip-gram:通过当前词预测上下文,适合大型数据集
python复制# 使用gensim训练Word2Vec模型的示例代码
from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
print(model.wv["cat"]) # 输出"cat"的词向量
1.2.2 GloVe
GloVe(Global Vectors for Word Representation)是斯坦福大学2014年提出的模型。与Word2Vec基于局部上下文不同,GloVe利用了全局的词共现统计信息:
- 首先构建词-词共现矩阵
- 然后通过矩阵分解得到词向量
- 优化目标是使两个词向量的点积等于它们共现次数的对数
GloVe特别适合处理大规模语料库,生成的词向量在类比推理任务上表现优异。
1.2.3 FastText
FastText由Facebook AI Research开发,其最大特点是考虑单词的子词(subword)信息:
- 将单词表示为字符n-gram的集合
- 训练时同时学习单词级别和n-gram级别的表示
- 能有效处理罕见词和拼写变体
python复制#
