Word2Vec和Doc2Vec学习笔记
一、Word2Vec
Word2Vec 的基本概念
Word2Vec 是一种基于神经网络的词嵌入技术,由 Google 在 2013 年提出。它将单词映射到高维向量空间,使得语义或语法相似的单词在向量空间中距离较近。Word2Vec 的核心思想是通过上下文预测单词(Skip-gram)或通过单词预测上下文(CBOW),从而学习单词的分布式表示。
Word2Vec 的两种模型
Skip-gram 模型
Skip-gram 通过目标单词预测其上下文单词。例如,给定单词 "cat",模型尝试预测附近的单词如 "climb" 或 "tree"。Skip-gram 在小型数据集或罕见词表现更好,但计算成本较高。
CBOW 模型
CBOW 通过上下文单词预测目标单词。例如,给定上下文单词 "climb" 和 "tree",模型尝试预测目标单词 "cat"。CBOW 训练速度更快,适合大型数据集,但对罕见词的表现较弱。
Word2Vec 的训练过程
训练 Word2Vec 需要以下步骤:
- 构建词汇表:统计文本中所有唯一单词,并为每个单词分配唯一索引。
- 生成训练样本:滑动窗口遍历文本,提取(目标单词, 上下文单词)对。
- 优化目标函数:通过负采样或层次 Softmax 优化模型参数,减少计算复杂度。
Word2Vec 的数学原理
Skip-gram 的目标函数为最大化平均对数概率:
其中是文本长度,
是上下文窗口大小,
使用 Softmax 计算:
是单词
的向量表示,
是词汇表大小。
Word2Vec 的应用场景
- 语义相似度计算:通过余弦相似度衡量单词之间的语义关系。
- 文本分类:将词向量作为特征输入分类模型。
- 机器翻译:跨语言的词向量对齐。
- 推荐系统:将物品或用户行为表示为向量。
Word2Vec 的优缺点
优点
- 捕获单词的语义和语法关系。
- 计算效率高,适合大规模数据。
- 生成的向量可用于下游任务。
缺点
- 无法处理多义词(所有含义共享同一向量)。
- 依赖局部上下文,忽略全局统计信息。
- 需要大量训练数据。
二、Doc2Vec
Doc2Vec 概述
Doc2Vec 是一种用于将文档(如段落、文章或句子)表示为固定长度向量的自然语言处理技术。它扩展了 Word2Vec 模型,能够捕捉文档的语义信息,适用于文档分类、聚类或相似性计算等任务。
Doc2Vec 的核心思想
Doc2Vec 通过训练神经网络模型,将文档映射到一个低维向量空间。与 Word2Vec 不同,Doc2Vec 不仅学习单词的向量表示,还为整个文档生成一个唯一的向量。这种向量能够捕捉文档的上下文和语义特征。
Doc2Vec 的两种模型架构
PV-DM(Distributed Memory Model of Paragraph Vectors)
PV-DM 类似于 Word2Vec 的 CBOW 模型。在训练时,文档向量与上下文单词向量共同预测目标单词。文档向量充当记忆单元,存储文档的全局信息。
PV-DBOW(Distributed Bag of Words of Paragraph Vector)
PV-DBOW 类似于 Word2Vec 的 Skip-gram 模型。它直接使用文档向量预测文档中的单词,忽略单词顺序,但计算效率更高。
Doc2Vec 的训练过程
- 初始化:为每个文档和单词分配随机向量。
- 滑动窗口:在文档中滑动固定大小的窗口,提取上下文单词和目标单词。
- 梯度更新:通过反向传播调整文档向量和单词向量,最小化预测误差。
- 迭代优化:重复上述步骤直到模型收敛。
Doc2Vec 的特点
- 固定长度输出:无论文档长度如何,输出向量维度固定。
- 无监督学习:无需标注数据即可训练。
- 上下文感知:能够捕捉文档的局部和全局语义。
Doc2Vec 的应用场景
- 文档相似度计算
- 文本分类(如情感分析)
- 信息检索
- 推荐系统(基于内容相似性)
示例代码(Python)
from gensim.models import Doc2Vec
from gensim.models.doc2vec import TaggedDocument# 准备数据
documents = [TaggedDocument(words=["apple", "banana", "fruit"], tags=["d1"]),TaggedDocument(words=["car", "bike", "vehicle"], tags=["d2"])
]# 训练模型
model = Doc2Vec(documents, vector_size=100, window=5, min_count=1, workers=4)# 获取文档向量
vector_d1 = model.dv["d1"]
参数说明
vector_size
:生成向量的维度。window
:考虑上下文单词的最大距离。min_count
:忽略出现次数低于此值的单词。workers
:训练时的线程数。
局限性
- 对短文本效果可能较差。
- 训练时间随语料库规模增加而增长。
- 无法动态处理新文档(需重新训练或增量更新)。