pauvanbr commited on
Commit
8e4d7b3
·
verified ·
1 Parent(s): 09051a9

Update README: add RAG-Grounded pipelines 07 & 08

Browse files
Files changed (1) hide show
  1. README.md +179 -31
README.md CHANGED
@@ -12,21 +12,25 @@ Cada pipeline implementa un paper del estado del arte adaptado al español. **To
12
  ## 📁 Estructura del Repo
13
 
14
  ```
15
- ├── pipelines/ # Pipelines de distilabel (lógica completa)
16
- │ ├── 01_magpie_sft.py # SFT zero-seed con Magpie
17
- │ ├── 02_embedding_triplets.py # Triplets de embedding E5-style
18
- │ ├── 03_personas_es.py # SFT con personas hispanas
19
- │ ├── 04_evol_instruct.py # Escalado de complejidad
20
- │ ├── 05_glan_es.py # Taxonomía educativa GLAN
21
- │ └── 06_quality_filter.py # Filtrado DEITA
22
- ├── jobs/ # Scripts listos para lanzar como HF Jobs
 
 
23
  │ ├── job_01_magpie.py
24
  │ ├── job_02_embedding.py
25
  │ ├── job_03_personas.py
26
  │ ├── job_04_evol.py
27
  │ ├── job_05_glan.py
28
- │ └── job_06_filter.py
29
- └── launcher.py # Launcher genérico
 
 
30
  ```
31
 
32
  | # | Pipeline | Paper | Objetivo | Output |
