Для начала нам нужно выполнить три требования. Прежде всего, нам нужна мера расстояния, чтобы определить, похожи ли два документа, функция критерия для вычисления качества наших кластеров и, наконец, алгоритм для оптимизации этого критерия.

Измерение расстояния может помочь нам определить близость двух точек в нашем наборе данных. Он должен быть большим, если документы 1 и 2 похожи, и маленьким, если они отличаются.
Функция критерия сообщит нам, когда мы найдем лучшие кластеры, и остановит конвейер. В качестве примера можно попытаться максимизировать сходство между каждым документом и центром кластера, которому был назначен документ. Другой подход может заключаться в том, чтобы попытаться максимизировать разницу между каждым кластером документа вместо их внутреннего сходства.

Наконец, нам нужен алгоритм для оптимизации этой целевой функции. Этот алгоритм может состоять из нескольких этапов. Распространенный способ - использовать жадный подход, состоящий из двух шагов: начальной кластеризации и уточнения.

На начальном этапе будут выбраны случайные документы нашего корпуса и распределены по кластерам. Затем этап уточнения будет повторяться по случайным документам и вычислять функцию критерия, когда этот документ перемещается в другой кластер. Если оценка улучшается, мы продолжаем итерацию, если нет, это означает, что мы нашли лучшие кластеры по заданным данным.

Неполная схема подходов к кластеризации

Эти три требования являются базовыми для задачи кластеризации, а функция критерия зависит от подхода, выбранного вами для эксперимента с кластеризацией. Отныне методы кластеризации будут только разветвляться, и рассмотрение каждого алгоритма было бы слишком утомительным. Вместо этого мы рассмотрим три алгоритма, распределенных по трем основным подходам: секционированный, иерархический и основанный на плотности.

Кластеры, полученные с помощью K-средних в наборе данных игрушек, любезно предоставлены Лиландом Макиннесом, Джоном Хили, Стивом Астелсом

K-means - это лучший алгоритм кластеризации. Быстрый, доступный и легкий для понимания, он требует, чтобы вы знали количество ожидаемых кластеров. Одним из недостатков является то, что K-means склонен предполагать, что ваши кластеры будут простыми, из-за его секционированного подхода: он пытается разложить набор данных на неперекрывающиеся подмножества. Ожидайте быстрых результатов, но с шумом.

Кластеры, полученные с помощью агломеративной кластеризации в наборе данных игрушек, любезно предоставлены Леландом Макиннесом, Джоном Хили, Стивом Астелсом.

С другой стороны, иерархическая кластеризация имеет тенденцию моделировать набор данных в кластеры, организованные в виде дерева, где вы можете перейти от одного документа ко всему корпусу. Это может быть сделано сверху вниз (разделение) или снизу вверх (агломерация). Агломеративная кластеризация - это подход, который дает дендрограмму (древовидную диаграмму) вашего набора данных, которую вы можете сократить до желаемого порога. Это дает вам свободу просматривать предполагаемые кластеры перед их выбором, но они все равно будут шумными.

Кластеры, полученные с помощью DBSCAN в наборе данных игрушек, любезно предоставлены Лиландом Макиннесом, Джоном Хили, Стивом Астелсом

Наконец, кластеризация на основе плотности создаст кластеры в более плотных регионах вашего набора данных. DBSCAN (и его усовершенствованный HDBSCAN) сочетает в себе лучшее от агломеративной кластеризации с возможностью удаления зашумленных документов. Единственный параметр, который вам нужно выбрать, - это минимальное расстояние, на котором два документа считаются похожими, а DBSCAN сделает все остальное.

Если вы хотите более полное сравнение различных методов кластеризации, вы можете найти один здесь, в том числе с наглядностью!

Здесь мы рассмотрели основы кластеризации и перечислили несколько алгоритмов, которые можно использовать для поиска лучших групп в нашем корпусе. Но для того, чтобы алгоритмы работали, важно подавать им данные в правильном свете. В следующей части мы поговорим о методах предварительной обработки, которые помогут уменьшить шум и облегчить визуализацию данных.

Очистка данных

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

Традиционные подходы к кластеризации текста имеют тенденцию к токенизации документов в его составные слова с использованием доступных инструментов (например, TreeTagger). Это оставляет нам более низкое зерно для работы - слова вместо целых предложений. Некоторые из них могут иметь форму множественного числа, конъюгированные или изменяемые. Чтобы справиться с этим, можно использовать лемматизацию и корчевание: первая даст не измененную форму, сохраняя смысл, тогда как другая будет усекать слово, что приводит к более простому токену, но иногда бессмысленному. Кроме того, вы можете удалить стоп-слова, чтобы еще больше упростить семантику документа и, таким образом, улучшить кластеризацию.

И последнее, что можно сделать, - это выделить несколько слов в нашем корпусе. После удаления игнорируемых слов семантика предложения зависит от темы (существительные и прилагательные) и действия (глаголы, вспомогательные слова и наречия). Их можно улучшить, добавив синонимы, гипонимы и гиперонимы с помощью правил или предварительно обученных встраиваний слов. Этот этап обогащения может дать лучшие результаты или усугубить шум в ваших данных. Здесь нет истинного или ложного, вам придется попробовать!

