# Tokenisation du wolof basée sur le RAG
Système de **tokenisation morphologique du wolof** s'appuyant sur une approche
**RAG (Retrieval-Augmented Generation)**.
**Base de connaissance du RAG = `dictionary.json`** (liste de ~8595 mots wolof).
**Évaluation = couverture lexicale, sans référence** : un token produit est jugé
valide s'il correspond à une entrée du dictionnaire. Intuition : les formes de
surface agglutinées (« Demna », « Liggéeynañu ») ne figurent pas telles quelles
dans le dictionnaire ; seuls les morphèmes le font (« dem », « na »…). Donc plus
la segmentation est correcte, plus la **couverture** est haute (et le **taux
d'OOV** bas). Voir `src/dict_lexicon.py`.
Projet académique — voir `data/raw/Roadmap_Tokenisation_Wolof_RAG.pdf` (feuille de
route). Les 250 phrases de `data/eval_dataset.jsonl` servent de corpus d'entrée à
tokeniser (leurs `reference_tokens` annotés ne sont plus utilisés pour le score).
## Objectif
Comparer la qualité de tokenisation à travers 4 configurations et produire deux tableaux :
- **Tableau A** — LLM seuls via Groq (`qwen/qwen3-32b`, `llama-3.1-8b-instant`,
`llama-3.3-70b-versatile`), sans base de connaissance.
- **Tableau B** — Meilleur LLM seul → RAG (dico) → RAG optimisé → RAG + agent IA.
## Architecture
Voir **ARCHITECTURE.md** : arborescence, schémas de données et
contrats partagés par tous les modules.
| Étape | Module | Livrable |
|------|--------|----------|
| 1 — Dataset | `src/data_loader.py`, `data/eval_dataset.jsonl` | 250 paires entrée→tokens |
| 2 — Métriques | `src/metrics.py` | EM, F1 token, RAGAS, DeepEval |
| 3 — LLM seuls | `experiments/run_baseline.py` | `results/tableau_A.csv` |
| 4 — Base vectorielle | `src/knowledge_base.py` | index ChromaDB |
| 5 — RAG | `src/rag_pipeline.py` | RAG fonctionnel |
| 6 — RAG optimisé | `src/rag_optimized.py` | hybride + reranker + few-shot |
| 7 — Agent IA | `src/agent_pipeline.py` | générer→vérifier→corriger |
| 8 — Comparaison | `experiments/run_final.py` | `resu …