nn.embedding笔记

文章介绍了nn.embedding在自然语言处理中的作用,包括将token转化为向量,并分为使用预训练和初始化两种情况。在BERT模型中,即使有预训练的词向量,仍需要通过BERT来考虑上下文语义。nn.embedding会生成随机初始化的词向量,通过模型训练调整以学习到更好的表示。
摘要由CSDN通过智能技术生成
nn.embedding介绍

embedding就是词嵌入,将一个token转化为一个向量,其通常作为nlp模型的一个层.我们通常使用的nn.embedding通常分为两种情况:

①使用别人训练好的nn.embedding,这个时候通过nn.embedding我们能拿到每个token对应的正确向量。

②使用初始化的nn.embedding,这时生成的词向量只是随机的,没有任何意义,然后搭配bert、transformer、rnn等模型使用,在这些模型的训练过程种调整embedding层的参数,拿到正确表示token的词向量。

那么问题来了:

问题:bert不是可以用来为token生成词向量吗?那为什么在传入bert模型之前,就先将token词向量化呢,这个向量化有什么意义呢?

借助别人的图理解一下,图中红色箭头就是nn.embedding操作,将传入bert之前将token向量化,这么做也很为上述的两种情况:

①使用别人训练好的nn.embedding时:这种情况下,虽然这个embedding是别人训练好的,但是如果我们抽取特征生成词向量时,是需要考虑语义背景的呀,随意还是需要用bert去搞一下,抽背景。

②使用初始化的embedding时:其先构建一个vocab_size*num_hiddens的权重矩阵,然后随机初始化生成一组词向量,然后将随机初始化的词向量丢到bert里面,当bert训练时,在来调整权重矩阵,使其具备学习能力。

示例说明:

import torch
import torch.nn as nn
mlm_positions = torch.LongTensor([[1, 5, 2], [6, 1, 5]])
embedding = nn.Embedding(7, 4)
print(mlm_positions)
print(embedding(mlm_positions))

第一次运行结果:

tensor([[1, 5, 2],
        [6, 1, 5]])
tensor([[[-0.7632, -1.0630, -0.7553, -0.3377],
         [ 0.8528, -1.4378,  0.0234, -0.0140],
         [ 0.7554,  1.1693, -0.8603, -0.0214]],

        [[ 0.1808,  1.1702,  0.0485,  0.1899],
         [-0.7632, -1.0630, -0.7553, -0.3377],
         [ 0.8528, -1.4378,  0.0234, -0.0140]]], grad_fn=<EmbeddingBackward0>)

第二次运行结果

tensor([[1, 5, 2],
        [6, 1, 5]])
tensor([[[-0.9527,  1.1274,  0.0626, -1.6937],
         [-0.1026,  0.0796,  0.5292,  1.0623],
         [-0.2766,  1.6665,  0.9931,  1.7672]],

        [[-0.5824,  0.8142,  1.5110, -0.3676],
         [-0.9527,  1.1274,  0.0626, -1.6937],
         [-0.1026,  0.0796,  0.5292,  1.0623]]], grad_fn=<EmbeddingBackward0>)

可以看到nn.embedding每次生成的词向量(初始化)都不相同,需要搭配具体的任务调整权重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值