Кластеризация текста с помощью 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 с этими примерами.

Спасибо за чтение, оставьте, пожалуйста, отзыв. Это может помочь мне улучшить качество моих будущих публикаций.

И не забудь подписаться на меня в твиттере.