File size: 3,136 Bytes
1a0e33b
d0951d2
 
 
 
4afb60d
d0951d2
 
 
 
 
4afb60d
d0951d2
 
 
50505f3
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
 
 
 
 
 
 
 
 
7af9f03
d0951d2
7af9f03
d0951d2
 
 
 
 
 
 
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
 
 
1a0e33b
d0951d2
 
1a0e33b
d0951d2
 
 
 
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
 
 
 
 
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
 
 
 
 
 
 
 
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
 
 
 
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
d0951d2
1a0e33b
7af9f03
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
---
language:
- es
license: apache-2.0
base_model: unsloth/DeepSeek-OCR-2
tags:
- ocr
- receipt
- invoice
- vision
- fine-tuned
- unsloth
- lora
- json-extraction
pipeline_tag: image-text-to-text
---

# DeepSeek OCR LoRA — Extracción estructurada de tickets y facturas

## Descripción

Este modelo es un **LoRA fine-tuning** sobre [`unsloth/DeepSeek-OCR-2`](https://huggingface.co/unsloth/DeepSeek-OCR-2), entrenado para analizar imágenes de **tickets de compra, recibos y facturas** y devolver su contenido en formato **JSON estructurado**.

El objetivo principal del proyecto fue académico: estudiar el comportamiento de un modelo de visión multimodal al ser adaptado para extraer información con una estructura de salida fija.

El modelo está diseñado principalmente para documentos en **español**.

---

## Salida esperada

Dado una imagen de ticket o factura, el modelo devuelve un JSON con la siguiente estructura:

```json
{
  "comercio": "Nombre del establecimiento",
  "fecha": "DD/MM/AAAA",
  "cif": "B12345678",
  "items": [
    {
      "descripcion": "Nombre del producto",
      "cantidad": 2,
      "precio": 3.50
    }
  ],
  "precio_total": 7.00
}
```

---

## Uso

Este modelo requiere cargar el modelo base por separado y aplicar el LoRA encima:

```python
from transformers import AutoModelForCausalLM, AutoProcessor
from peft import PeftModel

BASE_MODEL_ID = "unsloth/DeepSeek-OCR-2"
LORA_ID       = "Lacax/deepseek_ocr_lora"

processor = AutoProcessor.from_pretrained(BASE_MODEL_ID)
model = AutoModelForCausalLM.from_pretrained(BASE_MODEL_ID)
model = PeftModel.from_pretrained(model, LORA_ID)
```

> **Nota:** El repo del LoRA es privado. Se requiere un `HF_TOKEN` con acceso al repo `Lacax/deepseek_ocr_lora`. El modelo base `unsloth/DeepSeek-OCR-2` es público.

---

## Datos de entrenamiento

- **Tipo:** Imágenes de tickets y facturas reales (fotografías propias)
- **Tamaño:** ~100 imágenes
- **Formato:** Cada imagen asociada a su JSON ground truth con la estructura descrita arriba
- **Idioma:** Español
- **Origen:** Dataset propio, no publicado

---

## Estadísticas de entrenamiento

| Parámetro              | Valor       |
|------------------------|-------------|
| Épocas completadas     | 3           |
| Duración total         | ~4607 s (~77 min) |
| Muestras / segundo     | 0.40        |
| Pérdida final (train)  | 0.0399      |
| Framework              | Unsloth + PEFT |
| Plataforma             | RunPod (GPU cloud) |

---

## Limitaciones

- Dataset pequeño (~100 imágenes): el modelo puede no generalizar bien a formatos de ticket muy distintos a los usados en entrenamiento.
- Entrenado únicamente con documentos en español; rendimiento no garantizado en otros idiomas.
- Proyecto de carácter académico/experimental, no validado en producción.
- La pérdida baja de entrenamiento (0.04) puede indicar cierto sobreajuste al dataset propio.

---

## Modelo base

- [`unsloth/DeepSeek-OCR-2`](https://huggingface.co/unsloth/DeepSeek-OCR-2)

---

## Autor

**Jonatan Thorpe Plaza** — Proyecto de estudio personal sobre fine-tuning de modelos de visión multimodal.