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

局限性

  • 对短文本效果可能较差。
  • 训练时间随语料库规模增加而增长。
  • 无法动态处理新文档(需重新训练或增量更新)。
相关推荐
千寻girling16 小时前
记录第一次学习 Docker
学习·docker·容器
Kobebryant-Manba16 小时前
学习RNN(简洁实现)
人工智能·rnn·学习
知南x17 小时前
【DPDK例程学习】(4) l2fwd
学习·word
努力努力再努力FFF17 小时前
大学四年AI能力规划:从入门学习到简历表达
人工智能·学习
Litluecat17 小时前
配合多角色提示语3,学习AI漫剧(刚开始学)
人工智能·学习·ai·提示词·短剧·漫剧
三品吉他手会点灯17 小时前
STM32F103 学习笔记-24-I2C-读写EEPROM(第1节)-I2C物理层介绍
笔记·stm32·学习
MartinYeung518 小时前
[论文学习]大型语言模型中个人可识别资讯(PII)的机器遗忘技术:UnlearnPII 基准与 PERMU_tok 方法的深度分析
人工智能·学习·语言模型
fanged18 小时前
Linux内核学习21--V4L2学习3(应用)(TODO)
学习
万物更新_18 小时前
vue框架
前端·javascript·vue.js·笔记
上海观智网络19 小时前
上海小程序定制开发合同怎么签?需要注意什么?
经验分享·笔记·小程序