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