Завершён
research
GenreNeuro
Нейросетевой классификатор детских книг — 89.16% точности на 6 жанрах по текстовым описаниям
В цифрах
0%
Accuracy на тесте
+58.9pp
Прирост над бейзлайном
0
Обучающих записей
0
Жанров
Проблема
Что я решала
Каталоги русских детских книг — тысячи названий и непоследовательные жанровые теги. Библиотекари или издатели сортируют вручную или доверяют жанру, который угадал первый каталогизатор. Частотный бейзлайн, который всегда предсказывает самый частый жанр, даёт около 30% accuracy — бесполезно.
Мой подход
Как я делала
Классификатор на Keras/TensorFlow по текстовым описаниям. Архитектура намеренно простая: Embedding → GlobalAveragePooling → два Dense-слоя с Dropout. Шесть жанров: проза, сказки, приключения, познавательная, поэзия, young adult. Обучена на 9409 записях из парного scraper-проекта. Веса классов, потому что "сказок" было в 10 раз больше, чем "young adult". Токенизация справляется с русской морфологией без отдельного стеммера — эмбеддинги сами выучивают формы.
Выбор технологий
- Keras/TensorFlow— Простые архитектуры для маленьких датасетов. GlobalAveragePooling сработал лучше LSTM — меньше оверфита на 9k примерах.
- Class weighting— Без него модель предсказывает "сказки" для всего и выдаёт 40% accuracy. С ним меньшие жанры перестают быть невидимыми.
- Dropout 0.5— Агрессивная регуляризация на малом датасете. 0.3 начинало переучиваться к 20-й эпохе; 0.5 плавно выходило на плато.
Результат
Что получилось
89.16% accuracy на тесте — +58.9 процентных пункта к частотному бейзлайну. Confusion matrix показывает, какие жанры модель путает (приключения vs проза — основная пара, честно — они действительно пересекаются). Поставляется с небольшим inference-скриптом: описание на вход, жанр + confidence на выход.