Вы должны четко понимать, какой именно набор слов-векторов вы используете: разные наборы будут по-разному справляться с заданиями аналогии.(Те, кто обучен крошечному набору данных text8
, могут быть довольно слабыми; большой набор GoogleNews
, выпущенный Google, вероятно, преуспеет, по крайней мере, при определенных условиях, таких как отбрасывание слов с низкой частотой.)
Выделать неправильную арифметику для аналогии, которую вы пытаетесь решить.Для аналогии "А - это В, как С - это?"часто записывается как:
A : B :: C : _?_
Вы начинаете с 'B', вычитаете 'A', затем добавляете 'C'.Итак, пример:
France : Paris :: Italy : _?_
... дает формулу в вашем выдержанном тексте:
wv('Paris') - wv('France') + wv('Italy`) = target_coordinates # close-to wv('Rome')
И вместо этого решить:
Paris : France :: Berlin : _?_
Вы бы попробовали:
wv('France') - wv('Paris') + wv('Berlin') = target_coordinates
... тогда посмотрим, что ближе к target_coordinates
.(Обратите внимание на разницу в порядке операций с вашей попыткой.)
Вы можете думать об этом как:
- начать с вектора страны («Франция»)
- вычесть (страна и столица) -вектор («Париж»).Это оставляет вас с промежуточным вектором, который, своего рода, «ноль» страны и «отрицательный» капитал.
- добавить еще один (страна и капитал) -вектор («Берлин»).Это оставляет вас с вектором результата, который, опять-таки, «одна» страна и «нулевой» капитал.
Обратите также внимание, что gensim
most_similar()
использует несколько положительных и отрицательных примеров слов, чтобы выполнить арифметику за вас.Так что вы можете просто сделать:
sims = word_vectors.most_similar(positive=['France', 'Berlin'], negative=['Paris'])