pytorch 的embeding

pytorch提供word embeding的功能来构建词向量,非稀疏向量。我们来看看他的定义方式:

import torch.nn as NN
import torch
from torch.autograd import Variable
embeding=NN.Embedding(6,5)
print(embeding.weight)

输出:

Parameter containing:
tensor([[ 1.8258, -1.8348, -1.2096,  1.0891,  0.0996],
        [ 0.3915,  0.6089,  1.4112,  0.2724, -0.3034],
        [ 1.3619,  0.2148, -0.2694, -0.6444, -0.6987],
        [ 1.4956,  0.3266, -0.3316, -0.9657,  0.6713],
        [ 0.3749, -0.9375, -0.8220, -1.3379,  0.1247],
        [-1.4812,  0.1289,  0.8787, -1.0455,  0.9147]])

这里NN.Embedding(6,5)两个参数第一个是指词典中词的个数,后面一个是词向量维度。如输出所示这样我们就构建一个词典大小为6,向量维度为5的向量库。

词典应该怎么构造呢?词典应该有词和索引,所以可以用dict来构造:

word_to_index={'中':[0],'国':[1],'我':[2],'的':[3],'母':[4],'亲':[5]}

注意,key是中文字符,value要是list。这个词典大小为6,,那么可以用定义好的embedding来构造词向量:

index=Variable(torch.LongTensor(word_to_index['中']))
print(embeding(index))

输出

tensor([[ 0.8598,  0.3122,  0.8926, -0.9521,  0.1800]])

这就得到‘中’这个字的word vector。

同理sentence vector可以如下表示:

index=[word_to_index['中'],word_to_index['国'],word_to_index['我'],word_to_index['的'],word_to_index['母'],word_to_index['亲']]
index=Variable(torch.LongTensor(index))
print(embeding(index))

输出

tensor([[[-0.2161,  0.2320,  0.2735, -0.1969, -0.7603]],

        [[ 1.0680,  1.1965,  0.6511,  1.4256, -0.7490]],

        [[ 0.3841, -0.5595, -0.9003, -1.2678, -1.4317]],

        [[ 1.2867,  0.0704,  0.4049, -1.6118,  0.7231]],

        [[-0.8996,  0.3947,  0.3799,  0.1408, -0.3430]],

        [[ 2.0890,  0.6255,  0.7351, -0.4562, -1.0978]]])

可见embedding的原理就是随机生成词向量给每个词。

你可能感兴趣的:(pytorch,深度学习,python,nlp)