当前位置: 首页 > news >正文

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 的目标函数为最大化平均对数概率:
$ \frac{1}{T} \sum_{t=1}^{T} \sum_{-c \leq j \leq c, j \neq 0} \log p(w_{t+j} | w_t) $
其中$T$是文本长度,$c$是上下文窗口大小,$p(w_{t+j}|w_t)$ 使用 Softmax 计算:
$ p(w_O | w_I) = \frac{\exp(v_{w_O}^T v_{w_I})}{\sum_{w=1}^{W} \exp(v_w^T v_{w_I})} $
$v_w$是单词 $w$的向量表示,$W$是词汇表大小。

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

局限性

  • 对短文本效果可能较差。
  • 训练时间随语料库规模增加而增长。
  • 无法动态处理新文档(需重新训练或增量更新)。
http://www.dtcms.com/a/292025.html

相关文章:

  • 用手机当外挂-图文并茂做报告纪要
  • AWS PrivateLink方式访问Redis
  • Windows游戏自动检测本地是否安装 (C++版)
  • 设计模式七:抽象工厂模式(Abstract Factory Pattern)
  • 技能系统详解(4)——运动表现
  • 面向对象高级:static
  • linux内核与GNU之间的联系和区别
  • 决策规划内容整理
  • Linux的磁盘存储管理实操——(下一)——标准分区扩容
  • 得物视觉算法面试30问全景精解
  • 图论的整合
  • 西门子 S7-1500分布式 I/O通信 :PROFINET IO 与 PROFIBUS DP核心技术详解(上)
  • Spring、Spring MVC、Spring Boot、Spring Cloud的联系和区别
  • Uni-App:跨平台开发的终极解决方案
  • uniapp app打包流程
  • 华为服务器操作系统openEuler介绍与安装
  • uniapp 报错 Not found ... at view.umd.min.js:1的问题
  • Kafka——揭开神秘的“位移主题”面纱
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现持械检测(C#代码,UI界面版)
  • 记一次flink资源使用优化
  • 《Uniapp-Vue 3-TS 实战开发》自定义时间选择
  • @DateTimeFormat、@JsonFormat、@JSONField区别及用法
  • 获取制定版本的yolov5,使用下载zip文件替代git
  • C++核心编程学习4--类和对象--封装
  • J2EE模式---前端控制器模式
  • 智慧能源合同解决方案
  • Apache Ignite 中乐观事务(OPTIMISTIC Transactions)的工作机制
  • WAF 防护与漏洞扫描联动:让安全防御更精准高效
  • 50期权交易的典型例子
  • K 近邻算法(K-Nearest Neighbors, KNN)详解及案例