Тематическое моделирование средствами BigARTM
Обратил внимание на перевод публикации под названием «Тематическое моделирование репозиториев на GitHub» [1]. В публикации много теоретических данных и очень хорошо описаны темы, понятия, использование естественных языков и многие другие приложения модели BigARTM.
Однако, обычному пользователю без знаний в области тематического моделирования для практического использования достаточно знаний интерфейса и чёткой последовательности действий при подготовке текстовых исходных данных.Разработке прогамного обеспечения для подготовки текстовых данных и выбору среды разработки и посвящена данная публикация.
Установка BigARTM в Windows и подготовка исходных данныхУстановка BigARTM хорошо изложена в видео презентации [2], поэтому я на ней останавливаться не буду, отмечу только что приведенные в документации программы рассчитаны на определённую версию и на скаченной версии могут не работать. В статье используется версия_v 0.8.1.
Программа BigARTM работает только на Python 2.7. Поэтому для создания единого программного комплекса все вспомогательные программы и примеры написаны на Python 2.7, что привело к некоторому усложнению кода.
Текстовые данные для тематического моделирования должны пройти обработку в соответствии со следующими этапами [4].
- Лемматизация или стемминг;
- Удаление стоп-слов и слишком редких слов;
- Выделение терминов и словосочетаний.
Ответ на этот вопрос мы получим из следующего листинга, в котором в качестве примера использован первый абзац текста из статьи [5]. Здесь и дальше части листинга и результат их работы буду представлять как они выводятся в формате среды jupyter notebook.
Время, затраченное lemmatize — 56.763000 на обработку 33 слов
Время, затраченное stemmer NLTK- 0.627000 на обработку 33 слов
Время, затраченное Stemmer- 0.093000 на обработку 33 слов
Когда время на подготовку данных для тематического моделирования не критично, следует применять лемматизацию при помощи модулей pymystem3 и mystem, в противном случаи следует применить стемминг при помощи модуля Stemmer.
Где взять список стоп-слов для их последующего удаления?Стоп-слова по определению слова не несущих смысловой нагрузки. Список таких слов нужно составлять с учётом специфики текста, однако должна быть основа. Основу можно получить при помощи корпуса brown.
Получить список стоп-слов можно и в сетевом сервисе [6] по заданному тексту.
Рационально сначала использовать основу стоп-слов, например, из корпуса brown и уже после анализа результатов обработки изменять или дополнять список стоп-слов.
Как выделить из текста термины и ngram?В публикации [7] для тематического моделирования с применением программы BigARTM рекомендуют «После лемматизации по коллекции можно собирать n-граммы. Биграммы можно добавлять в основной словарь, разделив слова специальным символом, отсутствующим в Ваших данных:
- русский_общение;
- украинский_родной;
- засылать_казачок;
- русский_больница.
Результат роботы листинга. Для сокращения привожу только по одному значению из каждой ngram.
bigrams — новому_году trigrams — заданном_качестве_покупок fourgrams — которых_используются_методы_оптимизации fivegrams- затрат_при_заданном_качестве_покупок
Приведенную программу можно использовать для выделения устойчиво повторяющихся в тексте NGram учитывая каждую как одно слово.
Что должна содержать программа для подготовки текстовых данных к тематическому моделированию ?Чаще копии документов располагают по одному в отдельном текстовом файле. При этом исходными данными для тематического моделирования является так называемый «мешок слов», в котором слова, относящиеся к определённому документу, начинаются с новой строки после тега -|text.
Следует отметить, что даже при полном выполнении приведенных выше требований высока вероятность того, что наиболее часто употребляемые слова не отражают содержание документа. Такие слова могут быть удалены из копии исходного документа. При этом необходимо контролировать распределение слов по документам.
Для ускорения моделирования, после каждого слова через двоеточие указывается частота его употребления в данном документе.
Исходными данными для тестирования программы были 10 статей из Википедии. Названия статей следующие.
- География
- Математика
- Биология
- Астрономия
- Физика
- Химия
- Ботаника
- История
- Физиология
- Информатика
Результат роботы листинга по генерации вспомогательных диаграмм.Для сокращения привожу только одну диаграмму для TOP-10 слов из одного документа и одну диаграмму распределение слов по документам.
В результате работы программы мы получили десять диаграмм на которых отобраны по частоте употребления 10 слов.Кроме этого программа строит диаграмму распределения количества слов по документам. Это удобно для предварительного анализа исходных данных.При большом количестве документов частотные диаграммы можно сохранять в отдельной папке.
Результат роботы листинга по генерации «мешка слов».Для сокращения привожу данные из созданного текстового файла habrahabr.txt только по первому документу.
Была использована одна текстовая модальность обозначенная в начале каждого документа как |text. После каждого слова через двоеточие введено число его употребления в тексте. Последнее ускоряет как процесс создания batch так и заполнение словаря.
Как можно упростить работу с BigARTM для создания и анализа topic ?Для этого нужно во первых готовить текстовые документы и проводить их анализ с использованием предложных программных решений, а во вторых использовать среду разработки jupyter notebook.
В директории notebooks размещаются все необходимые для работы программы папки и файлы. Части программного кода отлаживаются в отдельных файлах и после отладки собираются в общий файл.
Предложенная подготовка текстовых документов позволяет провести тематическое моделирование на упрощённом варианте BigARTM без регуляризаторов и фильтров.
Из файла habrahabr.txt программа в папке habrahab создаёт один batch из десяти документов, количество которых приведено в переменной batch_size=10. Если данные не изменяются и частотная матрица уже создана, то указанную выше часть программы можно пропустить.
Программа BigARTM после загрузки данных в словарь dictionary генерирует 10 тем (по числу документов), количество которых приведено в переменной num_topics=10.Количество проходов по документу и по коллекции указаны в переменных num_document_passes=10, num_collection_passes=10.
Полученные результаты в целом отвечают темам и результат моделирования можно считать удовлетворительным. При необходимости в программу можно добавить регуляризаторы и фильтры.
Выводы по результатам работыМы рассмотрели все этапы подготовки текстовых документов к тематическому моделированию. На конкретных примерах провели простой сравнительный анализ модулей для лемматизации и стемминга. Рассмотрели возможность использования NLTK для получения списка стоп-слов и поиска словосочетаний для русского языка. Рассмотрены листинги, написанные на Python 2.7.10 и адаптированные для русского языка, что позволяет их интегрировать в единый прогамный комплекс. Разобран пример тематического моделирования в среде jupyter-notebook, которая предоставляет дополнительные возможности для работы с BigARTM.