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

Check out the documentation for more information.

Korean Reading Comprehension QA (온점)

κ΅­μ–΄ ꡐ과 μ§€λ¬Έν˜• 주관식 문제λ₯Ό μ±„μ ν•˜κ³  해섀을 μƒμ„±ν•˜λŠ” LoRA μ–΄λŒ‘ν„°μž…λ‹ˆλ‹€.
Qwen2.5-3B-Instructλ₯Ό QLoRA둜 νŒŒμΈνŠœλ‹ν–ˆμŠ΅λ‹ˆλ‹€.

ν•™μŠ΅ 데이터

  • AI Hub κ΅­μ–΄ ꡐ과 μ§€λ¬Έν˜• 문제 데이터 (쀑1 ~ κ³ 3)
  • μ§€λ¬Έ + 주관식 문제 + 선택지 + λͺ¨λ²”λ‹΅μ•ˆ + ν•΄μ„€ ν˜•μ‹μœΌλ‘œ 가곡
  • v1 λŒ€λΉ„ 선택지 포함 μž¬κ°€κ³΅ (v2)

μ„±λŠ₯

버전 μ •λ‹΅λ₯  λΉ„κ³ 
랜덀 κΈ°μ€€μ„  20% 5μ§€μ„ λ‹€
v1 41% 선택지 없이 ν•™μŠ΅
v2 (ν˜„μž¬) 95% 선택지 포함 μž¬ν•™μŠ΅

ν•™μŠ΅ μ„€μ •

ν•­λͺ© κ°’
방식 QLoRA (4-bit NF4)
LoRA rank 16
LoRA alpha 32
Epochs 2
Learning rate 1e-4
Optimizer paged_adamw_8bit
Max length 1024
Framework trl SFTTrainer / peft 0.17.1

μ‚¬μš© 방법

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel

BASE_MODEL = "Qwen/Qwen2.5-3B-Instruct"
ADAPTER_PATH = "Onjeom/korean_qa"

tokenizer = AutoTokenizer.from_pretrained(ADAPTER_PATH, trust_remote_code=True)
base_model = AutoModelForCausalLM.from_pretrained(
    BASE_MODEL,
    torch_dtype=torch.float16,
    device_map="auto",
    trust_remote_code=True,
)
model = PeftModel.from_pretrained(base_model, ADAPTER_PATH)
model.eval()

messages = [
    {"role": "system", "content": "λ‹€μŒ 지문을 읽고 문항에 λ‹΅ν•˜μ‹œμ˜€."},
    {"role": "user", "content": "[μ§€λ¬Έ]\n...\n\n[λ¬Έν•­]\n...\nβ‘  ...\nβ‘‘ ...\nβ‘’ ...\nβ‘£ ...\nβ‘€ ..."},
]

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)

with torch.no_grad():
    output_ids = model.generate(
        **inputs,
        max_new_tokens=256,
        do_sample=False,
        repetition_penalty=1.1,
        eos_token_id=tokenizer.eos_token_id,
        pad_token_id=tokenizer.eos_token_id,
    )

new_ids = output_ids[0][inputs["input_ids"].shape[1]:]
print(tokenizer.decode(new_ids, skip_special_tokens=True))

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

μ‹œμŠ€ν…œ: λ‹€μŒ 지문을 읽고 문항에 λ‹΅ν•˜μ‹œμ˜€.

μž…λ ₯:

[μ§€λ¬Έ]
{μ§€λ¬Έ ν…μŠ€νŠΈ}

[λ¬Έν•­]
{문제}
β‘  ...
β‘‘ ...
β‘’ ...
β‘£ ...
β‘€ ...

좜λ ₯:

μ •λ‹΅: β‘£ ...
ν•΄μ„€: ...

API ν…ŒμŠ€νŠΈ 방법

1. μ„œλ²„ μ‹€ν–‰

cd onjeom/api
pip install -r requirements.txt
cp .env.example .env

# HuggingFace 둜그인 (졜초 1회)
huggingface-cli login

