Views
No views yet
| 지표 | 수치 | 비고 |
|---|---|---|
| 인접 정확도 (±1점) | 87.5% | 인간 채점관 수준의 실무 합격선 |
| 1점 적중률 | 86.0% | |
| Macro F1-Score | 0.5348 |
| 항목 | 값 |
|---|---|
| 방식 | QLoRA (4-bit NF4) |
| LoRA rank | 32 |
| LoRA alpha | 32 |
| Epochs | 3 |
| Learning rate | 3e-5 |
| Optimizer | adamw_8bit |
| Max length | 1536 |
| Framework | unsloth / trl SFTTrainer |
1 import torch
2 import re
3 from unsloth import FastLanguageModel
4
5 ADAPTER_PATH = "Onjeom/essay_scoring"
6
7 tokenizer = FastLanguageModel.from_pretrained(ADAPTER_PATH)[1]
8 model, _ = FastLanguageModel.from_pretrained(
9 model_name=ADAPTER_PATH,
10 max_seq_length=1536,
11 load_in_4bit=True,
12 device_map="cuda"
13 )
14 FastLanguageModel.for_inference(model)
15
16 RELAXED_INSTRUCTION = """주어진 지시문과 학생의 답안을 분석하여, 부족한 점과 개선 방향을 포함한 피드백을 작성하고 맨 마지막에 1점부터 4점 사이의 최종 점수를 부여하시오.
17
18 [유연하고 관대한 채점 기준]
19 - 4점: 지시문의 핵심 요구사항을 잘 파악하였고 전반적인 흐름이 우수한 답안 (사소한 결함은 너그럽게 만점 처리)
20 - 3점: 지시문은 이해했으나 근거가 다소 평이하거나 논리의 깊이가 아쉬운 일반적인 답안
21 - 2점: 지시문의 키워드만 겨우 나열했거나 주장의 근거가 심각하게 부족한 답안
22 - 1점 (최하점): 같은 말을 무의미하게 반복하거나 꼼수가 명백한 답안"""
23
24 ALPACA_PROMPT = "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{}\n\n### Input:\n{}\n\n### Response:\n{}"
25
26 student_answer = "선인장은 줄기에 물을 저장해서 사막에서 살 수 있다."
27 safe_input = student_answer[:700] # OOM 방지용 700자 제한
28
29 prompt = ALPACA_PROMPT.format(RELAXED_INSTRUCTION, safe_input, "")
30 inputs = tokenizer([prompt], return_tensors="pt").to("cuda")
31
32 with torch.no_grad():
33 outputs = model.generate(
34 **inputs,
35 max_new_tokens=512,
36 temperature=0.1,
37 top_p=0.9,
38 pad_token_id=tokenizer.eos_token_id
39 )
40
41 response = tokenizer.decode(outputs[0], skip_special_tokens=True).split("### Response:\n")[-1].strip()
42 print(response)1cd onjeom/api
2pip install -r requirements.txt
3cp .env.example .env
4
5# HuggingFace 로그인 (최초 1회)
6huggingface-cli login
7
8# 모델 포함 정상 실행
9uvicorn app.main:app --reload
10
11# 빠른 재시작 (라우터/스키마 수정 시, 모델 로딩 생략)
12SKIP_MODEL_LOAD=1 uvicorn app.main:app --reload✅ 채점 엔진 준비 완료! 메시지가 뜨면 준비된 거예요.브라우저에서 http://localhost:8000/docs 접속
테스트할 엔드포인트 클릭
Try it out 버튼 클릭
예시 데이터 붙여넣고 Execute 클릭 "content": "선인장은 줄기에 물을 저장해서 사막에서 살 수 있다."1 "question": "추론적 독해란 무엇인가요?",
2 "context": null1 "term": "역설법",
2 "context": "글쓴이는 역설법을 사용하여 주제를 강조했다."1 "theta": -0.5,
2 "daily_goal": 10,
3 "weak_areas": ["추론적 이해", "비판적 독해"]huggingface-cli download Onjeom/essay_scoring --local-dir ./models/essay_scoring