Поскольку машинное обучение продолжает развиваться, вот введение о том, как использовать модель T5 для генерации SQL-запросов из текстовых вопросов и их обслуживания через REST API.

Машинное обучение для автозавершения кода получило широкую огласку с выпуском OpenAI Codex, на котором работает GitHub Copilot. Многие компании решают эту проблему, и теперь они быстрее добиваются прогресса благодаря более совершенным инструментам и методам.

За 10 лет эволюции Hue SQL Editor вложение и переход на автозаполнение на основе парсера было одним из трех лучших решений. Парсеры даже повторно использовались большинством конкурентов. Это было сделано пять лет назад, и теперь стоит изучить новые (дополнительные) подходы.

Вот три темы SQL, которые можно упростить с помощью машинного обучения:

  • Текст в SQL → текстовый вопрос преобразуется в SQL-запрос
  • SQL в текст → получение помощи в понимании того, что делает SQL-запрос
  • Таблица ответов на вопросы → буквально задавайте вопросы по набору данных сетки

Давайте познакомимся с созданием SQL-запроса из текстового вопроса.

Для этого мы выбираем существующую модель с именем dbernsohn / t5_wikisql_SQL2en.

Большая часть сложной работы уже выполнена путем построения модели и точной настройки ее на наборе данных WikiSQL.

Давайте запустим модель, задав простой вопрос:

> python text2sql.py predict --query="How many people live in the USA?"
"SELECT COUNT Live FROM table WHERE Country = united states AND Name: text"

Бонус: этот быстрый интерфейс командной строки, основанный на предыдущем руководстве, позволяет легко взаимодействовать с моделью.

Очевидно, что результаты не идеальны, и можно сделать гораздо больше, но это хорошее начало. Теперь давайте посмотрим, как работает использование модели в качестве API:

Для этого мы будем использовать MLflow, который предоставляет много клея для автоматизации утомительного инженерного управления моделями ML.

API здесь просто локальный, но MLflow может автоматизировать отправку и развертывание моделей в производственных средах. В нашем случае мы просто хотим его зарегистрировать:

python text2sql.py train

И после запуска mlflow ui мы видим эксперимент:

Теперь мы выбираем итерацию, которую хотим обслуживать:

mlflow models serve -m /home/romain/projects/romain/text2sql/mlruns/0/efec45c930714e3581033699e011df51/artifacts/model -p 5001

А затем можете напрямую запросить его!

curl -X POST -H "Content-Type:application/json; format=pandas-split" --data '{"columns":["text"],"data":[["How many people live in the USA?"]]}' http://127.0.0.1:5001/invocations
"SELECT COUNT Live FROM table WHERE Country = united states AND Name: text"

Вот и все!

Проект находится в репозитории Github. В качестве продолжения вы также можете найти подробный пример того, как управлять байесовской моделью с помощью MLflow.

В следующих выпусках мы увидим, как интегрировать ML API в ваш собственный Редактор SQL и улучшить модель!