YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Math AI (i-Route)

μˆ˜ν•™ ꡐ과 λ¬Έμ œμ— λŒ€ν•œ μ •ν™•ν•œ 풀이와 해섀을 μƒμ„±ν•˜λŠ” LoRA μ–΄λŒ‘ν„°μž…λ‹ˆλ‹€.
Meta-Llama-3.1-8B-bnb-4bitλ₯Ό QLoRA둜 νŒŒμΈνŠœλ‹ν–ˆμŠ΅λ‹ˆλ‹€.


ν•™μŠ΅ 데이터

  • AI Hub μˆ˜ν•™κ΅κ³Όλ¬Έμ œν’€μ΄λ°μ΄ν„° (κ΅­κ°€ 곡인 ꡐ과 데이터셋)
  • TL_ 폴더 β†’ ν•™μŠ΅ 데이터 12,640개 / VL_ 폴더 β†’ 평가 데이터 1,755개
  • λ¬Έν•­(ν…μŠ€νŠΈ) β†’ user, μ •λ‹΅(ν…μŠ€νŠΈ) + ν•΄μ„€(ν…μŠ€νŠΈ) β†’ assistant ν˜•μ‹μœΌλ‘œ 가곡
  • μ„±μ·¨ κΈ°μ€€(2022/2015 κ΅μœ‘κ³Όμ •) 포함 μ‹œ [μ„±μ·¨ κΈ°μ€€: ...] νƒœκ·Έ μΆ”κ°€

μ„±λŠ₯

μ§€ν‘œ 수치 λΉ„κ³ 
Best Eval Loss 0.7531 step 1500 (epoch 2) κΈ°μ€€
ν•™μŠ΅ 손싀 λ³€ν™” 0.84 β†’ 0.58 epoch 1 초반 β†’ epoch 2 말미
평가 손싀 λ³€ν™” 0.9338 β†’ 0.7531 μ „ ꡬ간 지속 κ°μ†Œ (과적합 μ—†μŒ)

ν•™μŠ΅ μ„€μ •

ν•­λͺ© κ°’
방식 QLoRA (4-bit NF4)
LoRA rank 16
LoRA alpha 32
Epochs 2
Learning rate 2e-4
Optimizer AdamW
Max length 512
Framework transformers + PEFT (순수 PyTorch ν•™μŠ΅ 루프)

μ‚¬μš© 방법

이 μ–΄λŒ‘ν„°λŠ” i-Route AI μ„œλ²„μ—μ„œ unsloth/Meta-Llama-3.1-8B-bnb-4bit 베이슀 λͺ¨λΈ μœ„μ— PEFT μ–΄λŒ‘ν„°λ‘œ λ‘œλ“œλ©λ‹ˆλ‹€.
κΈ€μ“°κΈ°(writing), 일반(general) μ–΄λŒ‘ν„°μ™€ ν•¨κ»˜ 단일 GPUμ—μ„œ λ™μ‹œ μ„œλΉ„μŠ€λ©λ‹ˆλ‹€.

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig

BASE_MODEL_ID = "unsloth/Meta-Llama-3.1-8B-bnb-4bit"
MATH_ADAPTER  = "i-route-ai/iroute-math-ai"

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant=True,
)

tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL_ID)
tokenizer.pad_token = tokenizer.eos_token

model = AutoModelForCausalLM.from_pretrained(
    BASE_MODEL_ID,
    quantization_config=bnb_config,
    device_map="auto",
)
model.load_adapter(MATH_ADAPTER, adapter_name="math")
model.set_adapter("math")

SYSTEM_PROMPT = "당신은 μˆ˜ν•™ μ „λ¬Έ κ΅μ‚¬μž…λ‹ˆλ‹€. ν•™μƒμ˜ μˆ˜ν•™ λ¬Έμ œμ— λŒ€ν•΄ μ •ν™•ν•œ 풀이와 해섀을 μ œκ³΅ν•˜μ„Έμš”."

def build_prompt(question: str, achievement_standard: str = "") -> str:
    user_content = f"[μ„±μ·¨ κΈ°μ€€: {achievement_standard}]\n{question}" if achievement_standard else question
    return (
        f"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n"
        f"{SYSTEM_PROMPT}<|eot_id|>"
        f"<|start_header_id|>user<|end_header_id|>\n"
        f"{user_content}<|eot_id|>"
        f"<|start_header_id|>assistant<|end_header_id|>\n"
    )

question = "이차방정식 xΒ² - 5x + 6 = 0의 두 근을 κ΅¬ν•˜μ‹œμ˜€."
prompt = build_prompt(question)

inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=512).to("cuda")

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_new_tokens=300,
        temperature=0.3,
        do_sample=True,
        repetition_penalty=1.2,
        pad_token_id=tokenizer.eos_token_id,
    )

response = tokenizer.decode(outputs[0], skip_special_tokens=True)
answer = response.split("<|start_header_id|>assistant<|end_header_id|>")[-1].strip()
print(answer)

ν”„λ‘¬ν”„νŠΈ ν˜•μ‹

LLaMA 3.1 μ±„νŒ… ν…œν”Œλ¦Ώ(system / user / assistant)을 μ‚¬μš©ν•©λ‹ˆλ‹€.

μž…λ ₯

[μ„±μ·¨ κΈ°μ€€: {κ΅μœ‘κ³Όμ • μ„±μ·¨ κΈ°μ€€ - 선택}]
{μˆ˜ν•™ 문제 ν…μŠ€νŠΈ}

좜λ ₯

μ •λ‹΅: {μ΅œμ’… λ‹΅}
풀이: {단계별 풀이 및 ν•΄μ„€}

i-Route μ„œλ²„ 연동

i-Route AI μ„œλ²„(/api/ai/report/subject-recommend)μ—μ„œ RAG μ»¨ν…μŠ€νŠΈμ™€ κ²°ν•©ν•˜μ—¬
학생 λ§žμΆ€ν˜• μˆ˜ν•™ κ°œλ… μ„€λͺ… 및 풀이λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

POST /api/ai/report/subject-recommend?student_id=S001&subject=μˆ˜ν•™
{
  "studentId": "S001",
  "subject": "μˆ˜ν•™",
  "targetConcept": "이차방정식",
  "aiRecommendationReport": "이차방정식을 ν’€κΈ° μœ„ν•΄μ„œλŠ”..."
}

νŒ€μ› μ–΄λŒ‘ν„° λ‹€μš΄λ‘œλ“œ

huggingface-cli download i-route-ai/iroute-math-ai --local-dir ./models/iroute-math-ai
Downloads last month
404
Safetensors
Model size
8B params
Tensor type
BF16
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support