Интеграция модели
В движок будущей версии 12 добавлен C++ код декодера/теггера одной из вероятностных моделей русской морфологии, которые я насоздавал и гонял последние полгода.
Этот декодер запускается перед работой основного анализатора и позволяет оставить только самые достоверные варианты распознавания слов, учитывая локальный контекст. В используемой для текущих экспериментов конфигурации контекст является окном размером +/- 3 слова от текущего фокуса.
Основное достоинство данной модели - статистический характер обучения. То есть это задача машинного обучения с учителем в чистом виде. Пока что модели ведут себя так, что по мере роста обучающего корпуса точность распознавания растет.
Главный недостаток выбранной модели
Тяжёлое обучение. Сейчас полный цикл обучения и проверки занимает около 1.5 часа, из них примерно 1 час это утряска коэффициентов в градиентном спуске.
Второй момент связан с первым - при добавлении нового статистического материала необходимо переобучать модель заново. То есть нет режима инкрементального обучения. У другой модели на скамеечке запасных такая возможность есть, но она дает значительно большую погрешность распознавания (около 3% против 1% для выбранной).
Точность моделей
Процент неверно проставленных тегов для эталонного корпуса:
N-gram with smoothing ...... 3.25% (определение части речи и набора грам. признаков)
HMM .................................. 1.12% (определение только части речи)
CRF .................................. ~1.0% (точность зависит от параметров модели; определение POS и набора грам. признаков)
Важный нюанс в оценках точности - погрешность распознавания ГЛАГОЛОВ составляет около 0.02%. Если учитывать ценность разных слов для ПОНИМАНИЯ смысла повествования, то понятно, что погрешность определения частицы обычно не причиняет такого вреда, как неправильно узнанный или не узнанный глагол. Поэтому я рассчитываю, что новый вариант нисходящего парсера будет неплохо работать на сильно зашумленных текстах (включая безграмотные, жаргонизированные и т.д.).
Размер файла данных модели
Размер файла с матрицами сильно зависит от параметров модели. Если взять очень грубую (другими словами - очень обобщающую) конфигурацию, то файл имеет размер около 1-2 Мб. Для очень сложной модели получается до 100 Мб файл. Для текущих экспериментов взят некий компромиссный вариант, который при точности 99% работает с файлом размером ~18 Мб.
Уменьшение энтропии распознавания
Выполняется подсчет количества вариантов распознавания слов по всему корпусу. Идеальным является вариант, когда для каждого слова остается только 1 вариант распознавания.
Без снятия неоднозначности получается так:
слов: 277326
вариантов: 518823
Включение вероятностной модели дает результаты:
слов: 277326
вариантов: 286092
Как включается вероятностная модель
1. В каталог со словарем кидаются двоичные файлы с матрицами модели. В XML файл конфигурации словаря (
http://www.solarix.ru/for_developers/docs/russian-grammatical-dictionary-configuration.shtml) вписывается поле , задающее относительный путь к этим файлам. На будущее это поле скорее всего будет содержать данные для подключения нескольких моделей и т.п., но пока все сделано предельно прямолинейно.
2. При вызове sol_MorphologyAnalysis (
http://www.solarix.ru/api/ru/sol_MorphologyAnalysis.shtml) в параметр Flags примешивается битовая константа SOL_GREN_MODEL.