← 전체 결과로 돌아가기
Benchmark ELI5 · text-to-SQL

사람의 질문을 읽고,
DB가 알아듣는 SQL로 바꾼다

BIRD는 데이터베이스 스키마와 질문을 줍니다. 모델은 SQL 하나만 답하고, 심사기는 그 SQL을 SQLite에서 실제로 실행해 정답 SQL과 같은 결과가 나오는지 확인합니다.

우리 실행 70개strict 분석 63개Execution accuracySQLite

놀이로 비유하면

거대한 서랍장의 설계도를 보고 “291번 경주에서 0점인 팀 이름을 꺼내 줘”라는 부탁을 받는 시험입니다. 어느 서랍과 어느 연결 고리를 써야 하는지 SQL로 적어야 합니다.

01Schematable과 column의 이름·관계를 보여 줍니다.
02질문 + 지식자연어 질문과 필요한 external knowledge를 줍니다.
03SQL 한 줄모델은 SELECT로 시작하는 SQLite SQL만 냅니다.
04실행 결과 비교문자열이 달라도 결과 행이 같으면 정답입니다.

실제로 나온 문제

동결된 실험 데이터의 BIRD question 950입니다. 데이터베이스는 Formula 1 기록입니다.

291번 경주에서 0점인 constructor 찾기BIRD/950 · formula_1
Original EN question

Please list the constructor names with 0 points at race 291.

External Knowledge: race at 291 refers to raceID = 291;
실제 prompt에 포함된 관련 schema 보기
CREATE TABLE constructors
(
    constructorId  INTEGER primary key autoincrement,
    constructorRef TEXT default '' not null,
    name           TEXT default '' not null unique,
    nationality    TEXT,
    url            TEXT default '' not null
)

CREATE TABLE constructorResults
(
    constructorResultsId INTEGER primary key autoincrement,
    raceId               INTEGER default 0 not null,
    constructorId        INTEGER default 0 not null,
    points               REAL,
    status               TEXT
)

CREATE TABLE constructorStandings
(
    constructorStandingsId INTEGER primary key autoincrement,
    raceId                 INTEGER default 0 not null,
    constructorId          INTEGER default 0 not null,
    points                 REAL default 0 not null,
    position               INTEGER,
    positionText           TEXT,
    wins                   INTEGER default 0 not null
)
EN

Please list the constructor names with 0 points at race 291.

KO

레이스 291 시점에 0점을 보유한 컨스트럭터 이름을 나열해 주세요.

MIX1

race 291 시점에 0점을 보유한 constructor 이름을 나열해 주세요.

MIX2

race 291 시점에 0points를 보유한 constructor 이름을 나열해 주세요.

MIX3

race 291 시점에 0points를 보유한 constructor 이름을 list해 주세요.

모델의 실제 SQL

두 번째 독립 실행에서는 EN만 다른 table을 골랐습니다. KO와 MIX들은 정답과 같은 실행 결과를 냈습니다.

Gold SQL · benchmark 정답
SELECT T2.name
FROM constructorStandings AS T1
INNER JOIN constructors AS T2
  ON T1.constructorId = T2.constructorId
WHERE T1.points = 0 AND T1.raceId = 291
Replicate 2 · EN output · FAIL
SELECT T1.name
FROM constructors AS T1
JOIN constructorResults AS T2
  ON T1.constructorId = T2.constructorId
WHERE T2.raceId = 291 AND T2.points = 0
Replicate 2 · KO output · PASS
SELECT T1.name
FROM constructors AS T1
INNER JOIN constructorStandings AS T2
  ON T1.constructorId = T2.constructorId
WHERE T2.raceId = 291 AND T2.points = 0
Replicate 2 · MIX1 output · PASS
SELECT T1.name
FROM constructors AS T1
INNER JOIN constructorStandings AS T2
  ON T1.constructorId = T2.constructorId
WHERE T2.raceId = 291 AND T2.points = 0
Replicate 2 · MIX2 output · PASS
SELECT T1.name
FROM constructors AS T1
JOIN constructorStandings AS T2
  ON T1.constructorId = T2.constructorId
WHERE T2.raceId = 291 AND T2.points = 0
Replicate 2 · MIX3 output · PASS
SELECT T1.name
FROM constructors AS T1
JOIN constructorStandings AS T2
  ON T1.constructorId = T2.constructorId
WHERE T2.raceId = 291 AND T2.points = 0
EN만 0점

EN은 constructorResults를 골랐고, 정답은 constructorStandings를 써야 했습니다. SQL 문법은 맞아도 실행 결과가 다르면 오답입니다.

같은 샘플을 세 번 실행한 결과
조건
Run 1
Run 2
Run 3
EN
FAIL
FAIL
FAIL
KO
PASS
PASS
PASS
MIX1
PASS
PASS
PASS
MIX2
PASS
PASS
PASS
MIX3
PASS
PASS
PASS

이 시험의 성격

좋은 점

  • SQL 문자열이 아니라 실제 query 결과를 비교합니다.
  • 질문만 바꾸고 schema·table·column 이름을 그대로 고정할 수 있습니다.
  • join, ranking, aggregation 같은 개념과 list·compare 같은 동작 표현이 나옵니다.

주의할 점

  • 질문이 짧으면 C1·C2·C3 중 하나가 자연스럽게 없을 수 있습니다.
  • table 이름과 일반 영어 단어가 겹칠 수 있어 보호 규칙이 중요합니다.
  • 원본 BIRD의 질문·SQL 오류가 알려져 있어 strict 분석에서는 사전 지정한 ambiguity 7개를 제외했습니다.

실제 풀에는 이런 질문도 있습니다

BIRD/1002현재 가장 어린 racer의 이름·국적·첫 참가 race를 묻는 질문
BIRD/1011Formula 1에서 가장 짧은 lap time record를 만든 상위 20위 driver를 찾는 질문
BIRD/1014이탈리아 circuit의 lap records를 나열하는 질문
이 페이지의 핵심: BIRD에서 “정답”은 정답 SQL과 글자가 같은 것이 아닙니다. 다른 JOIN 순서나 alias를 써도 결과 행이 같으면 통과합니다. 반대로 문법이 완벽해도 잘못된 table을 고르면 실패합니다.