Word2Vec介绍

Word2Vec的实现说明及代码示例,涵盖原理概述、使用Gensim的实践示例,以及关键步骤的底层实现思路。

一、Word2Vec 原理概述

Word2Vec 是一种将词语映射为稠密向量的浅层神经网络模型,主要包含两种架构:

  1. CBOW(Continuous Bag of Words):通过上下文词预测目标词。
  2. Skip-gram:通过目标词预测上下文词。

核心目标:通过训练使语义相似的词在向量空间中距离更近。

关键技术

  • 负采样(Negative Sampling):代替传统Softmax,加速训练。
  • Hierarchical Softmax:另一种优化输出层计算的方法。

二、使用 Gensim 实现 Word2Vec

1. 安装 Gensim
复制代码

Bash

pip install gensim

2. 代码示例
复制代码

Python

from gensim.models import Word2Vec from gensim.utils import simple_preprocess # 示例文本数据 corpus = [ "cat sits on the mat", "dog barks at the cat", "cat drinks milk" ] # 文本分词和预处理 sentences = [simple_preprocess(doc) for doc in corpus] # 训练 Skip-gram 模型 model = Word2Vec( sentences=sentences, vector_size=100, # 词向量维度 window=5, # 上下文窗口大小 min_count=1, # 忽略低频词 workers=4, # 线程数 sg=1 # sg=1 表示 Skip-gram ) # 获取词向量 print(model.wv['cat']) # 查找相似词 print(model.wv.most_similar('cat'))

3. 输出示例
复制代码

0.123, -0.456, 0.789, ... \] # 'cat' 的词向量 \[('milk', 0.85), ('sits', 0.79), ...\] # 与 'cat' 相似的词 #### **三、实现细节解析** ##### **1. 数据预处理** * **分词** :将文本拆分为词语列表(如 `["cat", "sits", ...]`)。 * **构建词汇表**:统计词频并分配唯一索引。 ##### **2. 生成 Skip-gram 样本** ``` ``` Python `def generate_skip_grams(sentence, window_size=2): skip_grams = [] for i, target in enumerate(sentence): # 提取上下文词 context = sentence[max(0, i - window_size):i] + \ sentence[i+1:i+window_size+1] for context_word in context: skip_grams.append((target, context_word)) return skip_grams # 示例 sentence = ["cat", "sits", "on", "mat"] print(generate_skip_grams(sentence)) # 输出: [('sits', 'cat'), ('sits', 'on'), ('on', 'sits'), ('on', 'mat'), ...]` ##### **3. 模型结构(Skip-gram + 负采样)** * **输入层**:目标词的 One-Hot 向量(维度 V)。 * **隐藏层**:词向量矩阵(维度 V×N)。 * **输出层**:通过负采样计算上下文词的概率。 ##### **4. 负采样实现** * 对每个正样本(目标词,上下文词),随机采样 K 个负样本(目标词,噪声词)。 * 使用 Sigmoid 作为二分类损失函数。 #### **四、手动实现(PyTorch 示例)** ##### **1. 模型定义** ``` ``` Python `import torch import torch.nn as nn class SkipGram(nn.Module): def __init__(self, vocab_size, embedding_dim): super().__init__() self.embed = nn.Embedding(vocab_size, embedding_dim) self.linear = nn.Linear(embedding_dim, vocab_size) def forward(self, x): x = self.embed(x) # (batch_size, embedding_dim) x = self.linear(x) # (batch_size, vocab_size) return x` ##### **2. 训练步骤** * **数据加载**:将生成的 Skip-gram 对转换为词索引。 * **损失函数** :使用 `nn.CrossEntropyLoss()` 或自定义负采样损失。 * **优化器**:SGD 或 Adam。 #### **五、总结** * **Gensim**:适合快速实现和部署,内置高效优化(如负采样)。 * **手动实现**:有助于理解底层原理,但需处理细节(如梯度更新、采样策略)。 * **扩展方向** :尝试调整 `vector_size`、`window` 参数,或探索 CBOW 架构(设置 `sg=0`)。

相关推荐
刘~浪地球2 分钟前
AI幻觉正在“吃掉“信任:一次保险购买引发的血案
人工智能·深度学习·机器学习
V搜xhliang024636 分钟前
OpenClaw、AI大模型赋能数据分析与学术科研 学习
人工智能·深度学习·学习·机器学习·数据挖掘·数据分析
AI医影跨模态组学1 小时前
云南省肿瘤医院李振辉&广东省人民医院等团队:免疫表型引导的可解释放射组学模型预测III–IV期d-MMR/MSI-H结直肠癌新辅助抗PD-1治疗反应
人工智能·深度学习·论文·医学·医学影像
逻辑驱动的ken2 小时前
Java高频面试考点场景题05
java·开发语言·深度学习·求职招聘·春招
AI医影跨模态组学2 小时前
NPJ Precis Oncol 安徽医科大学第一附属医院超声科张超学等团队:多模态深度学习方法用于R0切除卵巢癌的生存预测与风险分层
人工智能·深度学习·论文·医学·医学影像
云和数据.ChenGuang2 小时前
机器学习之超参数是什么?
人工智能·深度学习·神经网络·目标检测·机器学习·自然语言处理·语音识别
AI周红伟3 小时前
周红伟:梁文峰DeepSeek V4 终极对决 GPT-6,梁文锋透露 DeepSeek V4 将于 4 月下旬发布
人工智能·gpt·深度学习·微信·自然语言处理·openclaw
C系语言3 小时前
ONNX Runtime安装
人工智能·python·深度学习
格林威3 小时前
AI视觉检测:模型量化后漏检率上升怎么办?
人工智能·windows·深度学习·数码相机·计算机视觉·视觉检测·工业相机
Purple Coder4 小时前
深度学习day-1
人工智能·深度学习