Index of /RWWW

      Name                    Last modified       Size  Description

[DIR] Parent Directory 11-Jun-2007 04:16 - [TXT] bldidx.rwww 26-Jan-2005 22:20 2k [   ] fwais.tgz 26-Jan-2005 22:20 744k [   ] indexsite.sh 26-Jan-2005 22:20 1k [   ] libwww.tgz 26-Jan-2005 22:20 90k [TXT] rustem.html 19-Feb-2008 02:11 23k [   ] rwais.tgz 26-Jan-2005 22:20 209k [   ] steal.tgz 26-Jan-2005 22:20 5k [   ] var-wais.tar.gz 26-Jan-2005 22:20 6k [   ] wais-www-cfg.tgz 26-Jan-2005 22:20 9k [   ] wais-www.tgz 26-Jan-2005 22:20 18k [TXT] ww-retrieve 26-Jan-2005 22:20 1k [TXT] ww-retrieve-h 26-Jan-2005 22:20 1k [TXT] ww-search 26-Jan-2005 22:20 1k

Rustem: the Report (Russian)

Рустем - программа для выделения неизменяемой части из слова.

Задача, которую пришлось решить, возникла, когда меня попросили поставить на нашем сервере WWW шлюз к WAIS, и, собственно, сам WAIS (freeWAIS) - предполагалось организовать поиск в новостевых сводках агентства SkatePress, которое регулярно публикует свои материалы на нашем сервере. Кроме того, на нашем сервере находится электронная библиотека Московского Либертариума, которую также хотелось положить под WAIS, и которая довольно велика и быстро растет.

В freeWAIS для английского языка есть встроенный модуль отрезания от слов формообразующих частей, и качество поиска серьезно зависит от того, используется ли при обработке текста этот модуль. Для русского языка, разумеется, английский вариант не подходил (в том смысле, что, копируя используемые при обработке английских слов приемы, для русского языка не удалось построить ничего пристойного), готового решения также не удалось найти (все обнаруженное либо не решало проблемы, либо было слишком дорого), поэтому я решил сам написать отбрасыватель флексий.

Не будучи при этом ни в самой малой мере специалистом в лингвистике, я нуждался в серьезной помощи со стороны людей, профессионально занимающихся этой и смежными проблемами. К сожалению, большая часть бесед с лингвистами, которых я смог найти, была не слишком продуктивной, однако помощь Г.С.Цейтина и В.М.Андрющенко была существенной, и их консультации позволили мне найти отправную точку моей работы и сделать первые шаги; по предложению Андрющенко я обратился к сотруднице Машинного Фонда Русского Языка Жанне Григорьевне Аношкиной, разработки которой стали основой для алгоритмов, использованных в моей программе. (Любопытной и поучительной подробностью моих исканий явилось то, что дважды в их ходе мне предлагали отыскать некую Машкович из МФРЯ, у которой "лет шесть назад" были статьи по интересующей меня теме, да я все никак не мог собраться навести справки - так вот, Жанна Григорьевна Аношкина это та Машкович и есть).
То, о чем мне рассказывала Аношкина, представляло собой программу лемматизации и морфологического анализа слов русского языка, среди прочих слов способную обрабатывать незнакомые ей (то есть отсутствующие в словаре) слова. Ключевой (по крайней мере, для меня) чертой программы было наличие в ней двух одинаково устроенных словарей - отсортированных словарей условных окончаний и условных основ (условных потому, что часть основы, изменяющаяся от формы к форме, была перенесена в окончание), записанных справа налево. Сначала по словарю окончаний отыскивались все отделяемые от слова части, потом для каждой из оставшихся после отделения частей в словаре основ отыскивались полные совпадения. Для полных совпадений проверялись на пересечения множества парадигм, прицепленные к условному окончанию и к условной основе (был также перенумерованный словарь парадигм со ссылками на него из двух первых словарей по номеру), и кандидаты с пересекающимися множествами считались правильными ответами.
В случае же, если полного совпадения основы найдено не было, поиск повторялся уже с учетом частичных совпадений и с выбором в качестве лучшего варианта с наибольшей суммарной длиной окончания и совпавшей части основы; при этом морфологический анализ производился так же, как для соответствующего слова из словаря. Такой подход давал вполне достоверные результаты и был положен, с рядом изменений, в основу моей программы.
Среди других особенностей программы Жанны Григорьевны, важных для меня, было наличие

