RetrySql paper


Zadanie text-to-SQL polega na przekształceniu zapytań w języku naturalnym na zapytania SQL wykonywane na relacyjnej bazie danych. Choć nowoczesne modele językowe (LLM) znakomicie radzą sobie z wieloma zadaniami generatywnymi, generowanie poprawnych, złożonych zapytań SQL nadal stanowi wyzwanie. W artykule RetrySQL: text-to-SQL training with retry data for self-correcting query generation autorzy przedstawiają nowy paradygmat treningowy, który uczy model samodzielnej kontroli i korekty wygenerowanych kroków rozumowania.

Idea RetrySQL

  1. Generowanie kroków rozumowania
    Dla każdego przykładu z zestawu BIRD tworzony jest ciąg kroków, które prowadzą do budowy zapytania SQL (np. $FROM$$WHERE$$GROUP\ BY$), generowany syntetycznie przy użyciu GPT-4o.

  2. Tworzenie danych retry
    Z każdej sekwencji losowo wybiera się pozycje, w których zostają wprowadzone błędne kroki ($r_{error}$), po czym wstawia się token $[BACK]$ i ponownie prawidłowy krok.
    Przykład (Forward Single, $ p_{retry}=0.2 $):

    … →
    $r_1$ (FROM orders) →
    $r_{error}$: WHERE status = 'Oczekujące' →
    $[BACK]$ →
    $r_2$ (WHERE status = 'Wysłane') →
    …
    
  3. Continued pre-training
    Otwartoźródłowy model OpenCoder 1.5B, wcześniej trenowany na kodzie (w tym SQL), jest dalej trenowany na rozszerzonym zestawie BIRD zawierającym retry data. Model przyjmuje dane wejściowe w formacie:

    [CONTEXT]  — DDL schemy + kontekst
    [QUESTION] — zapytanie w języku naturalnym
    [REASONING] — kroki rozumowania z retry data
    [SQL]       — prawidłowe zapytanie SQL
    

Przykład

Kontekst: tabela orders

order_idstatuspayment_date
1Shipped2024-06-05
2Pending2024-06-12
3Shipped2024-07-01
4Shipped2024-06-20

Zadanie naturalne:

„Ile zamówień o statusie ‘Shipped’ zostało opłaconych w czerwcu 2024?”

  1. Chain-of-thought

    r₁: FROM orders
    r₂: WHERE status = 'Shipped'
    r₃: WHERE payment_date BETWEEN '2024-06-00' AND '2024-06-31'   ← błąd w dacie
    
  2. Retry

    r₃_error: WHERE payment_date BETWEEN '2024-06-00' AND '2024-06-31'
    [BACK]
    r₃:       WHERE payment_date BETWEEN '2024-06-01' AND '2024-06-30'
    
  3. Finalne SQL

    SELECT COUNT(*)
      FROM orders
     WHERE status = 'Shipped'
       AND payment_date BETWEEN '2024-06-01' AND '2024-06-30';
    

Wyniki i wnioski

  • Poprawa dokładności wykonania (EX): Kontynuacyjne trenowanie z retry data (wariant FS, $p_{retry}=0.2$) zwiększyło $EX_{overall}$ o około 4 punkty procentowe, z największym wzrostem w przypadku zapytań trudnych.
  • Zdolność do detekcji błędów: Linear probing na bazowym OpenCoder wykazał balanced accuracy około 82% w rozróżnianiu poprawnych i błędnych kroków, co potwierdza latentną umiejętność modelu do samokorekty.
  • Konkurencyjność mniejszych modeli: RetrySQL-trenowany OpenCoder 1.5B osiągnął wykonanie zbliżone do GPT-4o w end-to-end pipeline, mimo znacznie mniejszej liczby parametrów.

Zastosowania

  • Systemy BI i analityka danych: Użytkownicy mogą zadawać złożone pytania w naturalnym języku, a model sam koryguje swoje kroki, minimalizując błędy.
  • Środowiska o ograniczonych zasobach: Mniejsze, otwarte modele stają się konkurencyjne wobec dużych LLM, co obniża koszty wdrożenia.
  • Badania i rozwój: Paradygmat retry data można rozszerzyć na inne zadania generatywne, na przykład pisanie kodu w innych językach czy planowanie procesów.

📎 Linki