我需要计算和存储word2vec编码的所有单词对的余弦距离。每个单词都表示为存储在pandas数据帧中的4*1向量,每个元素都在连续范围内[1,9]。
我需要将结果存储在pandas数据框中,以便可以在恒定时间内访问它。
我无法使用pandas library/lambda的应用功能。使用嵌套循环大约需要9小时(根据TQM)。
word word1 word2 word3 ...
word1 d11 d12 d13...
word2 d21 d22 d23...
word3 d31 d32 d33...
.
.
.
最佳答案
如果你使用Python gensim
库之类的东西来将一个预先存在的向量集(在原始的Word2VEC格式中)加载到它的KeyedVectors
表示,那么原始向量将在它的vectors
属性中的一个麻木数组中。例如:
kv = KeyedVectors.load_word2vec_format('word_vectors.bin', binary=True)
print(kv.vectors.shape)
然后可以使用库函数(如
scikit-learn
'spairwise_distances()
)计算距离矩阵:from sklearn.metrics import pairwise_distances
distances = pairwise_distances(kv.vectors, metric="cosine")
因为
sklearn
例程使用优化的本地数学例程,所以它可能比纯Python方法中的初始循环快得多。不过,请注意,生成的距离矩阵可能很大!(您可以通过
kv.vectors
中的列表找出kv.index2entity
槽中的单词,或者通过kv.vocab
中的dict查找槽中的单词)关于python - 查找所有对word2vec编码对的余弦距离,而无需使用嵌套循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52663908/