Яндекс.Метрика

    Ни о чём

    Использование статистических методов для генерации парадигмы по каноническим формам новых слов

    Вот и настал момент, когда можно будет поговорить об интересном методе заполнения базы/словаря модуля морфологии с использованием данных уже имеющихся в нём и статистических методов.

    Имеем:
    1. Базу Зализняка из 94 тысячcлемми почти 3 миллионових словоформ
    2. Базу из 52 тысячи новых слов с информацией об их грамматической принадлежности (род, число, одушевлённость и прочее…)
    3. Интерпретатор Ruby
    4. Некоторое кол-во свободного времени после работы
    5. Необходимость дополнить базу модуля парадигмами новых слов (имеются лишь их канонические формы)

    Попробуем использовать статистические методы (или кто-то может сказать псевдостатистические):

    1. Перво-наперво формируем базу моделей окончаний парадигм для каждого слова из имеющейся базы. Приведённые примеры данных наверно будет нагляднее любых объяснений. Записи о связи между канонической формой слова и моделью окончаний выглядят так:
    …
    аббатский|15|<…всякая грамматическая информация для канонической формы слова…>
    аббатство|20|<…всякая грамматическая информация для канонической формы слова…>
    …
    

    тут 15 и 20 – номера моделей окончаний.
    Записи моделей окончания выглядят так:
    …
    ---
    15
    ий|<…всякая грамматическая информация для канонической формы слова…>
    ая|<…всякая грамматическая информация для канонической формы слова…>
    ое|<…всякая грамматическая информация для канонической формы слова…>
    ие|<…всякая грамматическая информация для канонической формы слова…>
    ого|<…всякая грамматическая информация для канонической формы слова…>
    ой|<…всякая грамматическая информация для канонической формы слова…>
    ого|<…всякая грамматическая информация для канонической формы слова…>
    их|<…всякая грамматическая информация для канонической формы слова…>
    ому|<…всякая грамматическая информация для канонической формы слова…>
    …
    и|<…всякая грамматическая информация для канонической формы слова…>
    ---
    …
    

    2. После этого начинаем повторный анализ имеющихся слов на предмет зависимости модели окончаний от структуры слова. Для этого производим разбиение на слоги (говорить о корректности работы этого алгоритма я пока не могу, но для простых случаев он более-менее работает — всякие варианты типа «ландскнехт» рассматривать не будем). Главное, чтобы один и тот же алгоритм применялся в обеих фазах алгоритма: анализе имеющихся слов и генерации новых.

    Разбиение на слоги вместо использования n-grammбыло выбрано намеренно, так как, по моему мнению, это более естественно выражает зависимости в русском языке.
    Итак, разбиваем слово на слоги, нумеруем их в обратном порядке, и записываем в базу (если такая запись у же имеется в базе, объединяем с имеющимися данными).
    В итоге получаем такую таблицу (очень много записей):
    Идентификатор записи Слог Позиция слога в слове Номер модели окончания Кол-во подобных комбинаций (слог/позиция/модель окончания)
    16 ба 2 10 29
    16 жур 1 10 3
    16 ный 0 10 5609

    3. Наконец, ваяем код, который тем же алгоритмом разбивает новые слова на слоги, интерпретирует кол-во комбинаций «слог/позиция/модель окончания», как вероятности и с уменьшающимся «весом» от последнего слога до первого (от начала слова к голове) вычисляет возможную модель окончаний.

    Результаты:
    1. В результате анализа парадигмывыборки из 1000 произвольных новых слов – 85% верных парадигм.
    2. 15% неверных парадигм для слов последовательность слогов, в которых была «необычна» для старого набора: фиалы -> фиалым, фиалыы...
    3. Прирост базы словоформ на почти 2 миллиона словоформ.