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

商城网站建设报价表成都全网营销推广

商城网站建设报价表,成都全网营销推广,桂林新闻,个人博客首页PyTorch 实现 Word2Vec(Skip-gram 模型) 的完整代码,使用 中文语料 进行训练,包括数据预处理、模型定义、训练和测试。 1. 主要特点 支持中文数据,基于 jieba 进行分词 使用 Skip-gram 进行训练,适用于小数…

PyTorch 实现 Word2Vec(Skip-gram 模型) 的完整代码,使用 中文语料 进行训练,包括数据预处理、模型定义、训练和测试


1. 主要特点

支持中文数据,基于 jieba 进行分词
使用 Skip-gram 进行训练,适用于小数据集
支持负采样,提升训练效率
使用 cosine similarity 计算相似单词

完整代码:

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import random
import jieba
from collections import Counter
from sklearn.metrics.pairwise import cosine_similarity# ========== 1. 数据预处理 ==========
corpus = ["我们 喜欢 深度 学习","自然 语言 处理 是 有趣 的","人工智能 改变 了 世界","深度 学习 是 人工智能 的 重要 组成部分"
]# 超参数
window_size = 2      # 窗口大小
embedding_dim = 10   # 词向量维度
num_epochs = 100     # 训练轮数
learning_rate = 0.01 # 学习率
batch_size = 4       # 批大小
neg_samples = 5      # 负采样个数# 分词 & 构建词汇表
tokenized_corpus = [list(jieba.cut(sentence)) for sentence in corpus]
vocab = set(word for sentence in tokenized_corpus for word in sentence)
word2idx = {word: idx for idx, word in enumerate(vocab)}
idx2word = {idx: word for word, idx in word2idx.items()}# 统计词频
word_counts = Counter([word for sentence in tokenized_corpus for word in sentence])
total_words = sum(word_counts.values())# 计算负采样概率
word_freqs = {word: count / total_words for word, count in word_counts.items()}
word_powers = {word: freq ** 0.75 for word, freq in word_freqs.items()}
Z = sum(word_powers.values())
word_distribution = {word: prob / Z for word, prob in word_powers.items()}# 负采样函数
def negative_sampling(positive_word, num_samples=5):words = list(word_distribution.keys())probabilities = list(word_distribution.values())negatives = []while len(negatives) < num_samples:neg = np.random.choice(words, p=probabilities)if neg != positive_word:negatives.append(neg)return negatives# 生成 Skip-gram 训练数据
data = []
for sentence in tokenized_corpus:indices = [word2idx[word] for word in sentence]for center_idx in range(len(indices)):center_word = indices[center_idx]for offset in range(-window_size, window_size + 1):context_idx = center_idx + offsetif 0 <= context_idx < len(indices) and context_idx != center_idx:context_word = indices[context_idx]data.append((center_word, context_word))# 转换为 PyTorch 张量
data = [(torch.tensor(center), torch.tensor(context)) for center, context in data]# ========== 2. 定义 Word2Vec (Skip-gram) 模型 ==========
class Word2Vec(nn.Module):def __init__(self, vocab_size, embedding_dim):super(Word2Vec, self).__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim)self.output_layer = nn.Linear(embedding_dim, vocab_size)def forward(self, center_word):embed = self.embedding(center_word)  # 获取中心词向量out = self.output_layer(embed)       # 计算词分布return out# 初始化模型
model = Word2Vec(len(vocab), embedding_dim)# ========== 3. 训练 Word2Vec ==========
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)for epoch in range(num_epochs):total_loss = 0random.shuffle(data)  # 每轮打乱数据for center_word, context_word in data:optimizer.zero_grad()output = model(center_word.unsqueeze(0))  # 预测词分布loss = criterion(output, context_word.unsqueeze(0))  # 计算损失loss.backward()optimizer.step()total_loss += loss.item()if (epoch + 1) % 10 == 0:print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {total_loss:.4f}")# ========== 4. 测试词向量 ==========
word_vectors = model.embedding.weight.data.numpy()# 计算单词相似度
def most_similar(word, top_n=3):if word not in word2idx:return "单词不在词汇表中"word_vec = word_vectors[word2idx[word]].reshape(1, -1)similarities = cosine_similarity(word_vec, word_vectors)[0]# 获取相似度最高的 top_n 个单词(排除自身)similar_idx = similarities.argsort()[::-1][1:top_n+1]return [(idx2word[idx], similarities[idx]) for idx in similar_idx]# 测试相似词
test_words = ["深度", "学习", "人工智能"]
for word in test_words:print(f"【{word}】的相似单词:", most_similar(word))

数据预处理
  • 使用 jieba.cut() 进行分词
  • 创建 word2idxidx2word
  • 使用滑动窗口生成 (中心词, 上下文词) 训练样本
  • 实现 negative_sampling() 提高训练效率
模型
  • Embedding 学习词向量
  • Linear 计算单词的概率分布
  • CrossEntropyLoss 计算目标词与预测词的匹配度
  • 使用 Adam 进行梯度更新
计算词相似度
  • 使用 cosine_similarity 计算词向量相似度
  • 找出 top_n 个最相似的单词

 5. 可优化点

 使用更大的中文语料库(如 THUCNews
 使用 t-SNE 进行词向量可视化
增加负采样,提升模型训练效率

http://www.dt0577.cn/news/1422.html

相关文章:

  • 房地产集团网站建设方案如何创建网站?
  • 2021国内新闻大事20条上海有哪些优化网站推广公司
  • 石家庄网站推广微信小程序开发平台
  • 做的网站缩小内容就全乱了广告咨询
  • 更改网站logo地址哪个搜索引擎最好用
  • 网络小白如何建立个人网站网店运营教学
  • 怎样做o2o网站网站建设方案书模板
  • 网站建设增长率搜索引擎优化策略
  • 网站滚动图片效果怎么做南宁百度推广seo
  • 做团购网站商品从哪里找全网软文推广
  • 付费 视频 网站 怎么做网站seo优化8888
  • 昆明网站制作网络营销网站
  • 做系统之前的网站收藏在哪里找网站优化基本技巧
  • 适合大学生做的兼职网站指数型基金是什么意思
  • 网站换服务器百度不收录网站优化排名软件哪些最好
  • 芜湖做网站公司网络外包
  • 个人兼职网站制作爱站工具包的主要功能
  • 上海市建设交通党委网站整合营销沟通
  • 昆明网站建设电话美国搜索引擎排名
  • 强化网站建设和监管百度推广代理商与总公司的区别
  • 搭建租号网的网站洛阳网站建设
  • 建筑常用的模板下载网站有哪些怎么做好销售
  • 做最好的导航网站今天最新新闻报道
  • 做资源共享网站快速排名工具免费查询
  • 做网站需要多少钱西安河南郑州最近的热搜事件
  • 邢台做网站公司排名搜索引擎seo如何赚钱
  • 深圳市seo上词点击软件优化公司哪家好
  • 都匀市建设局网站品牌推广工作内容
  • 学生网页设计模板素材宁波seo托管公司
  • 建设网站的安全性介绍营销型制作网站公司