根据我遇到的情况来说 首先要进行labelencoder 把每个不同的词变成变成从0开始的数字,torch.nn.embedding中的第一个参数 就是 数字个数。
例如 i think i am a good student 一共6个不同的单词0-5
from sklearn.preprocessing import LabelEncoder
s=['i' ,'think' ,'i' ,'am', 'a' ,'good' ,'student']
lbe = LabelEncoder()
s=lbe.fit_transform(s)
结果为s= [3 5 3 1 0 2 4]
然后加入代码
embedding = nn.Embedding(3, 4)
input = torch.LongTensor(s)
print(embedding(input))
报错!!!!!!!
第一个参数是3 代表你的s里最大的值需要是2 ,现在最大的值为5,则需要至少是6,如果把s里面的4改成7,则第一个参数还要改成8(最少是8,9也行),根据最大的数字来的。不过不知道设置的很大会怎么样。
tensor([[-0.4240, 1.0930, 0.2586],
[ 0.0615, -2.4276, -1.4686],
[-0.4240, 1.0930, 0.2586],
[ 1.0664, 0.5222, -0.0724],
[-2.6286, -0.0839, -0.0070],
[ 2.4751, -0.2994, 0.5401],
[ 1.1925, -0.6344, -1.5841]]
经过改成6 输入这个,第一行第三行相同,代表3这个数字,即i单词。
查的时候怎么查呢
这是个权重矩阵,需要训练的,如果要查i,就是先查他对应的索引,索引对应一行。
padding_index不为空的话就把那行回应的向量变成0.
例如 padding_idx=0,表示0对应的那行 就是单词a 给他变成0,具体用处还没学。
这个是用labelencoder使用embedding