Python 检索序列的字向量并输入模型的最快方法?

Python 检索序列的字向量并输入模型的最快方法?,python,dictionary,nlp,pytorch,word-embedding,Python,Dictionary,Nlp,Pytorch,Word Embedding,为了进行训练,我必须输入单词向量的模型序列。每个序列平均有40个单词。因此,如果我使用预先训练好的单词嵌入词典(如手套),对于每个序列,必须命中嵌入词典大约40次,对于每个批次,大约是batch\u size*40次。数据集被分成多个批次,整个数据集也必须迭代(历元)几次。所以,你可以想象字典会被点击多少次。 这是我已经做过的方法,它确实花费了很多时间 为了解决这个问题,我尝试制作一个从序列到向量的字典。此字典应包含一个序列作为键,以及一个2d python列表(每行是一个单词向量)作为键的值。

为了进行训练,我必须输入单词向量的模型序列。每个序列平均有40个单词。因此,如果我使用预先训练好的单词嵌入词典(如手套),对于每个序列,必须命中嵌入词典大约40次,对于每个批次,大约是
batch\u size*40次。数据集被分成多个批次,整个数据集也必须迭代(历元)几次。所以,你可以想象字典会被点击多少次。
这是我已经做过的方法,它确实花费了很多时间

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

我正在考虑的另一种方法是将单词embedding vector复制到pytorch的nn.embedding()中

这里的数字是这个词的索引。对于这种方法,pytorch嵌入使用numpy矩阵作为查找表。所以,我关心的是,不是为了执行前面的代码,numpy矩阵上会有7次点击?或者它将被并行检索?即使它并行运行,也应该有另一个字典将单词转换为索引。这也需要在Word2Indicates字典上点击7次


那么,您认为,检索序列的词向量并将其输入模型的最快、最有效的方法是什么?

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

我相信PyTorch会做得很有效率。为什么不自己测量时间你可以在ipython中使用。
input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
embedding(input)`