# λͺ¨λΈ 포함 정상 μ‹€ν–‰
uvicorn app.main:app --reload

# λΉ λ₯Έ μž¬μ‹œμž‘ (λΌμš°ν„°/μŠ€ν‚€λ§ˆ μˆ˜μ • μ‹œ, λͺ¨λΈ λ‘œλ”© μƒλž΅)
SKIP_MODEL_LOAD=1 uvicorn app.main:app --reload

처음 μ‹€ν–‰ μ‹œ λͺ¨λΈ μžλ™ λ‹€μš΄λ‘œλ“œ (μ•½ 5~10λΆ„ μ†Œμš”).
λͺ¨λΈ λ‘œλ”© μ™„λ£Œ! λ©”μ‹œμ§€κ°€ 뜨면 μ€€λΉ„λœ κ±°μ˜ˆμš”.

2. Swagger UI ν…ŒμŠ€νŠΈ

  1. λΈŒλΌμš°μ €μ—μ„œ http://localhost:8000/docs 접속
  2. ν…ŒμŠ€νŠΈν•  μ—”λ“œν¬μΈνŠΈ 클릭
  3. Try it out λ²„νŠΌ 클릭
  4. μ˜ˆμ‹œ 데이터 λΆ™μ—¬λ„£κ³  Execute 클릭

3. μ£Όμš” μ—”λ“œν¬μΈνŠΈ μ˜ˆμ‹œ

주관식 μžλ™ 채점 POST /api/grading/grade

{
  "passage": "사막은 κ°•μˆ˜λŸ‰μ΄ 맀우 적은 μ§€μ—­μœΌλ‘œ, 일ꡐ차가 크고 식물이 거의 μžλΌμ§€ μ•ŠλŠ”λ‹€. 선인μž₯은 λ‘κΊΌμš΄ 쀄기에 μˆ˜λΆ„μ„ μ €μž₯ν•˜μ—¬ 이런 ν™˜κ²½μ— μ μ‘ν–ˆλ‹€.",
  "question": "선인μž₯이 사막 ν™˜κ²½μ—μ„œ 살아남을 수 μžˆλŠ” 이유λ₯Ό μ„œμˆ ν•˜μ‹œμ˜€.",
  "model_answer": "선인μž₯은 λ‘κΊΌμš΄ 쀄기에 μˆ˜λΆ„μ„ μ €μž₯ν•˜λŠ” ꡬ쑰λ₯Ό κ°€μ§€κ³  μžˆμ–΄ κ°•μˆ˜λŸ‰μ΄ 적은 μ‚¬λ§‰μ—μ„œλ„ 생쑴할 수 μžˆλ‹€.",
  "keywords": [
    {"keyword": "μˆ˜λΆ„ μ €μž₯", "weight": 50},
    {"keyword": "λ‘κΊΌμš΄ 쀄기", "weight": 30},
    {"keyword": "사막", "weight": 20}
  ],
  "student_answer": "선인μž₯은 쀄기에 물을 μ €μž₯ν•΄μ„œ μ‚¬λ§‰μ—μ„œ μ‚΄ 수 μžˆλ‹€."
}

AI νŠœν„° 질문 POST /api/tutor/ask

{
  "question": "좔둠적 λ…ν•΄λž€ λ¬΄μ—‡μΈκ°€μš”?",
  "context": null
}

μš©μ–΄ μ„€λͺ… POST /api/tutor/explain

{
  "term": "역섀법",
  "context": "κΈ€μ“΄μ΄λŠ” 역섀법을 μ‚¬μš©ν•˜μ—¬ 주제λ₯Ό κ°•μ‘°ν–ˆλ‹€."
}

컀리큘럼 생성 POST /api/curriculum/generate

{
  "theta": -0.5,
  "daily_goal": 10,
  "weak_areas": ["좔둠적 이해", "λΉ„νŒμ  독해"]
}

ν—¬μŠ€ 체크 GET /health β†’ {"status": "ok"}

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

huggingface-cli download Onjeom/korean_qa --local-dir ./models/korean_qa
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support