Стемминг

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

1). Алгоритм поиска по таблицы флексий.

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

2). Алгоритм усечения окончаний.

Алгоритмы усечения окончаний не имеют в своем распоряжении таблиц всех флективных форм, а часто используют для своей работы небольшой набор правил, вроде: если слово оканчивается на “ет”, то удалить “eт” и так далее.

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

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

3). Алгоритм обработки аффиксов.

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

4). Стохастические алгоритмы.

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

5). Алгоритмы лемматизации.

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

6). Анализ методом N-грамм.

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

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

Допустим, у нас есть фраза “счастье есть удовольствие без раскаяния” и мы хотим вычислить ее вероятность. При этом мы воспользуемся биграммами и упростим вычисление вероятности тем, что будем считать вероятность каждого конкретного слова в зависимости только от одного предыдущего.

Итак, получим:

P = P(счастье) * P(есть|счастье) * P(удовольствие|есть) * P(без|удовольствие) * P(раскаяния|без)

Чтобы рассчитать условную вероятность P(есть|счастье) разделим количество пар “счастье есть” на количество повторений слова “счастье”.

 

Стеммер Портера.

Одним из самых известных и также одной из первых реализаций стеммера является работа Мартина Портера, выполненная им в 1980 году. Так называем стеммер Портера работает на основе набора правил, последовательно отсекающих окончания и суффиксы. Задумка довольно проста, и Вы можете попробовать реализовать его самостоятельно. Сам по себе стеммер распространяется с сайта  Snowball .

 

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

Ну а наша статья на этом подошла к концу. Спасибо за внимание и до встречи в новых статьях, посвященных обработке текстов!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *