В предыдущие недели я экспериментировал с различными моделями машинного обучения, используя блокнот Jupyter. Следующим важным шагом является интеграция модели машинного обучения в архитектуру программного обеспечения Augur, чтобы конечный пользователь мог начать собирать информацию из своих данных. Augur состоит из двух типов воркеров — воркеров по сбору данных и воркеров по анализу данных. Первый собирает данные репозитория из разных источников, таких как GitHub, GitLab и т. д., а второй выполняет машинное обучение для получения информации из этих данных. Оба получают работу от домработницы. Для каждого воркера нам нужно указать конфигурацию в файле augur.config. Для кластерного работника конфигурация определяется следующим образом.

В блоке конфигурации экономки,

В рабочем блоке конфигурации

Обучение модели

Worker выполняет две задачи — кластеризация репозиториев, представленных в виде документов (сбор всех сообщений от задач и пулл-реквестов внутри репозитория) и тематическое моделирование. Если предварительно обученная модель не существует в рабочей папке, для обучения модели используются данные из всех репозиториев в подключенной базе данных. После обучения в рабочую папку сбрасываются следующие файлы модели

  • словарь: набор функций, полученных в результате векторизации TF-IDF текстовых данных (требуется на этапе прогнозирования).
  • kmeans_repo_messages: обученная модель кластеризации kmeans на функциях tfidf.
  • vocabulary_count: набор функций, полученных в результате векторизации подсчета текстовых данных (требуется на этапе прогнозирования).
  • lda_model : обученная модель скрытого анализа Дирихле для тематического моделирования.

Гиперпараметры для обучения берутся из конфигурационного файла.

Кроме того, на этапе обучения таблица базы данных «тематические слова» заполняется главными словами, относящимися к теме.

Прогноз

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

repo_topic: хранит распределение вероятностей по темам для определенного репозитория.

repo_cluster_messages: сохраняет метку кластеризации, назначенную репозиторию.

Онлайн-обновление модели кластеризации

В текущей реализации обученная модель никогда не обновляется, и прогноз делается на основе той же модели. Но каждые поступающие данные должны использоваться для модификации существующей модели. Кроме того, существующая точка данных (набор сообщений в репозитории) может измениться в будущем, когда будет получен новый комментарий к проблеме или запросу на вытягивание. Вариант алгоритма kmeans, называемый последовательным k-means, может использоваться для обновления модели в режиме онлайн. Кроме того, модель кластеризации может быть повторно обучена через заранее заданные интервалы, чтобы приспособиться к изменению точек данных.