【发布时间】:2017-10-31 15:13:43
【问题描述】:
我想在 Keras NN 模型中使用一些预训练的词嵌入,这些模型已由 Google 在 very well known article 中发布。他们提供了训练新模型的代码,以及嵌入 here。
但是,从文档中不清楚如何从简单的 python 函数调用中从给定的字符串(单词)中检索嵌入向量。大部分文档似乎都集中在将向量转储到一个文件中,以获取整个句子,大概是为了进行情感分析。
到目前为止,我已经看到您可以使用以下语法输入预训练的嵌入:
embedding_layer = Embedding(number_of_words??,
out_dim=128??,
weights=[pre_trained_matrix_here],
input_length=60??,
trainable=False)
但是,我不太清楚将不同的文件及其结构转换为 pre_trained_matrix_here。
他们有几个 softmax 输出,所以我不确定哪个属于 - 以及如何将我输入中的单词与他们拥有的单词字典对齐。
是否有一种简单的方法可以在 keras 中使用这些词/字符嵌入和/或在 keras 中构建模型的字符/词嵌入部分,以便可以为其他 NLP 任务添加更多层?
【问题讨论】:
-
我可以得到常规的 word2vec 或 glove 向量来工作,这里的主要兴趣是使用卷积 lstm 网络从字符中生成词向量,这样 OOV 词就会得到一个很好的估计向量本质上是即时计算矢量。我也实现了字符向量,但他们的模型在大量 GPU 上训练了数周,这不是我可以轻松重现的。
-
你有明确的目标吗?检索嵌入向量是什么意思?通常你只是将嵌入层保留在模型的开头。模型权重只是一个自动训练和保存的矩阵。您不可能从数据中伪造或组装它。要么你有训练好的矩阵,要么你没有。
-
lm_1b 模型有几种不同的输出模式,可以对字符、单词、句子等进行编码。我希望创建一个简单的 python 函数,使用他们的模型将句子转换为一系列词向量(不会超出词汇表,因为模型是基于字符的)。这是对问题的希望。代码似乎设置为接收文件格式的文本并将其输出到另一个文件,但事实证明,将其从文件更改为变量中的文本比我想象的要多。
-
链接到他们的代码和嵌入已经死了;我们无能为力。该论文没有脚注说明他们将工作存储在何处,因此我们将不得不阅读它以希望找到该链接,这很不方便。您的代码 sn-p 来自 keras 嵌入:keras.io/layers/embeddings 所以我可以澄清那些“??”在一般意义上。您的 `input_length' 应该是所有句子中的最大单词数,所有其他句子都使用 Tokenizer keras.io/preprocessing/text 填充到该长度的虚拟标记。 Out_dim 是每个嵌入的大小。 Num_words = 嵌入矩阵中的总字数。
标签: machine-learning nlp keras language-model word-embedding