Как стать автором
Обновить

Заметки об NLP (часть 8)

Время на прочтение 5 мин
Количество просмотров 3.4K
(Первые части: 1 2 3 4 5 6 7). В этой части я расскажу о синтактико-семантическом анализаторе — как я его вижу. Обратите, кстати, внимание на часть 7 — она до главной страницы не добралась, так что не уверен, что все интересующиеся её видели.

За пределами синтаксического анализа

В прошлой части я затронул, как мне кажется, важную тему: какого рода информацию, помимо древовидной структуры, требуется извлекать из предложения? В предложении «он разбил мамину чашку» знание структуры фразы позволяет понять, что прилагательное «мамину» относится к слову «чашку», стало быть, при переводе на английский его следует переводить как притяжательный падеж: «mother's». Однако одной структуры недостаточно, чтобы найти правильный перевод для глагола «разбил» из едва ли не десятка альтернатив.

Отчасти эту проблему можно решить с помощью анализа семантики, то есть изучая наряду с синтаксисом фразы смысл входящих в него слов. Здесь я прежде всего хочу отдать должное учителю — Виталию Алексеевичу Тузову, чьим аспирантом я в своё время был. Мои взгляды на проблематику во многом сформировались под влиянием его идей, и основные мысли, которые я собираюсь изложить, либо принадлежат ему, либо, по крайней мере, известны мне благодаря его посредничеству.

Прежде всего очертим круг задач. Начнём с относительно простого — word sense disambiguation, то есть определения смысла слова в данном конкретном контексте на уровне фразы (UPD: похоже, в сегодняшней части дальше этого мы и не продвинемся :) ). Далеко не все слова могут быть однозначно поняты в пределах предложения. «По улице шла девушка с косой». О какого рода косе идёт речь — мы пока знать не можем. «I have a sibling» — перевести слово «sibling» как «брат» или как «сестра»? Это тоже неизвестно в рамках локального контекста.

Однако многие вещи вполне «по зубам» и анализатору, разбирающему текст на уровне фраз. Например, перевод слова «разбил» явно зависит от объекта. Если мы знаем, что разбили, можем перевести и глагол. (Тузов любил такую аналогию: чему равен sin(x)? На этот вопрос можно ответить тогда и только тогда, когда известен x).

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

Возвращаясь к примеру со словом «разбил», можно включить в грамматику языка следующие правила:

посуда    ЧАШКА()      cup
транспорт АВТОМОБИЛЬ() car
люди      АРМИЯ()      army

РАЗБИВАТЬ(субъект, объект:посуда)     to break
РАЗБИВАТЬ(субъект, объект:транспорт)  to crash
РАЗБИВАТЬ(субъект, объект:люди)       to defeat

Здесь «посуда», «транспорт» и «люди» — это типы данных в иерархии. Такая строгая типизация позволяет описывать и устойчивые выражения достаточно естественным образом:

property/bald BALD()               лысый
property      WHITE()              белый
bird          EAGLE(property)      орёл
bird          EAGLE(property/bald) белоголовый орлан (а не "лысый орёл" :) ) 


Здесь, конечно, нужны не просто типы, а именно древовидная структура, чтобы можно было указывать требуемый уровень детализации типа объекта. В одних случаях требуется чёткое указание подкласса, в других достаточно и надкласса.

Например, в приведённом выше примере только «bald eagle» переводится как «белоголовый орлан», в то время как другие прилагательные (не-bald) не изменят перевода по умолчанию «орёл» (т.е. «white eagle» будет просто «белый орёл»).

Аналогично можно решить проблему «девушки с косой»: если коса русая, например, то это волосы, а если металлическая — сельскохозяйственный инструмент. Если она просто коса или, скажем, «чёрная» — вопрос остаётся открытым.

Иерархия: мечты и реальность

Если принять предлагаемую концепцию (впрочем, я не вижу в ней ничего радикально расходящегося с житейской мудростью), во весь рост встаёт тяжёлая проблема категоризации всего и вся. И вправду, возможно ли построить разумное дерево «всех объектов мира»? По этому вопросу я думаю следующее. Для начала, такие работы уже есть (EuroWordNet, WordNet). Впрочем, как раз к «универсальной каталогизации всего» я отношусь довольно прохладно. По зрелому рассуждению становится более-менее ясно, что иерархия объектов для конкретного синтактико-семантического анализатора зависит от двух тесно связанных вещей: (а) поставленной задачи; (б) картины мира анализируемого языка.

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

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

Картина исходного (анализируемого) языка тоже имеет значение. Например, если англичанин куда-то едет, для него это всегда «to»: to travel to Moscow, to travel to England, to travel to Cyprus. Для нас с вами существуют, по крайней мере, «на»-места и «в»-места: поехать в Москву, поехать на Кипр, поехать в Крым, на Сахалин. Логики здесь не так уж много; есть, конечно, общие правила вроде того, что остров — это «на», а страна, регион — «в». Но говорим же мы «на Руси» (как и «на Украине», даже если не все украинцы это любят — постараемся всё-таки вынести язык за пределы политической сферы).

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

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

Да, напрашивается вопрос: а иерархия ли? Может, это более сложная структура, своего рода «множественное наследование» с одновременной принадлежностью объектов к разным ветвям иерархии? Честно говоря, не знаю. Пока остановился на иерархии, навскидку не могу привести примера, когда древовидной системы классов было бы недостаточно. Но могу допустить, что и такое бывает.

Здесь, кстати, вылезает одна из проблем XDG: иерархические типы не поддерживаются. Впрочем, для себя я нашёл выход: надо генерировать отдельные типы для всех возможных надклассов. Например, существует ветвь «объект-материальный-посуда». Тогда в рамках XDG слово «чашка» из класса «посуда» превращается в три описания:

объект                     ЧАШКА()
объект/материальный        ЧАШКА()
объект/материальный/посуда ЧАШКА()


Всё, на этом закончим. В следующей, вероятно, последней части собираюсь рассказать о «семантическом языке» и немного порассуждать о том, куда в нашей области можно пытаться копать, какие есть сложности в «научно-политическом» отношении.
Теги:
Хабы:
+18
Комментарии 45
Комментарии Комментарии 45

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн