加载glove或者word2vec训练好的词向量进行训练LSTM等模型的训练
Posted Icy Hunter
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加载glove或者word2vec训练好的词向量进行训练LSTM等模型的训练相关的知识,希望对你有一定的参考价值。
学着学着就会发现数据预处理是一件很头疼的事情,不过对于自然语言处理这块,torchtext确实挺好用的。
可以使用torchtext来加载词向量然后直接初始化模型的embedding层就达到目的了。
加载glove词向量
这个比较方便
下面仅展示思路,代码不能跑
import torchtext
# 定义一个field,用于数据预处理(切词等)
TEXT = torchtext.data.Field(sequential=True, tokenize=tokenizer, lower=True, fix_length=self.config.max_length)
# 对训练数据创建一个字典,出现最多的前10000个单词,词向量为100d的,如果没有会自己下载的
TEXT.build_vocab(train_data, max_size=10000, vectors='glove.6B.100d') # max_size出现频率最高的 k 个单词,加载100d的词向量
# 把词向量保存,便于之后的初始化embedding层
self.pretrained_embedding = TEXT.vocab.vectors # 保存词向量
#(这是在一个dataset类里摘出来的)
model = myLSTM(vocab_size, config) # 训练模型时需要先实例化模型
model.embeddings.weight.data.copy_(dataset.pretrained_embedding) # 使用训练好的词向量初始化embedding层( 语句:模型.模型里自己定义的embedding层.weight.data.copy_(训练好的词向量) )
这样就能加载词向量模型进行训练了,但是我相信一定还是云里雾里,这种东西还是完整的实例比较能理解。
基于pytorch构建双向LSTM(Bi-LSTM)文本情感分类实例(使用glove词向量)
这里面有完整实例,应该会比较好理解。
加载word2vec词向量
首先需要自己训练词向量或者用别人已经训练好的词向量,这里自己训练。
from gensim.models.word2vec import Word2Vec
# text即为待训练的词
model = Word2Vec(text, min_count=1) # 训练词向量模型
model.wv.save_word2vec_format("vector.txt") # 保存为.txt后缀的文件
这里比较抽象,可以看
使用jieba对新闻标题进行切词,然后使用word2vec训练词向量及相似词计算的一个小例子
应该就知道怎么训练了。
然后就可以使用torchtext加载了。
# 读取词向量name为词向量文件名,cathe为缓存路径名,这里为保存在当前目录下的datasets的文件下
vectors = torchtext.vocab.Vectors(name="vector.txt", cache="./datasets")
TEXT.build_vocab(train_data, max_size=25000) # 构建词表,和glove那一样
TEXT.vocab.set_vectors(vectors.stoi, vectors.vectors, vectors.dim) # 替换向量为word2vec
self.pretrained_embedding = torch.FloatTensor(TEXT.vocab.vectors) # 稍微变换了一下数据类型然后也是在类里保存下来,模型初始化的时候调用就可以了。
本文参考
PyTorch在NLP任务中使用预训练词向量
pytorch中加载预训练gensim之word2vec模型
其实这两篇文章已经讲的够清楚了,只是想加深一下自己的印象就自己捋一遍思路好了。
以上是关于加载glove或者word2vec训练好的词向量进行训练LSTM等模型的训练的主要内容,如果未能解决你的问题,请参考以下文章