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 需要以下步骤:

  1. 构建词汇表:统计文本中所有唯一单词,并为每个单词分配唯一索引。
  2. 生成训练样本:滑动窗口遍历文本,提取(目标单词, 上下文单词)对。
  3. 优化目标函数:通过负采样或层次 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 的训练过程

  1. 初始化:为每个文档和单词分配随机向量。
  2. 滑动窗口:在文档中滑动固定大小的窗口,提取上下文单词和目标单词。
  3. 梯度更新:通过反向传播调整文档向量和单词向量,最小化预测误差。
  4. 迭代优化:重复上述步骤直到模型收敛。

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:训练时的线程数。

局限性

  • 对短文本效果可能较差。
  • 训练时间随语料库规模增加而增长。
  • 无法动态处理新文档(需重新训练或增量更新)。
相关推荐
g_i_a_o_giao12 分钟前
Android8 binder源码学习分析笔记(一)
android·java·笔记·学习·binder·安卓源码分析
c萱23 分钟前
软件测试错题笔记
软件测试·数据库·笔记·测试工具·oracle·测试用例
Joy T30 分钟前
雨后阳光为何更强烈?
笔记·环境科学·有趣的环境现象
yuxb7334 分钟前
Docker学习笔记(三):镜像与容器管理进阶操作
笔记·学习·docker
人生游戏牛马NPC1号1 小时前
学习 Android (二十) 学习 OpenCV (五)
android·opencv·学习
ST.J1 小时前
webpack笔记
前端·笔记·webpack
研梦非凡2 小时前
CVPR 2025|无类别词汇的视觉-语言模型少样本学习
人工智能·深度学习·学习·语言模型·自然语言处理
姚瑞南2 小时前
【AI产品思路】AI 原型设计工具横评:产品经理视角下的 v0、Bolt 与 Lovable
人工智能·经验分享·笔记·aigc·产品经理
你好~每一天2 小时前
2025年B端产品经理进阶指南:掌握这些计算机专业技能,决胜职场!
java·人工智能·经验分享·学习·产品经理·大学生
努力打怪升级2 小时前
容器学习day05_k8s(二)
学习·容器·kubernetes