词嵌入的作用,意义什么的我就不多说了!
你们可以去看看这篇文章:
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=<EmbeddingBackward>)
由此我们可以得出,前面的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=<EmbeddingBackward>)#
tensor([[-0.2350, -0.3750, -0.2022, -1.7609, -1.1226]],
grad_fn=<EmbeddingBackward>)
tensor([[-0.2350, -0.3750, -0.2022, -1.7609, -1.1226]],
grad_fn=<EmbeddingBackward>)
我们可以发现这三个东西的输出是一样的,所以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”对应的词向量,
如果只是想使用的话,只要会这些就够了。