我需要为word2vec编码的所有单词对计算并存储余弦距离。每个单词都表示为存储在熊猫数据框中的4 * 1向量,每个元素的范围都在[1,9]之间。
我需要将结果存储在pandas数据框中,以便可以在恒定时间内对其进行访问。
我无法使用pandas库/ lambda的apply函数。使用嵌套循环大约需要花费时间。 9小时(根据tqdm)。
word word1 word2 word3 ...
word1 d11 d12 d13...
word2 d21 d22 d23...
word3 d31 d32 d33...
.
.
.
答案 0 :(得分:1)
如果您要使用Python gensim
库之类的东西来将预先存在的向量集(以原始word2vec.c格式)加载到其KeyedVectors
表示中,则原始向量将为在其vectors
属性中的numpy数组中。例如:
kv = KeyedVectors.load_word2vec_format('word_vectors.bin', binary=True)
print(kv.vectors.shape)
然后您可以使用scikit-learn
的{{3}}之类的库函数来计算距离矩阵:
from sklearn.metrics import pairwise_distances
distances = pairwise_distances(kv.vectors, metric="cosine")
由于sklearn
例程使用了优化的本机数学例程,因此它可能比最初的纯Python循环方法快很多。但是请注意,结果距离矩阵可能很大!
(您可以通过kv.vectors
中的列表找出哪些词在kv.index2entity
插槽中,或者通过kv.vocab
中的字典查找插槽中的单词。)>