我是靠谱客的博主 幽默海燕,最近开发中收集的这篇文章主要介绍利用pytorch_pretrained_bert得到wordEmbedding (batch_size,1024),保存为稀疏矩阵sparse.dok_matrix( ),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1.注意本方法只适用于保存2维embedding
因为直接将完整的Bert加入到其他模型中,训练时会出现内存不够用的情况,考虑将通过Bert得到的Embedding保存为文件,再在其他模型中导入使用,试过很多保存的方法(numpy.savetxt等),都不成功,最后采用稀疏矩阵sparse.dok_matrix的方式保存wordEmbdedding,然后利用toarray()方法转换为矩阵形式,发现这是一个不错的方法。
2.使用pytorch_pretrained_bert得到embedding的简单流程
//st为一行文本,多行文本加个for循环即可
from pytorch_pretrained_bert import BertTokenizer,BertModel
test_input_ids=[]
tokenizer = BertTokenizer.from_pretrained('bert-large-uncased', do_lower_case=True)
text = tokenizer.tokenize(st)
text_id=tokenizer.convert_tokens_to_ids(text)
test_input_ids.append(text_id)
model=BertModel.from_pretrained('bert-large-uncased')
Input_ids = torch.tensor(test_input_ids).view(1, len(test_input_ids[i]))
//pooled_output即为embedding= [1,分词长度,1024]
all_encoder_layers, pooled_output = model(Input_ids)
//然后将pooled_output降维成[分词长度,1024],再按行累加得到一个embedding=[1,1024]
//传入多行文本,即得到embedding=[batch_size,1024]
3.保存Bert得到的Embedding
import scipy.sparse as sparse
//注意通过Bert之后得到Embedding我处理成了(batch_size,1024)的形式
//每一行代表一个文档向量
//embedding是一个(batch_size,1024)的list
sparse_raw_matrix = sparse.dok_matrix((batch_size,1024))
for i in range(0,batch_size):
for j in range(1024):
sparse_raw_matrix[i,j]=embedding[i][j]
sparse.save_npz('embedding.npz', sparse_raw_matrix.tocsr())
4.导入Embedding
import scipy
from scipy import sparse
test=scipy.sparse.load_npz('embedding.npz')
test=test.toarray()
最后
以上就是幽默海燕为你收集整理的利用pytorch_pretrained_bert得到wordEmbedding (batch_size,1024),保存为稀疏矩阵sparse.dok_matrix( )的全部内容,希望文章能够帮你解决利用pytorch_pretrained_bert得到wordEmbedding (batch_size,1024),保存为稀疏矩阵sparse.dok_matrix( )所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复