在 Tensorflow 中加载预训练的 Word2Vec 嵌入

Load Pretrained Word2Vec Embedding in Tensorflow

我正在尝试加载预训练的 Word2Vec(或 Glove)嵌入到我的 Tensorflow 代码中,但是我在理解它时遇到了一些问题,因为我找不到很多示例。问题不在于获取和加载我理解的嵌入矩阵,而在于查找单词 id。 目前我正在使用 https://ireneli.eu/2017/01/17/tensorflow-07-word-embeddings-2-loading-pre-trained-vectors/ 中的代码。 在那里,首先加载(理解)嵌入矩阵。 然后,使用词汇处理器将句子 x 转换为单词 ID 列表:

vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length)
#fit the vocab from glove
pretrain = vocab_processor.fit(vocab)
#transform inputs
x = np.array(list(vocab_processor.transform(your_raw_input)))

这有效并为我提供了单词 ID 列表,但我不知道这是否正确。最让我困扰的是词汇处理器如何从我刚刚阅读的嵌入中获取正确的单词 ID(否则嵌入的结果将是错误的)。 拟合步骤会这样做吗?

或者还有其他方法吗,你是怎么做这个查找的?

谢谢! 奥利弗

是的,fit 步骤告诉 vocab_processor vocab 数组中每个单词(从 1 开始)的 indextransform 只是反转了这个查找并从单词中生成索引并使用 0 将输出填充到 max_document_size.

您可以在此处的一个简短示例中看到:

vocab_processor = learn.preprocessing.VocabularyProcessor(5)
vocab = ['a', 'b', 'c', 'd', 'e']
pretrain = vocab_processor.fit(vocab)

pretrain == vocab_processor
# True

np.array(list(pretrain.transform(['a b c', 'b c d', 'a e', 'a b c d e'])))

# array([[1, 2, 3, 0, 0],
#        [2, 3, 4, 0, 0],
#        [1, 5, 0, 0, 0],
#        [1, 2, 3, 4, 5]])
#