Косинусное сходство и сходство TS-SS среди документов с использованием tf-idf - Python

Распространенным способом вычисления косинусного сходства между текстовыми документами является вычисление 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)


В этом и заключается мое замешательство.

Фактически косинусное сходство между двумя векторами равно:

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

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

Линейные формулы ядра

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

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

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

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


person kgkmeekg    schedule 23.10.2019    source источник
comment
Вы можете спросить об этом на обмене стеками данных или обмене стеками статистики, которые являются хорошими местами для ответов на вопросы о машинном обучении, подобные этому, которые носят скорее академический характер, чем практическую реализацию!   -  person Ari Cooper-Davis    schedule 24.10.2019
comment
Я также разместил вопрос в Stats Stack Exchange; но все еще жду там.   -  person kgkmeekg    schedule 24.10.2019


Ответы (1)


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

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

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

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

person kgkmeekg    schedule 24.10.2019