International conference of developers
and users of free / open source software

Использование свободного ПО в задачах компьютерной лингвистики

Александр Воронцов, ИП Invention Machine corp, Минск, Беларусь – a.vorontsoff@gmail.com

LVEE 2009

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

  • анализ и формализация текста и речи
  • обработка языковой информации, представленной в формальном виде
  • синтез текста и речи

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

Автоматическая обработка естественного языка (ЕЯ) требует разработки программно-вычислительного комплекса (лингвистического процессора), имитирующего языковое поведение человека. В общем случае, в состав лингвистического процессора (ЛП) входят следующие основные компоненты:

  • лингвистическая база знаний
  • программный комплекс
  • средства разработки
  • средства тестирования

Лингвистическая база знаний представляет собой информационный массив данных, описывающий состав и механизмы функционирования одного или нескольких языков. Здесь содержится вся лингвистическая логика, которая используется программной частью при обработке ЕЯ. Как правило, ЛП разрабатывает целая команда специалистов: программистов и компьютерных лингвистов.

На сегодняшний день СПО достаточно успешно и довольно широко применяется при решении разнообразных задач компьютерной лингвистики и, непосредственно, при разработке ЛП. Проиллюстрируем это на примере создания промышленного многоязычного процессора компании Invention Machine Corporation. Данный ЛП является ядром системы автоматизации и управления знаниями Goldfire. Его разработкой занимается научно-производственное подразделение компании под названием Syntagmа. Важно подчеркнуть, что сам ЛП не является частью СПО, а является закрытой разработкой, которая, по сути, представляет собой основу интеллектуальной собственности компании. Тем не менее, СПО широко используется в процессе создания данного продукта, а в свою очередь его разработчики вносят посильный вклад в дальнейшее развитие СПО.

Важным условием качественной разработки любого ПО является создание для этих целей удобной и развитой инструментальной среды, т.е. автоматизированного рабочего места. Проведенные исследования и опыт разработки промышленных систем анализа языка показали, что, в общем случае, в качестве такой среды целесообразно использовать операционную систему типа Unix. Опыт показывает, что системы такого типа представляют собой оптимальную оболочку для совместной работы. Развитая скриптовая среда (например, ruby, awk, shell и др.) и базовый набор утилит для обработки текста (grep, sed, sort и др.) позволяют быстро и точно проводить разнообразные эксперименты с ЕЯ, разрабатывать прототипы и, в целом, организовывать удобный процесс работы. При этом, многие процессы разработки удается эффективно автоматизировать.

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

TL → T’ → T’’ → … →TM

TL – входной текст на ЕЯ;

T’’,T’’’,… – промежуточная формализация ;

TM – результирующее формальное представление .

Соответствующая команда для анализа текста с использованием механизма пайпов будет иметь следующий вид:

cat input | tokenization | tagging | parsing | … > output

В свою очередь, этап tokenization может быть отдельно реализован как:

cat input | word_splitting | sentence_splitting … > output

Модульность и использование пайпов позволяет экспериментировать с архитектурой ЛП, например, заменяя определенный модуль на другой или их последовательность, имеющие соответствующий входной и выходной интерфейсы, но при этом другую логику работы.

В нашем случае основой процесса разработки является использование операционной системы Linux. Совместная работа разработчиков организуется при помощи кластера из 6 серверов с установленным дистрибутивом Debian. Операционная система на десктопных машинах устанавливается по желанию самих разработчиков. В качестве средств доступа в кластер используется ssh, putty, xwinpro и др.

Для хранения исходников лингвистического процессора используется система контроля версий cvs. Сборка проекта производится при помощи системы make и набора вспомогательных скриптов. Совместное использование документации реализовано через ikiwiki. Для оптимизации сборки лингвистического процессора из исходников используются процедуры распределенного компилирования. Так, для компиляции программной части используется distcc, а для компиляции лингвистической базы знаний – разработанный в нашей группе paexec. Широко используется язык m4 для предварительной обработки лингвистических и программных исходников.

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

  • регрессионного тестирования
  • юнит тестирования
  • стресс тестирования

Разработчики нашей группы участвуют в жизни сообщества, вносят посильный вклад в развитие используемых нами решений СПО: это выражается в создании и развитии таких проектов, как runawk, paexec, dictd, dictem, pkgsrc, lmdbg и др, а также в предоставлении отчетов о найденных ошибках и подготовке патчей.