Если бы вы использовали что-то вроде библиотеки Python gensim
для загрузки ранее существующего набора векторов (в исходном формате word2vec.c) в его представление KeyedVectors
, тогда необработанные векторы будут находиться в массиве numpy.в его vectors
собственности.Например:
kv = KeyedVectors.load_word2vec_format('word_vectors.bin', binary=True)
print(kv.vectors.shape)
Затем вы можете использовать библиотечную функцию, такую как scikit-learn
s pairwise_distances()
, чтобы вычислить матрицу расстояний:
from sklearn.metrics import pairwise_distances
distances = pairwise_distances(kv.vectors, metric="cosine")
Потому чтоподпрограмма sklearn
использует оптимизированные собственные математические подпрограммы, она, вероятно, будет намного быстрее, чем ваш первоначальный подход loop-in-pure-Python.Обратите внимание, однако, что полученная матрица расстояний может быть огромной!
(Вы можете узнать, какие слова в каких kv.vectors
слотах располагаются через список в kv.index2entity
, или найти слот для слова черездиктат в kv.vocab
.)