Подумайте о своем любимом книжном персонаже. Как он выглядит? что думает? как взаимодействует с другими? Мы можем описать образ героя, перечислив эти и другие черты, или проанализировать его, используя другие внутритекстовые данные. Рассказываем, как с этой задачей справятся большие языковые модели.
Иллюстрация: Настя Малафеева
Сюжет художественных произведений завязан на персонажах и их действиях. Авторы датасета BookWorm изучили [1], насколько хорошо большие языковые модели (LLM) выявляют действующих лиц в длинном тексте, описывают их и анализируют образы.
Понятие «длинный текст» — относительное, но контекстное окно LLM не позволит обработать «Войну и мир» за раз. Произведение придется делить на части, что может обеспечить утрату информации. Кроме того, героев в подобном произведении много, и они меняются по ходу сюжета. Все это может представлять сложность для моделей.
Не забудем также, что персонажи взаимодействуют друг с другом. Исследователи [1] вводят понятие «Объединенное описание персонажей» (англ. Joint Character Description) как раз для того, чтобы учесть пересечения между образами героев.
В датасет BookWorm вошли персонажи классических произведений (романов, пьес, поэзии), доступных в проекте Gutenberg. Описания героев составлены пользователями сайтов Litcharts, Sparknotes, Gradesaver и Cliffsnotes, их анализ — читателями Sparknotes, Shmoop и Cliffsnotes. Авторы набора данных опустили описания, длина которых меньше 30 слов, и аналитические тексты короче 200 слов, так как они не подходят для исследования совокупности персонажей длинных произведений. Кроме того, обычно такие заметки относятся к второстепенным персонажам. Пример описания и анализа из датасета можно увидеть на Рис. 1.
Забавный факт: вы не найдете сам датасет в сети. Нигде. Вам придется самим соскрейпить данные по ссылкам на гитхабе с помощью машины времени архива интернета (Internet Archive Wayback Machine). Авторам пришлось поступить так из-за политики вышеперечисленных литературных ресурсов, которая запрещает распространять хранящиеся там материалы.
Статистику можно увидеть в Табл. 1. Средняя длина рассматриваемых произведений превышает 95 тыс. слов. Описания персонажей содержат примерно 88 слов, а их анализ значительно больше — 602 слова (усредненные значения).
Таблица 1. Описательные статистика датасета BookWorm. Источник: [1]
Рис. 2 показывает жанры произведений, из которых взяты персонажи. В основном это были романы и пьесы, реже — поэмы, рассказы и новеллы. В категорию Other авторы отнесли детскую и историческую литературу, биографии.
Рисунок 2. Дистрибуция жанров в датасете BookWorm. Источник: [1]
Эксперименты по генерации описания и анализа персонажей в этой работе можно разделить на три группы.
Экстракция — (в данном случае) извлечение информации из текста. Для подобной задачи необязательно использовать LLM. Если вы сильно ограничены технически, ищете простое и быстрое решение, можно попробовать эвристику — алгоритм, корректность которого не обоснована математически, но который «работает», хоть и не всегда.
Авторы опробовали следующие варианты:
Улучшенный Lead-k. В базовом виде предполагает извлечение первых k предложений из исходного текста в целом [2]. Вместо всего произведения исследователи использовали только фрагменты, содержащие упоминание персонажа. Для составления списка героев применили библиотеку BookNLP, которая позволяет кластеризовать различные варианты написания имени одних и тех же персонажей. Например, с ее помощью можно объединить Tom, Tom Sawyer, Mr. Sawyer и Thomas Sawyer в единое TOM_SAWYER. Также BookNLP поддерживает разрешение кореференции — позволяет понять, к кому или чему относятся местоимения в тексте.
Рандомное (случайное) извлечение k предложений, в которых упоминается персонаж.
Извлечение идеального (эталонного) варианта (ориг. extractive oracle). Автоматически извлекаются k предложений с наивысшей средней оценкой по метрике ROUGE (можно почитать о ней в оригинальной статье и попробовать самостоятельно приложение от HF) при сравнении с золотым стандартом (здесь — экспертными описаниями персонажей и их анализом, содержащимися в датасете BookWorm). Подробнее об алгоритме см. [2].
Во всех вариантах для описания персонажей k было равно четырем, а для анализа — 25 (выбор чисел аргументирован средним количеством предложений в датасете BookWorm для каждой из задач, см. в Табл. 1 самый правый столбец).
Модели подавали на вход отрывки произведений длиной чуть более 8000 токенов (потому что ее контекстное окно вмещает именно столько) и оставшееся просто обрезали. Токен — единица деления текста. В контексте работы с LLM токен может быть и целым словом, и слогом, и даже одной буквой — все зависит от конкретной модели. Пример для ChatGPT можно найти здесь.
Исследователи также попробовали улучшить выдачу несколькими способами. Первый предполагал извлечение релевантных отрывков текста (= персонажей и их описания) с помощью алгоритма BM25. На вход подали заранее заготовленный список героев и выявили 80 абзацев, наиболее подходящих по метрике. Для второго способа использовали библиотеку BookNLP. После в обоих случаях — BM25 и BookNLP — найденные фрагменты объединялись в единый текст и подавались на вход модели как контекст (см. промпты ниже).
Последний «подэксперимент» в этой ветке — иерархичная обработка произведений. Для начала текст делился на фрагменты по 8000 токенов, затем для каждого из них генерировалось описание. Финальным контекстом являлось соединенное описание всех фрагментов.
Для T5 использовали фрагменты длиной 16+ тыс. токенов (ее контекстное окно позволяет это сделать). Сама генерация проводилась так же, как и в предыдущем пункте. Подробнее о процессе дообучения можно почитать в источнике [1].
Исследователи использовали два способа. Первый подразумевал генерацию описания и анализа для каждого персонажа изолированно, второй — для всех персонажей вместе (то самое Joint Character Description). Кроме того, был опробован вариант, при котором модели в промпте дается список всех персонажей с просьбой сгенерировать описание и анализ отдельно для каждого из них.
Для совокупного описания использовали Llama-3-70B-Instruct*, поскольку более маленькие модели не смогли выполнить эту задачу. Однако и у этой LLM возникали проблемы, если в произведении находилось много героев. В таких случаях задачу облегчали: просили описать и проанализировать по пять персонажей за раз или, если и это не помогало, переходили к индивидуальному разбору каждого героя.
Промпты для всех экспериментов с LLM звучали так (наш перевод / оригинал):
** Фигурные скобки при работе со строками на Python означают место для вставки текста из переменной.
*** Знак \n обозначает один перенос строки.
Оценить вручную качество автоматической генерации текста на основе множества романов, пьес и других произведений весьма сложно, поэтому авторы автоматизировали процесс.
Первым делом исследователи сравнили полученное описание и анализ персонажей с их идеальными вариантами (подготовленными людьми вручную).
Использованные метрики:
Вопросы и ответы (Question-Answering, QA)
С помощью GPT-3.5 исследователи составили список вопросов и ожидаемых ответов по описаниям персонажей из датасета. Затем дообучили RoBERTa-large и использовали ее для поиска информации в сгенерированных текстах. Ответы оценивались по F1 и точности совпадения (exact match). Чем выше качество, тем более удачное (с т. з. фактов) описание персонажа выполнила модель (Llama*, T5).
Следование
Здесь использовали модель T5-XXL [5] для расчета вероятности, что сгенерированное описание или анализ следует из исходного текста.
LLM-as-a-judge
Тут попросили другую модель, GPT-4o-mini, оценить работу «коллег».
Сначала опробовали метрику PRISMA [6].
PRISMA-precision — извлекаем факты сгенерированного текста и спрашиваем LLM, есть ли подтверждение этим фактам в золотом стандарте.
PRISMA-recall — извлекаем факты из золотого стандарта и сравниваем с тем, что есть в сгенерированном тексте.
Затем, используя полученные результаты по двум метрикам выше, рассчитали PRISMA-F1.
Также было решено разделить извлеченные факты на шесть категорий: «Роль» (персонажа в тексте), «Взаимоотношения» (дружба, семейные узы и т. д.), «Личность» (поведение персонажа, характер), «События» (действия и решения, в которые вовлечен персонаж), «Ментальное состояние» (например, убеждения, намерения, эмоции) и «Другие факты», которые не смогли отнести ни к одной из перечисленных групп. Классификация была произведена той же GPT-4o-mini. Для оценки качества разбиения на группы провели ручное аннотирование 200 фактов. Выдача модели высоко коррелировала с работой большинства аннотаторов.
Вспомните эксперименты с эвристикой: там извлекались из текста k предложений различными способами. Получилось, что экстракция идеального варианта (extractive oracle) сработала лучше всего по метрикам ROUGE, две других эвристики справились плохо по всем параметрам (см. Табл. 2). В задаче анализа персонажа extractive oracle сильно превзошел даже LLM, но это неудивительно, ведь данный подход предполагает дословное цитирование отрывков золотого стандарта.
Таблица 2. Результаты работы использованных алгоритмов и моделей. Лучшие выделены полужирным шрифтом (кроме «эталонного варианта»). EntMent — Entity Mention, BS — BERTScore. Источник: [1]
Здесь идет речь про использование BM25 и инструмента поиска персонажей по референции BookNLP для извлечения контекстов с упоминанием героя. При этом результаты иерархичной обработки произведений несколько ниже (см. Табл. 2). Объяснение следующее: в первом случае мы подаем модели на вход только необходимую информацию, во втором — весь текст сразу.
А тонко настроенная Llama* с извлечением на основе референции (BookNLP) оказалась самой точной. За метриками можно вернуться в Табл. 2, а результаты QA и следования указаны в Табл. 3.
Таблица 3. Результаты дообученных моделей по критерию следования и ответов на вопросы. EM (exact match) оценивает совпадение ответа на вопрос с ожидаемым вариантом; NLI (natural language inference) используется для оценки следования сгенерированного текста из исходного (следует/противоречит или никак не соотносится). Источник: [1]
Пример анализа, сгенерированного дообученной моделью, можно увидеть на Рис. 3.
Таблица 5. Качество сгенерированного Llama3-70B-Instruct* описания персонажей в изолированном и объединенном варианте. R-L — Rouge-L, наиболее длинная строка описания, выполненного моделью, совпадающая с экспертным текстом. EntMent — Entity Mention, % сущностей в золотом стандарте, упомянутых в сгенерированном описании. QA-F1 — качество ответов на вопросы. Источник: [1]
Больше примеров результатов и полный набор промптов, а также технические особенности реализации экспериментов можно найти в статье-источнике [1].
Дальше советуем почитать о том, что важнее для персонажа: думать или делать, что говорит о персонажах «Войны и мира» их речь и насколько хорошо LLM пересказывают истории.
* Компания Meta признана властями РФ экстремистской организацией
Компания Google представила много новых ИИ-продуктов, а модель GPT опровергла известную математическую гипотезу Пала Эрдёша — рассказываем, что произошло в мире ИИ за последнее время
Facebook* и Instagram* будут сканировать фото и видео, чтобы находить детей, которые скрыли свой возраст
Можно ли заниматься NLP, если при словах «производная» и «матрица» хочется закрыть ноутбук? Да — если изучать математику не абстрактно, а через реальные задачи. Объясняем, какие разделы действительно нужны джуну,…