@@ -37,6 +41,91 @@ Cada pipeline implementa un paper del estado del arte adaptado al español. **To
37
  | 04 | [`04_evol_instruct.py`](pipelines/04_evol_instruct.py) | [WizardLM](https://arxiv.org/abs/2304.12244) | Escalado de complejidad | `evolved_instruction`, `answer` |
38
  | 05 | [`05_glan_es.py`](pipelines/05_glan_es.py) | [GLAN](https://arxiv.org/abs/2402.13064) | Cobertura temática completa | `instruction` por taxonomía |
39
  | 06 | [`06_quality_filter.py`](pipelines/06_quality_filter.py) | [DEITA](https://arxiv.org/abs/2312.15685) | Filtrado de calidad | `complexity_score`, `quality_score` |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
  ---
42
 
@@ -138,10 +227,34 @@ Output: → pauvanbr/magpie-es-sft-filtered
138
  ⚠️ Requiere que el dataset de input (ej: pauvanbr/magpie-es-sft) ya exista
139
  ```
140
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  ### Orden recomendado
142
 
143
  ```
144
  Fase 1 (en paralelo): Job 01 (Magpie) + Job 02 (Embeddings)
 
145
  Fase 2 (en paralelo): Job 03 (Personas) + Job 04 (Evol) + Job 05 (GLAN)
146
  Fase 3 (secuencial): Job 06 (Filter) — sobre output de Fase 1-2
147
  ```
@@ -171,20 +284,6 @@ python launcher.py 01_magpie_sft.py \
171
 
172
  **8 system prompts** con pesos de probabilidad: general, técnico, educativo, creativo, datos, profesional, divulgación, pensamiento crítico.
173
 
174
- ```bash
175
- # Single-turn
176
- python pipelines/01_magpie_sft.py \
177
- --model_id "meta-llama/Meta-Llama-3.1-8B-Instruct" \
178
- --num_rows 50000 --output_repo "tu-org/magpie-es-sft" \
179
- --magpie_template llama3
180
-
181
- # Multi-turn
182
- python pipelines/01_magpie_sft.py \
183
- --model_id "Qwen/Qwen2.5-72B-Instruct" \
184
- --num_rows 20000 --n_turns 3 --magpie_template qwen2 \
185
- --output_repo "tu-org/magpie-es-multiturn"
186
- ```
187
-
188
  ### Pipeline 02: E5-ES (Embedding Triplets)
189
 
190
  **Paper:** [Improving Text Embeddings with Large Language Models](https://arxiv.org/abs/2401.00368)
@@ -192,25 +291,24 @@ python pipelines/01_magpie_sft.py \
192
  **Método:** Two-step prompting — taxonomía de tareas → triplets. Output compatible con sentence-transformers `MultipleNegativesRankingLoss`.
193
 
194
  - **25 tareas short-long** (retrieval), **10 short-short** (STS), **10 long-short** (clasificación)
195
- - Post-procesado incluido a formato `(query, positive, negative, instruction, language)`
196
 
197
  ### Pipeline 03: Personas-ES (SFT con Diversidad Cultural)
198
 
199
  **Paper:** [PersonaHub](https://arxiv.org/abs/2406.20094)
200
 
201
- **60+ personas hispanas** de 🇪🇸🇲🇽🇦🇷🇨🇴🇨🇱🇵🇪🇨🇷🇨🇺🇪🇨🇺🇾🇵🇦🇬🇹🇩🇴 × 21 dominios temáticos. Generación en 2 pasos: persona→instrucción→respuesta.
202
 
203
  ### Pipeline 04: EvolInstruct-ES
204
 
205
  **Paper:** [WizardLM / Evol-Instruct](https://arxiv.org/abs/2304.12244)
206
 
207
- Escalado de complejidad iterativo + scoring DEITA integrado. Acepta seed de otros pipelines o usa instrucciones built-in.
208
 
209
  ### Pipeline 05: GLAN-ES (Taxonomía Educativa)
210
 
211
  **Paper:** [GLAN](https://arxiv.org/abs/2402.13064)
212
 
213
- **~120 topics** en 9 campos: Ciencias, Matemáticas, Tecnología, Humanidades, Derecho, Economía, Medicina, Cultura, Medio Ambiente. Adaptada al contexto hispano.
214
 
215
  ### Pipeline 06: Quality Filter (DEITA)
216
 
@@ -218,24 +316,61 @@ Escalado de complejidad iterativo + scoring DEITA integrado. Acepta seed de otro
218
 
219
  Filtrado `complexity × quality` con LLM-as-judge. 6K muestras DEITA > 50K random.
220
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  ---
222
 
223
  ## 🗺️ Ruta Recomendada
224
 
225
  ```
226
- FASE 1 — Quick Wins
227
  ├── 01_magpie_sft.py → 100K pares SFT nativos
228
- └── 02_embedding_triplets.py → 50K triplets embedding
 
 
229
 
230
  FASE 2 — Diversidad y Calidad
231
  ├── 03_personas_es.py → Instrucciones culturalmente diversas
232
  ├── 06_quality_filter.py → Filtrar con DEITA
233
- └── Combinar outputs de 01 + 03
234
 
235
  FASE 3 — Escala y Complejidad
236
  ├── 04_evol_instruct.py → Evolucionar instrucciones
237
  ├── 05_glan_es.py → Cobertura temática completa
238
  └── 06_quality_filter.py → Filtrado final
 
 
 
 
239
  ```
240
 
241
  ---
@@ -251,6 +386,8 @@ FASE 3 — Escala y Complejidad
251
  | WizardLM | Complejidad | Evol-Instruct iterativo | [2304.12244](https://arxiv.org/abs/2304.12244) |
252
  | GLAN | Cobertura | Taxonomía educativa | [2402.13064](https://arxiv.org/abs/2402.13064) |
253
  | DEITA | Filtrado | complexity × quality × diversity | [2312.15685](https://arxiv.org/abs/2312.15685) |
 
 
254
  | AgentInstruct | Complejidad | Suggester-Editor agéntico | [2407.03502](https://arxiv.org/abs/2407.03502) |
255
  | KaLM-Embedding | Embeddings | Persona-driven + ranking consistency | [2501.01028](https://arxiv.org/abs/2501.01028) |
256
  | Orca | SFT | Trazas de razonamiento | [2306.02707](https://arxiv.org/abs/2306.02707) |
@@ -272,6 +409,17 @@ FASE 3 — Escala y Complejidad
272
  | QA abierta/creatividad | ❌ | ✅ **Obligatorio** |
273
  | Embedding retrieval | ⚠️ | ✅ Mejor |
274
  | Contenido cultural | ❌ | ✅ **Obligatorio** |
 
 
 
 
 
 
 
 
 
 
 
275
 
276
  ## 🤝 Herramienta
277
 
 
12
  ## 📁 Estructura del Repo
13
 
14
  ```
15
+ ├── pipelines/ # Pipelines de distilabel (lógica completa)
16
+ │ ├── 01_magpie_sft.py # SFT zero-seed con Magpie
17
+ │ ├── 02_embedding_triplets.py # Triplets de embedding E5-style
18
+ │ ├── 03_personas_es.py # SFT con personas hispanas
19
+ │ ├── 04_evol_instruct.py # Escalado de complejidad
20
+ │ ├── 05_glan_es.py # Taxonomía educativa GLAN
21
+ │ ├── 06_quality_filter.py # Filtrado DEITA
22
+ │ ├── 07_rag_grounded_sft.py # 🆕 SFT grounded en documentos reales
23
+ │ └── 08_rag_grounded_embeddings.py # 🆕 Embedding triplets grounded
24
+ ├── jobs/ # Scripts listos para lanzar como HF Jobs
25
  │ ├── job_01_magpie.py
26
  │ ├── job_02_embedding.py
27
  │ ├── job_03_personas.py
28
  │ ├── job_04_evol.py
29
  │ ├── job_05_glan.py
30
+ │ ├── job_06_filter.py
31
+ │ ├── job_07_rag_sft.py # 🆕
32
+ │ └── job_08_rag_embed.py # 🆕
33
+ └── launcher.py # Launcher genérico
34
  ```
35
 
36
  | # | Pipeline | Paper | Objetivo | Output |
 
41
  | 04 | [`04_evol_instruct.py`](pipelines/04_evol_instruct.py) | [WizardLM](https://arxiv.org/abs/2304.12244) | Escalado de complejidad | `evolved_instruction`, `answer` |
42
  | 05 | [`05_glan_es.py`](pipelines/05_glan_es.py) | [GLAN](https://arxiv.org/abs/2402.13064) | Cobertura temática completa | `instruction` por taxonomía |
43
  | 06 | [`06_quality_filter.py`](pipelines/06_quality_filter.py) | [DEITA](https://arxiv.org/abs/2312.15685) | Filtrado de calidad | `complexity_score`, `quality_score` |
44
+ | **07** | [`07_rag_grounded_sft.py`](pipelines/07_rag_grounded_sft.py) | [RAFT](https://arxiv.org/abs/2403.10131) + [Backtranslation](https://arxiv.org/abs/2408.04614) | **SFT grounded en docs reales** | `messages`, `groundedness_score` |
45
+ | **08** | [`08_rag_grounded_embeddings.py`](pipelines/08_rag_grounded_embeddings.py) | [E5](https://arxiv.org/abs/2401.00368) + docs reales | **Embedding triplets grounded** | `query`, `positive`, `negative` |
46
+
47
+ ---
48
+
49
+ ## 🆕 Pipelines RAG-Grounded (07 & 08)
50
+
51
+ ### ¿Por qué grounded > generación pura?
52
+
53
+ La literatura es clara: **fundamentar la generación en documentos reales mejora significativamente la calidad**:
54
+
55
+ | Método | Calidad |
56
+ |--------|---------|
57
+ | Self-Instruct (LLM puro, sin docs) | 54% instrucciones válidas |
58
+ | **Backtranslation** (doc → pregunta) | 74.4% AlpacaEval (+9.3pp) |
59
+ | **AgentInstruct** (docs como semillas) | +40% AGIEval sobre misma base |
60
+ | **RAFT** (doc-grounded QA) | +12pp accuracy en QA de dominio |
61
+
62
+ ### Pipeline 07: RAG-Grounded SFT
63
+
64
+ Toma documentos reales en español → genera preguntas inversas (reverse instruction) → responde citando el documento (estilo RAFT) → filtra por groundedness.
65
+
66
+ ```
67
+ Documento real (Wikipedia, mC4, tu corpus)
68
+ → ChunkDocuments (~800 palabras)
69
+ → TextGeneration: genera pregunta desde el chunk
70
+ → TextGeneration: genera respuesta CoT con citas
71
+ → TextGeneration: evalúa groundedness (1-5)
72
+ → PostProcess: filtra + formato ChatML messages
73
+ ```
74
+
75
+ **Fuentes de documentos soportadas:**
76
+ - `wikimedia/wikipedia` (config `20231101.es`) — enciclopédico
77
+ - `allenai/c4` (config `es`) — web general
78
+ - **Cualquier dataset HF con columna de texto** — tu corpus de dominio
79
+
80
+ ```bash
81
+ # Desde Wikipedia en español
82
+ python pipelines/07_rag_grounded_sft.py \
83
+ --model_id "meta-llama/Meta-Llama-3.1-70B-Instruct" \
84
+ --source_repo "wikimedia/wikipedia" \
85
+ --source_config "20231101.es" \
86
+ --num_docs 10000 \
87
+ --output_repo "tu-org/rag-sft-es"
88
+
89
+ # Desde tu propio corpus (cambia source_repo y source_column)
90
+ python pipelines/07_rag_grounded_sft.py \
91
+ --source_repo "tu-org/mi-corpus-legal" \
92
+ --source_config "none" \
93
+ --source_column "contenido" \
94
+ --num_docs 5000 \
95
+ --output_repo "tu-org/rag-sft-legal-es"
96
+
97
+ # Multi-pregunta por chunk (3 preguntas variadas)
98
+ python pipelines/07_rag_grounded_sft.py \
99
+ --questions_per_doc 3 \
100
+ --output_repo "tu-org/rag-sft-es-multi"
101
+ ```
102
+
103
+ ### Pipeline 08: RAG-Grounded Embeddings
104
+
105
+ Usa documentos reales como `positive_document` (cero alucinación) → genera queries y hard negatives condicionados.
106
+
107
+ ```
108
+ Documento real
109
+ → ChunkForEmbeddings (~300 palabras, más corto para retrieval)
110
+ → GenerateSentencePair(action="query", triplet=True)
111
+ → FormatForSentenceTransformers: swap anchor↔query
112
+ → Output: (query, positive_doc_real, hard_negative)
113
+ ```
114
+
115
+ ```bash
116
+ # Single action: solo queries de búsqueda
117
+ python pipelines/08_rag_grounded_embeddings.py \
118
+ --source_repo "wikimedia/wikipedia" \
119
+ --source_config "20231101.es" \
120
+ --num_docs 10000 \
121
+ --output_repo "tu-org/rag-embed-es"
122
+
123
+ # Multi-action: query + semantic-similarity en paralelo
124
+ python pipelines/08_rag_grounded_embeddings.py \
125
+ --multi_action \
126
+ --num_docs 10000 \
127
+ --output_repo "tu-org/rag-embed-es-multi"
128
+ ```
129
 
130
  ---
131
 
 
227
  ⚠️ Requiere que el dataset de input (ej: pauvanbr/magpie-es-sft) ya exista
228
  ```
229
 
230
+ ### Job 07 — 🆕 RAG-Grounded SFT · ~10K docs → ~30K Q&A grounded
231
+
232
+ ```
233
+ Script: jobs/job_07_rag_sft.py
234
+ Hardware: cpu-basic
235
+ Timeout: 12h (3 llamadas LLM por chunk: pregunta + respuesta + groundedness)
236
+ Deps: distilabel[hf-inference-endpoints]
237
+ Output: → pauvanbr/rag-sft-es
238
+ Source: wikimedia/wikipedia (20231101.es) — configurable
239
+ ```
240
+
241
+ ### Job 08 — 🆕 RAG-Grounded Embeddings · ~10K docs → ~50K triplets
242
+
243
+ ```
244
+ Script: jobs/job_08_rag_embed.py
245
+ Hardware: cpu-basic
246
+ Timeout: 8h
247
+ Deps: distilabel[hf-inference-endpoints]
248
+ Output: → pauvanbr/rag-embedding-triplets-es
249
+ Source: wikimedia/wikipedia (20231101.es) — configurable
250
+ Mode: Multi-action (query + semantic en paralelo)
251
+ ```
252
+
253
  ### Orden recomendado
254
 
255
  ```
256
  Fase 1 (en paralelo): Job 01 (Magpie) + Job 02 (Embeddings)
257
+ Fase 1b (en paralelo): Job 07 (RAG SFT) + Job 08 (RAG Embeddings) ← 🆕
258
  Fase 2 (en paralelo): Job 03 (Personas) + Job 04 (Evol) + Job 05 (GLAN)
259
  Fase 3 (secuencial): Job 06 (Filter) — sobre output de Fase 1-2
260
  ```
 
284
 
285
  **8 system prompts** con pesos de probabilidad: general, técnico, educativo, creativo, datos, profesional, divulgación, pensamiento crítico.
286
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
  ### Pipeline 02: E5-ES (Embedding Triplets)
288
 
289
  **Paper:** [Improving Text Embeddings with Large Language Models](https://arxiv.org/abs/2401.00368)
 
291
  **Método:** Two-step prompting — taxonomía de tareas → triplets. Output compatible con sentence-transformers `MultipleNegativesRankingLoss`.
292
 
293
  - **25 tareas short-long** (retrieval), **10 short-short** (STS), **10 long-short** (clasificación)
 
294
 
295
  ### Pipeline 03: Personas-ES (SFT con Diversidad Cultural)
296
 
297
  **Paper:** [PersonaHub](https://arxiv.org/abs/2406.20094)
298
 
299
+ **60+ personas hispanas** de 🇪🇸🇲🇽🇦🇷🇨🇴🇨🇱🇵🇪🇨🇷🇨🇺🇪🇨🇺🇾🇵🇦🇬🇹🇩🇴 × 21 dominios temáticos.
300
 
301
  ### Pipeline 04: EvolInstruct-ES
302
 
303
  **Paper:** [WizardLM / Evol-Instruct](https://arxiv.org/abs/2304.12244)
304
 
305
+ Escalado de complejidad iterativo + scoring DEITA integrado.
306
 
307
  ### Pipeline 05: GLAN-ES (Taxonomía Educativa)
308
 
309
  **Paper:** [GLAN](https://arxiv.org/abs/2402.13064)
310
 
311
+ **~120 topics** en 9 campos: Ciencias, Matemáticas, Tecnología, Humanidades, Derecho, Economía, Medicina, Cultura, Medio Ambiente.
312
 
313
  ### Pipeline 06: Quality Filter (DEITA)
314
 
 
316
 
317
  Filtrado `complexity × quality` con LLM-as-judge. 6K muestras DEITA > 50K random.
318
 
319
+ ### Pipeline 07: RAG-Grounded SFT 🆕
320
+
321
+ **Papers:**
322
+ - [RAFT: Adapting Language Model to Domain Specific RAG](https://arxiv.org/abs/2403.10131) — +12pp accuracy
323
+ - [Instruction Back-and-Forth Translation](https://arxiv.org/abs/2408.04614) — 74.4% AlpacaEval
324
+ - [AgentInstruct](https://arxiv.org/abs/2407.03502) — +40% AGIEval
325
+
326
+ **Método:** Documento real → reverse instruction (pregunta) → respuesta CoT con citas → evaluación de groundedness → filtro.
327
+
328
+ **Por qué es mejor:** La generación pura (Magpie, Self-Instruct) tiende hacia conocimiento genérico y alucina. Con documentos reales como ancla, los datos son fieles al dominio y factuales.
329
+
330
+ **2 modos:**
331
+ - `--questions_per_doc 1` — 1 pregunta por chunk, simple y robusto (v2, recomendado)
332
+ - `--questions_per_doc 3` — 3 preguntas por chunk en JSON, más datos pero requiere parsing
333
+
334
+ **Output:** formato ChatML `messages` listo para TRL SFTTrainer.
335
+
336
+ ### Pipeline 08: RAG-Grounded Embeddings 🆕
337
+
338
+ **Papers:**
339
+ - [E5-Mistral](https://arxiv.org/abs/2401.00368) — SOTA embeddings con datos sintéticos
340
+ - [Gecko](https://arxiv.org/abs/2403.20327) — embeddings 7x más eficientes
341
+
342
+ **Diferencia clave con Pipeline 02:** El `positive_document` es un **chunk real** (no alucinado). El LLM solo genera la query y el hard negative.
343
+
344
+ **2 modos:**
345
+ - `--action query` — solo queries de búsqueda (asymmetric retrieval)
346
+ - `--multi_action` — query + semantic-similarity en paralelo (entrenamiento más diverso)
347
+
348
+ **Output:** formato `(query, positive, negative)` compatible con sentence-transformers.
349
+
350
  ---
351
 
352
  ## 🗺️ Ruta Recomendada
353
 
354
  ```
355
+ FASE 1 — Quick Wins (generación pura + grounded en paralelo)
356
  ├── 01_magpie_sft.py → 100K pares SFT nativos
357
+ ├── 02_embedding_triplets.py → 50K triplets embedding (sintéticos)
358
+ ├── 07_rag_grounded_sft.py → 30K Q&A grounded en Wikipedia-es ← 🆕
359
+ └── 08_rag_grounded_embeddings.py → 50K triplets grounded ← 🆕
360
 
361
  FASE 2 — Diversidad y Calidad
362
  ├── 03_personas_es.py → Instrucciones culturalmente diversas
363
  ├── 06_quality_filter.py → Filtrar con DEITA
364
+ └── Combinar outputs de 01 + 03 + 07
365
 
366
  FASE 3 — Escala y Complejidad
367
  ├── 04_evol_instruct.py → Evolucionar instrucciones
368
  ├── 05_glan_es.py → Cobertura temática completa
369
  └── 06_quality_filter.py → Filtrado final
370
+
371
+ FASE 4 — Dominio específico (con tu propio corpus) ← 🆕
372
+ ├── 07_rag_grounded_sft.py --source_repo "tu-corpus"
373
+ └── 08_rag_grounded_embeddings.py --source_repo "tu-corpus"
374
  ```
375
 
376
  ---
 
386
  | WizardLM | Complejidad | Evol-Instruct iterativo | [2304.12244](https://arxiv.org/abs/2304.12244) |
387
  | GLAN | Cobertura | Taxonomía educativa | [2402.13064](https://arxiv.org/abs/2402.13064) |
388
  | DEITA | Filtrado | complexity × quality × diversity | [2312.15685](https://arxiv.org/abs/2312.15685) |
389
+ | **RAFT** | **RAG-SFT** | **Doc-grounded QA con CoT** | [**2403.10131**](https://arxiv.org/abs/2403.10131) |
390
+ | **Backtranslation** | **RAG-SFT** | **Doc → reverse instruction** | [**2408.04614**](https://arxiv.org/abs/2408.04614) |
391
  | AgentInstruct | Complejidad | Suggester-Editor agéntico | [2407.03502](https://arxiv.org/abs/2407.03502) |
392
  | KaLM-Embedding | Embeddings | Persona-driven + ranking consistency | [2501.01028](https://arxiv.org/abs/2501.01028) |
393
  | Orca | SFT | Trazas de razonamiento | [2306.02707](https://arxiv.org/abs/2306.02707) |
 
409
  | QA abierta/creatividad | ❌ | ✅ **Obligatorio** |
410
  | Embedding retrieval | ⚠️ | ✅ Mejor |
411
  | Contenido cultural | ❌ | ✅ **Obligatorio** |
412
+ | **QA de dominio** | ❌ | ✅ **Usar Pipeline 07** |
413
+
414
+ ## 📂 Fuentes de Corpus en Español para RAG-Grounded
415
+
416
+ | Dataset | Tipo | Uso recomendado |
417
+ |---------|------|-----------------|
418
+ | `wikimedia/wikipedia` (config `20231101.es`) | Enciclopédico | General, educación |
419
+ | `allenai/c4` (config `es`) | Web crawl | Diversidad temática |
420
+ | `oscar-corpus/OSCAR-2301` | Web crawl masivo | Escala |
421
+ | `spanish-ir/messirve` | Queries Google LATAM | Eval de embeddings |
422
+ | Tu propio corpus | Dominio | Especialización |
423
 
424
  ## 🤝 Herramienta
425