Учим большие языковые модели описывать продукты данных

3ad560a27a292f40426af3cb3c095dda.jpg

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

Введение

В последнее время большие языковые модели (Large Language Models, LLM), которые представляют собой важный взгляд на технологии обработки естественного языка (Natural Language Processing, NLP), стали очень популярны. LLM способны работать с текстами, понимать, переводить, отвечать на вопросы, генерировать речь. И вы, вероятно, тоже слышали о таких известных проектах, как OpenAI ChatGPT и Google BERT. В конце апреля 2023 года Сбер впервые представил свой сервис GigaChat, а в ноябре 2023 анонсировал новую улучшенную модель.

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

  • слой кодирования;

  • слой декодирования;

  • слой нормализации;

  • слой внимания;

  • полносвязный слой;

  • слой выхода.

Слои соединены друг с другом с помощью матриц весов, которые определяют, какая информация передаётся от одного слоя к другому. Чем больше слоёв и весов, тем больше параметров у модели, тем больше она может выучить и тем лучше она может работать с текстами.

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

Возможности LLM.

Возможности LLM.

Немного истории

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

В 2016 году глубокое обучение впервые вступило в область машинного перевода, когда Google представил метод на основе нейронных сетей, превосходящий многие традиционные методы по качеству перевода.

В 2017 году начался стремительный прогресс в области языковых моделей с появлением архитектуры Transformer в глубоком обучении. Этот приём, используемый в некоторых слоях нейросети, позволил, обучаясь восстановлению пропущенных слов в тексте без разметки, выучить очень сложные структуры связей между словами. Связи и общий смысл кодируются в длинный набор чисел (эмбеддинг), который затем можно использовать для классификации текстов, создания коротких описаний и перефразирования, обучения диалоговых агентов, даже для генерации кода или дизайнерского шаблона по текстовому описанию. Такие модели можно дообучать (fine-tune), либо показывая им небольшое количество размеченных примеров (few-shot learning), либо демонстрируя всего один пример (one-shot), или просто использовать их выводы без дообучения (zero-shot). Архитектура Transformer основана на механизме многоголового внимания, который позволяет использовать несколько параллельных наборов весов. Модель может быть масштабирована почти неограниченно, улучшая качество предсказаний с добавлением новых слоёв. Подробнее про эту архитектуру можно прочитать тут.

На основе «трансформера» появилось несколько ключевых моделей:

  • GPT (Generative Pre‑trained Transformer), разработанный OpenAI, обучается на огромных объёмах текста без явной разметки задач. Подробнее о том, что такое разметка данных, можно прочитать тут. Модели GPT способны генерировать текст, отвечать на вопросы и выполнять другие задачи NLP. Существует несколько версий модели GPT, включая русскоязычную версию ruGPT-3, представленную Сбером в ноябре 2020 года. Она применяется в различных задачах, включая создание диалогового ассистента «Салют». Подробнее можно прочитать тут.

  • BERT (Bidirectional Encoder Representations from Transformers), разработанный Google, используется для предсказания отдельных слов или кодирования последовательности текста в некоторый вектор. Подробнее можно прочитать тут.

  • T5 (Text‑To‑Text Transfer Transformer) представляет собой подход, в котором все NLP‑задачи формулируются как задача текстового преобразования (от текста к тексту). Это позволяет использовать её при решении задач перевода, вопросно‑ответных систем. Подробнее можно прочитать тут.

  • ERNIE (Enhanced Representation through kNowledge Integration), разработанный Baidu, внедряет знания в предобучение модели, интегрируя в неё дополнительные знания, такие как связи между словами и энциклопедические знания. Это улучшает способность модели к пониманию контекста и семантических отношений. Подробнее можно прочитать тут.

  • XLNet — разработанная в Google модель, которая комбинирует идеи из GPT и BERT. Она использует авторегрессию (как GPT) и предобучение с маскировкой токенов (как BERT), что делает её мощным инструментом для понимания контекста и создания высококачественных представлений текста. Подробнее можно прочитать тут.

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

Промпт-инжиниринг

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

Промпт‑инжиниринг имеет несколько преимуществ:

  • Позволяет использовать LLM для решения разнообразных задач, таких как классификация, извлечение информации, генерация текста, ответы на вопросы и т. д., без необходимости создавать специальные модели или наборы данных для каждой задачи.

  • Позволяет контролировать и настраивать выходные данные LLM, уменьшая вероятность ошибок, противоречий, нежелательного или вредного контента, нарушения авторских прав или конфиденциальности.

  • Позволяет экспериментировать и творить с LLM, создавая новые и интересные виды контента, такие как стихи, истории, код, картинки.

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

