Views
No views yet
google/gemma-4-E4B-it → QLoRA SFT → DPO(선호 정렬) 한 뒤 LoRA를 병합한 16bit 전체 모델(merged full model) 입니다. 베이스 모델 없이 단독 로딩됩니다.
SFT 버전 위에 추가로 선호 학습을 적용했습니다.| 항목 | 내용 |
|---|---|
| 베이스 | google/gemma-4-E4B-it (멀티모달, 8.08B) |
| 태스크 | 차트 이미지 → 한국어 설명 (image-text-to-text) |
| 학습 데이터 | jp1924/ChartImageTextpairData |
| 1단계 SFT | Unsloth 4bit QLoRA, LoRA r=32, 1 epoch |
| 2단계 DPO | 실패 케이스 타깃 선호쌍 870개로 정렬 (2 epoch) |
google/gemma-4-31B-it, 이미지 기반 채점) + metadata 기반 객관 지표.| 모델 | judge (1-10) | 수치 재현율 | 수치 정밀도 | title | legend |
|---|---|---|---|---|---|
| base (gemma-4-E4B-it) | 6.71 | 76.1% | 75.6% | 58.2% | 90.4% |
| SFT | 9.67 | 98.8% | 88.9% | 67.4% | 96.9% |
| 이 모델 (SFT+DPO) ⭐ | 9.67* | 98.7% | 88.6% | 68.3% | 97.0% |
1from vllm import LLM, SamplingParams
2import base64, io
3from PIL import Image
4
5llm = LLM(model="ProtenLabs/gemma-4-E4B-it-image2text-ko-dpo",
6 limit_mm_per_prompt={"image": 1}, dtype="bfloat16", max_model_len=4096)
7
8img = Image.open("chart.png").convert("RGB")
9buf = io.BytesIO(); img.save(buf, format="PNG")
10b64 = base64.b64encode(buf.getvalue()).decode()
11
12messages = [[{"role": "user", "content": [
13 {"type": "text", "text": "이 차트 이미지를 보고 내용을 한국어로 자세히 설명해 주세요."},
14 {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}}]}]]
15out = llm.chat(messages, SamplingParams(temperature=0, max_tokens=512))
16print(out[0].outputs[0].text)