Чё, зачем, почему

Уже достаточно давно популярность набрали разного рода алгоритмы машинного обучения. Также, благодаря крупным компаниям, которые двигают технологический прогресс, появилось много opensource продуктов. Одним из них является Fasttext, о котором пойдет речь ниже.
Fasttext — разработка от Facebook. Основная задача программы — классификация текста. Классификация текста может понадобиться для:
- объединение текстовой информации в группы по «похожести» (новости на одну тему )
- группировка текста со схожей тематикой в одну группу (новости про автомобили)
- поиск информации, которая может являться спамом
- поиск кликбэйтовой информации
- ...
Вариантов, на самом деле, очень много и перечислять все нет смысла, идея должна быть понятна.
Первая тренировка
На странице библиотеки есть пошаговая инструкция по установке и первой тренировке. Останавливаться на них не буду.
Настройка библиотеки
Проблема тренировки — это индивидуальность параметров. Нет каких-то параметров, которые дают гарантировано отличный результат. Вы можете найти в интернете массу (
Только эмпирическим путем вы сможете подобрать параметры, которые вас устроят. Ниже приведу список тех, которые заметно влияют на результат:
-dim — размерность контролирует размер векторов (
-lr — скорость обучения. Если параметр очень маленький, то модель становиться более чувствительна к тексту и может не отличать похожие тексты, а если параметр очень большой, то наоборот, может «говорить», что тексты похожи, хотя на деле это будет не так. Начните с 0.1 (По умолчанию 0.05).
— epoch — кол-во эпох. Это количество проходов по вашим данным. Больше — качественнее (но, увы не всегда). При этом увеличивается время тренировки. Начните со 150 (По умолчанию 5).
— модель обучения. Прочтите описание от Facebook. Оно достаточно понятно.
— loss — как будет происходить сравнение. Тут все очень индивидуально и зависит от данных.
Подготовка текста
Входной текст также имеет немаловажное значение. Чем текст качественнее, тем информация от модели будет лучше. Основные правила для подготовки текста для тренировки:
- удалить все тэги
- привести к нижнему регистру
- убрать символы пунктуации
- убрать хэш-тэги, ссылки
- исключить стоп-слова
- исключить мелкие слова (1,2,3 символа. тут каждый решает для своих данных)
Некоторые пишут, что можно просто загонять в модель текст и тренировать. Мне такой вариант не подошел. Я склоняюсь к тому, что без предобработки получается некачественная модель.
Подготовка текста для классификации
Тут действуют те же самые правила, но как показывает опыт, эти правила можно дополнить лемматизацией или стэммингом. С ними результаты могут быть существенно улучшены (
Язык программирования
Для тренировки модели можно выбрать как PHP (взял его, так как большая часть сайтов написана на нем) так и Python (для него есть библиотека). Но есть очень забавный момент. Тренировать модель приходится все равно запуском fasttext из командной строки если вам дорого время обучения. А значит, на чем писать код для тренировки, не имеет значения (на чем удобно, на том и пишите).
Что касается механизма кластеризации — то тут немного сложнее (
Вместо заключения
У меня есть модель, которая строится исключительно на новостном контенте за последние несколько дней. Размер слов в ней около 40 000. С ней можно поиграться. Но, следует учитывать, что:
- это не универсальная модель. Она тренируется только на новостном контенте
- модель содержит не все новости из базы, а лишь передовицу (для решения поставленной задачи этого хватает). Это значит, что модель может давать низкий процент на похожих новостях.
UPD: материал не актуален. Тестовая ссылка удалена.

