我是靠谱客的博主 幽默海燕,最近开发中收集的这篇文章主要介绍利用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( )所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部