文本嵌入层

目录

1、文本嵌入层的作用

2、代码演示

3、构建Embeddings类来实现文本嵌入层


1、文本嵌入层的作用

  • 无论是源文本嵌入层还是目标文本嵌入,都是为了将文本词汇中的数字表示转变为向量表示,希望在这样的高维空间中捕捉词汇之间的关系

2、代码演示

Embedding(10,3)中的第一个参数10代表的是词表的大小,即词表中不同单词的数量

词表中有10个不同的单词,每个单词都被映射成一个长度为3的向量

embedding = nn.Embedding(10,3)
print(embedding)
input = torch.LongTensor([[1,2,3,4],[4,3,2,9]])
embedding(input)

文本嵌入层_第1张图片

3、构建Embeddings类来实现文本嵌入层

# 构建Embedding类来实现文本嵌入层
class Embeddings(nn.Module):
    def __init__(self,vocab,d_model):
        """
        :param vocab: 词表的大小
        :param d_model: 词嵌入的维度
        """
        super(Embeddings,self).__init__()
        self.lut = nn.Embedding(vocab,d_model)
        self.d_model = d_model
    def forward(self,x):
        """
        :param x: 因为Embedding层是首层,所以代表输入给模型的文本通过词汇映射后的张量
        :return:
        """
        return self.lut(x) * math.sqrt(self.d_model)
x = Variable(torch.LongTensor([[100,2,42,508],[491,998,1,221]]))
emb = Embeddings(1000,512)
embr = emb(x)
print(embr.shape)
print(embr)
print(embr[0][0].shape)

文本嵌入层_第2张图片

在代码 emb = Embeddings(1000,512) 中,1000是词表的大小,即词表中不同单词的数量。在这个例子中,词表中有1000个不同的单词,每个单词都被映射成一个长度为512的向量。在实际应用中,词表的大小可能会更大或更小,具体大小取决于使用场景和任务需求

embr.shape为torch.Size([2, 4, 512]),代表有2个句子,每个句子有4个单词,每个单词的embedding维度为512

文本嵌入层_第3张图片

你可能感兴趣的:(Tranformers,深度学习,python,机器学习)