我需要计算和存储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/

10-11 22:41
查看更多