Попробуем классифицировать промпты по целям, которые требуется достичь с его помощью:

  • Вопросно‑ответные промпты для получения ответа от модели. Например: «В каком городе жил Карлсон?»

  • Командные промпты. Например: «Напиши рецензию на книгу».

  • Промпты для выделения важный информации. Например: «Составь краткое изложение текста».

  • Промпты для классификации. Например: «Определи, является ли помидор овощем или ягодой».

  • Промпты для генерации текста. Например: «Напиши стих о еже».

Для построения LLM‑приложений часто придерживаются подхода с обучением в контексте с помощью промпт-инжиниринга.

LLM-приложение

LLM-приложение — это приложение, которое использует LLM для применений в различных областях, таких как образование, развлечения, бизнес, наука и т. д. Например, LLM-приложения могут:

  • генерировать уникальный и качественный контент для сайтов, блогов и социальных сетей;

  • переводить тексты с одного языка на другой с учётом контекста и специфики области;

  • отвечать на вопросы пользователей по различным темам, используя доступные источники информации;

  • вести диалоги с пользователями на различные темы, поддерживая естественность и заинтересованность;

  • составлять резюме, эссе, отчёты, статьи и другие виды текстов по заданным критериям;

  • анализировать тексты на предмет тона, настроения, эмоций и мнений;

  • резюмировать тексты, выделяя ключевые идеи и факты;

  • генерировать тексты на основе изображений, видео, аудио и других типов данных;

  • создавать стихи, песни, рассказы, сценарии и другие виды творческих текстов.

Принципы построения

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

  • предварительная обработка текста, которая может включать в себя очистку, нормализацию, токенизацию, лемматизацию и разметку;

  • подготовка и подача запросов к LLM, которая может включать в себя формулирование, структурирование, кодирование и декодирование запросов;

  • постобработка текста, оценка и редактирование сгенерированных текстов, которая может включать в себя проверку правописания, грамматики, смысла, релевантности и уникальности;

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

Архитектура

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

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

Также о LLM-приложениях можно прочитать тут.

Рассмотрим создание LLM-приложения на примере использования больших языковых моделей при подготовке описания продуктов данных.

Задача

В ходе работы автоматизированных систем (АС) возникают данные, порождаемые технологическими ресурсами инфраструктуры и размещёнными на них технологическими компонентами (технологические данные, техноданные). Эти данные включают в себя различные типы информации, которые используются для управления объектами и играют в этом ключевую роль. Техноданные требуют лаконичного описания, особенно когда речь идёт о базе данных из хранилища (Data Warehouse, DWH). Однако, бизнес и разработчики часто не хотят тратить ресурсы на документирование техноданных, поскольку они играют лишь вспомогательную роль для бизнеса — обеспечение работы технологического компонента, необходимого для реализации бизнес-функциональности. Это может привести к сложностям в управлении и поддержке систем.

Одним из способов решения этой проблемы является применение LLM. Допустим, мы хотим с её помощью создать описание атрибутов базы данных DWH.

Скриншот записей в файле.

Скриншот записей в файле.

Критерии отнесения данных к техноданным

К техноданным относятся:

  • метаданные (данные о данных);

  • журналы (log‑файлы);

  • метрики мониторинга (прикладного и инфраструктурного);

  • события систем, конфигурации;

  • трассировки;

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

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

Для загрузки в аналитическую платформу техноданные должны соответствовать следующим критериям:

  • Первичные технологические данные быстро устаревают. Это требует обработки в режиме реального времени для поддержания их актуальности.

  • В исходных данных присутствует только общедоступная информация.

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

Особенности техноданных

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

Сложность обработки человеком. Из-за больших объёмов первичных техноданных эффективная обработка требует использования аналитических машинных алгоритмов. Результаты агрегации становятся более удобными для анализа человеком, визуализации и построения моделей машинного обучения.

Слабая структурированность и связанность. Техноданные часто представляют собой полуструктурированные или неструктурированные текстовые данные, разбросанные в различных журналах.

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

Относительная сложность доступа. Большинство техноданных генерируется ядровыми компонентами и для доступа к ним требуются привилегированные УЗ или разработка специальных API.

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

Решение

Для решения поставленной задачи опишем с помощью GigaChat атрибуты базы данных. Важным этапом является формулировка промпта. Весь процесс можно представить следующим образом:

Процесс описания атрибутов таблицы с помощью промптов.

Процесс описания атрибутов таблицы с помощью промптов.

Формулировка промпта

Для формирования промпта были составлены следующие шаблоны.

PROMPT 1 (При наличии записи в поле «Описание таблицы» и наличии описания части атрибутов):

Таблица »Название таблицы» содержит информацию о »Описание таблицы». Разработчик корректно описал часть атрибутов в этой таблице:

[{name 1, description 1} … {name n, description n}] # Берём атрибуты, где присутствует описание

