Word2Vec的PyTorch实现(乞丐版)

Word2Vec的PyTorch实现(乞丐版),第1张

这里主要进行分词,词汇表构造以及词汇索引构造

包括 batch_size, embedding_size, 窗口大小和词汇表大小

这里就是将数据包装为torchutilsdataDataset类,并且用DataLoader类来加载数据

假设所有文本分词,转为索引之后的 list 如下图所示

根据论文所述,我这里设定 window size=2,即每个中心词左右各取 2 个词作为背景词,那么对于上面的 list,窗口每次滑动,选定的中心词和背景词如下图所示

那么 skip_grams 变量里存的就是中心词和背景词一一配对后的 list,例如中心词 2,有背景词 0,1,0,1,一一配对以后就会产生 [2,0],[2,1],[2,0],[2,1]。skip_grams 如下图所示

由于 Word2Vec 的输入是 one-hot 表示,所以我们先构建一个单位矩阵,利用 npeye(rows) 方法,其中的参数 rows 表示单位矩阵的行数,对于这个问题来说,语料库中总共有多少个单词,就有多少行。

然后根据 skip_grams 每行第一列的值,取出相应的行。将这些取出的行,append 到一个 list 中去,最终的这个 list 就是所有的样本 X(即one-hot表示)。标签不需要 one-hot 表示,只需要类别值,所以只用把 skip_grams 中每行的第二列取出来存起来即可

最后第三步就是构建 dataset,然后定义 DataLoader

模型架构图:

注意,隐层的激活函数是线性的,相当于没做任何处理。训练这个神经网络,用反向传播算法(本质上是链式求导)

Date: 2020/10/12

Coder: CW

Foreword:

在将模型用于推断时,我们通常都会将 modeleval() 和 torchno_grad() 一起使用,那么这两者可否单独使用?它们的区别又在哪里?你清楚吗?之前 CW 对这块也有些迷糊,于是自己做了实验,最终得到了结论,实验过程就不在本文叙述了,仅抛出结论作为参考。

Pytorch 的模型都继承自 torchnnModule ,这个类有个 training 属性,而这个方法会将这个属性值设置为False,从而影响一些模型在前向反馈过程中的 *** 作,比如 BN 和 Dropout 层。在这种情况下,BN层不会统计每个批次数据的均值和方差,而是直接使用在基于训练时得到的均值和方差;Dropout层则会让所有的激活单元都通过。

同时, 梯度的计算不受影响 ,计算流依然会存储和计算梯度, 反向传播后仍然能够更新模型的对应的权重 (比如BN层的weight和bias依然能够被更新)。

通常是通过上下文的形式使用:

这种情况将停止autograd模块的工作,即 不会自动计算和存储梯度 ,因此 能够起到加速计算过程和节省显存的作用 ,同时也说明了 不能够进行反向传播以更新模型权重 。

由上可知,在推断时将 modeleval() 与 torchno_grad() 搭配使用,主要是出于以下几点考虑:

i) 模型中使用了诸如 BN 和 Dropout 这样的网络层,需要使用 modeleval() 来改变它们在前向过程中的 *** 作;

ii) 为了加速计算过程和节省显存,使用torchno_grad()

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。

2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:

1、具有强大的GPU加速的张量计算(如NumPy);

2、包含自动求导系统的深度神经网络。

优点

1、PyTorch是相当简洁且高效快速的框架;

2、设计追求最少的封装;

3、设计符合人类思维,它让用户尽可能地专注于实现自己的想法;

4、与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新;

5、PyTorch作者亲自维护的论坛供用户交流和求教问题;

6、入门简单。

扩展资料:

模块

1、Autograd模块

PyTorch使用一种称为自动微分的方法。记录器记录已执行的 *** 作,然后向后重播以计算梯度。当构建神经网络以通过计算前向传递参数的微分来节省一个时间时,此方法特别强大。

2、Optim模块

torchoptim是实现用于构建神经网络的各种优化算法的模块。大多数常用方法已受支持,因此无需从头开始构建它们。

3、nn模块

PyTorchautograd使定义计算图和获取梯度变得容易,但是原始的autograd对于定义复杂的神经网络而言可能太低了。这是nn模块可以提供帮助的地方。

以上就是关于Word2Vec的PyTorch实现(乞丐版)全部的内容,包括:Word2Vec的PyTorch实现(乞丐版)、【Pytorch】model.eval() vs torch.no_grad()、pytorch是什么_pytorch是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9608812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存