После предварительной обработки корпуса нам нужно преобразовать наши данные во что-то, с чем может работать алгоритм: векторы. В большинстве случаев TF-IDF является предпочтительным решением, но из-за их разреженности этими векторами можно пренебречь, чтобы оставить место для более плотных представлений. Векторы абзацев появились после энтузиазма по поводу встраивания слов и благодаря своему внутреннему составу позволяют легко вычислить сходство. Doc2Vec, реализация этой статьи Томаша Миколова находится в свободном доступе в gensim, вам стоит попробовать!

Я не могу закончить эту часть, не говоря о проклятии размерности. Это явление возникает, когда вы работаете с многомерными данными, такими как текст, где размер векторов часто равен размеру словаря. Проще говоря, чем больше у вас измерений, тем более разреженными будут данные, и вычисление сходства между двумя точками будет постепенно усложняться. Вот более подробное объяснение, как будто вам пять лет!

То, как вы представляете свои данные и то, как вы представляете их своему алгоритму, может изменить все, поэтому попробуйте использовать разреженные и плотные векторы на ваших тяжелых или слегка предварительно обработанных документах.

Но прежде чем сразу перейти к кластеризации, взгляните на свои данные: этот простой шаг поможет вам сэкономить часы на возню с вашими алгоритмами.

Вы только посмотрите на это!

Да, это так просто! Посмотрите на необработанные данные, которые вы собираетесь обрабатывать. Вы, вероятно, сами найдете шаблоны, которые помогут вам определить количество ожидаемых кластеров или объем предварительной обработки, который вам нужно применить, чтобы кластеры возникли сами по себе.

Имейте в виду, что однажды вы векторизовали свои данные, вы работаете с большими измерениями, и невероятно сложно понять, что происходит.

Математик и инженер посещают лекцию физика о теориях, которые возникают в пространствах с размерностью 9. Математик сидит, явно наслаждаясь лекцией, в то время как инженер выглядит озадаченным. В конце концов, у инженера ужасно заболела голова, и он спрашивает друга: «Как ты это понимаешь?». Математик отвечает: «Я просто визуализирую процесс». На это инженер отвечает: «Как вы, ВОЗМОЖНО, можете визуализировать то, что происходит в 9-мерном пространстве?» С явным удивлением математик отвечает: «Легко, сначала визуализируйте это в N-мерном пространстве, а затем пусть N будет 9»

Чтобы иметь возможность визуально анализировать данные, нам нужно преобразовать наши N-мерные данные в 2- или 3-мерное представление.

Цель уменьшения размерности - извлечь основную информацию, содержащуюся в наших данных, без использования всего. PCA (для анализа главных компонентов) делает именно это.

Основная идея PCA состоит в том, чтобы сохранить измерения данных, которые содержат большую часть информации (т. Е. С наибольшей дисперсией). Например, измерения с низкой дисперсией, как правило, добавляют мало информации к данным и могут быть безопасно удалены. Конечно, в большинстве случаев это приводит к потере информации, но кого это волнует, когда вы можете перейти от 300+ измерений к трем, сохраняя при этом более 70 процентов информации? Что ж, иногда вам следует позаботиться об этом, но, поскольку это введение, я не буду противить вас. Другие подходы, которые лучше работают с многомерными данными, пытаются сохранить действительно небольшие расстояния между документами и за счет приближения ближайшие соседи, разнородные документы уйдут.

t-SNE (для t-распределенного стохастического соседнего вложения) - это метод, который использует эту интуицию для измерения сходства между близкими точками в многомерном пространстве, а затем пытается расположить точки в низкоразмерном пространстве таким образом. что близкие точки остаются рядом. Это делается путем оптимизации меры расстояния (расхождение Кульбака-Лейблера для читающих меня ботаников) с использованием градиентного спуска. t-SNE имеет тенденцию давать лучшие результаты, чем PCA для данных в больших измерениях, и эта статья подробно объясняет, как его эффективно использовать. Кроме того, вот видео от одного из двух авторов t-SNE, рассказывающего о математике, лежащей в основе его алгоритма.

После этого используйте предпочитаемую вами библиотеку построения графиков (мне лично нравится наличие matplotlib с красотой seaborn) или инструмента (проектор Tensorflow действительно стоит попробовать!) И наслаждайтесь отображением всего набора данных на переднем плане. из вас после нескольких минут вычислений!

Вывод

В конце концов, мы можем определить кластеризацию текста как следующий конвейер: сначала посмотрите на свои данные, чтобы иметь представление о том, с чем вы будете работать, затем примените этап предварительной обработки для уменьшения шума, визуализируйте свой набор данных, чтобы найти естественные закономерности и / или кластеры, фактически кластеризуйте это, проанализируйте результаты либо по метрике, либо на глаз, и повторите!

Поль Ренвуазе - Recast.AI