Почему матрица сходства gensim Word2VecKeyedVectors будет очень разреженной по сравнению с самой моделью? - PullRequest
0 голосов
/ 30 марта 2020

В общем, у меня есть следующий код:

import gensim
import gensim.downloader as api

model = api.load('word2vec-google-news-300')
...
matrix = model.similarity_matrix(dictionary, tfidf=None, threshold=0.0,
    exponent=2.0, nonzero_limit=100)
...

Я использую следующий словарь для переменной dictioanry:

4
0   apple   2
1   eaten   1
10  google  1
2   half    1
3   iphone  2
4   is  2
7   lost    2
11  missing 1
5   model   1
8   my  2
9   phone   2
12  pixel   1
6   plus    1
13  somewhere   1

Поэтому, когда я вычисляю сходство между 'телефоном 'и' iphone ', я получаю ненулевое значение.

sim_match.model.similarity('phone','iphone')
>> 0.33964303

Но с индексом 3,9 матрицы (сходство' phone 'и' iphone 'в матрице сходства) , Я получаю нулевую запись.

matrix[3,9]
>> 0.0

Фактически, почти все записи равны нулю.

print(matrix)
>>  (0, 0)        1.0
>>  (1, 1)        1.0
>>  (2, 2)        1.0
>>  (3, 3)        1.0
>>  (4, 4)        1.0
>>  (5, 5)        1.0
>>  (6, 6)        1.0
>>  (7, 7)        1.0
>>  (11, 7)       0.21569395
>>  (8, 8)        1.0
>>  (9, 9)        1.0
>>  (10, 10)      1.0
>>  (11, 11)      1.0
>>  (7, 11)       0.21569395
>>  (12, 12)      1.0
>>  (13, 13)      1.0

Только слова «потерянный» и «пропавший» имеют ненулевой сходство и не эквивалентны.

Я знаю, что матрица является numpy разреженной матрицей. Может быть, это параметры, которые я передаю, но я не понимаю, почему большинство элементов в матрице равны нулю. Параметры, которые я передал, основываясь на документации, кажется, что они не должны вызывать так много записей равными 0. Я действительно отмечаю, что nonzero_limit равен 100, но не должно ли быть сто ненулевых записей?

Могу ли я в любом случае это исправить или обойти?

...