Меня интересует вычисление сходства между векторами, однако это сходство должно быть числом от 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. Ее интуиция состояла в том, чтобы принять абсолютное значение, но мне кажется, что это худшая альтернатива, потому что тогда вы сопоставляете противоположности как идентичные. Учитывая фактическое значение косинусного сходства, я могу ошибаться. Так что, если брать абсолютное значение - это хороший подход, мы тоже можем это сделать.