library_name: transformers
base_model:
- lightonai/LightOnOCR-3-0.8B
- huihui-ai/Huihui-Qwen3.5-0.8B-abliterated
tags: - ocr
- image-text-to-text
- abliterated
- uncensored
- qwen3_5
- vision
license: apache-2.0
language: - en
- id
Irwan-LightOnOCR-3-0.8B-abliterated
OCR vision-language model dengan kecenderungan menolak yang dihapus, dibuat lewat
abliteration transfer dari base Qwen3.5 yang sudah di-abliterasi.
Kenapa
lightonai/LightOnOCR-3-0.8B adalah fine-tune OCR di atas arsitekturQwen3_5ForConditionalGeneration (Qwen3.5-VL 0.8B). Model OCR semacam ini tetap
mewarisi kecenderungan menolak dari base-nya ketika dihadapkan pada konten
eksplisit, sehingga transkripsi bisa terpotong atau ditolak.
Karena huihui-ai/Huihui-Qwen3.5-0.8B-abliterated adalah abliterasi dari base
yang sama persis, selisih bobot keduanya berisi "arah penolakan" yang sudah
dihapus:
delta = W_abliterated - W_base
Delta itu dipindahkan ke fine-tune OCR:
W_uncensored = W_ocr + alpha * delta
Hasilnya: kemampuan OCR tetap, kecenderungan menolak hilang.
Detail
| Arsitektur | Qwen3_5ForConditionalGeneration |
| Base (untuk delta) | Qwen/Qwen3.5-0.8B |
| Sumber abliterasi | huihui-ai/Huihui-Qwen3.5-0.8B-abliterated |
| Fine-tune OCR | lightonai/LightOnOCR-3-0.8B |
| Metode | abliteration transfer (weight arithmetic) |
alpha |
1.0 |
| Presisi | bfloat16 |
Diterapkan tensor-per-tensor, hanya pada tensor yang dimensinya cocok di ketiga
model. Tensor yang hanya ada di LightOnOCR disalin apa adanya.
Cara pakai
Sama seperti LightOnOCR-3-0.8B — tidak ada perubahan API.
uv pip install "transformers>=5.5.4" pillow pypdfium2
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": "path/atau/url/gambar.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: {"type": "image", "url": ...} — jangan pakai placeholder {"type": "image"}
dengan kwarg images=[...], processor Qwen3.5-VL menolaknya.
Keterbatasan
- CPU lambat. Pada codespace 4 vCPU tanpa GPU, hanya ~0,3 token/detik karena
causal_conv1ddanchunk_gated_delta_rulejatuh ke implementasi referensi
PyTorch (kernel optimalnya butuh CUDA/Triton). Untuk produksi pakai GPU. - Belum dievaluasi formal. Metode ini adalah weight arithmetic eksperimental.
Kualitas OCR diasumsikan mendekati model asli, tapi tidak dijamin identik —
verifikasi pada data kamu sendiri sebelum dipakai serius. alpha = 1.0menerapkan delta penuh. Kalau output jadi terlalu liar,
coba turunkan (--alpha 0.5).
Sitasi
@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}}
}