EXAONE-3.5-2.4B-ERP-SQL π
μ΄ λͺ¨λΈμ LGAI-EXAONE/EXAONE-3.5-2.4B-Instructλ₯Ό κΈ°λ°μΌλ‘ νκ΅μ΄ ERP λλ©μΈμ Text-to-SQL μμ μ μννκΈ° μν΄ νμΈνλ(Fine-tuning)λ λͺ¨λΈμ λλ€.
μ체 ꡬμΆν ERP λ°μ΄ν°μ μ νμ©νμ¬ νμ΅νμμΌλ©°, λ² μ΄μ€ λͺ¨λΈ λλΉ μ½ 2λ°° κ°κΉμ΄ μ±λ₯ ν₯μμ λ¬μ±νμ΅λλ€. νΉν 볡μ‘ν λΉμ¦λμ€ λ‘μ§(μ‘°μΈ, μλΈμΏΌλ¦¬ λ±)μ μ²λ¦¬νλ λ₯λ ₯μ΄ ν¬κ² κ°νλμμ΅λλ€.
π λͺ¨λΈ μ±λ₯ (Performance Improvement)
μ체 νκ° λ°μ΄ν°μ (Custom Evaluation Set)μ κΈ°μ€μΌλ‘ μΈ‘μ ν κ²°κ³Όμ λλ€. λ² μ΄μ€ λͺ¨λΈμ΄ μ΄λ €μνλ κ³ λμ΄λ(Lv 5) 쿼리μμ 3λ°° μ΄μμ μ±λ₯ ν₯μμ 보μμ΅λλ€.
| λͺ¨λΈ (Model) | νμ΅ μν | μ 체 μ νλ | Lv 1 (μ¬μ) | Lv 5 (λ§€μ° μ΄λ €μ) |
|---|---|---|---|---|
| EXAONE 2.4B | Baseline (μμ ) | 37.5% | 72.5% | 20.0% |
| EXAONE 2.4B | Fine-tuned (Ours) | 68.5% | 92.5% | 60.0% |
ν΅μ¬ μμ½: LoRA νμΈνλμ ν΅ν΄ νκ΅μ΄ μ§μμ λν SQL λ³ν μ νλλ₯Ό 37.5%μμ 68.5%λ‘ λν λμ΄μ¬λ ΈμΌλ©°, 2.4Bμ μμ νλΌλ―Έν° ν¬κΈ°μλ λΆκ΅¬νκ³ λ³΅μ‘ν μΆλ‘ μ΄ κ°λ₯ν¨μ μ μ¦νμ΅λλ€.
π§ νμ΅ μ 보 (Training Details)
- λ² μ΄μ€ λͺ¨λΈ: LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct
- νμ΅ λ°©λ²: LoRA (Low-Rank Adaptation)
- μ΅μ μν(Epoch): 4 (μΌλ°ν μ±λ₯μ΄ κ°μ₯ λ°μ΄λ 체ν¬ν¬μΈνΈ μ μ )
- λ°μ΄ν°μ : μ€ν€λ§κ° λ°μλ ν©μ±(Synthetic) νκ΅μ΄ ERP μ§λ¬Έ-쿼리 μ
- νλμ¨μ΄: NVIDIA RTX 4060 Ti (16GB) x 2ea (μμ© GPU νκ²½μμμ ν¨μ¨μ± μ μ¦)
π» μ¬μ© κ°μ΄λ (How to Use)
1. λΌμ΄λΈλ¬λ¦¬ μ€μΉ
pip install torch transformers peft accelerate
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
# 1. λ² μ΄μ€ λͺ¨λΈ λ° ν ν¬λμ΄μ λ‘λ
base_model_id = "LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct"
adapter_id = "yeongseok11/exaone-2.4b-erp-nl2sql" # λ³Έ λͺ¨λΈ ID
tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True)
base_model = AutoModelForCausalLM.from_pretrained(
base_model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True
)
# 2. νμΈνλλ LoRA μ΄λν° λ³ν©
model = PeftModel.from_pretrained(base_model, adapter_id)
model.eval()
# 3. ν둬ννΈ μ μ (Alpaca ν¬λ§· κΆμ₯)
schema_context = """
[Tables]
employees(emp_id, name, dept_id, hire_date, salary)
departments(dept_id, dept_name, location)
"""
question = "IT λΆμ μ§μλ€μ νκ· μ°λ΄μ ꡬν΄μ€."
prompt = f"""Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
### Instruction:
μλ μ€ν€λ§λ₯Ό μ°Έκ³ νμ¬ μ§λ¬Έμ SQLλ‘ λ³ννμΈμ.
### Input:
### μ§λ¬Έ:
{question}
### μ€ν€λ§:
{schema_context}
### Response:
"""
# 4. SQL μμ±
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=256,
do_sample=False,
eos_token_id=tokenizer.eos_token_id
)
generated_sql = tokenizer.decode(outputs[0], skip_special_tokens=True).split("### Response:")[-1].strip()
print(f"πΉ μμ±λ SQL:\n{generated_sql}")
- Downloads last month
- 28
Model tree for yeongseok11/exaone-2.4b-erp-nl2sql
Base model
LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct