一般先将原始的文本数据进行初步的词嵌入,再进行模型训练, pytorch也提供了基本的词嵌入方法
CLASStorch.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)
- num_embeddings (int) – 嵌入字典的大小
- embedding_dim (int) – 每个嵌入向量的大小
- padding_idx (int, optional) – 一般每个句子的长度并不一定是等长的, 这时候就需要对较短的句子进行padding, 填充的数据一般是0, 这个时候, 在进行词嵌入的时候就会进行相应的处理, nn.embedding会将填充的映射为0。
- max_norm (float, optional) – 如果给定,则范数大于 max_norm 的每个嵌入向量被重新归一化为具有范数 max_norm。
- norm_type (float, optional) – 要为 max_norm 选项计算的 p-norm 的 p。 默认 2。
- scale_grad_by_freq (boolean, optional) – 如果给定,这将通过小批量中单词频率的倒数来缩放梯度。 默认假。
- sparse (bool, optional) – 如果为真,梯度 w.r.t。 权重矩阵将是一个稀疏张量。 有关稀疏渐变的更多详细信息,请参阅注释。
from torch import nn
import torch
embedding = nn.Embedding(10, 3)
input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
embedding(input)
out:
tensor([[[ 0.3040, -0.3165, 0.0080],
[ 1.2770, -0.2045, 1.7190],
[ 1.0553, 0.6021, -3.0911],
[-0.3720, -0.3444, -0.9037]],
[[ 1.0553, 0.6021, -3.0911],
[ 0.4253, -1.2449, -1.1100],
[ 1.2770, -0.2045, 1.7190],
[-1.0984, 0.9042, 2.2761]]], grad_fn=<EmbeddingBackward>)
# 指定 padding_idx
embedding = nn.Embedding(10, 3, padding_idx=0)
input = torch.LongTensor([[0,2,0,5]])
embedding(input)
out:
tensor([[[ 0.0000, 0.0000, 0.0000],
[ 0.9870, -2.0431, 0.4894],
[ 0.0000, 0.0000, 0.0000],
[-1.9090, -1.2980, -0.7313]]], grad_fn=<EmbeddingBackward>)
完结。。。
版权声明:本文为weixin_36893273原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。