(продолжаю эксперименты по задаче классификации слов СУЩ/НЕ СУЩ по репрезентациям, которые создаются рекуррентной сетью - см.
http://kelijah.livejournal.com/181708.html)
Получив более-менее работающую модель с ошибаемостью порядка 12.25% на 100,000 самых частотных слов, я сначала поэкспериментировал с метапараметрами модели.
Смена LSTM на GRU дала существенный прирост скорости обучения, но просадку точности. С ванильной SimpleRNN пробовать не стал.
Вариации количества LSTM ячеек влияли на точность меньше, чем колебания точности между эпохами обучения. Dropout тоже давал некоторое улучшение, но на уровне шума. В итоге, эксперименты уперлись в значение ошибаемости 11.85%.
Затем я прикинул, что 100 тысяч слов в датасете, после отщипывания 10k на тестовый набор, дают грубо говоря 30,000 существительных. Учитывая разные окончания и суффиксы, это дает около 100 примеров употребления одного окончания. Это очень мало.
Поэтому было решено попробовать увеличивать размер датасета. При общем объеме SQL словарной базы в ~3 миллиона словоформ есть большой резерв.
Первое же удвоение размера до 200,000 слов показало, что именно данных не хватает модели для счастья. После 7ой эпохи ошибаемость упала до 9.735%. Это уже эффективно 4.5-грамная модель слов.
Текущие исходники без данных лежат тут:
https://github.com/Koziev/word_is_noun