Читать нас в Telegram

Окей, гугл, краткий пересказ…

Искусственный интеллект уже умеет творить: вспомним рэп-альбом Алисы («YANY») или нейростихи. А умеет ли компьютер пересказывать и сочинять истории? В этой сфере есть трудности. Непросто научить машину пересказывать тексты так же хорошо, как это умеет человек, чтобы конечный материал был точным и в то же время естественным. Для этого нужно научить программу извлекать ключевое из огромного массива информации и составлять целостную и связную историю.

В области компьютерной обработки языка автоматический пересказ называется «саммаризация» (от англ. summary — выжимка, краткий пересказ). К этой задаче уже придумано множество подходов. Однако метрики оценки конечного пересказа и сами механизмы работы программ все еще примитивны, а многие из них успели устареть.
Один из этапов саммаризации текстов называется «Автоматическое извлечение нарративной структуры». Попробуем разобраться в том, как и по каким принципам это работает, как это реализуется, и что можно сделать для модернизации этого механизма.

Разобрать по пунктам

Чтобы пересказать текст, сначала необходимо понять, о чем он. Для этого нужно его проанализировать и составить «содержание» из главных мыслей. Компьютер анализирует тексты не так, как человек: он опирается только на формальные признаки. Посмотрим, как можно представить любую (или почти любую) историю в виде, понятном компьютеру.

У любой сказки есть зачин, который начинается одинаково. Вспомните хотя бы «Звездные войны»! Источник

В одной далекой-далекой галактике

Одним из первых ученых, занимавшимся формальной структурой повествования, был советский филолог-фольклорист Владимир Пропп. В своей книге «Морфология волшебной сказки» (1928) он исследовал русские народные сказки. Ученый обнаружил, что построение структуры сюжета как русских, так и зарубежных сказок однотипное. В них существует деление персонажей на роли с ограниченным набором функций. Герой, Злодей, Волшебный помощник, которые связаны некоторой логической цепочкой типовых действий: герой отлучается из дома, злодей строит козни герою, волшебный помощник помогает герою (часто через волшебный подарок), герой побеждает злодея и т.п. В сказках Пропп нашел много схем репрезентации того или иного персонажа. Можно по-разному интерпретировать их, создавать новые модели построения нарратива, комбинируя как сюжеты, так и отдельные функции героев.

Функции дарителя в волшебной сказке и их разнообразные реализации. Из кн. Пропп В. Я. Морфология сказки / Гос. ин-т истории искусств. — Л.: Academia, 1928. — 152 с.

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

Категории любой волшебной сказки

  • Функции героев драматические — действия и слова эмоционально окрашены, повороты сюжета могут быть резкими, а поступки — внезапными. Автор создает цепочку из 31 функции для построения или конструирования того или иного персонажа.
  • Существует некий соединительный элемент — таковым может быть персонаж, который осведомлен о происходящем вокруг (например, один из героев обладает сверхъестественными способностями или подслушивает какой-либо ключевой разговор других героев).
  • У каждого героя должна быть собственная цель или мотивация — только тогда они могут совершать какие-то действия (герой хочет спасти принцессу, следовательно все его поступки оправданы этим мотивом).
  • Появление героя в сказке также может его характеризовать (особенно если оно внезапное: «вылез из-под земли», «волшебным образом появился из ниоткуда» и прочее).
  • У каждого героя есть яркая, почти нереальная отличительная черта (например, возраст — Кощей Бессмертный, или выделяющаяся деталь внешности — богатырское телосложение, огромный горб на спине).

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

Герои и злодеи

Рассмотрим подробнее типы героев в сказках. Герой побеждает зло и творит добро, Злодей — главная проблема Героя, Донор (Даритель, Волшебный помощник) — тот, кто наделяет Героя магическими способностями, Отправитель — посылает героя на задание, Невеста/Приз — главная цель героя, Псевдогерой — самозванец. Каждый герой функционирует строго в области своих действий. Некоторые герои сочетают в себе характеристики нескольких типов, описанных выше. Например, Злодей может в некоторых ситуациях играть роль Донора.

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

Саммаризация: от краткого содержания к сложным алгоритмам

