赞
踩
nn.Embedding是一种词嵌入的方式,跟one-hot相似但又不同,会生成低维稠密向量,但是初始是随机化的,需要根据模型训练时进行调节,若使用预训练词向量模型会比较好。
one-hot是给定每个单词一个索引,然后根据输入文本是否含有这个单词来决定向量。
单词 | 索引 |
---|---|
we | 0 |
have | 1 |
are | 2 |
any | 3 |
all | 4 |
excellent | 5 |
people | 6 |
… | … |
给定“We are all excellent people”,生成one-hot向量[1,0,1,0,1,1,1,0,0,…]
nn.Embedding参数设置:
torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None, device=None, dtype=None)
其他参数并不常用,详情可以参考官网
Note, embedding只接受LongTensor类型的数据,且数据不能大于等于词典大小。
import torch
from torch import nn
embedding = nn.Embedding(10, 3) #设置字典大小为10,维度为3
input = torch.LongTensor([[0,2,0,5]]) #设置为LongTensor
vector = embedding(input)
print(vector)
import torch
from torch import nn
embedding = nn.Embedding(10, 3, padding_idx=2) #设置字典大小为10,维度为3
input = torch.LongTensor([[0,2,0,5]])
vector = embedding(input)
print(vector)
print("查看词典:",embedding.weight) #weight可以查看全部词的向量
通过结果可以看到,词向量跟字典中的向量一一对应。
import torch
from torch import nn
padding_idx = 2
embedding = nn.Embedding(10, 3, padding_idx=2) #设置字典大小为10,维度为3
input = torch.LongTensor([[0,2,0,5]])
vector = embedding(input)
with torch.no_grad():
embedding.weight[padding_idx] = torch.ones(3) #设置填充向量
print(vector)
print("查看词典:",embedding.weight) #weight可以查看全部词的向量
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。