Косинусное сходство и сходство TS-SS среди документов, использующих tf-idf - Python - PullRequest
1 голос
/ 23 октября 2019

Распространенным способом вычисления косинусного сходства между текстовыми документами является вычисление tf-idf и последующее вычисление линейного ядра матрицы tf-idf.

Матрица TF-IDF вычисляется с использованием TfidfVectorizer ().

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(stop_words='english')
tfidf_matrix_content = tfidf.fit_transform(article_master['stemmed_content'])

Здесь article_master - это кадр данных, содержащий текстовое содержимое всех документов.
Как объяснил Крис Кларк здесь , TfidfVectorizer создает нормализованные векторы;следовательно, результаты linear_kernel могут быть использованы как косинусное сходство.

cosine_sim_content = linear_kernel(tfidf_matrix_content, tfidf_matrix_content)


Именно в этом мое замешательство.

Эффективно, косинусное сходство между 2 векторами:

InnerProduct(vec1,vec2) / (VectorSize(vec1) * VectorSize(vec2))

Линейное ядро ​​вычисляет InnerProduct как указано здесь

Linear Kernel Formulae

Итак, вопросы:

  1. Почему я не делю внутреннее произведение на произведение величины векторов?

  2. Почему нормализация освобождает меня от этого требования?

  3. Теперь, если я хочу вычислить сходство ts-ss, могу ли я использовать нормализованная матрица tf-idf и значения косинуса (рассчитано только для линейного ядра)?

1 Ответ

0 голосов
/ 25 октября 2019

Благодаря ответу @timleathart здесь Я наконец-то знаю причину.

Нормализованные векторы имеют величину 1, поэтому не имеет значения, делите ли вы явно на величины или нет,Это математически эквивалентно в любом случае.

Векторизатор tf-idf нормализует отдельные строки (векторы) так, что они имеют всю длину 1. Поскольку сходство косинусов касается только угла, разность величин векторовне имеет значения.

Основная причина использования ts-ss состоит в том, чтобы учитывать как угол, так и разницу в величине векторов. Следовательно, хотя нет ничего плохого в использовании нормализованных векторов;однако, это превосходит цели использования компонента Triangle Similarity.

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