Введение в проблему
Одной из ключевых задач в области обработки естественного языка является создание системы, способной переводить текстовые запросы в SQL-запросы, которые могут быть выполнены на базе данных. Эта задача особенно актуальна для крупных таблиц с сотнями миллионов строк и более 200 столбцов, где существует обязательный фильтр по дате для каждого запроса. Первоначальные попытки решить эту проблему с помощью Language Model (LLM) показали, что даже при высоком качестве модели, таком как GPT-4, и тщательно составленном запросе, точность составила примерно 68%. Однако, такая точность не достаточна для производственных систем, где пользователи принимают решения на основе вывода системы.
Выявление проблем
При анализе ошибок были выявлены три основных режима неисправностей, которые объясняют почти все ошибки:
- Залучение столбцов: С более чем 200 столбцами в схеме, LLM часто с уверенностью ссылалась на несуществующие столбцы или выбирала столбцы с похожими именами, но разными семантиками. Например, столбец
region_codeмог быть ошибочно принят заsales_region, что приводило к выполнению SQL без ошибок, но с совершенно неправильными результатами. - Ошибки значений фильтров: В таблице были десятки категориальных столбцов со специфическими перечислениями значений. LLM угадывала значения, что приводило к пустым наборам результатов, и пользователь не имел представления, почему это происходит.
- Структурная валидность ≠ семантическая корректность: Это самая коварная ошибка. SQL запросы выполнялись, возвращали строки, но отвечали на слегка другой вопрос, чем тот, который был задан. Например, сравнение за год, которое использует неправильные границы даты, или агрегация, которая группирует по неправильному измерению. Пользователь получал таблицу чисел, которая казалась правильной, но была на самом деле неверной.
Создание самоулучшающейся системы
Чтобы преодолеть эти проблемы, необходимо создать систему, которая становится умнее каждый день. Это можно достичь за счет постоянного обучения и совершенствования модели на основе обратной связи от пользователей. Кроме того, необходимо использовать более продвинутые методы обработки естественного языка, такие как attention и transformers, для улучшения точности и семантической корректности генерируемых SQL-запросов. Также важно учитывать контекст и историю запросов, чтобы лучше понять намерения пользователя и генерировать более точные запросы.
Решение и перспективы
Создание самоулучшающейся системы Text-to-SQL требует комплексного подхода, включающего постоянное обучение, совершенствование модели и учет контекста и истории запросов. Это позволит увеличить точность и семантическую корректность генерируемых SQL-запросов, что сделает систему более надежной и полезной для пользователей. С помощью таких систем, пользователи смогут получать точные и актуальные данные, что позволит им принимать более обоснованные решения.