Научная статья на тему 'Snowforce: быстрый стеммер для русского языка'

Snowforce: быстрый стеммер для русского языка Текст научной статьи по специальности «Языкознание и литературоведение»

CC BY
1638
980
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по языкознанию и литературоведению, автор научной работы — Гращенко Л. А., Муравлев В. А.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Snowforce: быстрый стеммер для русского языка»

Snowforce: быстрый стеммер для русского языка

Гращенко Л.А., Муравлев В.А., Академия ФСО России graschenko @mail. ru, steev 138 @gmail. com

Аннотация

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

1 Введение

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

Пример работы морфологического анализатора:

«Делъфииами»-(«Дельфин», сущ., мн.ч., муж.р., твор.пад., 2 ст.)

Исходный текст. Рыбак рыбака^ видит издалека.

Результат лемматизации. Рыбак рыбак видеть издалека._^

Рис. 1. Пример выполнения морфологического анализа, стемминга и лемматизации

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

практических приложениях, где не требуется полный МА.

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

2 Содержание стемминга

Стемминг можно представить как функцию от словоупотребления Ж длины \Щ, возвращающую стему £ длины \£\, где £ - подстрока Ж:/(Ж) = £ : \Ж\ = \£\ + К, К> 0. В общем виде при стемминге может отсекаться не только окончание слова, но и его начало [Филип-чик, 2016]. Но так как в русском языке большинство приставок словообразовательные, то под стеммингом мы понимаем именно отсечение букв с конца слова, а слово русского языка представимо следующей моделью, рисунок 2.

Ж

(-1-1

0

1___) {___)

т т

£ К

Рис. 2. Модель слова русского языка с обозначением стемы £

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

При работе стеммеров возможны ошибки первого рода - избыточное (оуе^етт^) стеммирование и второго рода - недостаточное (ипёе^етт^) стеммирование [Яц-ко, 2012], рис. 3.

ров, включающую потенциально возможные алгоритмы, рис. 4.

Типы ошибок при стемминге

Избыточное (Оуе^етгшг^) стеммирование Недостаточное (ипс1ег81еттт§) стеммирование

Пример: «тушами» - «туш» «тушит» - «туш» Пример: «кровать» - «крова» «кроватью» - «кров»

Рис. 3. Ошибки при стемминге

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

- минимизация вероятностей ошибок первого и второго рода;

- входная последовательность должна быть не менее 3 символов и содержать хотя бы одну гласную букву;

- отсутствие знания контекста и параметров слова, таких как часть речи, число, род и т.д.;

- полученная стема не должна являться формой другого слова, отличного по смыслу.

Для оценки стеммеров используют общие для всех алгоритмов характеристики, такие как скорость, сложность и т.д. [Яцко, 2012], а также качественные показатели: полнота, точность и ^-мера.

3 Классификация стеммеров

В доступной литературе выделяют алгоритмические, словарные и комбинированные стеммеры [Хашковский, Шкурко, 2014], что соответствует реально существующим алгоритмам. Однако представляется возможным ввести более полную классификацию стемме-

Рис. 4. Классификация стеммеров для русского языка

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

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

Алгебраический стеммер предполагает наличие формулы (системы уравнений), решение которых на основе извлекаемых из слова параметров непосредственно указывает на количество отсекаемых букв. Нейросете-вые стеммеры строятся на основе аппарата нейронных сетей, распознающего стему непосредственно. Как алгоритмических, так и нейросетевых алгоритмов пока не разработано, но их существование возможно.

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

4 Стеммеры для русского языка

Рассмотрим ретроспективу создания стем-меров для русского языка и охарактеризуем их, рис. 5.

Портер

(Snowball)

Java Javascript C

-s. C++ C# Perl Ruby CommonLisp Python PHP

Stemka

Z-stemmer

X

C#

Филипчик

Астапова

Mystem 1

1 >1 Mystem 2.0 1 bl Mystem 2.1 Mystem 3.0

) 1 1

Яцко

_ж-m-m-►

2013 2014 2016 t, год

- доступно только описание без реализации

1979 1998 2002 2010

