В этом цикле обновления парсера и POS Tagger'а я решил немного поиграться параметрами оптимизатора, попробовать выжать парочку сотых процента в точности.
Используемая в POS Tagger'е библиотека CRFSuite по умолчанию использует
LBFGS. Среди гиперпараметров этого оптимизатора интересны два - параметры
регуляризации L1 и L2. Для задания используются опции командной строки:
--set=c1=NNN
--set=c2=NNN
для L1 и L2 соответственно. По умолчанию CRFSuite принимает L1=0 и L2=1.
Обсчет по полному датасету занимает больше двух суток, что делает эксперименты недопустимо длительными и скучными. Поэтому подбор выполнялся на урезанном до 100,000 предложений корпусе. Фактически получился
случайный подбор - я менял параметры руками в небольшом разумном диапазоне, получая для каждой пары величину ошибаемости на тестовом наборе данных.
Кроме точности на тестовом наборе, в качестве побочной метрики можно было взять размер файла с сохраненной моделью, так как L1 регуляризация может сильно урезать набор учитываемых моделью признаков. Как показали эксперименты, количество активных признаков и размер файла модели меняются в пределах порядка. В целом, чем выше L1, тем компактнее модель и меньше активных признаков. Хотя L2 тоже влияет на размер модели - см. таблицу ниже.
Кроме того, увеличение L1 сильно замедляет обсчет, так как ухудшается сходимость.
С точностью все намного сложнее. Из таблички видно, что есть что-то типа оптимального значения пары, на котором точность наилучшая. Отклонение любого из регуляризаторов от оптимума ухудшает точность.
Без регуляризации получается самая массивная и самая неточная модель.
L1=0 L2=0 err=1.78% size=52,564,120
L1=0 L2=0.5 err=1.55% size=52,564,120
L1=0 L2=1 err=1.56%
L1=0.05 L2=0.5 err=1.53% size=14,243,764
L1=0.1 L2=0 err=1.65% size=2,307,468
L1=0.1 L2=0.5 err=1.51% size=10,604,896
L1=0.1 L2=1 err=1.54% size=12,656,044
L1=0.1 L2=2 err=1.61% size=14,911,556