PyTorch中的nn.Embedding怎么用

import torch
import torch.nn as nn

instr = "词嵌入怎么用?"
print("原句子为:", instr)

# 该查找表即为极简词汇表(vocabulary)
lookup_table = list("啊窝饿词入嵌怎用么?")
print("词汇表(极简版)为:", lookup_table)

inp = []
for ch in instr:
    inp.append(lookup_table.index(ch))
print("经过查找表之后,原句子变为:", inp)

inp = torch.tensor(inp)
embedding_dim = 3
emb = nn.Embedding(
    num_embeddings=len(lookup_table),
    embedding_dim=embedding_dim)

print("最终结果:")
print(emb(inp))
print("词嵌入就是这样用的!")

        定义embedding对象的时候主要设置两个参数:

        第一个是词汇表的大小,也就是说输入的向量最大值+1为多少,比如上述例子中,词汇表大小为10,那么第一个参数就为10;

        第二个参数,嵌入维度的大小,也就是想要把这些词嵌入到多少维的空间中去,这里选择的是3。

        要注意的是,embedding定义完成之后,直接将文字输入进去显然是不行的,这里需要借助词汇表(就是上述代码中的查找表)将句子中的每一个单位转变为一个ID,即整数。转换完成之后,句子变为:

[3, 5, 4, 6, 8, 7, 9]

之后,使用该数组,使用torch.tensor初始化一个张量(其实严格来说应该是LongTensor,但是实测普通的也可以),要注意的是,每一个数值必须是整形。

        那么上述的代码最终输出即为:

原句子为: 词嵌入怎么用?
词汇表(极简版)为: ['啊', '窝', '饿', '词', '入', '嵌', '怎', '用', '么', '?']
经过查找表之后,原句子变为: [3, 5, 4, 6, 8, 7, 9]
最终结果:
tensor([[ 1.7100, -1.1664, -1.0826],
        [ 0.4269,  0.0083,  0.1705],
        [ 0.5437,  0.4313, -0.3120],
        [-1.2683,  1.1118, -0.3076],
        [-0.1764,  1.1064,  0.5663],
        [-1.0042, -1.8506, -0.0175],
        [-0.9052,  0.5412, -0.2921]], grad_fn=)
词嵌入就是这样用的!

        可以看到,嵌入模块将原句子嵌入成为了一个7 x 3的张量 ,7为句子长度,3为定义的嵌入维度。

你可能感兴趣的:(自然语言处理,python)