Семантическое представление текста

Nov 03, 2011 22:51

Комментарии nirvan заставили меня внимательно отнестись к тому, каким образом в системе обработки текстов будут представляться знания. Речь идёт о семантическом уровне языка, о смысле тексте. Это уровень, пригодный для машинной обработки.

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

Здесь сразу важно разделить два вида представления знаний. Когда человек читает текст, он обладает уже собственным багажом знаний. И его знания являются контекстом, в рамках которого человек воспринимает текст. На основе контекста из текста извлекается смысл высказывания, имеющий субъективный характер для конкретного читателя.

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

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

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

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

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

Здесь важно отделить семантику от прагматики; прагматика занимается отношением читателя к тексту. Если бы каждый человек видел в тексте исключительно собственный, субъективный смысл, мы бы не смогли друг друга понимать. Отсюда я делаю вывод, что всё же существует некий объективный смысл текста, разделяемый, по крайней мере, носителями общечеловеческого контекста. Например, предложение "Иван рубит дрова, Варвара топит печь" несёт в себе вполне конкретную смысловую информацию, которая может быть записана на формальном языке. Если этот прочтёт кто-то, кто знает Ивана или Варвару лично, он, конечно, извлечёт свой дополнительный смысл из текста. Однако извлечение может с таким же успехом проводиться и из формальной модели (мы потребовали взаимно однозначного соответствия между текстом и моделью).

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

Тут важно отметить, что проверка логической целостности при данном преобразовании не производится: отдельные элементы модели могут противоречить друг другу. От них требуется лишь соответствие тексту. Это означает, что некорректный текст должен будет отобразиться в некорректное представление.

NB. Видите, я изменил описание анализатора, которое изложил буквально во вчерашнем посте. Мысль течёт, развивается.

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

Такими языками занимается инженерия знаний. Эта наука пытается строить модели, с помощью которых можно эффективно представлять знания.

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

Семантические сети нам не подходят, так как они нелинейны. Остальные модели более-менее равнозначны. Мне представляется более предпочтительным выбор фреймовой модели и вот почему.

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

Мне предполагается естественным основную роль в представлении знаний отвести фреймам-глаголам, описывающим всевозможные мыслимые ситуации. Каждый фрейм-глагол (или факт) имеет субъект действия, объект, время действия, место и пр. Таким образом, фрейм представляет собой многоместное отношение между объектами. Факт является формальной моделью предложения на естественном языке. Прямого соответствия между ними нет, один факт может быть изложен несколькими предложениями, равно как и одно предложение может содержать ряд фактов.

Так вот, какой фреймовый язык предпочесть для нашей системы? Или, может, лучше изобрести что-то своё?

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

Я дал языку рабочее название FDL (Facts Description Language). Как он будет выглядеть?

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

Например, выражение на языке C# "a = b + c;" можно записать как "". Абстрактный синтаксис языка, его суть не изменились; поменялся лишь способ записи.

Абстрактный синтаксис FDL будет представлять собой нотацию, способную представлять последовательность фактов. Это последовательность будет отражением последовательности предложений текста. А в качестве конкретного синтаксиса мне представляется естественным взять язык XML. Точнее, даже не XML, а XAML. Забегая вперёд, скажу, что XAML удобен тем, что позволяет одно и то же свойство объекта записать и как атрибут, и как вложенный элемент (в зависимости от степени сложности значения атрибута).

Примерная запись смысла предложения "Каждый понедельник Вася посещает спортзал" должна выглядеть так:

ИИ

Previous post Next post
Up