Вопрос или проблема
Я пытаюсь сравнить два предложения, которые могут или не могут быть на одну и ту же тему (продукт). Я пробовал несколько метрик, таких как косинусное сходство, расстояние и т. д., но результаты не впечатляют. Я подумал, что если смогу увидеть типы слов, которые совпадают (общие слова против редких слов), то смогу попробовать сделать что-то, чтобы лучше адаптировать логику в соответствии с использованием. Существует ли в Python такая библиотека?
Предположим, я пытаюсь сравнить A и B в приведенном ниже примере. Есть несколько слов, которые не дают убедительных доказательств того, что они одинаковые, даже если они совпадают, но есть определенные слова (такие как Mochi, Squishy), которые могут быть лучшими объясняющими.
Например.
A:
Kawaii Squishies, Mochi Squishy Toys для детских сувениров, мини игрушки для снятия стресса для Хэллоуина, Рождества, Пасхи, подарков на день рождения, призов для класса, подарочных пакетов
B:
Я настоятельно рекомендую их всем, кто страдает от тревожности, депрессии, СДВГ, трудностей с концентрацией, стресса и т. д. Они называются игрушками Mochi Squishy и прекрасно отвлекают вас от стресса или просто помогают выпустить разочарование.
Насколько я понимаю, вы ищете схему взвешивания терминов. Я бы попробовал решить это с помощью TF-IDF, который является самой популярной схемой взвешивания терминов на сегодняшний день.
Вот краткий рекап TF-IDF из википедии:
В информационном извлечении tf–idf, TF*IDF или TFIDF, сокращение от частоты термина – обратной частоты документа, является числовой статистикой, которая предназначена для отражения важности слова для документа в коллекции или корпусе.[1] Он часто используется в качестве коэффициента веса при поиске информации, текстовом майнинге и моделировании пользователей. Значение tf–idf увеличивается пропорционально количеству раз, когда слово появляется в документе, и уменьшается на количество документов в корпусе, содержащих это слово, что помогает компенсировать тот факт, что некоторые слова встречаются чаще в целом. tf–idf является одной из самых популярных схем взвешивания терминов сегодня
Поскольку ваш случай использования отличается от стандартного поиска документов, я бы попробовал модифицированный метод ранжирования, указанный ниже:
- Найдите все общие слова между A и B, допустим, таких слов n.
- Рассчитайте оценку TF-IDF для всех общих слов индивидуально для A и B и сложите их, чтобы получить n оценок. Для этого вам потребуется использовать весь свой текстовый корпус.
- Определите параметр k (1, 2, 3 и т. д.), который будет действовать как порог для количества общих слов, используемых в ранжировании.
- Возьмите сумму TF-IDF для первых k общих слов и примените порог для построения бинарной классификации ‘уместно’, ‘неуместно’.
Ответ или решение
Сравнение предложений с использованием TF-IDF для определения общих слов
Введение
Вопрос сравнения предложений по наличию общих слов является важной задачей в области обработки естественного языка (NLP). Как вы уже отметили, использование традиционных методов, таких как косинусное сходство и различные метрики расстояний, может не давать удовлетворительных результатов. В данной статье мы рассмотрим более продвинутый подход, основанный на технологии TF-IDF (Term Frequency-Inverse Document Frequency), который сможет лучше справиться с задачей оценки значимости общих слов между двумя предложениями.
Принцип работы TF-IDF
TF-IDF — это статистическая мера, используемая для оценки важности слова в документе относительно всей коллекции документов (корпуса). Она учитывает, как часто слово встречается в документе, и корректирует важность слова с учетом того, насколько часто оно встречается в других документах. Это делает метод особенно полезным для фильтрации стоп-слов и выделения значимых терминов.
Подход к решению задачи
Для конкретного случая, когда нам необходимо сравнить два предложения, предполагаем следующие шаги:
-
Определение общих слов:
- Извлеките все слова из обоих предложений (A и B) и найдите их пересечение. Эти слова будут нашими общими терминами.
-
Расчет TF-IDF:
- Рассчитайте TF-IDF для всех общих слов в контексте предложений A и B. Для этого создайте корпус, который будет включать оба предложения.
-
Выбор наиболее значимых слов:
- Определите параметр ( k ) (например, 1, 2, 3 и так далее), который будет обозначать количество наиболее значимых общих слов, которые вы хотите учитывать.
-
Анализ и классификация:
- Сложите TF-IDF оценки для топ ( k ) общих слов. Установите порог для классификации — например, все случаи, где сумма TF-IDF превышает определенное значение, можно считать «релевантными».
Пример реализации на Python
Для выполнения вышеописанных шагов мы можем использовать библиотеку scikit-learn
, которая предоставляет функции для подсчета TF-IDF. Вот пример кода:
from sklearn.feature_extraction.text import TfidfVectorizer
# Примеры предложений
sentence_A = "Kawaii Squishies, Mochi Squishy Toys for Kids Party Favors, Mini Stress Relief Toys for Halloween Christmas Easter Party Favors, Birthday Gifts, Classroom Prizes, Goodie Bag"
sentence_B = "I highly recommend these for anyone with anxiety, depression, adhd, trouble focusing, stress, ect. They are called mochi squishy toys and are wonderful to distract you from stress, or just to get your frustration out."
# Создание TF-IDF векторизатора
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform([sentence_A, sentence_B])
# Извлечение слов с их значениями TF-IDF
tfidf_scores = tfidf_matrix.toarray()
feature_names = vectorizer.get_feature_names_out()
# Определяем общие слова и их индексы
common_words = set(sentence_A.split()).intersection(set(sentence_B.split()))
common_indices = [i for i, word in enumerate(feature_names) if word in common_words]
# Расчет общего TF-IDF для общих слов
total_tfidf = sum(tfidf_scores[:, i].sum() for i in common_indices)
print("Общие слова:", common_words)
print("Общее значение TF-IDF для общих слов:", total_tfidf)
Заключение
Использование TF-IDF для различных подходов к сравнению предложений позволяет акцентировать внимание на наиболее значимых словах, которые могут не только отображать тематику, но и помочь в классификации текстов. Важно корректно определить параметры, поскольку они могут значительно влиять на результат анализа. Применяя предложенный алгоритм, вы сможете более точно выявить схожесть между предложениями и использовать это знание для улучшения бизнес-логики вашего приложения или системы.
Оптимизация и дальнейшие шаги
После реализации основного метода, рекомендую рассмотреть возможность его оптимизации, например, путем применения различных весовых коэффициентов для слов в зависимости от их частоты или контекста. Также может быть полезно интегрировать машинное обучение для более глубокого анализа текстов.
Такой подход позволит вам создать более гибкую и мощную систему для обработки текстов и сравнительного анализа, которая будет учитывать как частичные совпадения, так и концептуальные связи.