Об использовании проблемно-ориентированных языков программирования для разработки лингвистических алгоритмов
Строкин Г. С.
В статье рассматривается один из возможных подходов к проблемам проектирования лингвистических алгоритмов и к способам организации взаимодействия между специалистами-экспертами (в частности, лингвистами) и программистами в процессе компьютерной реализации разрабатываемых алгоритмов.
В основе данного подхода лежит применение проблемно-ориентированных языков программирования, структуры данных которых отражают структуру некоторой предметной области, например, фонетической системы естественного языка. Как правило, такой язык является достаточно простым, поскольку он не предполагает использования вне данной области, поэтому его легко может освоить человек, не являющийся программистом, но являющийся экспертом в некоторой области знаний.
Описывается опыт реализации автоматического транскриптора речи в рамках предложенного подхода. Автоматическое построение транскрипции письменного текста требуется для решения многих проблем, связанных с автоматической обработкой естественного языка.
1. Введение
Как показывает опыт, степень успешности компьютерных реализаций лингвистических моделей напрямую зависит от того, насколько активно лингвисты участвуют не только в создании абстрактной модели, но и в проектировании структуры компьютерной реализации. На этой стадии осуществляется окончательная поэтапная формализация лингвистических знаний, и этот процесс длится до тех пор, пока их форма не становится пригодной для непосредственной обработки при помощи компьютерной программы. Совместная деятельность лингвистов и программистов должна привести к созданию обоюдоудобного и точного способа представления знаний, который должен обладать достаточной гибкостью для того, чтобы впоследствии его можно было бы подвергать модификациям, не требующим глобальной переработки компьютерной программы, а модификация лингвистического алгоритма должна быть осуществима силами лингвистов-экспертов с использованием избранного способа представления знаний самостоятельно, без постоянной помощи программиста. Например, в случае автоматического транскриптора речи (функции которого будут описаны чуть позже) это возможность изменения и добавления правил транскрипции, а также внесение текущих изменений в вариант получаемой транскрипции (таких, как изменение степени детализации, алфавита звуковых сегментов, способа обозначения определенных сегментных или супрасегментных признаков).
Одним из наиболее полезных способов для облегчения взаимодействия лингвистов и программистов при разработке разработки компьютерной реализации лингвистических моделей является применение проблемно-ориентированных языков программирования, структуры данных которых отражают структуру некоторой предметной области. Как правило, такой язык является достаточно простым, поскольку он не предполагает использования вне данной области, поэтому его легко может освоить человек, не владеющий никакими навыками программирования, но являющийся экспертом в некоторой области знаний (в случае автоматического транскриптора речи — фонетической системе естественного языка).
О применении такого языка на примере разработки автоматического транскриптора речи и пойдет речь в статье.
1.1 О функциях автоматического транскриптора (АТ). Некоторые определения
Фонетическое представление. Некоторый объект, содержащий информацию о фонетической структуре отрезка речи. Имеет сегментный и просодический (встречаются также определения «супрасегментный» и «акцентно-интонационный») компонент.
Сегментный компонент содержит информацию о сегментном составе отрезка речи — звуковых единицах, — и их признаковой структуре.
Просодический компонент содержит информацию о группировании сегментных единиц в слоги, фонетические слова и более крупные единицы, о ритмической структуре таких единиц и типах границ между ними (от которых зависит, в частности, длительность пауз), информацию о словесном ударении и фразовых акцентах, интонационной конфигурации (модели) фразы (от которой зависит, в частности, мелодическое оформление и длительность сегментов), ее интегральных просодических параметрах (темпе, громкости, тоновом диапазоне и др.).
Транскрипционная запись. Некоторый способ однозначной фиксации на письме звуковых характеристик отрезков речи. В этом же смысле используется иногда и термин «транскрипция». Транскрипционная запись является формой линейной визуализации фонетического представления отрезка речи с помощью некоторого транскрипционного инвентаря.
В зависимости от конкретной цели транскрипционная запись может отражать информацию о сегментном и просодическом компоненте фонетической структуры отрезка речи с разной степенью детализации. В случае максимально полной детализации транскрипционная запись является однозначной графической формой фонетического представления отрезка речи. Примеры транскрипционной записи будут приведены ниже.
Транскрипционный инвентарь. Конечное множество графических знаков, используемых в транскрипционной записи. Включает в себя знаки для сегментов (звуковых единиц) и некоторых их признаков, а также знаки для отображения супрасегментных признаков.
Транскрипция. Процесс преобразования письменного текста в фонетическое представление отрезка речи, соответствующего данному тексту. Частным случаем транскрипции является преобразование письменного текста в транскрипционную запись.
Транскрипция. То же, что транскрипционная запись. В этом смысле термин «транскрипция» используется в [Error: Reference source not found].
Автоматический транскриптор (АТ). Механизм для преобразования письменного текста в орфографической записи на естественном языке в фонетическое представление отрезка речи, соответствующее этому тексту, в частном случае — преобразование в транскрипционную запись. Такой механизм может быть реализован в виде автономной компьютерной программы или программного модуля, выполняющего функцию АТ в составе более крупной программы.
1.1.1 Примеры транскрипционной записи
Приведем примеры транскрипционной записи речевых отрезков — отдельных слов и целых предложений — с разной степенью детализации.
Степень детализации, отражающая только сегментный компонент:
• носорог: НъСАРО+К
• купается: КУПА+й’ъЦЦА
• дочь была на работе: ДО+j’ БЫЛА+ НъРАБО+Т’И
По поводу некоторых транскрипционных обозначений следует сделать некоторые пояснения:
• «+» — обозначение ударения, ставится после ударного гласного.
• «’» (апостроф) — обозначение мягкости согласного.
• «ъ» — нейтральный (неопределенный гласный), средний между [а], [э] и [ы]. В фонетической системе русского языка имеется также другой нейтральный гласный, [ь], средний между [э] и [и].
• «j’» — звонкий вариант звука «ч’», в речи встречается только на границе двух слов.
• НъРАБО+Т’И — отсутствие пробела в транскрипционной записи отрезка «на работе» обусловлено тем фактом, что предлог «на» произносится слитно, без паузы, с последующим словом и не имеет собственного ударения — принято говорить, что «на работе» является единым фонетическим словом.
Степень детализации, отражающая как сегментный, так и просодический компонент:
Подумав, я решил: я, пожалуй, не буду так делать, это слишком опасно. [ПАДУ+МъФ Й’А+ Р’ИШЫ+^Л]<\> [Й’А+ ПАЖА+ЛуЙ’ Н’И БУ+^Ду ТА+Г Д’Э+ЛъТ’]<\\> [Э+Тъ СЛ’И+ШКъМ АПА+^СНА]<\>
Просодический компонент отражен в данной записи следующими обозначениями:
• «[» и «]» — границы интонационной единицы (синтагмы). В речи границам синтагмы могут соответствовать паузы различной длительности, что зависит от типа интонационной конструкции. Степень детализации данной транскрипционной записи не предусматривает обозначения длительности паузы.
• ^ — интонационный центр («логическое ударение», «фразовый акцент»).
• <\> — тип интонационной конструкции, которому соответствует нисходящая интонация.
• <\\> — еще более выраженная нисходящая интонация.
2. Проектирование специализированного языка для реализации автоматического транскриптора
2.1 Работа с формализованными лингвистическими знаниями
Поскольку речь идет о компьютерной реализации алгоритма, основанного на лингвистических знаниях, структура АТ рассматривается как структура объекта двусторонней природы:
• Логическая структура АТ как абстрактного механизма, построенного с применением лингвистических знаний, отражает способ работы этого механизма с текстом на естественном языке.
• Структура компьютерной реализации АТ отражает методы формализации лингвистических знаний с целью представления их в готовой для обработки ЭВМ форме, что и делает возможным превращение АТ из абстрактного механизма в механизм реальный.
Степень успешности реализации АТ (равно как и любых других реально работающих компьютерных реализаций алгоритмов, основанных на лингвистических моделях, которые постоянно уточняются и корректируются благодаря экспериментальным исследованиям и новым теоретическим работам) и эффективности самого процесса разработки напрямую зависит, по мнению автора, от степени активного участия лингвистов в проектировании структуры компьютерной реализации, а не только в создании модели абстрактного механизма.
«Активное участие» лингвистов в процессе проектирования структуры компьютерной реализации состоит согласовании с программистами точного способа представления формализованных знаний, а именно, в поиске обоюдоудобной формы записи. С точки зрения лингвиста такая удобная форма должна быть легка для восприятия и содержать обозначения, естественно соотносимые с элементами языковой системы и операциями над этими элементами. С точки зрения программиста, который имеет более детальное представление о том, что может, а чего не может воспринять ЭВМ непосредственно, удобна форма, не требующая дополнительной формализации.
Под эффективностью процесса разработки понимается, в частности, возможность быстрой и удобной модификации компьютерной реализации лингвистического алгоритма с целью внесения в него усовершенствований и добавления новых закономерностей, выявляемых теоретическими и экспериментальными исследованиями.
Из критериев успешности разработки можно назвать степень гибкости созданной реализации. В случае АТ это, например, возможность внесения текущих изменений в вариант получаемой транскрипции, таких, как изменение степени детализации, алфавита звуковых сегментов, способа обозначения определенных сегментных или супрасегментных признаков.
Как было указано выше, превращение АТ из абстрактного механизма в работающую программу возможно благодаря окончательной формализации лингвистических знаний с целью представления их в готовой для обработки ЭВМ форме.
Благодаря этой формализации осуществляется переход от описания самого алгоритма, сформулированного на естественном языке или с помощью схематических обозначений, к программе, которая может выполняться машиной. При этом оказывается, что прямой переход от лингвистических алгоритмов к программе, написанной на одном из универсальных языков программирования — довольно сложная задача, которая осложняется еще и тем, что состояние современной науки пока не позволяет говорить о существовании идеального алгоритма АТ для какого бы то ни было языка, и разработка и описание самих лингвистических принципов, лежащих в основе алгоритма АТ, находятся еще на этапе исследования. Следовательно, недостаточно один раз перевести описание алгоритма в готовую к исполнению на ЭВМ программу (осуществить так называемую «кодировку» алгоритма), а требуется многократно изменять фрагменты лингвистического описания и проверять их действенность после повторного внесения изменений также и в компьютерную реализацию.
В связи с этим желательно, а по мнению автора, необходимо, создать некоторую инвариантную запись алгоритмов, которая была бы одновременно пригодна как для непосредственного восприятия лингвистом и осуществления оперативных изменений в алгоритме, так и для непосредственного понимания и выполнения машиной.
2.2 Языки программирования общего назначения и специализированные языки
Общеизвестные примеры универсальных языков программирования — Си и Паскаль. Под универсальностью языка понимается ориентация на любую задачу, которая требует использования ЭВМ.
Универсальность — достоинство языка, но оно же и его недостаток: отстутствие ориентации на конкретный тип задач порождает большие сложности при реализации этих задач, так как для выполнения действий, довольно часто осуществляемых для решения некоторого узкого класса задач, не предусмотрено стандартных и простых процедур.
Лэрри Уолл, специалист по лингвистике и computer science, создатель языка программирования Перл, пишет по этому поводу следующее (цитата из [Error: Reference source not found]):
Of course, if your job is programming, you can get your job done with any «complete» computer language, theoretically speaking. But we know from experience that computer languages differ not so much in what they make possible, but in what they make easy. At one extreme, the so-called «fourth generation languages» make it easy to do some things, but nearly impossible to do other things. At the other extreme, certain well known, «industrial-strength» languages make it equally difficult to do almost everything.
Когда лингвист описывает задачу преобразования текста фонетическое представление, а также отдельные этапы этого преобразования, он оперирует лингвистическими (в частности, фонологическими) понятиями, например, «мягкость» или «побочное ударение».
При попытке записи инструкций лингвиста на универсальном языке программирования, который, естественно, не позволяет оперировать подобными сущностями непосредственно, результатом будет запись, которая а) очень громоздка, б) трудна для восприятия, в) совершенно не имеет ничего общего с записью, естественной для лингвиста и поэтому плохо отражает суть происходящих преобразований.
2.2.1 Подробнее о проблемно-ориентированных языках программирования
Рассмотрим более подробно проблемно-ориентированные (специализированные) языки программирования и их отличия от традиционных языков программирования общего назначения.
Проблемно-ориентированные языки позволяет быстро и эффективно писать программы для решения задач определенного класса. Управляющие конструкции и структуры данных в проблемно-ориентированных языках адекватно отражают характеристики той предметной области, для решения задач которой эти языки применяются. Это свойство отличает проблемно-ориентированные языки от языков общего назначения, конструкции которых в той или иной степени отражают логическую структуру ЭВМ, и от машинно-ориентированных языков, отражающих физическую структуру той ЭВМ, на которой они реализованы.
Так, в машинно-ориентированных языках программисту может потребоваться в явном виде работать с памятью ЭВМ — например, выделять определенное количество байт, необходимых для хранения промежуточных результатов, а затем «освобождать» использованный фрагмент памяти для того, чтобы его можно было повторно использовать в процессе решения другой задачи или подзадачи. В противоположность этому при использовании проблемно-ориентированного языка программист просто создает структуры данных, не заботясь о их физическом размещении.
При решении числовых задач в машинно-ориентированном языке могут использоваться целые числа, однозначно соответствующие машинному слову процессора используемой архитектуры. Таким образом, диапазон чисел, с которыми может работать программа, будет определяться особенностями архитектуры процессора, а не характеристиками задачи. Напротив, в проблемно-ориентированном языке могут использоваться числа неограниченного размера (фактически, ограниченного объемом доступной памяти ЭВМ, но в реальных задачах столь большие числа обычно появиться не могут).
Приведем известные примеры широко известных проблемно-ориентированных языков и классов решаемых ими задач:
• Lex и Yacc — разработка лексических и синтаксических анализаторов.
• PERL — обработка текстов.
• HTML и SGML — логическая разметка и структурирование текстов.
• TEX и LATEX — подготовка печатных документов.
• Tcl/Tk — программирование графических интерфейсов.
• VRML и Open GL — работа с трехмерной графикой.
• Mathematica — алгебраические вычисления.
По отношению к языкам высокого уровня общего назначения (т. н. «универсальным языкам программирования») проблемно-ориентированные языки можно считать языками сверхвысокого уровня. Написанные на таких языках программы легко читать, изменять и делать выводы о их свойствах (в частности, доказывать их корректность). Это достигается благодаря к тому, что языки обеспечивают полную абстракцию решаемой задачи от технических деталей ее реализации на конкретной ЭВМ.
Основное требование, предъявляемое к проблемно-ориентированным языкам — соответствие структуре некоторой предметной области. Также считается желательным, чтобы язык охватывал именно данную предметную область — не больше и не меньше. Как правило, это «маленькие языки», в том смысле, что они не обязательно являются универсальными и применимыми для решения задач вне предназначенной для них области. Это — их дополнительное достоинство: такой «маленький» язык может легко освоить человек, не являющийся профессиональным программистом, а возможно, вообще не владеющий навыками программирования, но являющийся специалистом в данной предметной области. Математики могут легко изучить Mathematica, ученые, желающие самостоятельно оформлять свои научно-технические тексты — изучить LATEX и т. д.
Приведем определение из [Error: Reference source not found]:
A domain specific language (DSL) is a programming language tailored for a particular application domain. Characteristic of an effective DSL (domain-specific language) is the ability to develop complete application programs for a domain quickly and effectively. A DSL is not (necessarily) «general purpose». Rather, it should capture precisely the semantics of an application domain, no more and no less. Bentley [Error: Reference source not found] also makes a strong argument for DSLs as «little languages».
Существуют специализированные языки и для лингвистов. Автор настоящей статьи принимал участие в реализации ([Error: Reference source not found]) одной из версий DATR — языка для представления лексических знаний ([Error: Reference source not found]). В качестве примера других языков можно привести язык Delta [Error: Reference source not found], используемый в системе синтеза речи, разработанной Eloquent Technologies. Проектированию одному из таких языков посвященна и данная статья.
|