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

RYANSQL: 한국어 Text2SQL 모델 개발

kakao
December 08, 2022

RYANSQL: 한국어 Text2SQL 모델 개발

#NLP #TexttoSQL #Semanticparsing #NLtoSQL

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

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

kakao

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
  2. Text2SQL ੗োয ૕੄ SQL [1] - Text2SQL - 자연어 질의를

    입력하면 데이터베이스에 가장 적합한 SQL을 생성해주는 시스템 - 유사한 용어 : NL2SQL, NLIDB(Natural Language Interface to DB), Semantic Parsing Text2SQL
  3. 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
  4. - 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 -
  5. - 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 -
  6. - 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
  7. - 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 ( * ) …
  8. - 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 ( * ) …
  9. seq2seq²based - RAT(Relation«Aware Transformer) - encoder self²attention에서 token 간 특정

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

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

    관계를 encoding해서 수식에 추가 - Constrained Decoding - decoder beam search에서 schema에 맞지 않는 후보를 제거(예, T1.maker) [8] [8]
  12. 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
  13. 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
  14. 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) …
  15. 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) …
  16. 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) …
  17. 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) …
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 한국어 모델 개발 - 데이터 구축 - 한국어 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”: “ܽ׮ झ޷झ੄ ૑بҮࣻח ־ҳੋо? ੉ܴҗ ࢿਸ ঌ۰઻.” },
  28. 한국어 모델 개발 - 데이터 구축 - 한국어 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”: “ܽ׮ झ޷झ੄ ૑بҮࣻח ־ҳੋо? ੉ܴҗ ࢿਸ ঌ۰઻.” },
  29. 한국어 모델 개발 - 데이터 구축 - 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 = ‘झ޷झ’
  30. 한국어 모델 개발 - 데이터 구축 - 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 = ‘झ޷झ’
  31. 한국어 모델 개발 - 데이터 구축 - 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%) -
  32. 한국어 모델 개발 - 데이터 구축 - 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%) -
  33. 한국어 모델 개발 - 평가 - 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
  34. 요소 ؘ੉ఠ߬੉झ ࠙ܨӝ ૑դ೧ী ݽݽېࡁਸ о੢ ݆੉ ҳ ݒೠ ૑৉਷?

    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로 추가 - 대표어 복원에도 활용
  35. 요소 ؘ੉ఠ߬੉झ ࠙ܨӝ ૑դ೧ী ݽݽېࡁਸ о੢ ݆੉ ҳ ݒೠ ૑৉਷?

    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로 추가 - 대표어 복원에도 활용
  36. 요소 - 정규화 - 엔티티 정규화 - 날짜 / 시간

    / 숫자 정규화 - 규칙기반 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
  37. 요소 - 정규화 - 엔티티 정규화 - 날짜 / 시간

    / 숫자 정규화 - 규칙기반 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
  38. 요소 - 정규화 - 엔티티 정규화 - 날짜 / 시간

    / 숫자 정규화 - 규칙기반 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
  39. 향후 계획 - 플랫폼화 - 고객 DB 스키마, 학습 데이터,

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

    도메인 규칙 데이터 입력 - 학습 및 배포 자동화 - 구조 변경 - sketch → seq2seq, e.g., T5 - 시스템 구조를 단순화 - 한국어 데이터 보강 - Spider (en) 규모 달성 목표
  41. 참고 문헌 [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