Кластеризация текста с помощью K-средних и tf-idf
Во-первых, я не являюсь носителем английского языка, тогда я, вероятно, сделаю много ошибок, извините за это.
В этом посте я попытаюсь описать, как кластеризовать текст со знанием дела, насколько важно слово для строки. Одни и те же слова в разных строках могут сильно повлиять на кластеризацию данных такого типа не важно для принятия решения. Первая часть этой публикации - это общая информация о TF-IDF с примерами на Python. Во второй части я приведу пример, показывающий, как этот подход можно применить к реальным задачам.
TF-IDF полезен для задач кластеризации, таких как кластеризация документов или, другими словами, tf-idf может помочь вам понять, какой документ у вас сейчас.
TF-IDF
Частота слов в документе, обратная частота - это числовая статистика, показывающая, насколько важно слово для корпуса.
Частота термина - это просто отношение количества текущего слова к количеству всех слов в документе / строке / и т. Д.
Частота термина t_i, где n_t - количество t_i в текущем документе / строке, сумма n_k - это количество всех терминов в текущем документе / строке.
Обратная частота документов - это логарифм отношения количества всех документов / строк в корпусе к количеству документов с термином t_i.
tf-idf (t, d, D) - это произведение tf (t, d) на idf (t, D).
Если вам нужна более теоретическая информация о TF-IDF, я хочу посоветовать вам прочитать публикацию в Wikipedia об этом или прочитать NLP Stanford post.
Что ж, теперь время для реального примера на Python.
Пример TF-IDF на Python
Для всего кода ниже необходимы пакеты python 3.5 или новее и scikit-learn и pandas.
Во-первых, давайте поговорим о наборе данных. Для этого действительно простого примера я просто установил простой корпус из трех строк. В этом примере строки играют роль документов.
После этого сделаем мешки слов для нашего корпуса, да и для каждой строки тоже. Но прежде нам нужно очистить данные.
В случае частоты термина самый простой выбор - использовать необработанное количество термина в строке. Для вычисления tf для всех терминов мы должны заполнить словарь следующим образом.
idf - это мера того, сколько информации предоставляет токен или слово в нашем случае. Для вычисления idf нам также понадобится заполнить dict.
Теперь я остаюсь для вас, что tf-idf является продуктом tf и idf. В нашем примере с python tf-idf dict с соответствующими продуктами.
Хорошо, теперь у нас есть веса tf-idf для каждого слова в нашем корпусе. Ниже вы можете ясно увидеть разницу между исходным пакетом слов и новым пакетом слов с весами tf-idf. Например, «собаки», «кошки» и «мышь» являются важными словами, но слово «и» не имеет значения, потому что это слово присутствует во всех строках, и мы не можем понять, что такое строка по слову «и». .
Кластеризация KMeans с весами TF-IDF
Теперь, когда мы понимаем, как работает TF-IDF, пришло время практически реального примера кластеризации с весами TF-IDF. В реальной жизни мы можем использовать реализацию scikit-learn для TF-IDF и KMeans, и я предлагаю вам использовать реализации из scikit-learn или из других популярных библиотек или фреймворков, потому что это снижает количество потенциальных ошибок в вашем коде.
В этом примере мы должны импортировать TF-IDF и KMeans, добавить корпус текста для кластеризации и обработать его корпус.
После этого давайте настроим Tfidf и давайте настроим KMeans, с scikit-learn это действительно просто.
Теперь мы изучили модель KMeans с k = 2 для кластеризации строк, это просто, не так ли?
Для прогнозирования просто используйте следующий метод прогнозирования.
Здесь мы видим, что строки «tf и idf - это круто!» и «есть несколько андроидов» из разных кластеров, и это правильно.
Кроме того, вы можете прочитать Блокнот Jupyter с этими примерами.
Спасибо за чтение, оставьте, пожалуйста, отзыв. Это может помочь мне улучшить качество моих будущих публикаций.
И не забудь подписаться на меня в твиттере.