В общем, у меня есть следующий код:
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, но не должно ли быть сто ненулевых записей?
Могу ли я в любом случае это исправить или обойти?