Pytorch学习笔记(三)wordEmbedding的使用

词嵌入的作用,意义什么的我就不多说了!
你们可以去看看这篇文章:
https://www.cnblogs.com/lindaxin/p/7977406.html
我这里主要是记录了一下pytorch中关于Embedding的一些自我理解。

首先是导入包

import torch
import torch.nn as nn
from torch.autograd import Variable

然后定义你的数据

word_to_ix={"hello":0,"world":1}#用0代表hello,用1代表world

然后我们可以在这下面先加一行代码

print(torch.LongTensor([0]))

其输出为:

tensor([0])#意思就是我们可以通过torch.LongTensor([0])直接构建一个Tensor

然后开始创建初始词向量

embeds=nn.Embedding(2,5)#第一步定义词向量大小,参数一为单词个数,二为单词长度
print(embeds)

其输出为:

Embedding(2, 5)

然后构建完这个词向量

hello_idx=torch.LongTensor([word_to_ix["hello"]])#获取到能够表示hello的数字,并转为longtensor好计算
print(hello_idx)
hello_idx=Variable(hello_idx)#获得一个Variable
print(hello_idx)
hello_embeds=embeds(hello_idx)#获取到这个与“hello”对应的词向量,
print(hello_embeds)

输出为:

tensor([0])
tensor([0])
tensor([[-0.2350, -0.3750, -0.2022, -1.7609, -1.1226]],
       grad_fn=)

由此我们可以得出,前面的word_to_ix[“hello”]就真的只是0而已,只是我们人为的让0来代表hello,多了一条对应关系。

然后我们再输出一下下面的东西:

print(embeds(torch.LongTensor([0])))
print(embeds(Variable(torch.LongTensor([0]))))
print(embeds(Variable(torch.LongTensor([word_to_ix["hello"]]))))

输出为:

tensor([[-0.2350, -0.3750, -0.2022, -1.7609, -1.1226]],
       grad_fn=)#
tensor([[-0.2350, -0.3750, -0.2022, -1.7609, -1.1226]],
       grad_fn=)
tensor([[-0.2350, -0.3750, -0.2022, -1.7609, -1.1226]],
       grad_fn=)

我们可以发现这三个东西的输出是一样的,所以word_to_ix[“hello”]的作用就是给我们一个对应“hello”的数值,实际的词向量并不是由这个“hello”来生成的。因为如果你多输出几次,你就会发现词向量每次的输出都是不一样的。
而Variable的作用就只是给tensor增加一点新的功能,输出表现上并没有什么大的区别,所以我们可以把它就看成一个tensor。

最后实际上创建一个词向量的代码为:

word_to_ix={"hello":0,"world":1}
embeds=nn.Embedding(2,5)#第一步定义词向量大小,一为单词个数,二为单词长度
hello_idx=torch.LongTensor([word_to_ix["hello"]])#获取到能够表示hello的数字,并转为longtensor好计算
hello_idx=Variable(hello_idx)#获得一个Variable
hello_embeds=embeds(hello_idx)#获取到这个与“hello”对应的词向量,

如果只是想使用的话,只要会这些就够了。

你可能感兴趣的:(Pytorch,Pytorch)