Косинусное сходство между 0 и 1 - PullRequest
0 голосов
/ 26 мая 2019

Меня интересует вычисление сходства между векторами, однако это сходство должно быть числом от 0 до 1. Существует много вопросов, касающихся tf-idf и косинусного сходства, все из которых указывают на то, что значение лежит в диапазоне от 0 до 1. From Wikipedia

В случае поиска информации косинусное сходство двух документы будут варьироваться от 0 до 1, так как термин частоты (с использованием веса tf – idf) не может быть отрицательным. Угол между двумя членами частотные векторы не могут быть больше 90 °.

Особенность в том, что я хочу вычислить сходство между двумя векторами из двух разных моделей word2vec. Эти модели были выровнены, поэтому они должны фактически представлять свои слова в одном и том же векторном пространстве. Я могу вычислить сходство между словом в model_a и словом в model_b примерно так:

import gensim as gs
from sklearn.metrics.pairwise import cosine_similarity

model_a = gs.models.KeyedVectors.load_word2vec_format(model_a_path, binary=False)
model_b = gs.models.KeyedVectors.load_word2vec_format(model_b_path, binary=False)

vector_a = model_a[word_a].reshape(1, -1)
vector_b = model_b[word_b].reshape(1, -1)

sim = cosine_similarity(vector_a, vector_b).item(0)

Но sim является метрикой подобия в диапазоне [-1,1]. Есть ли научно обоснованный способ сопоставить это с диапазоном [0,1]? Интуитивно я думаю, что-то вроде

norm_sim = (sim + 1) / 2

все в порядке, но я не уверен, является ли это хорошей практикой в ​​отношении действительного значения косинусного сходства. Если нет, рекомендуются ли другие метрики сходства?

Причина, по которой я пытаюсь получить значения в диапазоне от 0 до 1, заключается в том, что данные будут переданы коллеге, которая будет использовать ее в качестве функции для своей системы машинного обучения, которая ожидает, что все значения будут в диапазоне от 0 и 1. Ее интуиция состояла в том, чтобы принять абсолютное значение, но мне кажется, что это худшая альтернатива, потому что тогда вы сопоставляете противоположности как идентичные. Учитывая фактическое значение косинусного сходства, я могу ошибаться. Так что, если брать абсолютное значение - это хороший подход, мы тоже можем это сделать.

1 Ответ

1 голос
/ 05 июня 2019

У вас есть веская причина предпочесть 0,0-1,0 (хотя многие алгоритмы обучения должны хорошо работать с диапазоном от -1,0 до 1,0).Ваше масштабирование norm_sim от -1,0 до 1,0 до 0,0 до 1,0 хорошо, если ваша единственная цель - получить диапазоны 0,0-1,0 ... но, конечно, полученное значение больше не является истинным косинусоподобием.

Не обязательно, что значения больше не являются реальными углами полного диапазона.(Если бы алгоритму требовались реальные углы, он работал бы с -1,0 до 1,0.)

Использование абсолютного значения без знака было бы плохой идеей, так как это изменило бы порядок рангов сходств - переместив некоторые результаты, которые"изначально" наиболее различаются.

Была работа по ограничению векторов слов, чтобы они имели только неотрицательные значения в измерениях, и обычное преимущество состоит в том, что результирующие измерения с большей вероятностью будут интерпретироваться индивидуально,(См., Например, https://cs.cmu.edu/~bmurphy/NNSE/.) Однако, gensim не поддерживает этот вариант, и только попытка показать, будет ли он лучше для какого-либо конкретного проекта.

Кроме того, есть и другие исследования, в которых предлагается обычныйвекторы слов не могут быть «сбалансированы» вокруг начала координат (так что вы увидите меньше отрицательных косинус-сходств, чем можно было бы ожидать от точек случайной гиперсферы), и то, что смещение их в более сбалансированное положение обычно улучшает их для других задачСм .: https://arxiv.org/abs/1702.01417v2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...