Views
No views yet
💡 실행 정확도가 정확 일치율보다 높은 이유는, SQL 문법이 다르더라도 동일한 결과를 반환하는 경우가 많기 때문입니다.
1from unsloth import FastLanguageModel
2
3# 모델 불러오기
4model, tokenizer = FastLanguageModel.from_pretrained(
5 model_name="huggingface-KREW/Llama-3.1-8B-Spider-SQL-Ko",
6 max_seq_length=2048,
7 dtype=None,
8 load_in_4bit=True,
9)
10
11# 한국어 질문 → SQL 변환
12question = "가수는 몇 명이 있나요?"
13schema = """테이블: singer
14컬럼: singer_id, name, country, age"""
15
16prompt = f"""데이터베이스 스키마:
17{schema}
18
19질문: {question}
20SQL:"""
21
22# 결과: SELECT count(*) FROM singer1def generate_sql(question, schema_info):
2 """한국어 질문을 SQL로 변환"""
3 prompt = f"""다음 데이터베이스 스키마를 참고하여 질문에 대한 SQL 쿼리를 생성하세요.
4
5### 데이터베이스 스키마:
6{schema_info}
7
8### 질문: {question}
9
10### SQL 쿼리:"""
11
12 messages = [{"role": "user", "content": prompt}]
13 inputs = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt")
14
15 outputs = model.generate(inputs, max_new_tokens=150, temperature=0.1)
16 response = tokenizer.decode(outputs[0], skip_special_tokens=True)
17
18 return response.split("### SQL 쿼리:")[-1].strip()1# 예시 1: 집계 함수
2question = "부서장들 중 56세보다 나이가 많은 사람이 몇 명입니까?"
3# 결과: SELECT count(*) FROM head WHERE age > 56
4
5# 예시 2: 조인
6question = "가장 많은 대회를 개최한 도시의 상태는 무엇인가요?"
7# 결과: SELECT T1.Status FROM city AS T1 JOIN farm_competition AS T2 ON T1.City_ID = T2.Host_city_ID GROUP BY T2.Host_city_ID ORDER BY COUNT(*) DESC LIMIT 1
8
9# 예시 3: 서브쿼리
10question = "기업가가 아닌 사람들의 이름은 무엇입니까?"
11# 결과: SELECT Name FROM people WHERE People_ID NOT IN (SELECT People_ID FROM entrepreneur)1training_args = {
2 "per_device_train_batch_size": 2,
3 "gradient_accumulation_steps": 4,
4 "learning_rate": 5e-4,
5 "num_train_epochs": 1,
6 "optimizer": "adamw_8bit",
7 "lr_scheduler_type": "cosine",
8 "warmup_ratio": 0.05
9}
10
11lora_config = {
12 "r": 16,
13 "lora_alpha": 32,
14 "lora_dropout": 0,
15 "target_modules": ["q_proj", "k_proj", "v_proj", "o_proj",
16 "gate_proj", "up_proj", "down_proj"]
17}1@misc{llama31_spider_sql_ko_2025,
2 title={Llama-3.1-8B-Spider-SQL-Ko: Korean Text-to-SQL Model},
3 author={[Sohyun Sim, Youngjun Cho, Seongwoo Choi]},
4 year={2025},
5 publisher={Hugging Face KREW},
6 url={https://huggingface.co/huggingface-KREW/Llama-3.1-8B-Spider-SQL-Ko}
7}