我是靠谱客的博主 幽默海燕,这篇文章主要介绍利用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的简单流程

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
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

复制代码
1
2
3
4
5
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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部