Опиши следующие атрибуты в этой же таблице:

[name 1… name k] # Берём атрибуты, где описание отсутствует

PROMPT 2 (Если поле «Описание таблицы» пустое, но присутствует описание части атрибутов):

Есть таблица »Название таблицы». Разработчик корректно описал часть атрибутов в этой таблице:

[{name 1, description 1} … {name n, description n}] # Берём атрибуты, где присутствует описание

Опиши следующие атрибуты в этой же таблице:

[name 1… name k] # Берём атрибуты, где описание отсутствует

PROMPT 3 (Если поле «Описание таблицы» пустое и отсутствует описание атрибутов):

Есть таблица »Название таблицы». Опиши атрибуты в этой таблице: [name 1… name k]

Разметка полученных описаний

Полученные описания от GigaChat в дальнейшем размечаются на соответствие критериям:

  • Релевантность — показывает, насколько описание соответствует наименованию поля. Если описание релевантно, то оно имеет прямое отношение к наименованию поля, вне зависимости от назначения самой БД. Например, описание поля «Customer_ID» как «Уникальный идентификатор клиента» будет корректным в БД внутренних и внешних клиентов, HR‑клиентов и пр.

  • Непротиворечивость — показывает отсутствие предметных противоречий или несоответствий в названии поля и его описании. Если название поля и описание непротиворечивы, то в рамках тематической области они согласуются между собой и не содержат противоречивых фактов или утверждений. То есть рассмотренное ранее поле «Customer_ID» как «Уникальный идентификатор клиента» будет корректным в БД по клиентским тематикам (там, где можно оперировать термином «клиент» как «потребитель бизнес‑сервиса»), но будет противоречивым, например, для технических БД (там, где «клиент» является другой АС или частью клиент‑серверной архитектуры).

  • Полнота — характеризует наличие в достаточном объёме информации, которая необходима для полноценного понимания сути и свойств описанного объекта. Например, описание поля «Customer_ID» как «Уникальный идентификатор клиента» можно расширить так: «Поле Customer_ID является уникальным идентификатором клиента в системе учёта и управления взаимоотношениями с клиентами (CRM). Оно используется для идентификации конкретного клиента при обработке его запросов или заявок на услуги компании».

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

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

  • «Хороший ответ», если могут быть и другие ответы, потенциально лучше или сравнимые с текущим.

  • «Совсем не то», если ответ не удовлетворяет одному из описанных выше критериев или вовсе не подходит по логике запроса, а также если ответ совершенно не похож на ответ человека.

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

Примеры оценки

Пример 1. Предположим, что в схеме БД с кредитными продуктами есть поле «ClientID». GigaChat описал это поле как «Уникальный идентификатор клиента ЕПК». Такое описание является релевантным, полным и непротиворечивым. Разметка этого ответа соответствует оценке «Хороший ответ».

Пример 2. При разработке БД АС по автоматизации кредитного процесса разработчик в таблице о клиентах использовал название поля «Pink_Elephant» вместо логичного названия поля «VIP_status» бинарного типа для обозначения премиального статуса клиента. GigaChat описал это поле как »…клиент-участник акции Розовый слон». Такое описание является релевантным и полным, но противоречит предметной области самой таблицы или схемы. Разметка этого ответа соответствует оценке «Совсем не то».

Пример 3. Допустим в БД АС «Service Manager» в таблице, хранящей информацию об инцидентах, есть поле «IncidentID». GigaChat описал его как «Номер заказа в Интернет-магазине». Это описание поля нерелевантное, полное и противоречивое, так как в названии явно содержит слово инцидент, а отсылка к тематике интернет-магазина отсутствует. Разметка этого ответа соответствует оценке «Совсем не то».

Из размеченных данных может быть подготовлен набор, на основе которого модель может быть дообучена.

Создание LLM-приложения

Работу приложения можно представить следующим образом:

0406096091f855bfe117aa88af31b669.png

Итоги пилотного проекта

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

Заключение

LLM-приложения имеют широкий спектр применений в разных областях. Мы рассмотрели, как LLM-приложение с использованием GigaChat может генерировать текстовые описания атрибутов на основе их названий, сравнивая их с данными в хранилище, и на основе проведённого обучения. Полученные результаты подчеркивают успешность пилотной реализации, и в дальнейшем получившееся LLM-приложение позволит упростить документирование техноданных, освобождая ресурсы бизнеса и разработчиков для выполнения других важных задач.

Автор: Николай Абрамов, участник профессионального сообщества Сбера DWH/BigData. Профессиональное сообщество DWH/BigData отвечает за развитие компетенций в таких направлениях, как экосистема Hadoop, PostgreSQL, GreenPlum, а также BI-инструментах Qlik, Apache SuperSet и др.

© Habrahabr.ru