Loading…
Loading…
OCR vision-language model 0.8B dengan kecenderungan menolak yang dihapus, dibuat lewat abliteration transfer — memindahkan "arah penolakan" dari Qwen3.5 yang sudah di-abliterasi ke fine-tune OCR, tanpa melatih ulang apa pun.
English summary: an 0.8B OCR vision-language model derived from LightOnOCR-3-0.8B by
adding the abliteration delta of huihui-ai/Huihui-Qwen3.5-0.8B-abliterated. No fine-tuning
or retraining — pure weight arithmetic. GGUF (Q8_0) and mmproj included.
lightonai/LightOnOCR-3-0.8B adalah fine-tune OCR di atas arsitektur
Qwen3_5ForConditionalGeneration (Qwen3.5-VL 0.8B). Model OCR semacam ini tetap
mewarisi kecenderungan menolak dari base-nya: ketika dihadapkan pada dokumen berisi
konten eksplisit, transkripsi bisa terpotong, diringkas, atau ditolak sama sekali —
padahal tugasnya hanya membaca teks yang ada di gambar.
Karena huihui-ai/Huihui-Qwen3.5-0.8B-abliterated adalah abliterasi dari base yang
sama persis (Qwen/Qwen3.5-0.8B), selisih bobot keduanya berisi arah penolakan
yang sudah dihapus. Selisih itulah yang dipindahkan ke fine-tune OCR.
Hasilnya: kemampuan membaca dokumen tetap, kecenderungan menolak hilang.
graph TD
Q["Qwen/Qwen3.5-0.8B<br/>base model asli"]
Q -->|"fine-tune OCR"| L["lightonai/LightOnOCR-3-0.8B<br/>bobot fondasi"]
Q -->|"abliterasi"| H["huihui-ai/Huihui-Qwen3.5-0.8B-abliterated<br/>sumber delta"]
L --> R["Irwan-LightOnOCR-3-0.8B-abliterated<br/>hasil gabungan"]
H --> R
Yang penting dipahami: arsitekturnya Qwen, fondasi bobotnya LightOnOCR. LightOnOCR sendiri adalah Qwen3.5-0.8B yang di-fine-tune untuk OCR, jadi keduanya berbagi ruang parameter yang sama — itulah sebabnya delta bisa dijumlahkan langsung.
delta = W_abliterated - W_base
W_uncensored = W_ocr + alpha * delta
alpha = 1.0 (delta penuh).float32, hasil dikembalikan ke dtype asli (bfloat16).Tidak ada training, tidak ada data baru, tidak ada perubahan arsitektur.
Metadatanya dicatat di config.json pada key _uncensored_graft.
| Arsitektur | Qwen3_5ForConditionalGeneration (model_type: qwen3_5) |
| Parameter | 0,8B |
| Hidden size | 1024 |
| Layer | 24 (hybrid: 3 linear_attention + 1 full_attention, diulang 6x) |
| Attention heads | 8 query / 2 KV |
| Intermediate size | 3584 |
| Vocab | 248.320 |
| Context maksimum | 262.144 token |
| Tied embeddings | ya |
| Vision encoder | depth 12, hidden 768, 12 head, patch 16, spatial merge 2 |
| Presisi | bfloat16 (safetensors) |
| Ukuran safetensors | 1,7 GB |
| Ukuran GGUF Q8_0 | 811 MB |
| Ukuran mmproj f16 | 207 MB |
| File | Ukuran | Keterangan |
|---|---|---|
model.safetensors |
1,7 GB | format transformers asli (bf16) |
Irwan-LightOnOCR-3-0.8B-abliterated-Q8_0.gguf |
811 MB | LLM dalam GGUF, untuk llama.cpp / AnythingLLM |
Irwan-LightOnOCR-3-0.8B-abliterated-mmproj-f16.gguf |
207 MB | encoder vision (mmproj), dipakai bareng GGUF di atas |
config.json |
kecil | berisi metadata _uncensored_graft |
tokenizer*, vocab.json, merges.txt |
— | tokenizer Qwen |
preprocessor_config.json, processor_config.json |
kecil | konfigurasi image processor |
chat_template.jinja |
kecil | chat template |
Kalau hanya butuh OCR lewat llama.cpp, cukup ambil dua file GGUF.
Ini jalur tercepat di CPU. Perlu llama.cpp yang sudah mendukung qwen3_5
(cukup build dari master terkini).
# 1. ambil dua file GGUF
huggingface-cli download irwanworld/Irwan-LightOnOCR-3-0.8B-abliterated \
Irwan-LightOnOCR-3-0.8B-abliterated-Q8_0.gguf \
Irwan-LightOnOCR-3-0.8B-abliterated-mmproj-f16.gguf --local-dir ./irwan-ocr
# 2. jalankan OCR
./llama-cli \
-m ./irwan-ocr/Irwan-LightOnOCR-3-0.8B-abliterated-Q8_0.gguf \
--mmproj ./irwan-ocr/Irwan-LightOnOCR-3-0.8B-abliterated-mmproj-f16.gguf \
--image dokumen.png \
-p "OCR" -n 1024 -c 4096 --no-warmup
Contoh keluaran nyata pada struk uji:
Document No : TD0116/104
Date : 25/12/2018 8:13:39 PM
Cashier : MANIS
Member :
# CASH BILL
Untuk mode server (OpenAI-compatible), pakai llama-server dengan flag yang sama
(-m ... --mmproj ...), lalu kirim gambar sebagai image_url di messages.
AnythingLLM Desktop memakai engine built-in (Lemonade + llama.cpp) yang bisa
meng-import file .gguf.
Irwan-LightOnOCR-3-0.8B-abliterated-Q8_0.gguf..gguf, tunggu 2–3 menit, lalu Save.irwanworld/Irwan-LightOnOCR-3-0.8B-abliterated:Q8_0.Penting: AnythingLLM tidak menerima upload gambar di chat, dan dokumentasi import custom model-nya memang menyarankan "only use text based LLMs". Jadi encoder vision (mmproj) tidak akan terpakai di sana. Model akan berjalan sebagai LLM teks dengan kecenderungan output berupa transkripsi dokumen, bukan jawaban chat. Untuk chat/RP, pakai model chat biasa, bukan model OCR ini.
Sama seperti LightOnOCR-3-0.8B, tidak ada perubahan API.
uv pip install "transformers>=5.5.4" pillow
import torch
from transformers import AutoProcessor, Qwen3_5ForConditionalGeneration
model_id = "irwanworld/Irwan-LightOnOCR-3-0.8B-abliterated"
model = Qwen3_5ForConditionalGeneration.from_pretrained(model_id, dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained(model_id)
prompt = "" # "" = transkripsi penuh; "grounding" = plus bounding box
conversation = [{"role": "user", "content": [
{"type": "image", "url": "dokumen.png"},
*([{"type": "text", "text": prompt}] if prompt else []),
]}]
inputs = processor.apply_chat_template(
conversation, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt", enable_thinking=False,
)
output_ids = model.generate(**inputs, max_new_tokens=1024, do_sample=False)
print(processor.decode(output_ids[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Catatan: gunakan {"type": "image", "url": ...}. Jangan pakai placeholder
{"type": "image"} dengan kwarg images=[...] — processor Qwen3.5-VL menolaknya
(TypeError).
Diukur di GitHub Codespace, 4 vCPU, 16 GB RAM, tanpa GPU, -t 4:
| Backend | Prompt | Generation | Catatan |
|---|---|---|---|
| llama.cpp (Q8_0 + mmproj) | 58,3 t/s | 33,2 t/s | direkomendasikan |
| transformers (bf16, PyTorch) | — | ~0,3 t/s | praktis tidak terpakai |
Selisihnya sekitar 110x. Penyebabnya: kernel causal_conv1d dan
chunk_gated_delta_rule untuk layer linear_attention sudah dioptimasi di ggml,
sementara di PyTorch jalur CPU jatuh ke implementasi referensi yang sangat lambat.
Karena 18 dari 24 layer memakai linear_attention, dampaknya besar sekali.
Dengan GPU, jalur transformers akan jauh lebih cepat karena kernel CUDA/Triton aktif.
"") → transkripsi penuh dokumen."grounding" → transkripsi plus bounding box.do_sample=False (greedy) untuk hasil paling deterministik.alpha = 1.0 menerapkan delta penuh. Kalau output jadi terlalu liar atau rusak,
turunkan (mis. --alpha 0.5) lalu graft ulang.Lisensi mengikuti base model: Apache 2.0.
Model ini adalah karya turunan. Semua kredit untuk arsitektur, bobot dasar, dan metode abliterasi tetap milik penulis aslinya:
Qwen/Qwen3.5-0.8B — base modellightonai/LightOnOCR-3-0.8B — fine-tune OCRhuihui-ai/Huihui-Qwen3.5-0.8B-abliterated — sumber delta abliterasi@misc{lightonocr2_2026,
title = {LightOnOCR: A 1B End-to-End Multilingual Vision-Language Model for State-of-the-Art OCR},
author = {Said Taghadouini and Adrien Cavaillès and Baptiste Aubertin},
year = {2026},
howpublished = {\url{https://arxiv.org/abs/2601.14251}}
}