Keras 如何在预训练的ELMO嵌入中获得相似的单词?

Keras 如何在预训练的ELMO嵌入中获得相似的单词?,keras,deep-learning,nlp,word-embedding,elmo,Keras,Deep Learning,Nlp,Word Embedding,Elmo,如何在预训练的ELMO嵌入中获得给定单词的相似单词?例如:在Glove中,我们有Glove_model.most_similor()来查找最相似的单词及其对任何给定单词的嵌入。 类似地,我们在ELMO中有什么吗?与GloVe不同,GloVe在有限的词汇表中为每个单词提供单独的条目,ELMO使用字符级CNN动态计算单词嵌入,因此理论上,ELMO应该能够处理无限的词汇表。实际上,它只适用于在训练过程中遇到的单词以及与它们相似的单词,但它仍然能够获得向量或任意字符串 所以,像手套一样拥有一种方法是没有

如何在预训练的ELMO嵌入中获得给定单词的相似单词?例如:在Glove中,我们有Glove_model.most_similor()来查找最相似的单词及其对任何给定单词的嵌入。
类似地,我们在ELMO中有什么吗?

与GloVe不同,GloVe在有限的词汇表中为每个单词提供单独的条目,ELMO使用字符级CNN动态计算单词嵌入,因此理论上,ELMO应该能够处理无限的词汇表。实际上,它只适用于在训练过程中遇到的单词以及与它们相似的单词,但它仍然能够获得向量或任意字符串


所以,像手套一样拥有一种方法是没有多大意义的。但是,您可以为感兴趣的词汇预先计算向量,并自行实现最近邻搜索,例如,使用
scipy.space.cKDTree

KDTree将帮助我们找到给定新点和相同维度的现有点的最近邻。单词“Display”和“Screen”的ELMO编码分别为(71024)和(61024)维。ELMO编码的维度取决于单词中的字符数,正如ELMO在字符级CNN中所做的那样,因此不可能将任何ELMO嵌入单词与其他ELMO嵌入单词进行比较,因为这两个单词的维度不同。由于嵌入单词的维数不同,KDTree无法帮助我们找到最近的邻居。CNN的输出被最大化合并到一个向量中:后面是一些高速公路层:因此,最后,每个令牌都有一个向量输入LSTM。当你得到这样的形状时,你可能会有一个标记化问题。我想你需要创建一个池层到一个固定维度的向量中?如果你想要一个多字输入的向量,那么是的。这个问题是关于ELMo返回单个向量的孤立单词(已经包含字符级池)。@Anvitha,这效率极低,但可能会根据您的需要发挥作用:我想知道您是否可以使用gensim和GloVe为您要替换的单词查找topn类似单词(您很熟悉,但您知道输出不是上下文)然后在ELMo中查询每个单词的余弦距离(作为句子中的替换词),以查找它们中的哪个在上下文中起作用。有人看到这方面的问题吗?