检索序列词向量并将其输入模型的最快方法?

对于训练,我必须提供单词向量的模型序列。每个序列平均有40个字。因此,如果我使用预训练单词嵌入的字典(例如Glove),则每个序列必须命中嵌入字典约40次,而每批序列的命中次数约为batch_size*40次。数据集被分为许多批次,整个数据集也必须迭代(时期)几次。因此,您可以想象字典将被点击多少次。 这是我已经做过的方法,确实需要很多时间。

为解决这个问题,我试图制作一个序列到向量的字典。该字典应包含一个sequence作为键,以及一个2d python列表(每一行是一个单词向量)作为键的值。希望是,我只需要查找序列并获取值即可。这应该减少很多时间,但是字典会很大(我通过将数据(序列->向量)保存在mongodb中并导出并将其导出,文件大小为23gb来估计大小)。大小为23gb的字典应该没有问题,因为我使用的是共享服务器,在其中可以分配多达100gb的内存。但是程序在加载字典时会得到killed。所以这是行不通的。

我正在考虑的另一种方法是将单词嵌入向量复制到pytorch的nn.Embedding()中。

input = torch.LongTensor([[1,2,4,5],[4,3,9]])
embedding(input)` 

此处数字是单词的索引。关于这种方法,pytorch嵌入使用numpy矩阵作为查找表。因此,我担心的是,不是执行前面的代码,numpy矩阵上会有7个匹配项吗?还是将其并行检索?即使它并行运行,也应该有另一个字典将单词转换为索引。在word2indices词典上也需要7次匹配。

那么,您如何看待,检索序列中的单词向量并馈入模型的最快,最有效的方法是什么?

wodeqiji110 回答:检索序列词向量并将其输入模型的最快方法?

第二种方法(在pytorch嵌入中复制​​权重)比使用python字典快10倍。原因是,字典中的向量每次都需要转换张量,这将花费最多的时间。

本文链接:https://www.f2er.com/3117750.html

大家都在问