Создание структурированных выходных данных из LLM с помощью ограниченной выборки
Большие языковые модели (LLM) изменили то, как мы взаимодействуем с неструктурированными данными, позволяя системам генерировать креативный текст, извлекать инсайты и автоматизировать задачи. Однако, хотя эти модели создают контент в свободной форме, они часто не справляются, когда вывод должен соответствовать определенным форматам — таким как JSON, XML или заранее заданные схемы. Это ограничение критично для реальных сценариев использования, где важна точность, например для ассистентов по программированию, агентов принятия решений и систем извлечения структурированной информации.
На недавнем Unstructured Data Meetup в South Bay Stefan Webb из Zilliz представил практическое решение этой проблемы: ограниченную выборку. В этой статье мы рассмотрим ключевые идеи из его выступления, включая роль семантического поиска в обработке неструктурированных данных, то, как конечные автоматы обеспечивают надежную генерацию, и практические реализации с использованием современных инструментов. Мы также рассмотрим, как эти методы интегрируются с векторными базами данных, чтобы создавать надежные AI-приложения, которые справляются как с обработкой неструктурированных данных, так и с генерацией структурированного вывода.
Что такое семантический поиск и почему он важен
Семантический поиск отличается от традиционного поиска по ключевым словам тем, что фокусируется на смысле и контексте запросов. Вместо сопоставления точных слов семантический поиск обрабатывает отношения между терминами, чтобы выдавать более релевантные результаты. Эта возможность крайне важна в мире, где большая часть данных является неструктурированной, включая текст, изображения, аудио и видео. Вот как неструктурированные данные превращаются в практические инсайты.
Рисунок: Конвейер превращения неструктурированных данных в практические инсайты
Этот конвейер начинается с загрузки сырых данных, включая документы, изображения, аудиозаписи и видео. Данные проходят через модели глубокого обучения, которые генерируют векторные эмбеддинги, представляющие собой многомерные числовые представления семантических свойств данных. Эти эмбеддинги хранятся в векторных базах данных таких как Milvus для эффективного извлечения. Наконец, алгоритмы семантического поиска работают с этими эмбеддингами, чтобы определять и ранжировать результаты на основе релевантности. Теперь посмотрим, как выглядит векторное пространство.
Рисунок: Визуализация пространства эмбеддингов, группирующего похожие понятия вместе
В визуализации пространств эмбеддингов похожие понятия группируются вместе. Например, фразы вроде happy dog wagging its tail и a dog with a smile располагаются близко друг к другу, потому что передают похожие смыслы. С другой стороны, несвязанные темы, такие как a big building, находятся далеко друг от друга в этом пространстве. Такая кластеризация позволяет системам извлекать семантически релевантные результаты, даже когда в запросах используются разные формулировки.
Семантический поиск становится все более важным по мере роста объема неструктурированных данных. По оценкам, к 2025 году более 90% генерируемых данных будут неструктурированными, что подчеркивает необходимость в системах, способных к семантическому пониманию.
Рисунок: Более 90% новых данных, сгенерированных в 2025 году, будут неструктурированными.
Мультиномиальная выборка: основа генерации текста
Генерация текста в LLM обеспечивается мультиномиальной выборкой — процессом, который генерирует последовательности токен за токеном на основе вероятностей, изученных на обучающих данных. Каждый токен может представлять слово, символ или часть слова, а модель выбирает следующий токен путем выборки из распределения вероятностей.
Рисунок: Базовая мультиномиальная выборка из LLM
Алгоритм начинается с пустой последовательности и итеративно добавляет токены, пока последовательность не будет завершена или не будет выполнено условие остановки. На каждом шаге модель вычисляет вероятности для всех возможных следующих токенов и выбирает один на основе этих вероятностей. Хотя этот метод отлично подходит для создания текста в свободной форме, ему не хватает механизмов для обеспечения структурных правил. Например, генерация корректного JSON или правильно оформленного кода часто требует постобработки для исправления структурных ошибок.
Это ограничение подчеркивает необходимость управляемой выборки, которая включает ограничения в процесс генерации, чтобы гарантировать соответствие выходных данных заранее заданным структурам.
Управляемая выборка: обеспечение структурных правил во время генерации
Управляемая выборка улучшает базовый процесс мультиномиальной выборки, применяя ограничения, которые направляют генерацию. Эти ограничения обеспечиваются с помощью двоичных масок, которые отфильтровывают недопустимые токены на каждом шаге. Маски динамически адаптируются на основе текущего контекста выходных данных, обеспечивая допустимость сгенерированной последовательности.
Рисунок: Структурированный вывод с помощью управляемой выборки
Например, при генерации JSON система может ограничить следующий токен именем поля после открывающей фигурной скобки {. Аналогично, при генерации кода ограничения могут обеспечивать правильный синтаксис, блокируя недопустимые символы или незавершенные операторы. Такой подход устраняет необходимость в обширной проверке или исправлениях после генерации, что делает его особенно полезным для таких приложений, как извлечение информации и агенты принятия решений.
Вводя структуру непосредственно в процесс генерации, управляемая выборка устраняет разрыв между творческими возможностями LLM и точностью, необходимой для структурированных выходных данных. Этот метод является основой для реализации конечных автоматов (FSM) в генерации текста.
Конечные автоматы: обеспечение структурной согласованности
Конечные автоматы (FSM) развивают концепцию управляемой выборки, предоставляя формальную основу для обеспечения ограничений. FSM — это вычислительная модель с конечным числом состояний и переходов между ними. Каждое состояние представляет точку в процессе генерации выходных данных, а переходы определяют допустимые пути на основе текущего контекста. Интегрируя FSM в конвейер генерации, становится возможным динамически обеспечивать строгие структурные правила.
В FSM состояния предопределены, и каждое представляет определенное условие или этап в процессе генерации. Переходы между состояниями происходят на основе входных данных или генерируемого токена. Определяя допустимые переходы, FSM динамически направляют модель на создание выходных данных, соответствующих заданной структуре.
Например, FSM, генерирующий JSON, может включать состояния для открытия скобки, записи ключа, записи значения и закрытия скобки. FSM гарантирует, что переходы происходят в логической последовательности, например не закрывает скобку до записи значения. Это гарантирует структурную целостность выходных данных без необходимости постобработки.
FSM особенно ценны в таких приложениях, как извлечение структурированных данных, генерация кода и форматирование ответов. Благодаря предварительному вычислению допустимых переходов для каждого состояния FSM могут быть реализованы эффективно, минимизируя накладные расходы во время выполнения. Эта эффективность в сочетании с обеспечением ограничений в реальном времени позволяет FSM генерировать выходные данные, которые одновременно являются корректными и контекстуально точными.
Пример: генерация корректных чисел
Чтобы проиллюстрировать генерацию под управлением FSM, рассмотрим практический пример, где задача состоит в генерации корректного числа. Правила задают, что число должно содержать только цифры и, при необходимости, одну десятичную точку.
Рисунок: FSM генерации корректных чисел
FSM начинает работу в State 0, где допустимые токены включают любую цифру или десятичную точку. Если система генерирует цифру, например 1, она переходит в State 1. Из этого состояния разрешены дополнительные цифры, либо FSM может перейти в State 2, если будет сгенерирована десятичная точка. В State 2 допустимы только цифры, поскольку несколько десятичных точек нарушили бы правила. FSM динамически корректирует свое состояние и допустимые токены на основе сгенерированной последовательности, гарантируя, что выходные данные соответствуют указанному формату.
Этот пример показывает, как FSM обеспечивают соблюдение ограничений в реальном времени. Определяя состояния и переходы для конкретной задачи, мы можем создавать надежные системы, способные генерировать структурированные выходные данные без необходимости постобработки или ручной проверки.
Объединение управляемой выборки с векторными базами данных
Управляемая выборка раскрывает весь свой потенциал в сочетании с векторными базами данных. Эти специализированные базы данных, такие как Milvus, предназначены для эффективного хранения, управления и извлечения высокоразмерных векторных эмбеддингов. Вместе управляемая выборка и векторные базы данных создают мощную основу для работы с неструктурированными данными, одновременно формируя семантически релевантные и структурно точные выходные данные. Давайте рассмотрим, как эти два компонента работают вместе для улучшения AI-приложений.
Векторные базы данных как семантическая основа
Векторные базы данных служат фундаментальным уровнем в приложениях, связанных с семантическим поиском. Эмбеддинги, сгенерированные моделями глубокого обучения, хранятся в высокоразмерном пространстве внутри векторной базы данных, где расстояния между точками обозначают их семантические отношения, как мы видели ранее.
Когда пользователь выполняет запрос, он преобразуется в эмбеддинг с использованием той же модели, которая создала эмбеддинги базы данных. Затем база данных выполняет поиск по сходству, чтобы найти эмбеддинги, наиболее релевантные запросу. Этот процесс извлечения позволяет системам предоставлять контекстуально значимые результаты, даже если в запросе не используются точные ключевые слова.
Добавление структуры с помощью управляемой выборки
Хотя векторные базы данных извлекают семантически релевантную информацию, управляемая выборка гарантирует, что выходные данные соответствуют конкретным форматам или ограничениям. После извлечения релевантных эмбеддингов они передаются в качестве входных данных в большую языковую модель (LLM). Без управляемой выборки LLM могла бы генерировать ответы, отклоняющиеся от требуемой структуры, например плохо отформатированный JSON или некорректный XML. Управляемая выборка решает эту проблему, динамически обеспечивая соблюдение правил в процессе выбора токенов.
Реальные применения этой интеграции
Сочетание векторных баз данных и управляемой выборки имеет широкое применение в различных отраслях:
Помощники по программированию: Когда разработчик обращается с запросом к AI-помощнику по программированию, система извлекает релевантные фрагменты кода или эмбеддинги документации. Управляемая выборка гарантирует, что выводимый код соответствует правильному синтаксису и формату, снижая необходимость ручного исправления.
Системы извлечения информации: Эти системы анализируют большие наборы данных, извлекая структурированную информацию, такую как имена, даты или местоположения. Векторные базы данных извлекают релевантные сегменты данных, тогда как управляемая выборка форматирует вывод в предопределенные схемы, такие как JSON.
Чат-боты для специализированных областей: Например, в здравоохранении или юридической сфере чат-боты извлекают семантически похожие тематические исследования или документы. Управляемая выборка гарантирует, что сгенерированные ответы соответствуют строгим юридическим или медицинским стандартам форматирования.
Инструменты для реализации ограниченной выборки: Outlines и BAML
Несколько инструментов упрощают реализацию методов ограниченной выборки. Например, библиотека Outlines предоставляет Python-based фреймворк для определения ограничений и генерации структурированных выводов. Она позволяет разработчикам обеспечивать соблюдение таких правил, как схемы JSON или regex-шаблоны, непосредственно во время генерации текста. Аналогично, BAML предлагает предметно-ориентированный язык для написания и тестирования приложений на основе LLM, упрощая процесс определения ограничений и проверки выводов.
Давайте посмотрим, как мы можем использовать библиотеку Outlines для обеспечения ограниченной выборки:
Начните с установки необходимых библиотек:
pip install outlines transformers datasets
Библиотека outlines позволит нам генерировать структурированные выводы. Библиотека transformers позволит нам загружать предварительно обученные модели . Библиотека datasets является зависимостью библиотеки outlines.
Когда среда готова, давайте начнем писать код.
import outlines
import transformers
# Load the model
model = outlines.models.transformers("gpt2-medium")
# For text generation
generator = outlines.generate.text(model)
# Example 1: Basic Continuation
prompt = "Is 1+1=2? "
result = generator(prompt, max_tokens=30)
print("Unguided output:", result)
# Example 2: Structured Generation with Regex
guided_output = outlines.generate.regex(model, r"([Yy]es|[Nn]o|[Nn]ever|[Aa]lways)")(
prompt, max_tokens=30
)
print("Guided output:", guided_output)
# Example 3: Numerical Regex Constraint
prompt = "In what year was Noam Chomsky born?n"
guided_output_year = outlines.generate.regex(model, r"19[0-9]{2}")(
prompt, max_tokens=30
)
print("Guided output (year):", guided_output_year)
В приведенном выше коде мы начинаем с импорта установленных библиотек, затем загружаем среднюю модель GPT-2 для генерации текста. Сначала мы генерируем неуправляемый ответ на запрос Is 1+1=2?, демонстрируя базовую генерацию текста. Затем мы используем regex, чтобы направить модель на создание только таких ответов, как Yes, No, Never или Always, обеспечивая соответствие выводов конкретным форматам ответов. Наконец, мы реализуем regex-ограничение r"19[0-9]{2}" для извлечения четырехзначного года, нацеливаясь на год рождения Ноама Хомского. Вот пример вывода:
Рисунок: Вывод ограниченной выборки с использованием библиотеки Outlines
Это демонстрирует способность модели как к свободной, так и к структурированной генерации текста, адаптированной под конкретные задачи извлечения информации.
Заключение
Стефан отлично показал нам, как ограниченная выборка и FSM представляют собой значительные достижения в повышении надежности больших языковых моделей для реальных приложений. Обеспечивая структурную согласованность и используя такие инструменты, как Outlines и векторные базы данных, мы теперь можем создавать системы, сочетающие гибкость с точностью. По мере развития этой области эти методы будут играть ключевую роль в преодолении разрыва между обработкой неструктурированных данных и генерацией структурированного вывода, открывая новые возможности для приложений на базе AI.
Для получения дополнительной информации посмотрите выступление Стефана на YouTube.
Читать далее

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

Expanding Our Global Reach: Zilliz Cloud Launches in Azure Central India
Zilliz Cloud expands to Azure Central India. This new region helps customers meet compliance, reduce latency, and optimize cloud costs when building AI applications.

Zilliz Cloud Introduces Advanced BYOC-I Solution for Ultimate Enterprise Data Sovereignty
Explore Zilliz Cloud BYOC-I, the solution that balances AI innovation with data control, enabling secure deployments in finance, healthcare, and education sectors.


