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

局限性

  • 对短文本效果可能较差。
  • 训练时间随语料库规模增加而增长。
  • 无法动态处理新文档(需重新训练或增量更新)。
相关推荐
武子康1 小时前
Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
java·开发语言·数据库·学习·mysql·spring·微服务
月阳羊3 小时前
【硬件-笔试面试题】硬件/电子工程师,笔试面试题-26,(知识点:硬件电路的调试方法:信号追踪,替换,分段调试)
笔记·嵌入式硬件·面试·职场和发展
Star在努力4 小时前
14-C语言:第14天笔记
c语言·笔记·算法
霜绛5 小时前
机器学习笔记(三)——决策树、随机森林
人工智能·笔记·学习·决策树·随机森林·机器学习
站住前面的二哈6 小时前
Cartographer安装测试与模块开发(三)--Cartographer在Gazebo仿真环境下的建图以及建图与定位阶段问题(实车也可参考)
学习·ubuntu
★YUI★6 小时前
学习游戏制作记录(克隆技能)7.25
学习·游戏·unity·c#
屁股割了还要学7 小时前
【C语言进阶】柔性数组
c语言·开发语言·数据结构·c++·学习·算法·柔性数组
woodykissme8 小时前
UG创建的实体橘黄色实体怎么改颜色?
学习·齿轮·ug建模
Feather_748 小时前
从Taro的Dialog.open出发,学习远程控制组件之【事件驱动】
javascript·学习·taro
charlie1145141918 小时前
快速入门Socket编程——封装一套便捷的Socket编程——导论
linux·网络·笔记·面试·网络编程·socket