Мне предстояло принять решение о том, использовать ли их, и как их использовать. .ce Что меня не устраивало?

При том, что описанная программа уже очень близко подводила к решению стоящей передо мной задачи, использовать ее в неизмененном виде было невозможно или, по крайней мере, неразумно. Для такой точки зрения было неколько причин, среди которых основными были следующие:

* * *

По некотором размышлении я принял решение о ряде принципиальных изменений в алгоритмах. Во-первых, я отказался от поиска полностью совпадающей основы, оставив только поиск частичного совпадения, а вместе с ним и от хранения полного словаря - при создании словаря от основы остается не более заранее заданного числа букв, причем изменением этого числа стало возможно устанавливать соотношение между производительностью и качеством работы алгоритма.
Во-вторых, я несколько сузил число парадигм, воспользовавшись тем, что в моей задаче их единственная роль состоит в установлении связи между основами и окончаниями. Для этого я отсортировал флексии в парадигмах и убрал дубликаты, а для нумерования парадигм стал использовать хэш-таблицу. (В программе Аношкиной сравнивались только последовательные флексии).
В-третьих, при переборе разбиений я стал двигаться от максимального по длине окончания к минимальному, а не наоборот, что позволило мне прерывать поиск в случае, если найдено совпадение предельного числа букв основы.
В-четвертых, я убрал из словаря служебных слов числительные и вводные слова, а оставшуюся часть словаря стал использовать как фильтр в том смысле, что узнанные по этому словарю слова отбрасываются как несмысловые.
В-пятых, наконец, я отказался от использования словаря имен. Тот выигрыш, которые давали выделяемые из него правила, был довольно мал, а накладные расходы от его использования оказывались сравнительно велики.

Устройство программы.

Я пытался сохранить устройство программы простым и целостным, отказываясь от мелких улучшений там, где ради их достижения в алгоритмы пришлось бы внести путаницу и неясности. В результате получилось следующее: На этом обработка слова заканчивается.

Основные затраты процессорного времени и оперативной памяти приходятся на поиск в двух одинаково устроенных словарях - окончаний и основ, и от того, как они устроены, существенно зависит производительность программы и ее связь с размером словарей и плотностью входного потока. На настоящий момент, и, думаю, на довольно протяженное будущее, словари устроены следующим образом:

При создании словаря к уже описанным структурам (фильтру и словарям) добавляется таблица парадигм, которая, будучи сохранена, позволяла бы расширять словарь. Однако, все, что делалось в этом проекте, было направлено на то, чтобы программу было естественно и эффективно использовать, не задумываясь о расширении словарей, так как выделенные из базового словаря правила не изменяются сколько-нибудь сильно от дальнейших уточнений.

Впечатление от работы

Программа была успешно встроена (с некоторой чрезмерной изощренностью, быть может) в freeWAIS, и, в целом, производит впечатление оправдывающей возложенные на нее надежды - поиск дает отклик, воспринимаемый как адекватный, а если заранее известно, что предполагается найти, то переформулирование вопроса практически не требуется. Рассматривание тестовых последовательностей наводит на мысль о целесообразности удаления некоторых суффиксов и приставок, но поскольку при этом по-хорошему нужны еще по крайней мере две пары словарей (при существующей схеме обработки), а результаты и без этого вполне приемлемы, то, видимо, пока я этого делать не буду.

В настоящее время программа написана на Схеме и откомпилирована транслятором Scheme->C, написанной Joel Bartlett, DEC WRL. Объем таблиц в оперативной памяти составляет 2 Mb, но при этом при необходимости съэкономить память тексты могут быть переписаны так, чтобы хватало 800 Kb оперативной памяти для оптимального словаря. При достаточной памяти на 486DX33 программа обрабатывает слова со скоростью около двухсот слов в секунду.
Оптимальным словарем, при этом, оказался такой, котрый создавался с сохранением 6 букв основы - при меньшем числе больший разброс возникает от преобладающего влияния ошибки приведения к основе, а при большем различаются те тонкости, которыми вполне допустимо пренебречь - при указанной величине же разброс минимальный, то есть из тестовой последовательности (все просклоненные слова из словаря Зализняка) получается список условных основ наименьшей длины. При этом при оставляемой длине слова от 9 и больше результаты практически перестают различаться.
После некоторых эскпериментов минимальная приемлемая длина основы положена равной 3.

Давид Толпин, Институт Коммерческой Инженерии.

1 марта 1995 года