Вчера вечером думал над сбором датасета для проекта
ruMorpheme, данный проект позволяет обучить модель способную извлекать морфемы из предложенных слов, но чтобы обучить такую модель нужен специальный датасет, изначально я использовать
словарь Тихонова, однако, примеров представленных в нём оказалось недостаточно для обучения модели способной обеспечить приемлемое качество работы. Точность была чуть ниже 0.8, а хочется то хотя бы 0.9.
В общем откладывал я эту задумку со сбором датасета в долгий ящик, пока мне не предложили
скрипт для кравлинга данных с сайта "
Морфемный разбор онлайн". Пробежавшись по коду и запустив обнаружил в нём ряд фатальных недостатков:
- оригинальный скрипт обращался через requests по HTTP напрямую на сайт и поэтому спустя какое-то время fail2ban (ну или какая-то другая похожая система) банила айпишник
- другой момент был в том, что он кравлил текстовый разбор слова на морфемы, где частица слова и её морфема были оформлены предложением на русском, а это очень неудобно парсить в дальнейшей
- ну и некоторые другие незначительные нюансики
Поэтому вооружившись GigaCode IDE слегка его переписал (и по завершению попросил ChatGPT написать подробные комментарии), в результате получился
скрипт, который:
- работает через рандомные публичные анонимные прокси, периодически их меняет
- умеет продолжить работу с места остановки
- сохраняет данные в формате JSONL пригодном для обучения модели
- пропускает слова для которых на сайте не оказалось морфемного разбора
К несчастью чтобы обработать 1.5M слов скрипту понадобится минимум 4 дня, так как я не хочу использовать мультипоток, поэтому выложить собранный датасет смогу лишь пару дней спустя.
PS. По завершению сбора планирую выполнить а) обучение модели ruMorpheme v0.3; б) обновить токены
морфемизатора и в) наконец попробовать выполнить переобучение какой-нибудь небольшой модели (типа Вихря 3b) с родного токенизатора на мой морфемизатор и посмотреть что получится.