Понимание gensim word2vec's most_s Similar
Я не уверен, как я должен использовать самый-похожий метод Word2Vec от gensim. Допустим, вы хотите проверить проверенный пример: мужчина - король, а женщина - Х; найти X. Я думал, что это то, что вы могли бы сделать с этим методом, но из результатов, которые я получаю, я не думаю, что это правда.
Документация гласит:
Найдите топ-N самых похожих слов. Положительные слова положительно влияют на сходство, отрицательные слова отрицательно.
Этот метод вычисляет косинусное сходство между простым средним вектором весов проекции заданных слов и векторами для каждого слова в модели. Метод соответствует словесно-аналогичным и дистанционным скриптам в оригинальной реализации word2vec.
Я предполагаю, что most_similar
берет положительные и отрицательные примеры и пытается найти точки в векторном пространстве, которые как можно ближе к положительным векторам и как можно дальше от отрицательных. Это верно?
Кроме того, существует ли метод, который позволяет нам отобразить отношение между двумя точками к другой точке и получить результат (см. Пример мужчина-король женщина-Х)?
1 ответ
Вы можете посмотреть, что именно most_similar()
делает в своем исходном коде:
https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/keyedvectors.py
Это не совсем "найти точки в векторном пространстве, которые как можно ближе к положительным векторам и как можно дальше от отрицательных". Скорее, как описано в оригинальных статьях word2vec, он выполняет векторную арифметику: добавляя положительные векторы, вычитая отрицательные, затем из этой результирующей позиции, перечисляя известные векторы, ближайшие к этому углу.
Этого достаточно, чтобы решить man : king :: woman :: ?
в стиле аналогий, через вызов как:
sims = wordvecs.most_similar(positive=['king', 'woman'],
negative=['man'])
(Вы можете думать об этом как: "начните с" короля "-вектора, добавьте" женщины "-вектора, вычтите" мужика-вектора ", из которого вы попадаете, сообщите ранговые векторы слов, наиболее близкие к этой точке".)