【pytorch模型实现1】Skip-Gram+Neg
Word2Vec原文 https://arxiv.org/pdf/1301.3781.pdf
Skip-Gram+Neg模型实现
NLP模型代码github仓库:https://github.com/lyj157175/Models
'''
Word2Vec模型包括:CBOW, Skip-Gram
这里实现的是Skip-Gram + 负采样(NEG)模型
'''import torch
import torch.nn as nn
import torch.nn.functional as Fclass SkipGramModel(nn.Module):def __init__(self, vocab_size, embed_size):super(SkipGramModel, self).__init__()self.vocab_size = vocab_size self.embed_size = embed_size # 模型输入,输出是两个一样的矩阵参数nn.Embedding(30000, 100)self.in_embed = nn.Embedding(self.vocab_size, self.embed_size, sparse=False)self.out_embed = nn.Embedding(self.vocab_size, self.embed_size, sparse=False)# 初始化initrange = 0.5 / self.embed_sizeself.in_embed.weight.data.uniform_(-initrange, initrange)self.out_embed.weight.data.uniform_(-initrange, initrange)def forward(self, input_labels, pos_labels, neg_labels):'''input_labels: 中心词, [batch_size]pos_labels: 中心词周围出现过的单词 [batch_size * (c * 2)]neg_labelss: 中心词周围没有出现过的单词,从 negative sampling 得到 [batch_size, (c * 2 * K)]return: loss, [batch_size]'''batch_size = input_labels.size(0) input_embedding = self.in_embed(input_labels) # B * embed_sizepos_embedding = self.out_embed(pos_labels) # B * (2C) * embed_sizeneg_embedding = self.out_embed(neg_labels) # B * (2*C*K) * embed_size#(b,n,m)*(b,m,p)=(b,n,p)log_pos = torch.bmm(pos_embedding, input_embedding.unsqueeze(2)).squeeze() # B * (2*C)log_neg = torch.bmm(neg_embedding, -input_embedding.unsqueeze(2)).squeeze() # B * (2*C*K)log_pos = F.logsigmoid(log_pos).sum(1) # batch_sizelog_neg = F.logsigmoid(log_neg).sum(1) # batch_sizeloss = log_pos + log_neg # 正样本损失和负样本损失和尽量最大return -loss # batch# 模型训练有两个矩阵,self.in_embed和self.out_embed, 作者认为输入矩阵比较好# 取出输入矩阵参数def input_embeddings(self): return self.in_embed.weight.data.cpu().numpy() if __name__ == '__main__':model = SkipGramModel(30000, 100)print(model)for name, param in model.named_parameters():if param.requires_grad:print(name, ':', param.size())
【pytorch模型实现1】Skip-Gram+Neg相关推荐
- pytorch笔记: 搭建Skip—gram
skip-gram 理论部分见:NLP 笔记:Skip-gram_刘文巾的博客-CSDN博客 1 导入库 import numpy as np import torch from torch impo ...
- 《自然语言处理学习之路》02 词向量模型Word2Vec,CBOW,Skip Gram
本文主要是学习参考莫烦老师的教学,对老师课程的学习,记忆笔记. 原文链接 文章目录 书山有路勤为径,学海无涯苦作舟. 零.吃水不忘挖井人 一.计算机如何实现对于词语的理解 1.1 万物数字化 1.2 ...
- TensorFlow与PyTorch模型部署性能比较
TensorFlow与PyTorch模型部署性能比较 前言 2022了,选 PyTorch 还是 TensorFlow?之前有一种说法:TensorFlow 适合业界,PyTorch 适合学界.这种说 ...
- PyTorch 深度剖析:如何保存和加载PyTorch模型?
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨科技猛兽 编辑丨极市平台 导读 本文详解了PyTorch 模型 ...
- TensorRT和PyTorch模型的故事
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨伯恩legacy 来源丨https://zhuanlan.zh ...
- 手把手教你洞悉 PyTorch 模型训练过程,彻底掌握 PyTorch 项目实战!(文末重金招聘导师)...
(文末重金招募导师) 在CVPR 2020会议接收中,PyTorch 使用了405次,TensorFlow 使用了102次,PyTorch使用数是TensorFlow的近4倍. 自2019年开始,越来 ...
- 基于C++的PyTorch模型部署
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 PyTorch作为一款端到端的深度学习框架,在1.0版本之后 ...
- 在C++平台上部署PyTorch模型流程+踩坑实录
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文主要讲解如何将pytorch的模型部署到c++平台上的模 ...
- 如何使用TensorRT对训练好的PyTorch模型进行加速?
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨伯恩legacy@知乎 来源丨https://zhuanlan.zhihu.com/p/8831 ...
最新文章
- php中getdistance函数_php计算两个经纬度地点之间的距离
- python监控数据库_【Python】NavicatPre查询日志监控并转存数据库
- 软件开发环境-集成机制
- 【转载】并发数据结构
- ReactNative项目打包(Android IOS)
- Android 几种换肤方式和原理分析
- [世界杯]世界杯的哲学思想
- 解决Intellij IDEA部署JavaWeb项目 404问题
- java语言介绍 —(1)
- android弹窗闪退,[Android 小记] PopupWindow中放置Spinner 点击直接闪退的问题分析
- dlibdotnet 人脸相似度源代码_使用dlib中的深度残差网络(ResNet)实现实时人脸识别 - supersayajin - 博客园...
- python个数计算公式_用python计算1-100的合数的个数
- debian解决中文乱码,安装chinese font
- 【181128】VC++ MFC编写桌面放大镜工具源代码
- iOS 热敏打印机打印位图
- 网站流量日志数据分析系统与技术架构
- Python网络编程(一)
- 飞机飞行与碰撞问题matlab,建模案例—飞行管理问题.ppt
- python节日贺卡图片_节日贺卡图片制作手工
- 如何在CMD下运用管理员权限