如何将Pandas DataFrame中加载的嵌入转换为Gensim模型?

hip*_*ido 1 python pandas gensim

我有一个DataFrame,其中的索引是单词,并且我有100列具有浮点数,因此对于每个单词,我都将其嵌入为100d向量。我想将DataFrame对象转换为gensim模型对象,以便可以使用其方法。特别是gensim.models.keyedvectors.most_similar()这样,以便我可以在子集中搜索相似的单词。

首选的方法是哪种?

谢谢

Ken*_*yme 5

不确定执行此操作的“首选”方式是什么,但是gensim期望的格式很容易复制:

data = pd.DataFrame([[0.15941701, 0.84058299],
                     [0.12190033, 0.87809967],
                     [0.06293788, 0.93706212]],
                    index=["these", "be", "words"])

np.savetxt('test.txt', data.reset_index().values, 
           delimiter=" ", 
           header="{} {}".format(len(data), len(data.columns)),
           comments="",
           fmt=["%s"] + ["%.18e"]*len(data.columns))
Run Code Online (Sandbox Code Playgroud)

标题是2个空格分隔的整数,词汇中的单词数和单词向量的长度。每行的第一列是单词本身。其余的列是单词向量的元素。fmt的怪异之处在于,第一个元素的格式设置为字符串,其余元素的格式设置为float。

然后可以将其加载到gensim中并执行任何操作:

import gensim

from gensim.models.keyedvectors import KeyedVectors
word_vectors = KeyedVectors.load_word2vec_format('test.txt', binary=False)

word_vectors.similarity('these', 'words')
Run Code Online (Sandbox Code Playgroud)