В данной статье будет проведена кластеризация заранее подготовленного корпуса текстов. Он получен в результате работы программы-краулера, собиравшего новостные статьи с сайта arstechnica.com, присваивая каждому собранному тексту тему, к которой он был приписан на сайте. В ходе работы будет проведена кластеризация собранных текстов и визуализированы ключевые слова и максимально близкие к ним по смыслу на основании алгоритма word2vec. Наработки, освещенные в данной работе, могут быть использованы в беспрерывном анализе сайтов по поступающим адресам с целью автоматизации поиска данных по каким-либо критериям.
Теория
- Лемматизация – это процесс преобразования слова в его базовую форму, которая учитывает контекст (в отличие от стемминга (stemming), который находит основу слова, не учитывая контекст).
- Wordnet – это большая лексическая база данных английского языка для установления структурированных семантических отношений между словами. Библиотека предлагает возможности лемматизации.
- Word2vec — это инструмент для расчета векторных представлений слов, который реализует основные архитектуры — Continuous Bag of Words (CBOW) и Skip-gram. Суть в том, что на вход подается текст, а на выходе мы получаем набор векторов слов. Используется для нахождения связей между контекстами.
- CBOW и Skip-gram — нейросетевые архитектуры, которые описывают, как именно нейросеть «учится» на данных и «запоминает» представления слов. Принципы у обоих архитектур разные. Принцип работы CBOW — предсказывание слова при данном контексте, а skip-gram наоборот — предсказывается контекст при данном слове.

Практическая часть
Сначала нужно считать корпус из ранее подготовленного файла и вывести краткие сведения о нем, чтобы убедиться, что все верно:

Убираем из текстов знаки препинания и слова, которые слишком часто применяются и часто не несут смысловой нагрузки (так называемые стоп-слова), а именно предлоги, артикли, частицы, часть местоимений и некоторые формы вспомогательных глаголов:

После необходимо разбить корпус на две выборки: обучающую и тестовую. С помощью обучающей выборки предполагается обучить метод векторизации и кластеризатор, а с помощью тестовой – проверить результаты их работы. С помощью параметра test_size можно задать соотношение размеров выборок.

Затем можно приступить к векторизации текстов выборок. Количество признаков установлено на 500 и после этого сделано усреднение длин векторов.

Обучив векторизатор, можно посмотреть наиболее близкие по контексту слова. Эта функция будет использована далее для визуализации Wordcloud.

Для визуализации результатов кластеризации нужно выделить 2 главных признака и вывести координаты точек, исходя из значений двух выделенных параметров.

Наконец, можно приступить к визуализации облака слов. Оно строится на основании веса каждого слова в корпусе. А так как в качестве корпуса подается топ-100 слов, семантически близких к слову car, то данное облако полностью состоит из слов, близких к car по мнению word2vec.

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