[ J - алгоритмические

[ ) - словарные

[ J - вероятностные

2012

- комбинированные

язык программирования, на котором реализован алгоритм (если известно)

А [............... Б

f И

- в основе алгоритма «Б» лежит алгоритм «А»

Рис. 5. Ретроспектива развития стеммеров для русского языка

Стеммер Портера. Изначально был разработан Мартином Портером (Martin Porter) в 1979 году для английского языка. Впоследствии им был создан проект Snowball и на основе оригинального алгоритма были написаны стеммеры для большинства индоевропейских языков, в т.ч. русского1.

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

Стеммер Филипчика. Стеммер А.В. Филипчика, разработанный им в 2016 году, есть не что иное, как дополнение к алгоритму Snowball [Филипчик, 2016]. Дополнение заключается в базе словоформ, для которых ранее была определена стема.

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

Mystem. Стеммер разработан Ильёй Сега-ловичем в 1998 году [Сегалович, 1998]. Принадлежит и создавался специально для компании «Яндекс». Крайняя версия 3.0 была опубликована в 2014 году.

1 http://snowball.tartarus.org

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

Если вариант основы не совпадает ни с одной из «ближайших» словарных основ, то по имеющейся основе, суффиксу и модели «ближайшей» словарной основы генерируется гипотетическая модель словоизменения. Гипотеза запоминается, а если она уже была построена ранее - увеличивает свой вес. Если слово так и не было найдено в словаре - длина требуемого общего окончания основ уменьшается на единицу, идет просмотр дерева на предмет новых гипотез.

Когда длина общей подстроки суффикса достигает 2, поиск останавливается и идет ранжирование гипотез по продуктивности: если вес гипотезы в пять и более раз меньше самого большого веса - такая гипотеза отсеивается. Результатом работы стеммера является набор гипотез для несуществующего или одна гипотеза для словарного слова.

Стеммер Астаповой. Разработан О.П. Астаповой в 2012 году в рамках курсо-

вого проектирования в МГУ имени М.В. Ломоносова [Астапова, 2012] на основе алгоритма Mystem. Особенностью является использование примитивной частеречевой разметки, позволяющей сократить количество гипотез для несловарных слов, т.к. чаще всего эти гипотезы относятся к разным частям речи.

Stemka. Вероятностный алгоритм написан Андреем Коваленко в 2002 году специально для русского языка1. Слова из обучающего текста разбираются анализатором на пары «последние две буквы основы» + «суффикс» и, если такая пара уже присутствует в модели, увеличивается ее вес, иначе она добавляется в модель. Далее полученный массив данных ранжируется по убыванию веса и модели. Результат в виде набора потенциальных окончаний с условиями на предшествующие символы инвертируется для удобства сканирования словоформ «справа налево» и представляется в виде таблицы переходов конечного автомата. При разборе слово сканируется по построенным таблицам перехода. Эффективность работы алгоритма зависит от обучающего текста.

Z-стеммер. Разработан Д.М. Зеленским в 2016 году2. Как отмечает автор, на его создание повлияло отсутствие алгоритма для русского языка, отвечающего определению стеммера. А самый распространенный Snowball, изначально созданный для английского языка, неудачно переносит заложенные в него закономерности на почву русской морфологии, вследствие чего содержит ряд очевидных недостатков, устраненных в Z-стеммере. Автор также обратил внимание на то, что Z-стеммер является конкурентоспособным среди других алгоритмов, хотя тестирование на фактическом материале большого объема не произведено.

Процесс получения стемы заключается в последовательном выполнении 38 шагов проверки условий и сравнения букв.

Стеммер Яцко. В.А. Яцко в своей работе [Яцко, 2016] описал словарный алгоритм, включающий три словаря: список стем наиболее частотных слов русского языка, список суффиксов и окончаний, стоп-словарь. Все три списка могут редактироваться пользователем, что позволяет адаптировать стем-мер под цели конкретного проекта.

1 http://www.keva.ru/stemka/stemka.html

2 http://www. academia. edu/26195742/

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

5 Алгоритм Snowball

Несмотря на то, что алгоритм Snowball является самым ранним для русского языка и после него был разработан ряд стеммеров, он остается самым популярным, о чем свидетельствует многообразие языков программирования, на которых он реализован. Также причинами этому послужили простота алгоритма с позиции понимания, доступность в сети Интернет (в виде свободно распространяемых библиотек).

Целью создания других алгоритмов было повышение качества обработки за счет учета исключений русскоязычной лексики, так как идея Snowball изначально реализована для английского языка. Стремление к этому снизило скорость новых алгоритмов. Так, например, Ильёй Сегаловичем был проведен эксперимент, в ходе которого выявлено, что Snowball в 6,3 раза и в 2,1 раза быстрее Mystem и Stemka, соответственно. На момент постановки эксперимента существовали только эти алгоритмы. Доступных оценок скорости последующих реализаций стемме-ров нам найти не удалось.

Важную роль в объяснении лидерства Snowball играет его доступность пользователям. Так, А.В. Филипчик описал лишь дополнение к алгоритму. Mystem предлагается в виде исполняемого файла с закрытым исходным кодом и весом около 20 Мбайт, так как разрабатывался исключительно для компании «Яндекс». О.П. Астапова усложнила работу последнего, утверждая, что повысила качество на 4%, не приводя при этом никакой экспериментальной информации.

Stemka опубликован без обучающей выборки, что, вероятно, объясняет его малую используемость. В.А. Яцко представил только идею своего стеммера без реализации, экспериментов и описываемых им словарей стем, окончаний и стоп-слов. Z-стеммер, помимо стемминга, включает в себя предобработку

текста и имеет требования к входным данным, что ограничивает его использование. Также автором не производилось тестирование на фактическом материале большого объема, то есть публикацию его алгоритма следует воспринимать как идею для стеммера.

Таким образом, ситуация на сегодняшний момент такова, что всюду применяют алгоритм Snowball. Пользователи легко его находят и подключают в свои проекты. Но если выполнить его в ручную, то обнаруживается избыточность. Чтобы её проследить, обратимся к описанию алгоритма, включающему четыре шага. Подробности реализации алгоритма и перечень всех словарей доступны на официальном сайте проекта Snowball1.

Условием для начала работы стеммера является наличие в слове области RV, т.е. части входного слова после первой гласной, так как все последующие проверки проводятся внутри неё. Также рассматривается область R2 -подстрока слова после двух сочетаний «глас-ная»+«согласная», рис. 6.

R2

._л_.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

/X

©0©®®®®©©

-Г-

RV

О-гласная О-согласная Рис. 6. Области RV и R2 для алгоритма Snowball

Все возможные окончания слов разделены по частям речи и удаляется самое длинное из них. Так, на первом шаге производится поиск окончаний из следующей последовательности групп: Perfective Gerund, Reflexive, Adjectival, Verb и Noun. В случае нахождения какого-либо из них окончание отбрасывается, и алгоритм переходит ко второму шагу, где проверяется наличие буквы «и» в конце оставшейся части слова и ее удаление. Далее на третьем шаге при наличии области R2 ищется и удаляется окончание Derivational.

На заключительном четвертом шаге возможен один из трёх вариантов:

— если слово оканчивается на «-нн», то удаляется последняя буква;

— если слово оканчивается на Superlative, то удаляем его и снова удаляем последнюю букву, если слово оканчивается на «-нн»;

— при наличии удаляем окончание «-ь».

Рассмотрим случай, подтверждающий избыточность алгоритма. Например, после

нахождения и удаления суффикса «-ывшись» из группы Perfective Gerund алгоритм можно останавливать, так как далее проверяются невозможные в русском языке сочетания окончаний и суффиксов. Но в оригинальном алгоритме ближайший останов возможен только на четвертом шаге, когда большая часть лишних проверок уже выполнена. Таким образом, существуют значительные резервы по оптимизации данного алгоритма.

6 Алгоритм Snowforce

Проведенная работа была нацелена на повышение скорости выполнения алгоритма Snowball без изменения полноты и точности его работы. Модификация под названием Snowforce получена следующим образом:

1. все группы (списки) окончаний оригинального алгоритма, а также проверки с первого по четвертый шаги были заменены восемью бинарными деревьями, оптимизированными по статистике встречаемости букв русского алфавита;

2. на основе анализа проверяемых сочетаний окончаний и суффиксов добавлено 95 блоков останова алгоритма, а также удалены проверки невозможных комбинаций;

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

Примеры узлов бинарных деревьев алгоритма Snowforce представлены на рис. 7. Здесь кружками обозначены проверки наличия указанной буквы на /-той позиции с конца слова, начиная с первой. Непрерывная линия указывает на наличие проверяемой буквы, пунктирная - на отсутствие. Счетчик K указывает на количество отсекаемых с конца слова букв, далее следует ссылка на позицию в другом бинарном дереве или останов.

Б

Рис. 7. Примеры узлов бинарных деревьев алгоритма Snowforce

1 http://snowball.tartarus.org

На рис. 8 приведен пример работы алго- торого подчеркнута область RV и проверяе-

ритма Snowforce для слова «улучшенными», где красным цветом выделен путь обхода деревьев. Для любого слова этот путь начинается с проверки наличия буквы «и» на последней позиции в дереве Perfective Gerund. Рядом с каждым узлом указано входное слово, у ко-

мая в конкретном узле буква сделана строчной. На выходе крайнего дерева от входного слова остается подстрока «улучшен». Это и есть результат работы стеммера.

"Ч ч. улучшеннымИ

^ JJ улучшенныМи

(0)ADJ "И,М"

2М I улучшенныМи

улучшеннЫми

улучшены

ХН

улучшенН

2Н ^ улучшеНн 3дЛ улучшЕнн

(2)END ^^^^

улучшЕнн

(2)END

Л 1

<3

5

См о я и Л <и

U

о

К

6

S

S W

(1)END

Результат: «улучшен»

Рис. 8. Пример работы алгоритма Snowforce для слова «улучшенными»

7 Вычислительный эксперимент

Для оценивания показателей качества функционирования предложенного алгоритма был проведен вычислительный эксперимент, в котором участвовали:

1. реализация алгоритма Snowforce на языке С++ в среде Embarcadero С++ Builder;

2. свободно распространяемая в сети Интернет реализация алгоритма Snowball, использующая регулярные выражения;

3. реализованный автором Snowball в виде бинарного дерева Snowball - Binary Tree.

Две реализации Snowball использовались для того, чтобы нивелировать влияние особенностей реализации алгоритма на итоговую оценку.

В ходе эксперимента на ПЭВМ (CPU Intel Core i7 2,4 ГГц, RAM 6 GB, Windows 10) стеммингу был подвергнут текст сборника из 447 произведений русских прозаиков и поэтов XIX-XX веков объемом 162232 слова1.

Для подтверждения эквивалентности алгоритмов по полноте и точности выполнено сравнение полученных результатов стеммин-га, все три результата полностью совпали.

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

1 http://www.speakrus.ru/dict/

Таблица 1 - Результаты испытаний и характеристики алгоритмов Snowball и Snowforce

Показатель Snowball (RegEx) Snowball (Binary Tree) Snowforce

Всего узлов в дереве - 313 238

Число остановов - 3 98

Минимальная длина пути - 9 4

Максимальная длина пути - 125 48

Средняя длина пути - 81 24

Время выполнения, сек. 65 15 4

8 Заключение

По результатам изложенного материала и проведенных экспериментов представляется обоснованным сделать следующие выводы:

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

4. Наиболее доступным и используемым в практических приложениях для русского языка остается алгоритм Snowball, несмотря на то, что он избыточен, так как проверяет несвойственные для русского языка комбинации суффиксов и окончаний. Кроме того, он не в полной мере учитывает особенности морфологии русского языка.

5. Разработанный алгоритм Snowforce исключает ряд недостатков алгоритма Snowball за счет использования остановов, оптимизации порядка и содержания проверки окончаний и суффиксов с учетом их встречаемости, замены списков окончаний бинарными деревьями. При сохранении полноты и точности оригинала, алгоритм Snowforce выполняется, по меньшей мере, в 3,75 раз быстрее алгоритма Snowball, который до этого являлся наиболее быстрым алгоритмом.

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

Список литературы

Астапова, О.П. Исследование и разработка методов нормализации слов русского языка:

курсовая работа / О.П. Астапова, под рук.

Д.Ю. Турдакова. - М.: Факультет Вычисли-

тельной математики и кибернетики МГУ, 2012. - 16 с.

Алексеев, А. А. Морфологический анализ учебных текстов / А. А. Алексеев, И.М. Лазарева // Актуальные направления научных исследований XXI века: теория и практика. 2015. Т.3. №7-3 (18-3). С. 289-292.

Гращенко, Л. А. О модельном стоп-словаре / Л. А. Гращенко // Известия Академии наук Республики Таджикистан. Отделение физико-математических, химических, геологических и технических наук. 2013. №1(150). С.40-46.

Жердева, М.В. Стемминг и лемматизация в lucene.net / М.В. Жердева, В.М. Артюшенко // Лесной вестник. 2016. Т.20. №3. С.131-134.

Сегалович, И. Русский морфологический анализ и синтез с генерацией моделей словоизменения для не описанных в словаре слов / И. Сегалович, М. Маслов // Труды международного семинара Диалог'98 по компьютерной лингвистике и ее приложениям. Казань, 1998. Т.2. С. 547-552.

Филипчик, А.В. Стемминг слов в лингвистической информационно-поисковой системе // Апробация. 2016. №1 (40). С.65-66.

Хашковский, В.В. Современные подходы в организации систем обработки больших объемов данных / В.В. Хашковский, А.Н. Шкурко // Известия ЮФУ. Технические науки. 2014. №8. С.241-250.

Яцко, В.А. Алгоритмы и программы автоматической обработки текста / В.А. Яцко // Вестник ИГЛУ. 2012. №1 (17). С.150-160.

Яцко, В.А. Особенности разработки стеммера / В.А. Яцко // Символ науки. 2016. №10-2 (22). С. 103-105.

i Надоели баннеры? Вы всегда можете отключить рекламу.