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相关推荐

  1. pytorch笔记: 搭建Skip—gram

    skip-gram 理论部分见:NLP 笔记:Skip-gram_刘文巾的博客-CSDN博客 1 导入库 import numpy as np import torch from torch impo ...

  2. 《自然语言处理学习之路》02 词向量模型Word2Vec,CBOW,Skip Gram

    本文主要是学习参考莫烦老师的教学,对老师课程的学习,记忆笔记. 原文链接 文章目录 书山有路勤为径,学海无涯苦作舟. 零.吃水不忘挖井人 一.计算机如何实现对于词语的理解 1.1 万物数字化 1.2 ...

  3. TensorFlow与PyTorch模型部署性能比较

    TensorFlow与PyTorch模型部署性能比较 前言 2022了,选 PyTorch 还是 TensorFlow?之前有一种说法:TensorFlow 适合业界,PyTorch 适合学界.这种说 ...

  4. PyTorch 深度剖析:如何保存和加载PyTorch模型?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨科技猛兽 编辑丨极市平台 导读 本文详解了PyTorch 模型 ...

  5. TensorRT和PyTorch模型的故事

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨伯恩legacy 来源丨https://zhuanlan.zh ...

  6. 手把手教你洞悉 PyTorch 模型训练过程,彻底掌握 PyTorch 项目实战!(文末重金招聘导师)...

    (文末重金招募导师) 在CVPR 2020会议接收中,PyTorch 使用了405次,TensorFlow 使用了102次,PyTorch使用数是TensorFlow的近4倍. 自2019年开始,越来 ...

  7. 基于C++的PyTorch模型部署

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 PyTorch作为一款端到端的深度学习框架,在1.0版本之后 ...

  8. 在C++平台上部署PyTorch模型流程+踩坑实录

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文主要讲解如何将pytorch的模型部署到c++平台上的模 ...

  9. 如何使用TensorRT对训练好的PyTorch模型进行加速?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨伯恩legacy@知乎 来源丨https://zhuanlan.zhihu.com/p/8831 ...

最新文章

  1. php中getdistance函数_php计算两个经纬度地点之间的距离
  2. python监控数据库_【Python】NavicatPre查询日志监控并转存数据库
  3. 软件开发环境-集成机制
  4. 【转载】并发数据结构
  5. ReactNative项目打包(Android IOS)
  6. Android 几种换肤方式和原理分析
  7. [世界杯]世界杯的哲学思想
  8. 解决Intellij IDEA部署JavaWeb项目 404问题
  9. java语言介绍 —(1)
  10. android弹窗闪退,[Android 小记] PopupWindow中放置Spinner 点击直接闪退的问题分析
  11. dlibdotnet 人脸相似度源代码_使用dlib中的深度残差网络(ResNet)实现实时人脸识别 - supersayajin - 博客园...
  12. python个数计算公式_用python计算1-100的合数的个数
  13. debian解决中文乱码,安装chinese font
  14. 【181128】VC++ MFC编写桌面放大镜工具源代码
  15. iOS 热敏打印机打印位图
  16. 网站流量日志数据分析系统与技术架构
  17. Python网络编程(一)
  18. 飞机飞行与碰撞问题matlab,建模案例—飞行管理问题.ppt
  19. python节日贺卡图片_节日贺卡图片制作手工
  20. 如何在CMD下运用管理员权限

热门文章

  1. Ubuntu mysql 重置密码
  2. 想学python爬虫,有没有推荐的书籍?
  3. 如何检索下载英文文献
  4. Python小白的数学建模课-01.新手必读
  5. 数字雨C++代码(转)
  6. Bootstrap样式之表单样式
  7. 【信息管理学基础】总论-复习提纲
  8. JAVA移位运算符-左移、右移、无符号右移 (简解)
  9. 驱动人生,FUCK YOU,有没有底线呀
  10. Java直接量(字面量)