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

pytorch基于GloVe实现的词嵌入

PyTorch 实现 GloVe(Global Vectors for Word Representation) 的完整代码,使用 中文语料 进行训练,包括 共现矩阵构建、模型定义、训练和测试


 1. GloVe 介绍

基于词的共现信息(不像 Word2Vec 使用滑动窗口预测)
 适合较大规模的数据(比 Word2Vec 更稳定)
学习出的词向量能捕捉语义信息(如类比关系)

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import jieba
from collections import Counter
from scipy.sparse import coo_matrix# ========== 1. 数据预处理 ==========
corpus = ["我们 喜欢 深度 学习","自然 语言 处理 是 有趣 的","人工智能 改变 了 世界","深度 学习 是 人工智能 的 重要 组成部分"
]# 分词
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()}# 计算共现矩阵
window_size = 2
co_occurrence = Counter()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]co_occurrence[(center_word, context_word)] += 1# 转换为稀疏矩阵
rows, cols, values = zip(*[(c[0], c[1], v) for c, v in co_occurrence.items()])
X = coo_matrix((values, (rows, cols)), shape=(len(vocab), len(vocab)))# ========== 2. 定义 GloVe 模型 ==========
class GloVe(nn.Module):def __init__(self, vocab_size, embedding_dim):super(GloVe, self).__init__()self.w_embeddings = nn.Embedding(vocab_size, embedding_dim)  # 中心词嵌入self.c_embeddings = nn.Embedding(vocab_size, embedding_dim)  # 上下文词嵌入self.w_bias = nn.Embedding(vocab_size, 1)  # 中心词偏置self.c_bias = nn.Embedding(vocab_size, 1)  # 上下文词偏置nn.init.xavier_uniform_(self.w_embeddings.weight)nn.init.xavier_uniform_(self.c_embeddings.weight)def forward(self, center, context, co_occur):w_emb = self.w_embeddings(center)c_emb = self.c_embeddings(context)w_bias = self.w_bias(center).squeeze()c_bias = self.c_bias(context).squeeze()dot_product = (w_emb * c_emb).sum(dim=1)loss = (dot_product + w_bias + c_bias - torch.log(co_occur + 1e-8)) ** 2return loss.mean()# 初始化模型
embedding_dim = 10
model = GloVe(len(vocab), embedding_dim)# ========== 3. 训练 GloVe ==========
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
num_epochs = 100# 转换数据
co_occurrence_tensor = torch.tensor(X.data, dtype=torch.float)
pairs = list(zip(X.row, X.col, co_occurrence_tensor))for epoch in range(num_epochs):total_loss = 0np.random.shuffle(pairs)for center, context, co_occur in pairs:optimizer.zero_grad()loss = model(torch.tensor([center], dtype=torch.long),torch.tensor([context], dtype=torch.long),torch.tensor([co_occur], dtype=torch.float)  # 修正数据类型)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.w_embeddings.weight.data.numpy()# ========== 5. 计算相似度 ==========
def most_similar(word, top_n=3):if word not in word2idx:return "单词不在词汇表中"word_vec = word_vectors[word2idx[word]].reshape(1, -1)similarities = np.dot(word_vectors, word_vec.T).squeeze()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()
  • 构建共现矩阵(计算窗口内的单词共现频率)
  • 使用稀疏矩阵存储(提高计算效率)

GloVe 模型

  • Embedding 训练词向量(中心词和上下文词分开)
  • Bias 变量 用于调整预测值
  • 损失函数 最小化 log(共现次数) 与词向量点积的差值

 计算词向量相似度

  • 使用 cosine similarity
  • 找出 top_n 最相似的单词

相关文章:

pytorch基于GloVe实现的词嵌入

PyTorch 实现 GloVe&#xff08;Global Vectors for Word Representation&#xff09; 的完整代码&#xff0c;使用 中文语料 进行训练&#xff0c;包括 共现矩阵构建、模型定义、训练和测试。 1. GloVe 介绍 基于词的共现信息&#xff08;不像 Word2Vec 使用滑动窗口预测&…...

SpringCloud篇 微服务架构

1. 工程架构介绍 1.1 两种工程架构模型的特征 1.1.1 单体架构 上面这张图展示了单体架构&#xff08;Monolithic Architecture&#xff09;的基本组成和工作原理。单体架构是一种传统的软件架构模式&#xff0c;其中所有的功能都被打包在一个单一的、紧密耦合的应用程序中。 …...

背包问题和单调栈

背包问题&#xff08;动态规划&#xff09; 动态五步曲 dp数组及下标索引的含义递推公式dp数组如何初始化遍历顺序打印dp数组 01背包&#xff1a;n种物品&#xff0c;有一个,二维数组遍历顺序可以颠倒&#xff0c;&#xff08;滚动数组&#xff09;一维数组遍历顺序不可颠倒…...

Java | CompletableFuture详解

关注&#xff1a;CodingTechWork CompletableFuture 概述 介绍 CompletableFuture是 Java 8 引入的一个非常强大的类&#xff0c;属于 java.util.concurrent 包。它是用于异步编程的一个工具&#xff0c;可以帮助我们更方便地处理并发任务。与传统的线程池或 Future 对比&…...

【背包问题】二维费用的背包问题

目录 二维费用的背包问题详解 总结&#xff1a; 空间优化&#xff1a; 1. 状态定义 2. 状态转移方程 3. 初始化 4. 遍历顺序 5. 时间复杂度 例题 1&#xff0c;一和零 2&#xff0c;盈利计划 二维费用的背包问题详解 前面讲到的01背包中&#xff0c;对物品的限定条件…...

Golang 并发机制-5:详解syn包同步原语

并发性是现代软件开发的一个基本方面&#xff0c;Go&#xff08;也称为Golang&#xff09;为并发编程提供了一组健壮的工具。Go语言中用于管理并发性的重要包之一是“sync”包。在本文中&#xff0c;我们将概述“sync”包&#xff0c;并深入研究其最重要的同步原语之一&#xf…...

实验六 项目二 简易信号发生器的设计与实现 (HEU)

声明&#xff1a;代码部分使用了AI工具 实验六 综合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 实验项目 要求利用硬件描述语言Verilog&#xff08;或VHDL&#xff09;、图形描述方式、IP核&#xff0c;结合数字系统设计方法&#xff0c;在Quartus开发环境下&#xff…...

如何用微信小程序写春联

​ 生活没有模板,只需心灯一盏。 如果笑能让你释然,那就开怀一笑;如果哭能让你减压,那就让泪水流下来。如果沉默是金,那就不用解释;如果放下能更好地前行,就别再扛着。 一、引入 Vant UI 1、通过 npm 安装 npm i @vant/weapp -S --production​​ 2、修改 app.json …...

LabVIEW无人机航线控制系统

介绍了一种无人机航线控制系统&#xff0c;该系统利用LabVIEW软件与MPU6050九轴传感器相结合&#xff0c;实现无人机飞行高度、速度、俯仰角和滚动角的实时监控。系统通过虚拟仪器技术&#xff0c;有效实现了数据的采集、处理及回放&#xff0c;极大提高了无人机航线的控制精度…...

C++哈希表深度解析:从原理到实现,全面掌握高效键值对存储

目录 一、核心组件与原理 1. 哈希函数&#xff08;Hash Function&#xff09; 2. 冲突解决&#xff08;Collision Resolution&#xff09; 3. 负载因子&#xff08;Load Factor&#xff09;与扩容 二、C实现&#xff1a;std::unordered_map 1. 模板参数 2. 关键操作与复…...

Vue.js组件开发-实现字母向上浮动

使用Vue实现字母向上浮动的效果 实现步骤 创建Vue项目&#xff1a;使用Vue CLI来创建一个新的Vue项目。定义组件结构&#xff1a;在组件的模板中&#xff0c;定义包含字母的元素。添加样式&#xff1a;使用CSS动画来实现字母向上浮动的效果。绑定动画类&#xff1a;在Vue组件…...

自研有限元软件与ANSYS精度对比-Bar2D2Node二维杆单元模型-四连杆实例

目录 1、四连杆工程实例以及手算求解 2、四连杆的自研有限元软件求解 2.1、选择单元类型 2.2、导入四连杆工程 2.3、节点坐标定义 2.4、单元连接关系、材料定义 2.5、约束定义 2.6、外载定义 2.7、矩阵求解 2.8、变形云图展示 2.9、节点位移 2.10、单元应力 2.11、…...

04树 + 堆 + 优先队列 + 图(D1_树(D11_伸展树))

目录 一、基本介绍 二、伸展操作 1. 左右情况的伸展 2. 左左情况的伸展 3. 右左情况的伸展 4. 右右情况的伸展 三、其它操作 1. 插入 2. 删除 四、代码实现 一、基本介绍 伸展树是一种二叉搜索树&#xff0c;伸展树也是一种平衡树&#xff0c;不过伸展树并不像AVL树那…...

c语言练习题【数据类型、递归、双向链表快速排序】

练习1&#xff1a;数据类型 请写出以下几个数据的数据类型 整数 a a 的地址 存放a的数组 b 存放a的地址的数组 b的地址 c的地址 指向 printf 函数的指针 d 存放 d的数组 整数 a 的类型 数据类型是 int a 的地址 数据类型是 int*&#xff08;指向 int 类型的指针&#xff09; …...

SliverAppBar的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverGrid组件相关的内容&#xff0c;本章回中将介绍SliverAppBar组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverAppBar和普通的AppBar类似&#xff0c;它们的…...

五、定时器实现呼吸灯

5.1 定时器与计数器简介 定时器是一种通过对内部时钟脉冲计数来测量时间间隔的模块。它的核心是一个递增或递减的寄存器&#xff08;计数器值&#xff09;。如果系统时钟为 1 MHz&#xff0c;定时器每 1 μs 计数一次。 计数器是一种对外部事件&#xff08;如脉冲信号&#xff…...

Elasticsearch的索引生命周期管理

目录 说明零、参考一、ILM的基本概念二、ILM的实践步骤Elasticsearch ILM策略中的“最小年龄”是如何计算的&#xff1f;如何监控和调整Elasticsearch ILM策略的性能&#xff1f; 1. **监控性能**使用/_cat/thread_pool API基本请求格式请求特定线程池的信息响应内容 2. **调整…...

【大模型理论篇】最近大火的DeepSeek-R1初探系列1

1. 背景介绍 这一整个春节&#xff0c;被DeepSeek-R1刷屏。各种铺天盖地的新闻以及老板发的相关信息&#xff0c;着实感受到DeepSeek-R1在国外出圈的震撼。 DeepSeek推出了新的推理模型&#xff1a;DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个在没有经过监督微调…...

【数据结构】(4) 线性表 List

一、什么是线性表 线性表就是 n 个相同类型元素的有限序列&#xff0c;每一个元素只有一个前驱和后继&#xff08;除了第一个和最后一个元素&#xff09;。 数据结构中&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列。 二、什么是 List List 是 Java 中的线性…...

【C++ STL】vector容器详解:从入门到精通

【C STL】vector容器详解&#xff1a;从入门到精通 摘要&#xff1a;本文深入讲解C STL中vector容器的使用方法&#xff0c;涵盖常用函数、代码示例及注意事项&#xff0c;助你快速掌握动态数组的核心操作&#xff01; 一、vector概述 vector是C标准模板库&#xff08;STL&am…...

Flask-AppBuilder表单验证终极指南:构建企业级安全应用的10个核心技巧

Flask-AppBuilder表单验证终极指南&#xff1a;构建企业级安全应用的10个核心技巧 【免费下载链接】Flask-AppBuilder Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, googl…...

Phi-3-Mini-128K技术文档翻译与润色对比:中英互译质量评估

Phi-3-Mini-128K技术文档翻译与润色对比&#xff1a;中英互译质量评估 最近在折腾一些开源项目&#xff0c;免不了要和英文技术文档打交道。对于咱们中文开发者来说&#xff0c;直接阅读原版文档虽然最准确&#xff0c;但有时候效率确实不高。机器翻译就成了一个绕不开的工具。…...

别只盯着心跳了!CANopen主站用SDO还能配置这些关键参数(附PDO映射实例)

别只盯着心跳了&#xff01;CANopen主站用SDO还能配置这些关键参数&#xff08;附PDO映射实例&#xff09; 在工业自动化领域&#xff0c;CANopen协议因其高可靠性和灵活性成为设备互联的首选方案之一。许多工程师对通过SDO&#xff08;服务数据对象&#xff09;配置心跳时间已…...

CosyVoice3在CSDN星图一键部署:开箱即用,无需复杂配置

CosyVoice3在CSDN星图一键部署&#xff1a;开箱即用&#xff0c;无需复杂配置 1. 引言&#xff1a;语音克隆技术的新选择 你是否曾经想过&#xff0c;只需几秒钟的录音就能让AI完美复刻你的声音&#xff1f;或者为你的视频内容添加多种方言配音&#xff1f;CosyVoice3作为阿里…...

快速上手Qwen3-4B:无需配置,GPU自适应优化的文本对话服务

快速上手Qwen3-4B&#xff1a;无需配置&#xff0c;GPU自适应优化的文本对话服务 想体验一个开箱即用、回答流畅、还能帮你写代码的AI助手吗&#xff1f;今天要介绍的Qwen3-4B Instruct-2507镜像&#xff0c;就是这样一个“傻瓜式”的纯文本对话服务。它基于阿里通义千问的官方…...

从聊天机器人到业务执行者:Agentic Orchestration 如何重构 Java 后端体系

引言 在 RAG 1.0 时代&#xff0c;我们费尽心思让 AI“说得对、答得准”&#xff1b; 而进入 2026 年的 Agentic Orchestration&#xff08;智能体编排&#xff09; 时代&#xff0c;我们的目标已经变成&#xff1a;让 AI 做得对、跑得稳、能闭环。 用户说“帮我把昨天买贵的衣…...

终极指南:procs如何彻底改变DevOps工作流?监控、调试、优化的完整解决方案

终极指南&#xff1a;procs如何彻底改变DevOps工作流&#xff1f;监控、调试、优化的完整解决方案 【免费下载链接】procs A modern replacement for ps written in Rust 项目地址: https://gitcode.com/gh_mirrors/pr/procs procs是一款用Rust编写的现代进程查看工具&a…...

(三)谷歌浏览器结合Selenium IDE实现自动化脚本录制与Python导出

1. 为什么你需要Selenium IDE脚本录制工具 最近有个测试同事跟我吐槽&#xff0c;说他每天要花3小时重复点击同一个电商网站&#xff0c;就为了检查商品详情页的展示逻辑。我听完直接给他安利了Selenium IDE——这个藏在谷歌浏览器里的小工具&#xff0c;5分钟就能搞定他半天的…...

Kubernetes Python Client批量管理秘籍:1000+Pod运维实战

Kubernetes Python Client批量管理秘籍&#xff1a;1000Pod运维实战 【免费下载链接】python Official Python client library for kubernetes 项目地址: https://gitcode.com/gh_mirrors/python1/python Kubernetes Python Client是管理Kubernetes集群的官方Python客户…...

摆脱论文困扰!2026年实打实好用的专业降AI率平台

2026年论文降AI率工具已从“基础改写”升级为智能优化系统&#xff0c;核心评价维度包括AIGC识别精准度、文本自然度、学术格式合规性、查重适配能力、长文本逻辑性和多语种支持。本次测评覆盖6款主流工具&#xff0c;涵盖中文与英文、全流程与专项功能、免费与付费模式&#x…...