Le contexte
Chez Enedis, j'ai travaillé sur un projet de création de graphes de connaissances à partir de descriptions utilisateur. Le défi : les utilisateurs écrivent dans un vocabulaire métier spécifique avec des abréviations et un argot propre au domaine.
Le problème
Les LLMs généralistes ne comprennent pas ce langage technique et hallucinent. Il fallait :
- Extraire les entités avec un NER adapté au domaine
- Générer des graphes de connaissances conformes à une ontologie stricte
- Garantir que les relations sont valides selon des règles métier
GRPO : Group Relative Policy Optimization
GRPO est une technique de reinforcement learning introduite par DeepSeek. Elle permet d'entraîner un LLM à respecter des contraintes en comparant les outputs entre eux (d'où "Group Relative").
Pourquoi GRPO ?
Plutôt que de donner une récompense absolue, GRPO récompense les outputs relativement aux autres du même groupe. Cela permet d'apprendre progressivement à respecter des contraintes complexes.
Intégration avec Prolog
J'ai défini une ontologie avec tous les termes du domaine métier et des règles Prolog pour valider la structure des graphes :
% Un graphe valide doit respecter l'ontologie
valid_relation(Entity1, Relation, Entity2) :-
entity_type(Entity1, Type1),
entity_type(Entity2, Type2),
allowed_relation(Type1, Relation, Type2).
Le pipeline
- NER : Extraction d'entités dans le vocabulaire métier spécifique
- Ontologie : Définition formelle des termes et relations possibles
- GRPO : Entraînement du LLM à générer des graphes conformes
- Validation : Vérification automatique avec Prolog
Ce que j'ai appris
GRPO était une technique récente quand j'ai travaillé dessus. La combiner avec de la logique symbolique (Prolog) permet d'avoir le meilleur des deux mondes : la flexibilité des LLMs et la rigueur des règles formelles.
Ce projet a marqué la fin de mon stage Epitech et le début de mon alternance en Master IA chez Enedis. 🚀