Распространенным способом вычисления косинусного сходства между текстовыми документами является вычисление 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 как указано здесь
Итак, вопросы:
Почему я не делю внутреннее произведение на произведение величины векторов?
Почему нормализация освобождает меня от этого требования?
Теперь, если я хочу вычислить сходство ts-ss, могу ли я использовать нормализованная матрица tf-idf и значения косинуса (рассчитано только для линейного ядра)?