Компьютер не сразу научился создавать тексты «человеческим языком». Простейшие алгоритмы работали как обычный пересказ: программа генерировала краткое содержание и отбрасывала детали и описания. Все просто: программа находила в предложениях слова, которые повторялись чаще всего, и так определяла, о чем он. Далее она выбирала предложения, в которых, собственно, они были, и формировала примитивный пересказ. Однако такой вид саммаризации совсем не похож на естественный человечески пересказ (его еще называют абстрактным).
Позже предложили более сложный метод «узлов графа» (plot units). Повествование представляли в виде точек, соединенных линиями (графы). Точки — это события, опорные пункты истории. Их делили на 3 вида: позитивные, негативные, нейтральные.

Креативный пересказ

Приведенных выше алгоритмов недостаточно для того, чтобы сделать пересказ по-настоящему креативным, воссоздать историю. Откуда компьютеру знать, как должны развиваться события?

Можно просто накопить определенный массив текстов — сформировать «память» программы из разных готовых историй. По ним уже можно будет строить новые рассказы. По такому принципу, например, работает система MEXICA.

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

А при чем тут Пропп?

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

Используем логику

Сказку можно запрограммировать, но используя не простое, а Ограниченное Логическое Программирование (Constraint Logic Programming). В ОЛП отношения между переменными представляются как ограничения: значения, которые может принимать одна переменная, ограничены другими переменными. Используя ОЛП, мы как бы доказываем теорему: если соблюдены условия A,B,C, то возможно D. В сказке «Ограничение» есть ничто иное как взаимные «отношения» между персонажами (личное поле одного ограничивает личное поле другого, как в праве). А эти переменные в задаче есть не что иное, как роли, описанные Проппом.

Количество задач, которые могут иметь персонажи, ограничено их уникальными функциями (т.е. конкретное свойство относится к конкретному герою, грубо говоря, один герой не может делать все и сразу). В каждом предложении сказки может раскрываться та или иная роль. В терминах ОЛП: каждому предложению сказки соответствует или не соответствует какая-либо функция, если в нем встретились или не встретились те или иные типы героев. Эту задачу мы и будем решать.

Как представить сказку в виде «ограниченной логической задачи»

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

Абстрактное семантическое представление фразы «Он схватил ее и утащил ее в свое логово».

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

После этого переменным присваиваются возможные роли. Большинство функций по Проппу можно определить по ключевым словам, присутствующим во фразе. Например, переменные с ролью «злодей» часто встречаются вместе с глаголами типа «нападать», «атаковать» и прочими представителями семантического класса агрессивных глаголов.
Такой подход кажется очень простым, но на деле работает эффективно. Список подобных слов-идентификаторов составил сам Пропп, а с помощью сервисов WordNet или FrameNet его можно расширить синонимами.
Каждое предложение сказки получает список возможных ролей, которые могут в нем выражаться (минимум — 0). Так мы решили задачу ОЛП и присвоили каждому предложению какую-либо функцию или ноль.
Предложения, которым присвоен не ноль — это минимальные единицы повествования.

В популярной серии файтингов «Mortal Kombat» тоже есть типажей героев — игрок может выбрать подходящего для себя. Причем в новых частях появляются персонажи из других вселенных (читать: других сказок). Источник

Линии жизни героев

Главного героя тоже можно выделить автоматически. Важность героя вычисляется на основании количества его упоминаний в тексте. Учитывается также расстояние (в предложениях) от первого до последнего появления и номер предложения, где мы встречаем героя впервые.

Взаимодействия героев тоже необходимо учитывать. Злодей встречается с героем обычно один раз за всю сказку, но важность его от этого не уменьшается. Его линия развивается отдельно, и он со стороны влияет на все остальные события.

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

Вот и сказочке конец

Таким образом, все факторы, которые мы назвали выше, могут по-разному комбинироваться и работать в совокупности в процессе построения рассказа. Учитывая важность героев, набор их характеристик и функций в «ролевой игре», количество взаимодействий и ограничений, машина может выбрать наиболее логичное и верное решение для конкретной сгенерированной проблемы.

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

Источник: Automatic Detection of Narrative Structure for High-Level Story Representation