nlp中使用预训练的词向量和随机初始化的词向量的区别在哪里?

当你训练数据不充足的时候,可以直接使用别人已经预训练好的词向量,也可以根据自己的训练数据微调(fine-tuning)预训练词向量,也可以把词向量和整个模型一块训练,但是通常预训练的词向量我们不会再在训练的过程中进行更新。

当你的训练数据比较充足的时候,并且想让词向量能更好的捕捉自己的训练数据的语义信息时,应该使用随机初始化的词向量。当然,随机初始化的词向量必须要在训练网络的过程中不断进行更新,就和神经网络的权重参数一样进行训练。

例子:

1.直观展示

1
2
3
4
5
6
7
8
9
10
11
12
import torch
from torch import nn
from torch.autograd import Variable
###random
embeds = nn.Embedding(2, 5)
print(embeds.weight)
embeds = nn.Embedding(2, 5)
print(embeds.weight)
###from pretrain
weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]])
embedding = nn.Embedding.from_pretrained(weight)
print(embedding.weight)
1
2
3
4
5
6
7
8
9
Parameter containing:
tensor([[-0.1754, 1.6604, -1.5025, -1.0980, -0.4718],
[-1.1276, 0.1408, -1.0746, -1.2768, -0.6789]], requires_grad=True)
Parameter containing:
tensor([[-0.7366, 0.0607, 0.6151, 0.2282, 0.3878],
[-1.1365, 0.1844, -1.1191, -0.8787, -0.5121]], requires_grad=True)
Parameter containing:
tensor([[1.0000, 2.3000, 3.0000],
[4.0000, 5.1000, 6.3000]])

2.n-gram

1
2
3
self.embedding = nn.Embedding.from_pretrained(config.embedding_pretrained, freeze=False)
self.embedding_ngram2 = nn.Embedding(config.n_gram_vocab, config.embed)
self.embedding_ngram3 = nn.Embedding(config.n_gram_vocab, config.embed)

参考

https://www.zhihu.com/question/337950427

nlp中使用预训练的词向量和随机初始化的词向量的区别在哪里?

http://example.com/2021/07/28/word-emb-add/

Author

Lavine Hu

Posted on

2021-07-28

Updated on

2021-11-26

Licensed under

Comments

:D 一言句子获取中...