Ни о чём →
Использование статистических методов для генерации парадигмы по каноническим формам новых слов
Вот и настал момент, когда можно будет поговорить об интересном методе заполнения базы/словаря модуля морфологии с использованием данных уже имеющихся в нём и статистических методов.
Имеем:
Попробуем использовать статистические методы (или кто-то может сказать псевдостатистические):
1. Перво-наперво формируем базу моделей окончаний парадигм для каждого слова из имеющейся базы. Приведённые примеры данных наверно будет нагляднее любых объяснений. Записи о связи между канонической формой слова и моделью окончаний выглядят так:
тут 15 и 20 – номера моделей окончаний.
Записи моделей окончания выглядят так:
2. После этого начинаем повторный анализ имеющихся слов на предмет зависимости модели окончаний от структуры слова. Для этого производим разбиение на слоги (говорить о корректности работы этого алгоритма я пока не могу, но для простых случаев он более-менее работает — всякие варианты типа «ландскнехт» рассматривать не будем). Главное, чтобы один и тот же алгоритм применялся в обеих фазах алгоритма: анализе имеющихся слов и генерации новых.
Разбиение на слоги вместо использования n-grammбыло выбрано намеренно, так как, по моему мнению, это более естественно выражает зависимости в русском языке.
Итак, разбиваем слово на слоги, нумеруем их в обратном порядке, и записываем в базу (если такая запись у же имеется в базе, объединяем с имеющимися данными).
В итоге получаем такую таблицу (очень много записей):
3. Наконец, ваяем код, который тем же алгоритмом разбивает новые слова на слоги, интерпретирует кол-во комбинаций «слог/позиция/модель окончания», как вероятности и с уменьшающимся «весом» от последнего слога до первого (от начала слова к голове) вычисляет возможную модель окончаний.
Результаты:
Имеем:
- Базу Зализняка из 94 тысячcлемми почти 3 миллионових словоформ
- Базу из 52 тысячи новых слов с информацией об их грамматической принадлежности (род, число, одушевлённость и прочее…)
- Интерпретатор Ruby
- Некоторое кол-во свободного времени после работы
- Необходимость дополнить базу модуля парадигмами новых слов (имеются лишь их канонические формы)
Попробуем использовать статистические методы (или кто-то может сказать псевдостатистические):
1. Перво-наперво формируем базу моделей окончаний парадигм для каждого слова из имеющейся базы. Приведённые примеры данных наверно будет нагляднее любых объяснений. Записи о связи между канонической формой слова и моделью окончаний выглядят так:
… аббатский|15|<…всякая грамматическая информация для канонической формы слова…> аббатство|20|<…всякая грамматическая информация для канонической формы слова…> …
тут 15 и 20 – номера моделей окончаний.
Записи моделей окончания выглядят так:
… --- 15 ий|<…всякая грамматическая информация для канонической формы слова…> ая|<…всякая грамматическая информация для канонической формы слова…> ое|<…всякая грамматическая информация для канонической формы слова…> ие|<…всякая грамматическая информация для канонической формы слова…> ого|<…всякая грамматическая информация для канонической формы слова…> ой|<…всякая грамматическая информация для канонической формы слова…> ого|<…всякая грамматическая информация для канонической формы слова…> их|<…всякая грамматическая информация для канонической формы слова…> ому|<…всякая грамматическая информация для канонической формы слова…> … и|<…всякая грамматическая информация для канонической формы слова…> --- …
2. После этого начинаем повторный анализ имеющихся слов на предмет зависимости модели окончаний от структуры слова. Для этого производим разбиение на слоги (говорить о корректности работы этого алгоритма я пока не могу, но для простых случаев он более-менее работает — всякие варианты типа «ландскнехт» рассматривать не будем). Главное, чтобы один и тот же алгоритм применялся в обеих фазах алгоритма: анализе имеющихся слов и генерации новых.
Разбиение на слоги вместо использования n-grammбыло выбрано намеренно, так как, по моему мнению, это более естественно выражает зависимости в русском языке.
Итак, разбиваем слово на слоги, нумеруем их в обратном порядке, и записываем в базу (если такая запись у же имеется в базе, объединяем с имеющимися данными).
В итоге получаем такую таблицу (очень много записей):
Идентификатор записи | Слог | Позиция слога в слове | Номер модели окончания | Кол-во подобных комбинаций (слог/позиция/модель окончания) |
16 | ба | 2 | 10 | 29 |
16 | жур | 1 | 10 | 3 |
16 | ный | 0 | 10 | 5609 |
3. Наконец, ваяем код, который тем же алгоритмом разбивает новые слова на слоги, интерпретирует кол-во комбинаций «слог/позиция/модель окончания», как вероятности и с уменьшающимся «весом» от последнего слога до первого (от начала слова к голове) вычисляет возможную модель окончаний.
Результаты:
- В результате анализа парадигмывыборки из 1000 произвольных новых слов – 85% верных парадигм.
- 15% неверных парадигм для слов последовательность слогов, в которых была «необычна» для старого набора: фиалы -> фиалым, фиалыы...
- Прирост базы словоформ на почти 2 миллиона словоформ.
28.10.2010 19:21+0400