NLP【05】pytorch实现glove词向量(附代码详解)
上一篇:NLP【04】tensorflow 实现Wordvec(附代码详解)
下一篇:NLP【06】RCNN原理及文本分类实战(附代码详解)
完整代码下载:https://github.com/ttjjlw/NLP/tree/main/Word_vector%E8%AF%8D%E5%90%91%E9%87%8F/glove
一、前言
glove词向量的原理,请参考我的第三篇文章
二、代码结构
pytorch
data 数据
dataset.py 把raw_data处理成train_corpus的格式
huffman.py 构建哈夫曼树
glove.py glove模型
tools.py 构建共现矩阵,可视化以及计算词与词相似性等功能
main.py 程序运行入口,直接运行main.py即可得到glove词向量
三、代码详解
def train(args):corpus_preprocessor = CorpusPreprocess(args.train_data_path, args.min_count)coo_matrix = corpus_preprocessor.get_cooccurrence_matrix(args.windows_size)vocab = corpus_preprocessor.get_vocab()glove = Glove(vocab, args)print(glove)if os.path.isfile(args.embed_path_pkl):glove.load_state_dict(torch.load(args.embed_path_pkl))print('载入模型{}'.format(args.embed_path_pkl))if use_gpu:glove.cuda()optimizer = torch.optim.Adam(glove.parameters(), lr=args.learning_rate)train_data = TrainData(coo_matrix,args)data_loader = DataLoader(train_data,batch_size=args.batch_size,shuffle=True,num_workers=2,pin_memory=True)steps = 0for epoch in range(args.epoches):print(f"currently epoch is {epoch + 1}, all epoch is {args.epoches}")avg_epoch_loss = 0for i, batch_data in enumerate(data_loader):c = batch_data['c']s = batch_data['s']X_c_s = batch_data['X_c_s']W_c_s = batch_data["W_c_s"]if use_gpu:c = c.cuda()s = s.cuda()X_c_s = X_c_s.cuda()W_c_s = W_c_s.cuda()W_c_s_hat = glove(c, s)loss = loss_func(W_c_s_hat, X_c_s, W_c_s)optimizer.zero_grad()loss.backward()optimizer.step()avg_epoch_loss += loss / len(train_data)if steps % 1000 == 0:print(f"Steps {steps}, loss is {loss.item()}")steps += 1print(f"Epoches {epoch + 1}, complete!, avg loss {avg_epoch_loss}.\n")save_word_vector(args.embed_path_txt, corpus_preprocessor, glove)torch.save(glove.state_dict(), args.embed_path_pkl)
这里摘抄了核心部分代码:
主要包含两部:
1、构建共现矩阵
corpus_preprocessor = CorpusPreprocess(args.train_data_path, args.min_count) coo_matrix = corpus_preprocessor.get_cooccurrence_matrix(args.windows_size)
2、输入到模型进行训练
W_c_s_hat = glove(c, s)
四、运行的结果
处理第1个原始语料文件
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\USER\AppData\Local\Temp\jieba.cache
Loading model cost 1.110 seconds.
Prefix dict has been built successfully.
Glove((c_weight): Embedding(50216, 128)(c_biase): Embedding(50216, 1)(s_weight): Embedding(50216, 128)(s_biase): Embedding(50216, 1)
)
currently epoch is 1, all epoch is 3
Steps 0, loss is 65.82528686523438
Steps 1000, loss is 30.690044403076172
NLP【05】pytorch实现glove词向量(附代码详解)相关推荐
- 数学建模二:TOPSIS法(优劣解距离法) 附代码详解
数学建模二:TOPSIS法(优劣解距离法)附代码详解 TOPSIS法(优劣解距离法)用于评价类问题. 层次分析法因为受限于一致性检验指标的数量,最多只能选择15个准则或方案.同时层次分析法也难以处理已 ...
- BraTS数据集处理详解(附代码详解)
代码参考:https://github.com/sinclairjang/3D-MRI-brain-tumor-segmentation-using-autoencoder-regularizatio ...
- 曲率高斯滤波去噪python实现(附代码详解)
曲率高斯滤波去噪python实现(附代码详解) 曲率滤波的理论基础可以参考下曲率滤波的理论基础和应用,这篇博客介绍的思想完美的避开了一大堆数学公式,简直是我的福音,但还是要细看的,不然很容易忽略重点, ...
- 嵌入层(Embedding Layer)与词向量(Word Embedding)详解
文章目录 常见的语言表示模型 词向量与Embedding区分 Embedding层--keras中的one-hot映射为 向量的层:词向量(word embedding)--一种语言模型表示方法 分布 ...
- word2vec中单词向词向量的转换过程详解
目录 前言: 1.Word2Vec两种模型的大致印象 2.CBOW模型流程举例 3.CBOW模型流程举例 总结: 目录 前言: 针对word2vec是如何得到词向量的?这篇文章肯定能解决你的疑惑.该篇 ...
- 独家总结 | KNN算法Python实现(附代码详解及注释)
↑ 点击上方[计算机视觉联盟]关注我们 上一篇已经介绍KNN算法的基本原理,这篇就不再赘述(公式太多,读不懂? 一文带你领略KNN近邻算法~简单易懂) 纸上得来终觉浅,仅仅懂了原理还不够,要用代码实践 ...
- Python文本特征提取 DictVectorizer CountVectorizer TfidfVectorizer 附代码详解
文章目录 DictVectorizer 对使用字典储存的数据进行特征提取与向量化 CountVectorizer / TfidfVectorizer 处理无特殊数据结构存储的数据 词袋模型(Bag o ...
- 独家总结 | 决策树算法Python实现(附代码详解及注释)
↑ 点击上方[计算机视觉联盟]关注我们 上一篇已经介绍过决策树基本原理机器学习经典算法决策树原理详解(简单易懂) 纸上得来终觉浅,仅仅懂了原理还不够,要用代码实践才是王道,今天小编就附上小编自己在学习 ...
- 词向量模型(word2vec) 详解
转载:https://blog.csdn.net/peghoty/article/details/37969519 pdf下载链接:https://github.com/renpengcheng-gi ...
最新文章
- 如何设置 Linux 上 SSH 登录的 Email 提醒
- 开启笔记本win7的虚拟热点,让你的本本变成wifi
- GIF发明者感染新冠后去世,没有他就没有表情包
- mysql检查备份数据脚本并在zabbix上告警
- JVM调优系列:(五)JVM常用调试参数和工具
- vc操作windows服务(services.msc)
- 《HTML5 canvas开发详解(第2版)》——1.3 本书使用的基础HTML页面
- 应用JDK 9 @不推荐使用的增强功能
- 使用encodeURl()进行编解码
- 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数
- ros melodic控制真实机械臂之moveit_setup_assistant配置
- R语言中与矩阵相关的所有操作(上)
- 疯狂的程序员——个人解读加经典语录
- excel查询mysql数据库表,?如何通过Excel查询MySQL数据库
- 【大数据处理技术】实验7(推荐林子雨老师的教程)
- 【Windows】bat | 服务 | bat作为服务 | bat转exe
- 家有千金之冰糖绿豆汤
- 软考高项-项目管理师知识点整合
- 美元对人民币汇率的大数据分析与预测
- 淘宝直播窄带高清技术
热门文章
- live555移植ARM过程
- 南昌大学计算机与信息调剂,南昌大学计算机应用技术调剂生复试经验
- UltraISOPE 9.6简体中文|单文件版|软碟通
- 计算机方向的研究生(转)
- 修改MYSQL密码问题以及修改PhpMyAdmin连接MYSQL的密码问题
- 简要介绍COBIT 5
- Prefix-Tuning: Optimizing Continuous Prompts for Generation翻译
- c语言魔塔编程,魔塔V1.0 用C语言写的魔塔小游戏 - 下载 - 搜珍网
- 云计算专业怎么样,大学应届生学的话难不难?
- linux 授信_LINUX下的用户访问授权