Если цель упражнения - найти сходство по косинусу, тогда может помочь следующий подход. Автор только пытается решить для цели и не комментировать определение Скрытый Семанти c Анализ или определение Разложение единственного значения , упомянутое спрашивающим.
Давайте сначала вызовем все необходимые библиотеки. Пожалуйста, установите их, если они не существуют в машине.
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
Давайте сгенерируем пример данных для этого упражнения.
df = {'sentence': ['one two three','two three four','four five','six seven eight nine ten']}
df = pd.DataFrame(df, columns = ['sentence'])
Первый шаг - получить исчерпывающий список всех возможных функций. Так что сопоставьте весь контент в одном месте.
all_content = [' '.join(df['sentence'])]
Давайте создадим векторизатор и подгоним его сейчас. Обратите внимание, что аргументы в векторизаторе не объяснены автором, поскольку основное внимание уделяется решению проблемы.
vectorizer = TfidfVectorizer(encoding = 'latin-1',norm = 'l2', min_df = 0.03, ngram_range = (1,2), max_features = 5000)
vectorizer.fit(all_content)
Мы можем проверить словарь, чтобы понять, имеет ли он смысл. При необходимости можно добавить стоп-слова в векторизатор выше и подавить их, чтобы увидеть, действительно ли они подавлены.
print(vectorizer.vocabulary_)
Давайте векторизовать предложения для нас, чтобы использовать косинусное сходство.
s1Tokens = vectorizer.transform(df.iloc[1,])
s2Tokens = vectorizer.transform(df.iloc[2,])
Наконец, косинус подобия можно вычислить следующим образом.
cosine_similarity(s1Tokens , s2Tokens)