Machine learning Keras中lm_1b的字符词嵌入

Machine learning Keras中lm_1b的字符词嵌入,machine-learning,nlp,keras,language-model,word-embedding,Machine Learning,Nlp,Keras,Language Model,Word Embedding,我想在Keras NN模型中使用一些预先训练好的单词嵌入,这已经由Google在一份声明中发布。他们提供了培训新模型的代码,以及嵌入 但是,文档中不清楚如何从一个简单的python函数调用中从给定的字符串(word)中检索嵌入向量。大部分文档似乎都集中在将向量转储到一个文件中,大概是为了进行情感分析 到目前为止,我已经看到您可以使用以下语法输入预训练嵌入: embedding_layer = Embedding(number_of_words??,

我想在Keras NN模型中使用一些预先训练好的单词嵌入,这已经由Google在一份声明中发布。他们提供了培训新模型的代码,以及嵌入

但是,文档中不清楚如何从一个简单的python函数调用中从给定的字符串(word)中检索嵌入向量。大部分文档似乎都集中在将向量转储到一个文件中,大概是为了进行情感分析

到目前为止,我已经看到您可以使用以下语法输入预训练嵌入:

embedding_layer = Embedding(number_of_words??,
                            out_dim=128??,
                            weights=[pre_trained_matrix_here],
                            input_length=60??,
                            trainable=False)
然而,将不同的文件及其结构转换为
这里的预训练矩阵
,我并不十分清楚

它们有几个softmax输出,因此我不确定哪一个将属于它们,而且还不确定如何将输入中的单词与它们所属的单词词典对齐


有没有一种简单的方法可以在keras中使用这些单词/字符嵌入和/或在keras中构建模型的字符/单词嵌入部分,以便为其他NLP任务添加更多的层?

对于与单词或文本编码相关的NLP应用程序,我将使用CountVectorizer或TFIDFctorizer。在以下参考资料中,这两个版本都以Python的简单方式发布和描述:


CounterVectorizer可作为垃圾邮件检测仪用于简单应用,而TfidfVectorizer可更深入地了解每个术语(单词)在文档中的频率和文档数量的相关性,这将导致术语如何被视为区分标准。本文的特征提取器可以考虑停止词删除和词义化,以提高特征表示。

< P> <代码>嵌入> /COD>层只拾取输入单词的整数索引的嵌入(权重矩阵的列),它不知道字符串。这意味着您需要首先将输入的单词序列转换为索引序列,所使用的词汇表与嵌入模型中使用的词汇表相同。

我可以使用常规的word2vec或手套向量,这里的主要兴趣是使用卷积lstm网络从字符生成单词向量,这样,OOV单词就可以通过动态计算向量得到一个很好的估计向量。我也实现了字符向量,但是他们的模型在一个大的GPU阵列上训练了几个星期,这不是我能轻易地重现的东西。你有明确的目标吗?检索嵌入向量是什么意思?通常,您只需将嵌入层保留在模型的开头。模型权重只是一个自动训练和保存的矩阵。你不可能从数据中伪造或组装它。要么你有经过训练的矩阵,要么你没有。lm_1b模型有几种不同的输出模式,可以对字符、单词、句子等进行编码。我希望创建一个简单的python函数,可以使用它们的模型将一个文本句子转换为一系列单词向量(因为模型是基于字符的,所以不会超出词汇表)。这是问题的希望。代码似乎被设置为以文件格式接收文本并将其输出到另一个文件,但在变量中从文件更改为文本的工作被证明比我想象的要多。Lnk到他们的代码&嵌入已经死了;我们帮不上什么忙。这篇论文没有脚注说明它们的存储位置他们的工作,所以我们将不得不阅读它,希望找到那个链接,这很不方便。您的代码片段来自keras embeddings:所以我可以澄清这些“?”一般来说,你的“输入长度”应该是你所有句子中单词的最大值,其他所有句子都用一个虚拟标记填充到该长度,使用标记器。Out_dim是每个嵌入的大小。Num_words=嵌入矩阵中的总单词数。谢谢你的输入Pablo。基本的tf idf方法很有用;但是,对于这个问题n我想了解更多关于将字符级功能合并到嵌入中的信息,因为许多任务都需要了解字符串“\t\uuu BestFriend\uu;”\t”与“BestFriend”非常相似(这在很大程度上取决于标记化)对于tf idf这样的简单方法不会发生。虽然我现在正在创建类似于ELMo的嵌入,但在这里,我感兴趣的是使用谷歌类似的lm1b来计算所有输入单词的嵌入,然后再将它们输入到我的任务中-最好是在运行中