Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RYANSQL: 한국어 Text2SQL 모델 개발

kakao
PRO
December 08, 2022

RYANSQL: 한국어 Text2SQL 모델 개발

#NLP #TexttoSQL #Semanticparsing #NLtoSQL

카카오엔터프라이즈에서 개발한 한국어 Text2SQL 모델인 RYANSQL을 소개하고, 서비스를 위해 고려했던 내용을 정리해서 발표합니다.

발표자 : index.sh
카카오엔터프라이즈 AI Assistant 팀 신명철입니다. 저는 kakao i 자연어처리 엔진 개발을 담당하고 있고, 주요 관심 분야는 목적지향 대화처리, 개체명 인식, 오픈 도메인 질의응답, 최적화, 언어모델 등입니다.

kakao
PRO

December 08, 2022
Tweet

More Decks by kakao

Other Decks in Programming

Transcript

  1. Copyright 2022. Kakao Corp. All rights reserved. Redistribution or public display is not permitted without written permission from Kakao.
    RYANSQL: 한국어 Text2SQL 모델 개발
    신명철 index.sh
    카카오엔터프라이즈
    if(kakao)2022

    View Slide

  2. 1.Text2SQL
    2.데이터
    3.모델의 종류
    4.RYANSQL
    5.한국어 모델 개발
    6.서비스에 필요한 요소
    7.향후 계획

    View Slide

  3. Text2SQL

    View Slide

  4. Text2SQL
    ੗োয ૕੄ SQL
    [1]
    - Text2SQL
    - 자연어 질의를 입력하면 데이터베이스에 가장 적합한 SQL을 생성해주는 시스템
    - 유사한 용어 : NL2SQL, NLIDB(Natural Language Interface to DB), Semantic Parsing
    Text2SQL

    View Slide

  5. Text2SQL
    actid

    (ഝز ই੉٣)
    activity_name

    (ഝزݺ)
    770 ١࢑
    771 ஠־
    … …
    Activity
    (ഝز)
    stuid
    (೟ࢤ ই੉٣)
    actid

    (ഝز ই੉٣)
    1001 770
    1001 771
    … …
    Participates_in
    (೟ࢤ ଵৈ)
    StuID

    (೟ࢤ ই੉٣)
    Name

    (੉ܴ)
    ...
    1001 য়૑޹ ...
    1002 ъࣻ൞ ...
    … … ...
    Student
    (೟ࢤ)
    4ѐ ੉࢚੄ ഝزী ଵৈೠ ೟ࢤ੄
    ই੉٣৬ ഝز ѐࣻܳ ঌ۰઻
    SELECT stuid, COUNT ( * )
    FROM Participates_in
    GROUP BY stuid
    HAVING COUNT ( * ) >= 4
    Text2SQL

    View Slide

  6. 데이터

    View Slide

  7. - WikiSQL [2]
    - table : 1개
    - select : column 1개, aggregator 1개
    - where : (column, operator, value) 최대 3개
    - Spider [3]
    - 현실적인 문제 해결 목적으로 구축
    - ORDER BY, GROUP BY, HAVING,
    JOIN, NESTED SELECT 등 난이도 높은 구문 사용
    데이터
    Dataset #Q #SQL #DB #Domain
    #Table
    /
    DB
    WikiSQL 80,654 77,840 26,521 - 1
    Spider 10,181 5,693 200 138 5.1
    Dataset
    ORDE
    R
    BY
    GROUP
    BY
    NESTED HAVING -
    WikiSQL 0 0 0 0 -
    Spider 1335 1491 844 388 -

    View Slide

  8. - WikiSQL [2]
    - table : 1개
    - select : column 1개, aggregator 1개
    - where : (column, operator, value) 최대 3개
    - Spider [3]
    - 현실적인 문제 해결 목적으로 구축
    - ORDER BY, GROUP BY, HAVING,
    JOIN, NESTED SELECT 등 난이도 높은 구문 사용
    데이터
    Dataset #Q #SQL #DB #Domain
    #Table
    /
    DB
    WikiSQL 80,654 77,840 26,521 - 1
    Spider 10,181 5,693 200 138 5.1
    Dataset
    ORDE
    R
    BY
    GROUP
    BY
    NESTED HAVING -
    WikiSQL 0 0 0 0 -
    Spider 1335 1491 844 388 -

    View Slide

  9. - Spider [3]
    - 난이도 : Easy / Medium / Hard / Extra Hard
    데이터
    Extra Hard
    What is the average life expectancy in the
    countries where English is not the official
    language?
    SELECT AVG(life_expectancy) FROM country
    WHERE name NOT IN
    (SELECT T1.name
    FROM country AS T1 JOIN country_language AS T2
    ON T1.code = T2.country_code
    WHERE T2.language = ‘English’ AND
    T2.is_official = ‘T’)
    Hard
    Which countries in Europe have at least 3 car
    manufacturers?
    SELECT T1.country_name
    FROM countries AS T1 JOIN continents
    AS T2 ON T1.continent = T2.cont_id
    JOIN car_makers AS T3 ON
    T1.country_id = T3.country
    WHERE T2.continent = ‘Europe’
    GROUP BY T1.country_name
    HAVING COUNT(*) >= 3

    View Slide

  10. grammar
    seq2seq sketch
    모델의 종류

    View Slide

  11. - Transformer Encoder«Decoder (e.g., T5)
    - 입력 : question + serialized schema
    - 출력 : SQL query
    - 대표 모델
    - PICARD [5]
    - RASAT [6]
    - UNIFIEDSKG [7]
    seq2seq²based
    N x
    INPUT : q1 q2 q3 q4 | S | t1 : c1 , t1 : c2 | t2 : c3 , t2 : c4
    Input Embedding Output Embedding
    transformer encoder layer
    Relation-Aware Self-Attention
    Feed-Forward
    transformer decoder layer N x
    linear
    OUTPUT : SELECT stuid, COUNT ( * ) …

    View Slide

  12. - Transformer Encoder«Decoder (e.g., T5)
    - 입력 : question + serialized schema
    - 출력 : SQL query
    - 대표 모델
    - PICARD [5]
    - RASAT [6]
    - UNIFIEDSKG [7]
    seq2seq²based
    N x
    INPUT : q1 q2 q3 q4 | S | t1 : c1 , t1 : c2 | t2 : c3 , t2 : c4
    Input Embedding Output Embedding
    transformer encoder layer
    Relation-Aware Self-Attention
    Feed-Forward
    transformer decoder layer N x
    linear
    OUTPUT : SELECT stuid, COUNT ( * ) …

    View Slide

  13. seq2seq²based
    - RAT(Relation«Aware Transformer)
    - encoder self²attention에서 token 간 특정 관계를
    encoding해서 수식에 추가
    - Constrained Decoding
    - decoder beam search에서 schema에 맞지 않는 후보를 제거(예, T1.maker)
    [8]
    [8]

    View Slide

  14. seq2seq²based
    - RAT(Relation«Aware Transformer)
    - encoder self²attention에서 token 간 특정 관계를
    encoding해서 수식에 추가
    - Constrained Decoding
    - decoder beam search에서 schema에 맞지 않는 후보를 제거(예, T1.maker)
    [8]
    [8]

    View Slide

  15. seq2seq²based
    - RAT(Relation«Aware Transformer)
    - encoder self²attention에서 token 간 특정 관계를
    encoding해서 수식에 추가
    - Constrained Decoding
    - decoder beam search에서 schema에 맞지 않는 후보를 제거(예, T1.maker)
    [8]
    [8]

    View Slide

  16. grammar²based decoder
    - Encoder 부분은 앞서 설명한 seq2seq에서 encoder와 유사
    - Decoder에서 차이
    - AST(Abstract Syntax Tree) 기반, SQL 문법
    - Top²down DFS(depth²first traversal) 혹은 Bottom²up parsing
    - rule을 생성해서 node 확장 하거나 terminal 생성(table, column, value)
    - 대표 모델
    - RATSQL [8]
    - LGESQL [16]
    - IRNet [12]
    - RaSaP [10]
    - SMBoP [13]
    Root
    Select Filter
    C T and Filter
    = A
    Friend
    name
    None
    Question, Encoder Hidden
    Attention

    View Slide

  17. grammar²based decoder
    - Encoder 부분은 앞서 설명한 seq2seq에서 encoder와 유사
    - Decoder에서 차이
    - AST(Abstract Syntax Tree) 기반, SQL 문법
    - Top²down DFS(depth²first traversal) 혹은 Bottom²up parsing
    - rule을 생성해서 node 확장 하거나 terminal 생성(table, column, value)
    - 대표 모델
    - RATSQL [8]
    - LGESQL [16]
    - IRNet [12]
    - RaSaP [10]
    - SMBoP [13]
    Root
    Select Filter
    C T and Filter
    = A
    Friend
    name
    None
    Question, Encoder Hidden
    Attention

    View Slide

  18. sketch²based decoder
    - Encoder는 마찬가지로 유사한 구조
    - Decoder에서 차이
    - SQL query sketch(template) 정의
    - 다수의 decoder classifier로 slots을 채움
    - e.g., select column과 aggregator 분류
    - e.g., where condition의 개수
    column / operator 분류
    - slot²filling approach
    - 대표 모델
    - SQLNET [17]
    - RYANSQL [9]
    SELECT $AGG $COLUMN
    WHERE $COLUMN $OP $VALUE
    (AND $COLUMN $OP $VALUE)*
    SELECT
    COLUMN
    Question, Encoder Hidden
    SELECT
    AGGREGATOR
    COLUMN(1)
    OP(1)
    VALUE(1)
    COLUMN(n)
    OP(n)
    VALUE(n)

    View Slide

  19. sketch²based decoder
    - Encoder는 마찬가지로 유사한 구조
    - Decoder에서 차이
    - SQL query sketch(template) 정의
    - 다수의 decoder classifier로 slots을 채움
    - e.g., select column과 aggregator 분류
    - e.g., where condition의 개수
    column / operator 분류
    - slot²filling approach
    - 대표 모델
    - SQLNET [17]
    - RYANSQL [9]
    SELECT $AGG $COLUMN
    WHERE $COLUMN $OP $VALUE
    (AND $COLUMN $OP $VALUE)*
    SELECT
    COLUMN
    Question, Encoder Hidden
    SELECT
    AGGREGATOR
    COLUMN(1)
    OP(1)
    VALUE(1)
    COLUMN(n)
    OP(n)
    VALUE(n)

    View Slide

  20. sketch²based decoder
    - Encoder는 마찬가지로 유사한 구조
    - Decoder에서 차이
    - SQL query sketch(template) 정의
    - 다수의 decoder classifier로 slots을 채움
    - e.g., select column과 aggregator 분류
    - e.g., where condition의 개수
    column / operator 분류
    - slot²filling approach
    - 대표 모델
    - SQLNET [17]
    - RYANSQL [9]
    SELECT $AGG $COLUMN
    WHERE $COLUMN $OP $VALUE
    (AND $COLUMN $OP $VALUE)*
    SELECT
    COLUMN
    Question, Encoder Hidden
    SELECT
    AGGREGATOR
    COLUMN(1)
    OP(1)
    VALUE(1)
    COLUMN(n)
    OP(n)
    VALUE(n)

    View Slide

  21. sketch²based decoder
    - Encoder는 마찬가지로 유사한 구조
    - Decoder에서 차이
    - SQL query sketch(template) 정의
    - 다수의 decoder classifier로 slots을 채움
    - e.g., select column과 aggregator 분류
    - e.g., where condition의 개수
    column / operator 분류
    - slot²filling approach
    - 대표 모델
    - SQLNET [17]
    - RYANSQL [9]
    SELECT $AGG $COLUMN
    WHERE $COLUMN $OP $VALUE
    (AND $COLUMN $OP $VALUE)*
    SELECT
    COLUMN
    Question, Encoder Hidden
    SELECT
    AGGREGATOR
    COLUMN(1)
    OP(1)
    VALUE(1)
    COLUMN(n)
    OP(n)
    VALUE(n)

    View Slide

  22. RYANSQL
    (Recursively Yielding Annotation Network for SQL)

    View Slide

  23. RYANSQL
    - Encoder
    - 입력 : question, schema, SPC
    - v0 : GloVe + CNN + Cross«Attention + Transformer
    - v1, v2 : BERT
    - v3 : BERT + RAT(Relation«Aware Transformer)
    - Decoder
    - sketch3based decoder
    - Statement Position Code(SPC)
    - nested SQL → non²nested SQL
    - recursive decoding

    View Slide

  24. RYANSQL
    - Encoder
    - 입력 : question, schema, SPC
    - v0 : GloVe + CNN + Cross«Attention + Transformer
    - v1, v2 : BERT
    - v3 : BERT + RAT(Relation«Aware Transformer)
    - Decoder
    - sketch3based decoder
    - Statement Position Code(SPC)
    - nested SQL → non²nested SQL
    - recursive decoding

    View Slide

  25. RYANSQL
    - Encoder
    - 입력 : question, schema, SPC
    - v0 : GloVe + CNN + Cross«Attention + Transformer
    - v1, v2 : BERT
    - v3 : BERT + RAT(Relation«Aware Transformer)
    - Decoder
    - sketch3based decoder
    - Statement Position Code(SPC)
    - nested SQL → non²nested SQL
    - recursive decoding

    View Slide

  26. RYANSQL - encoder v0

    View Slide

  27. RYANSQL - encoder v0

    View Slide

  28. RYANSQL - encoder v1, v2, v3
    BERT + RAT

    View Slide

  29. RYANSQL - decoder
    - Complex SQL 처리를 위한 sketch 고안
    - SPC를 이용해서 recursive decoding
    - Base Structure
    - 입력 : Q(question), D(database), P(SPC)
    - 존재 여부 분류
    - binary²class : group by, order by, limit, where,
    having
    - multi²class : intersect, union, except, none
    - condition 개수 분류
    - # group by(3), # order by(3)
    - # select(6), # where(4), # having(2)
    SELECT #1
    FROM #2
    WHERE #2
    HAVING
    GROUP BY #1
    ORDER BY #1
    LIMIT
    INTERSECT
    UNION
    EXCEPT

    View Slide

  30. RYANSQL - decoder
    - Complex SQL 처리를 위한 sketch 고안
    - SPC를 이용해서 recursive decoding
    - Base Structure
    - 입력 : Q(question), D(database), P(SPC)
    - 존재 여부 분류
    - binary²class : group by, order by, limit, where,
    having
    - multi²class : intersect, union, except, none
    - condition 개수 분류
    - # group by(3), # order by(3)
    - # select(6), # where(4), # having(2)
    SELECT #1
    FROM #2
    WHERE #2
    HAVING
    GROUP BY #1
    ORDER BY #1
    LIMIT
    INTERSECT
    UNION
    EXCEPT

    View Slide

  31. RYANSQL - decoder
    - Complex SQL 처리를 위한 sketch 고안
    - SPC를 이용해서 recursive decoding
    - Base Structure
    - 입력 : Q(question), D(database), P(SPC)
    - 존재 여부 분류
    - binary²class : group by, order by, limit, where,
    having
    - multi²class : intersect, union, except, none
    - condition 개수 분류
    - # group by(3), # order by(3)
    - # select(6), # where(4), # having(2)
    SELECT #1
    FROM #2
    WHERE #2
    HAVING
    GROUP BY #1
    ORDER BY #1
    LIMIT
    INTERSECT
    UNION
    EXCEPT

    View Slide

  32. RYANSQL - decoder
    - FROM clause
    - 입력 : Q, D, P, T(Table)
    - table, # table 분류
    - SELECT clause
    - 입력 : Q, P, C(Column)
    - column, distinct, aggregator, arithmetic operator 등
    분류
    - ORDER BY, GROUP BY, WHERE, HAVING clause
    - SELECT와 유사
    - WHERE의 경우 value가 새로운 SPC로 분류되는지 확인
    (nested)
    - 아니면, pointer3net을 사용해서 question으로부터 copy
    - LIMIT
    - default 1, (Q, P)를 입력으로 별도의 분류기 사용
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘?’ AND
    T2.name = ‘?’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT ?
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘2022֙’ AND
    T2.name = ‘ݽݽېࡁ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1

    View Slide

  33. RYANSQL - decoder
    - FROM clause
    - 입력 : Q, D, P, T(Table)
    - table, # table 분류
    - SELECT clause
    - 입력 : Q, P, C(Column)
    - column, distinct, aggregator, arithmetic operator 등
    분류
    - ORDER BY, GROUP BY, WHERE, HAVING clause
    - SELECT와 유사
    - WHERE의 경우 value가 새로운 SPC로 분류되는지 확인
    (nested)
    - 아니면, pointer3net을 사용해서 question으로부터 copy
    - LIMIT
    - default 1, (Q, P)를 입력으로 별도의 분류기 사용
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘?’ AND
    T2.name = ‘?’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT ?
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘2022֙’ AND
    T2.name = ‘ݽݽېࡁ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1

    View Slide

  34. RYANSQL - 평가
    - Spider Challenge [4], [5], [7]
    Models Dev (EM) Test (EM) DB contents used Decoder
    RATSQL + BERT 69.7 65.6 Y grammar
    RATSQL + GRAPPA 73.4 69.6 Y grammar
    SMBoP + GRAPPA 74.7 69.5 Y grammar
    UNIFIEDSKG + T5-3B 71.76 - Y seq2seq
    T5-Large + PICARD 69.1 - Y seq2seq
    T5-3B + PICARD 75.5 71.9 Y seq2seq
    RASAT + PICARD 75.3 - Y seq2seq
    G³R + LGESQL + ELECTRA 77.2 72.6 Y grammar(?)
    RYANSQL + BERT (v2) 70.6 60.6 N sketch
    RYANSQL + BERT + RAT (v3) 74.18 - Y sketch

    View Slide

  35. 한국어 모델 개발

    View Slide

  36. 한국어 모델 개발 - 데이터 구축
    - 한국어 Text2SQL 모델 개발을 위한 학습데이터 : 없음
    - Spider (ko) v1 구축 ← Spider (en)
    - table name, column name : 한국어로 번역 / 교정
    - question : 한국어 번역 / 교정
    - SQL condition value → question에 대응하는 영역 mapping
    - e.g., ‘Linda’: ‘린다', ‘Smith’: ‘스미스'
    {
    “db_id”: “activity_1”,
    “query”: “SELECT T1.fname, T1.lname FROM Faculty AS T1 JOIN Student AS T2 ON T1.FacID = T2.advisor
    WHERE T2.fname = ‘Linda’ AND T2.lname = ‘Smith’”,
    “question”: “ܽ׮ झ޷झ੄ ૑بҮࣻח ־ҳੋо? ੉ܴҗ ࢿਸ ঌ۰઻.”
    },

    View Slide

  37. 한국어 모델 개발 - 데이터 구축
    - 한국어 Text2SQL 모델 개발을 위한 학습데이터 : 없음
    - Spider (ko) v1 구축 ← Spider (en)
    - table name, column name : 한국어로 번역 / 교정
    - question : 한국어 번역 / 교정
    - SQL condition value → question에 대응하는 영역 mapping
    - e.g., ‘Linda’: ‘린다', ‘Smith’: ‘스미스'
    {
    “db_id”: “activity_1”,
    “query”: “SELECT T1.fname, T1.lname FROM Faculty AS T1 JOIN Student AS T2 ON T1.FacID = T2.advisor
    WHERE T2.fname = ‘Linda’ AND T2.lname = ‘Smith’”,
    “question”: “ܽ׮ झ޷झ੄ ૑بҮࣻח ־ҳੋо? ੉ܴҗ ࢿਸ ঌ۰઻.”
    },

    View Slide

  38. 한국어 모델 개발 - 데이터 구축
    - Spider (ko) v1 데이터 문제점
    - 생성된 SQL의 condition value : 한국어
    - e.g., “WHERE T2.fname = ‘린다'
    - DB contents : 영어(수정 안한 상태)
    - e.g., fname : ‘Linda’
    - DB contents를 사용할 수 없음
    - 번역 결과가 자연스럽지 않음
    - 일부 자연스럽지 않은 schema 존재
    - e.g., ‘성', ‘이름'
    - 생성된 SQL 실행 문제
    - Execution Accuracy
    ܽ׮ झ޷झ੄ ૑بҮࣻח ־ҳੋо? ੉ܴҗ ࢿਸ ঌ۰઻.
    stuid
    (೟ࢤ ই੉٣)
    lname
    (ࢿ)
    fname
    (੉ܴ)
    ...
    1001 Linda Smith ...
    … … ...
    SELECT T1.fname, T1.lname
    FROM Faculty AS T1 JOIN Student AS T2
    ON T1.FacID = T2.advisor
    WHERE T2.fname = ‘ܽ׮’ AND T2.lname = ‘झ޷झ’

    View Slide

  39. 한국어 모델 개발 - 데이터 구축
    - Spider (ko) v1 데이터 문제점
    - 생성된 SQL의 condition value : 한국어
    - e.g., “WHERE T2.fname = ‘린다'
    - DB contents : 영어(수정 안한 상태)
    - e.g., fname : ‘Linda’
    - DB contents를 사용할 수 없음
    - 번역 결과가 자연스럽지 않음
    - 일부 자연스럽지 않은 schema 존재
    - e.g., ‘성', ‘이름'
    - 생성된 SQL 실행 문제
    - Execution Accuracy
    ܽ׮ झ޷झ੄ ૑بҮࣻח ־ҳੋо? ੉ܴҗ ࢿਸ ঌ۰઻.
    stuid
    (೟ࢤ ই੉٣)
    lname
    (ࢿ)
    fname
    (੉ܴ)
    ...
    1001 Linda Smith ...
    … … ...
    SELECT T1.fname, T1.lname
    FROM Faculty AS T1 JOIN Student AS T2
    ON T1.FacID = T2.advisor
    WHERE T2.fname = ‘ܽ׮’ AND T2.lname = ‘झ޷झ’

    View Slide

  40. 한국어 모델 개발 - 데이터 구축
    - Spider (ko) v2 구축
    - DB schema 뼈대 유지
    - 한국어에 맞게 schema 수정
    - 한국어 DB value 입력
    - DB 별로 question / SQL query 작성
    - 실행후 검증
    - 난이도 비율에 따른 구축
    - easy / medium /
    hard / extra hard
    Dataset #Q #SQL #DB #Table / DB ORDER BY
    Spider (en) 9693 5297 166 5.27
    1145
    (21.61%)
    Spider (ko) v1 9693 5279 168 5.23
    1143
    (21.65%)
    Spider (ko) v2 2777 2761 152 5.07
    309
    (11.17%)
    Dataset GROUP BY NESTED HAVING Dev / Train -
    Spider (en)
    1259
    (23.76%)
    802
    (15.14%)
    316
    (5.96%)
    563 / 4734
    (11.89%)
    -
    Spider (ko) v1
    1252
    (23.71%)
    797
    (15.09%)
    310
    (5.87%)
    563 / 4716
    (11.93%)
    -
    Spider (ko) v2
    431
    (15.59%)
    424
    (15.34%)
    166
    (6.00%)
    357 / 2407
    (14.83%)
    -

    View Slide

  41. 한국어 모델 개발 - 데이터 구축
    - Spider (ko) v2 구축
    - DB schema 뼈대 유지
    - 한국어에 맞게 schema 수정
    - 한국어 DB value 입력
    - DB 별로 question / SQL query 작성
    - 실행후 검증
    - 난이도 비율에 따른 구축
    - easy / medium /
    hard / extra hard
    Dataset #Q #SQL #DB #Table / DB ORDER BY
    Spider (en) 9693 5297 166 5.27
    1145
    (21.61%)
    Spider (ko) v1 9693 5279 168 5.23
    1143
    (21.65%)
    Spider (ko) v2 2777 2761 152 5.07
    309
    (11.17%)
    Dataset GROUP BY NESTED HAVING Dev / Train -
    Spider (en)
    1259
    (23.76%)
    802
    (15.14%)
    316
    (5.96%)
    563 / 4734
    (11.89%)
    -
    Spider (ko) v1
    1252
    (23.71%)
    797
    (15.09%)
    310
    (5.87%)
    563 / 4716
    (11.93%)
    -
    Spider (ko) v2
    431
    (15.59%)
    424
    (15.34%)
    166
    (6.00%)
    357 / 2407
    (14.83%)
    -

    View Slide

  42. 한국어 모델 개발 - 평가
    - Spider (ko)
    - 추가 작업
    - 데이터 정제, 오류 수정, 보강, 증강 작업
    - 정책 논의 및 데이터 업데이트
    - boolean type : ‘예', ‘아니오', ‘남', ‘여', ‘참석', ‘불참'
    - date / time type, integer type : ‘9월부터 11월까지', ‘9점대'
    Models Dev (EM) DB contents used
    RYANSQL + BERT + RAT, Spider (en) 74.18 Y
    RYANSQL + BERT + RAT, Spider (ko) v1 65.96 Y
    RYANSQL + BERT + RAT, Spider (ko) v2 68.06 Y

    View Slide

  43. 서비스에 필요한 요소

    View Slide

  44. 시스템 구조

    View Slide

  45. 요소
    ؘ੉ఠ߬੉झ ࠙ܨӝ
    ૑դ೧ী ݽݽېࡁਸ о੢ ݆੉ ҳ
    ݒೠ ૑৉਷?
    Database: customers
    Core Text2SQL
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘૑դ೧’ AND
    T2.name = ‘ݽݽېࡁ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1
    Approximate
    Entity Tagger
    - 데이터베이스 분류기
    - 사용자 발화를 처리하기 위한 대상 DB 선정
    - 여러개 DB로 구성된 경우 필요
    - 일반적인 문장 분류기 알고리즘 적용
    - Core Text2SQL
    - 사용자 발화를 대상 DB에 적합한 SQL로 생성
    - Approximate Entity Tagger
    - 사용자 발화에서 칼럼 엔티티 정보 확인
    - RAT layer의 feature로 추가
    - 대표어 복원에도 활용

    View Slide

  46. 요소
    ؘ੉ఠ߬੉झ ࠙ܨӝ
    ૑դ೧ী ݽݽېࡁਸ о੢ ݆੉ ҳ
    ݒೠ ૑৉਷?
    Database: customers
    Core Text2SQL
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘૑դ೧’ AND
    T2.name = ‘ݽݽېࡁ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1
    Approximate
    Entity Tagger
    - 데이터베이스 분류기
    - 사용자 발화를 처리하기 위한 대상 DB 선정
    - 여러개 DB로 구성된 경우 필요
    - 일반적인 문장 분류기 알고리즘 적용
    - Core Text2SQL
    - 사용자 발화를 대상 DB에 적합한 SQL로 생성
    - Approximate Entity Tagger
    - 사용자 발화에서 칼럼 엔티티 정보 확인
    - RAT layer의 feature로 추가
    - 대표어 복원에도 활용

    View Slide

  47. 요소
    - 정규화
    - 엔티티 정규화
    - 날짜 / 시간 / 숫자 정규화
    - 규칙기반 Domain 특성 추가
    - 출력 컬럼의 이름 변경
    - WHERE 조건절 추가
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘૑դ೧’ AND
    T2.name = ‘ݽݽېࡁ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1
    Approximate
    Entity Tagger
    ӏ஗ӝ߈ Domain ౠࢿ ୶о
    ੿ӏച
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date BETWEEN ‘2021-01-01’ AND
    ‘2021-12-31’ AND T2.name = ‘ݽݽېࡁ ӝ੷ӈ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1
    Domain Rules
    ୭ઙ प೯ оמೠ SQL

    View Slide

  48. 요소
    - 정규화
    - 엔티티 정규화
    - 날짜 / 시간 / 숫자 정규화
    - 규칙기반 Domain 특성 추가
    - 출력 컬럼의 이름 변경
    - WHERE 조건절 추가
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘૑դ೧’ AND
    T2.name = ‘ݽݽېࡁ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1
    Approximate
    Entity Tagger
    ӏ஗ӝ߈ Domain ౠࢿ ୶о
    ੿ӏച
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date BETWEEN ‘2021-01-01’ AND
    ‘2021-12-31’ AND T2.name = ‘ݽݽېࡁ ӝ੷ӈ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1
    Domain Rules
    ୭ઙ प೯ оמೠ SQL

    View Slide

  49. 요소
    - 정규화
    - 엔티티 정규화
    - 날짜 / 시간 / 숫자 정규화
    - 규칙기반 Domain 특성 추가
    - 출력 컬럼의 이름 변경
    - WHERE 조건절 추가
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date = ‘૑դ೧’ AND
    T2.name = ‘ݽݽېࡁ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1
    Approximate
    Entity Tagger
    ӏ஗ӝ߈ Domain ౠࢿ ୶о
    ੿ӏച
    SELECT T1.loc_code
    FROM customer AS T1, brand AS T2
    WHERE
    T1.date BETWEEN ‘2021-01-01’ AND
    ‘2021-12-31’ AND T2.name = ‘ݽݽېࡁ ӝ੷ӈ’
    GROUP BY T1.loc_code
    ORDER BY SUM(T1.count) DESC
    LIMIT 1
    Domain Rules
    ୭ઙ प೯ оמೠ SQL

    View Slide

  50. 향후 계획

    View Slide

  51. 향후 계획
    - 플랫폼화
    - 고객 DB 스키마, 학습 데이터, 도메인 규칙 데이터 입력
    - 학습 및 배포 자동화
    - 구조 변경
    - sketch → seq2seq, e.g., T5
    - 시스템 구조를 단순화
    - 한국어 데이터 보강
    - Spider (en) 규모 달성 목표

    View Slide

  52. 향후 계획
    - 플랫폼화
    - 고객 DB 스키마, 학습 데이터, 도메인 규칙 데이터 입력
    - 학습 및 배포 자동화
    - 구조 변경
    - sketch → seq2seq, e.g., T5
    - 시스템 구조를 단순화
    - 한국어 데이터 보강
    - Spider (en) 규모 달성 목표

    View Slide

  53. 참고 문헌
    [1] database product brand logoٜ਷ wikiীࢲ оઉ৳णפ׮.
    [2] https://github.com/salesforce/WikiSQL
    [3] Yu et al., 2018, Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross-Domain Semantic Parsing and Text-to-SQL Task
    [4] https://yale-lily.github.io/spider
    [5] Scholak et al., 2021, PICARD: Parsing Incrementally for Constrained Auto-Regressive Decoding from Language Models
    [6] Qi et al., 2022, RASAT: Integrating Relational Structures into Pretrained Seq2Seq Model for Text-to-SQL
    [7] Xie et al., 2022, UNIFIEDSKG: Unifying and Multi-Tasking Structured Knowledge Grounding with Text-to-Text Language Models
    [8] Wang et al., 2021, RAT-SQL: Relation-Aware Schema Encoding and Linking for Text-to-SQL Parsers
    [9] Choi et al., 2020, RYANSQL: Recursively Applying Sketch-based Slot Fillings for Complex Text-to-SQL in Cross-Domain Databases
    [10] Hwang et al., 2021, Relation Aware Semi-autoregressive Semantic Parsing for NL2SQL, a.k.a RaSAP
    [11] Yin and Neubig, 2017, A Syntactic Neural Model for General-Purpose Code Generation
    [12] Guo et al., 2019, Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation
    [13] Rubin and Berant, 2021, SMBOP: Semi-autoregressive Bottom-up Semantic Parsing
    [14] Yu et al., 2021, GRAPPA: GRAMMAR-AUGMENTED PRE-TRAINING FOR TABLE SEMANTIC PARSING
    [15] Xu et al., 2017, SQLNet: GENERATING STRUCTURED QUERIES FROM NATURAL LANGUAGE WITHOUT REINFORCEMENT LEARNING
    [16] Cao et al., 2021, LGESQL: Line Graph Enhanced Text-to-SQL Model with Mixed Local and Non-Local Relations

    View Slide