# O_FT@EvalLLM2025 : étude comparative de choix de données et de stratégies d'apprentissage pour l'adaptation de modèles de langue à un domaine

Ismaël Rousseau, Claire Perroux, Pierre Adam, Thomas Girault, Lionel Delphin-Poulat, Morgan Veyret, Gwénolé Lecorvé, Géraldine Damnati

<figure><img src="image_1.png" /></figure>

## To cite this version:

Ismaël Rousseau, Claire Perroux, Pierre Adam, Thomas Girault, Lionel Delphin-Poulat, et al. O_FT@EvalLLM2025 : étude comparative de choix de données et de stratégies d'apprentissage pour l'adaptation de modèles de langue à un domaine. Actes du challenge EvalLLM 2025 à la conférence CORIA-TALN 2025, Vincent Claveau, Jun 2025, Marseille, France. hal-05140334

HAL Id: hal-05140334

https://hal.science/hal-05140334v1

Submitted on 2 Jul 2025

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_2.png" /></figure>
# O_FT@EvalLLM2025 : étude comparative de choix de données et de stratégies d'apprentissage pour l'adaptation de modèles de langue à un domaine

Ismaël Rousseau¹a Claire Perroux¹b Pierre Adam¹a

Thomas Girault² Lionel Delphin-Poulat¹a Morgan Veyret¹a

Gwénolé Lecorvé¹a Géraldine Damnati¹a

(1) Orange Research, ªLannion / ᵇChâtillon, France

(2) Ouest-France, Rennes, France

prenom.nom@orange.com, prenom.nom@ouest-france.fr

## RÉSUMÉ

Ce document présente les travaux réalisés par l'équipe O_FT conjointe à Orange et Ouest-France sur l'adaptation de modèles de langue au domaine de la défense dans le cadre du challenge EvalLLM2025. Ces travaux se sont concentrés sur l'adaptation du modèle Mistral-7B-Instruct-v0.3 avec des techniques classiques de poursuite du pré-entraînement et d'affinage sur instructions. L'essentiel de nos travaux a porté sur la constitution, génération et sélection de données pour ces deux étapes ainsi que pour l'évaluation des modèles. Les expériences montrent que nos modèles adaptés ont de meilleures de connaissances de fond et une meilleure capacité de traitement de tâches sur le domaine de la défense, ainsi que des performances comparables (voire supérieures) sur des connaissances ou capacités généralistes. Mis au regard des empreintes carbones de nos adaptations, ces travaux démontrent ainsi la viabilité de l'adaptation à un domaine de modèles relativement petits.

## ABSTRACT

O_FT@EvalLLM2025 : Comparative Study of Data for Continued Pre-Training and Instruction-Tuning for Language Model Domain Adaptation.

This paper presents the work carried out by the O_FT team, joint with Orange and Ouest-France, on adapting language models to the defense domain as part of the EvalLLM2025 challenge. This work focused on adapting the Mistral-7B-Instruct-v0.3 model using classical techniques of continued pre-training and instruction-tuning. The core of our efforts is based on collecting, generating, and selecting data for these two stages as well as for model evaluation. Experiments show that our adapted models have better domain-specific knowledge and improved domain-specific task processing skills, along with comparable (or even superior) performance on general knowledge and skills. Considering the carbon footprint of our adaptations, this work demonstrates the feasibility of domain adaptation for relatively small models.

MOTS-CLÉS : Affinage de modèle de langue, Adaptation au domaine, Génération d'instructions.

KEYWORDS: Language model fine-tuning, Domain Adaptation, Instruction Generation.
# 1 Introduction

La participation d'Orange au challenge EvalLLM2025 s'est concentrée sur l'adaptation du modèle Mistral-7B-Instruct-v0.3, et ce dans les deux configurations proposées par le challenge, à savoir l'une restreinte aux seules données fournies par les organisateurs et l'autre ouverte, où nous avons exploité des données complémentaires. Sur la base de précédents travaux d'adaptation au domaine des télécommunications (Barboule et al., 2024; Shahid et al., 2025), l'adaptation a consisté à enchaîner une étape de Poursuite du Pré-Entraînement (PPE, continued pre-training en anglais) et une étape d'Affinage sur Instructions (ASI, instruction fine-tuning en anglais). Les deux étapes ont été réalisées en affinant tous les poids (full fine-tuning), par opposition aux approches d'adaptation à faible rang.

Dans le cadre de la participation à ce challenge, nous avons conclu un accord de collaboration entre les équipes de recherche d'Orange Innovation et de Ouest-France. Ouest-France nous a donné accès à un certain nombre de contenus et a contribué également à la préparation des données et des instructions. La préparation des données fournies par l'AMIAD, la génération d'instructions et les apprentissages et évaluations ont été conduits à Orange.

Les choix de soumission de modèles ont principalement été guidés par la possibilité d'analyser l'impact de la phase de poursuite du pré-entraînement d'une part et l'impact de la diversité des instructions pour l'affinage sur instructions d'autre part. En effet, la particularité de l'adaptation à un domaine est que l'on cherche à la fois à faire acquérir des connaissances au modèle tout en maintenant ses capacités à répondre correctement à des instructions diverses. Nous avons apporté un soin particulier à la mise en place d'évaluations variées pour tenter de mesurer les connaissances acquises par les modèles adaptés.

Nous présentons dans ce rapport les étapes de préparation des données à la section 2, puis à la section 3 la méthodologie employée pour générer des instructions pour l'adaptation. Les détails concernant les processus de fine-tuning sont fournis à la section 4 et enfin, nous communiquons les évaluations en termes de performances et de consommation énergétique à la section 5.

# 2 Préparation des données

Cette section décrit le processus suivi pour obtenir des données textuelles exploitables pour nos expériences, que ce soit à la poursuite du pré-entraînement ou à la génération d'instructions (sujet abordé dans la section qui suivra). Après avoir énuméré les sources de données considérées, nous détaillons leur nettoyage, puis leur partitionnement.

## 2.1 Description de la base documentaire

**Documents fournis par les organisateurs** Les documents fournis par les organisateurs proviennent du site internet du ministère des armées (3257 documents minarm), de sources internes (2864 documents interne), ainsi que du portail "Armée" de Wikipedia (2847 documents). La nature et le contenu des documents sont assez variés et une description plus détaillée par source est fournie dans la table 1. Ces documents se présentent sous format PDF, Word, MarkDown, texte et PowerPoint. Les statistiques par format sont données dans la table 2.
<table><caption>TABLE 1 – Présentation des documents bruts fournis par les organisateurs</caption><thead><tr><th>Jeu de données</th><th>Nb doc</th><th>Formats</th><th>Description</th></tr></thead><tbody><tr><td>minarm_AdT</td><td>500</td><td>md</td><td>Organisation, matériel et actualités de l'armée de terre</td></tr><tr><td>minarm_air</td><td>499</td><td>md</td><td>Actualités et infos sur l'armée de l'air</td></tr><tr><td>minarm_DGA</td><td>509</td><td>md</td><td>Organisation et programmes de la Direction Générale de l'Armement</td></tr><tr><td>minarm_EMA</td><td>245</td><td>md</td><td>Activités et actualités de l'État-Major des Armées</td></tr><tr><td>minarm_marine</td><td>500</td><td>md</td><td>Organisation, équipements et missions de la Marine Nationale</td></tr><tr><td>minarm_other1</td><td>495</td><td>md</td><td>Informations diverses sur les entités du Ministère des Armées</td></tr><tr><td>minarm_SGA</td><td>509</td><td>md</td><td>Activités du Secrétariat Général pour l'Administration</td></tr><tr><td>interne_divers</td><td>17</td><td>pdf</td><td>Notes et rapports divers</td></tr><tr><td>interne_EMA</td><td>237</td><td>pdf/docx</td><td>Doctrine militaire & RETEX</td></tr><tr><td>interneFormation</td><td>57</td><td>pdf/docx/pptx</td><td>Documents de formation au numérique</td></tr><tr><td>interne_magazines</td><td>38</td><td>pdf</td><td>Magazines Air actualités, Esprit Défense et SOUTENIR</td></tr><tr><td>interne_NP_BOC</td><td>2 483</td><td>pdf</td><td>Bulletin officiel des armées (arrêtés, décisions, instructions, circulaires etc.)</td></tr><tr><td>interne_reglements</td><td>32</td><td>pdf</td><td>Règlements divers</td></tr><tr><td>wp_portail_armée</td><td>2 847</td><td>txt</td><td>Pages Wikipédia du portail "Armée"</td></tr></tbody></table>

<table><caption>TABLE 2 – Nombre de documents bruts par type de fichier</caption><thead><tr><th>Format</th><th>MarkDown</th><th>PDF</th><th>Word</th><th>PowerPoint</th><th>Texte</th></tr></thead><tbody><tr><td></td><td>md</td><td>pdf</td><td>docx</td><td>pptx</td><td>txt</td></tr><tr><td>Nb documents bruts</td><td>3 235</td><td>2 789</td><td>31</td><td>2</td><td>2843</td></tr></tbody></table>

**Documents additionnels fournis par Ouest-France** Des données textuelles additionnelles ont été collectées au sein des archives de presse du groupe SIPA-Ouest-France. Le but est de compléter la terminologie et les connaissances fondamentales du domaine, tout en intégrant une perspective journalistique sur les faits d'actualité récents. Ce corpus agrège un total de 10 910 articles issus du journal Ouest-France (7 800 articles), du blog "Ligne de défense" (755 articles) et du magazine "Le Marin" (2 355 articles). Le blog "Ligne de défense"<fnref n="1" /> regroupe des articles rédigés par Phillipe Chapleau, journaliste spécialisé dans les questions de politique étrangère et de défense.

Une sélection a été faite pour retenir les articles publiés entre le 1er janvier 2022 et le 16 mai 2025. Le choix de ces dates a été défini en faisant l'hypothèse que les données plus anciennes ont probablement été vues par modèle à adapter lors de son entraînement.

Pour obtenir les données du journal Ouest-France, une sélection thématique a été effectuée à l'aide d'un classifieur fondé sur un modèle Camembert (Martin et al., 2020) entraîné pour identifier les

<footnote n="1">1. https://lignesdedefense.ouest-france.fr/</footnote>
articles correspondant aux catégories *International Press Telecommunications Council* (IPTC) (Group, 2020) suivantes :

- /Guerre et conflits/Armement,

- /Politique/Défense,

- /Économie/Industrie de défense.

Enfin, un filtrage supplémentaire a été réalisé sur ces mêmes données pour ne conserver que les
articles avec une longueur variant entre 200 et 3 000 mots.

## 2.2 Pré-traitement des données

### 2.2.1 AMIAD

Les fichiers PDF contenant du texte pouvant directement être extrait ont été traités à l'aide de PyMuPDF<fnref n="2" />. Les fichiers PDF dont les textes ne sont pas directement accessibles sont traités par la solution d'OCR DocTR<fnref n="3" />. Nous regroupons les textes qui sont proches géométriquement en blocs de texte. Ces blocs de texte sont ensuite concatenés, avec un retour à la ligne comme séparateur. Les images (photographies, cartes, etc.) n'ont pas été traitées en tant que telles mais le texte inclus dans les images a pu être traité par l'OCR.

L'extraction du texte pour les fichiers Word a été réalisée via la librairie python docx2txt<fnref n="4" />. Les fichiers PowerPoint n'ont pas été utilisés.

Les documents ont ensuite été divisés en segments plus petits pour créer des unités textuelles ciblées facilitant la génération d'instructions, tout en respectant les contraintes de taille de contexte imposées par le modèle Mistral-7B-Instruct-v0.3.

Ainsi, nous avons décidé de couper :

- .pdf et .docx : par page

- .md : par blocs de 8192 tokens maximum, en coupant à une fin de section

- .txt : par blocs de 8192 tokens maximum, en coupant à un saut de ligne.

Après cette découpe, certains segments étaient trop courts et ne contenaient plus d'information substantielle, nous avons donc retiré du corpus les segments de moins de 350 caractères. De plus, nous avons essayé au mieux de retirer les entêtes sur les documents web du ministère de l'armée. Certaines n'ont pas pu être nettoyées avec de simples expressions régulières et ont donc été conservées dans les documents, ce qui a pu ensuite poser problème lors de la génération des instructions.

La table 3 regroupe les statistiques sur les segments produits en fonction des différentes sources fournies par les organisateurs.

### 2.2.2 Cas particuliers

Certains documents ont été identifiés comme contenant plus d'informations essentielles que d'autres et ont donc été traités avec plus d'attention. C'est notamment le cas de plusieurs fichiers contenant

<footnote n="2">2. https://github.com/pymupdf/PyMuPDF</footnote>

<footnote n="3">3. https://github.com/mindee/doctr</footnote>

<footnote n="4">4. https://github.com/ankushshah89/python-docx2txt</footnote>
<table><caption>TABLE 3 – Statistiques sur les segments</caption><thead><tr><th>Jeu de données</th><th>Nb seg</th><th>Seg. écartés</th><th>Lg. moy. par seg. (tokens)</th><th>Seg. par doc.</th></tr></thead><tbody><tr><td>minarm_AdT</td><td>531</td><td>0 (0.0%)</td><td>2 874</td><td>1.1</td></tr><tr><td>minarm_air</td><td>517</td><td>1 (0.2%)</td><td>2 566</td><td>1.0</td></tr><tr><td>minarm_DGA</td><td>517</td><td>3 (0.6%)</td><td>1 873</td><td>1.0</td></tr><tr><td>minarm_EMA</td><td>258</td><td>0 (0.0%)</td><td>3 149</td><td>1.1</td></tr><tr><td>minarm_marine</td><td>517</td><td>0 (0.0%)</td><td>2 067</td><td>1.0</td></tr><tr><td>minarm_other1</td><td>728</td><td>2 (0.3%)</td><td>3 228</td><td>1.5</td></tr><tr><td>minarm_SGA</td><td>564</td><td>0 (0.0%)</td><td>2 527</td><td>1.1</td></tr><tr><td>interne_divers</td><td>630</td><td>52 (8.3%)</td><td>767</td><td>41.3</td></tr><tr><td>interne_EMA</td><td>14 579</td><td>2 487 (17.1%)</td><td>772</td><td>51.9</td></tr><tr><td>interne_formation</td><td>165</td><td>63 (38.2%)</td><td>698</td><td>1.9</td></tr><tr><td>interne_magazines</td><td>1 867</td><td>184 (9.9%)</td><td>815</td><td>52.6</td></tr><tr><td>interne_NP_BOC</td><td>28 064</td><td>4 795 (17.1%)</td><td>810</td><td>9.4</td></tr><tr><td>interne_reglements</td><td>2 953</td><td>119 (4.0%)</td><td>838</td><td>97.7</td></tr><tr><td>wikipedia_portail_armée</td><td>2975</td><td>44 (1.5%)</td><td>2 228</td><td>1.0</td></tr></tbody></table>

des listes d'acronymes ou de traductions, à savoir en détails :

- Acronymes : 20240419_NP_Livret accueil DGA MI.pdf, Chiffres clés de la Défense - 2024 FR.pdf, Manuel de droit des opérations militaires.pdf, Répertoire acronymes FR-ONU-OTAN_version 2020.pdf

- Traduction : 20231220_Vocabulaire militaire français-anglais.pdf

Dans ces deux cas, les fichiers sont composés de nombreux tableaux ou autres formats de correspondance entre les acronymes et leur signification ou bien entre la traduction anglaise et française. Nous avons utilisé GPT-4o-mini afin d'extraire proprement chaque acronyme et traduction. Pour les acronymes, nous gardons en mémoire toutes les significations différentes rencontrées.

### 2.2.3 Articles Ouest-France

Pour cette source de données, les articles ont été conservés dans leur intégralité. Ils sont stockés dans une base de données selon un format spécifiquement conçu pour l'archivage des contenus éditoriaux. Un pré-traitement a été réalisé de façon à nettoyer les balises HTML et les éventuelles métadonnées résiduelles dans les données extraites. Le corpus final est ainsi constitué de 10 910 segments. Une sélection préliminaire avait déjà été réalisée en amont, retenant uniquement les articles dont la longueur se situait entre 200 et 3 000 mots.

## 2.3 Statistiques sur les données brutes après pré-traitements

Au total, le corpus brut est constitué de 54 865 segments de texte issus des données fournies par les organisateurs et de 10 910 segments issus des données journalistiques collectées par Ouest-France.

Pour chaque jeu de donnée, les segments sont divisés en une partition d'entraînement (80%), de
<table><caption>TABLE 4 – Statistiques sur les données brutes pré-traitées pour les deux sources de données</caption><thead><tr><th></th><th>Gen AMIAD</th><th>Gen OF</th></tr></thead><tbody><tr><td>Nb segments</td><td>54 865</td><td>10 910</td></tr><tr><td>Nb mots</td><td>18,7M</td><td>5,9M</td></tr><tr><td>Nb. tokens</td><td>48,6M</td><td>11,5M</td></tr></tbody></table>

validation (10%) et de test (10%). Cette division est effectuée au niveau des segments et non au niveau des documents; il est ainsi possible pour un même document d'avoir des segments présents dans différentes partitions différentes, ce qui pourrait être revu dans une version ultérieure.

# 3 Génération des instructions

Le corpus d'instructions que nous avons mis en place a été constitué avec quatre approches principales :

- Génération d'instructions synthétiques avec un modèle génératif (LLM)

- Constructions d'instructions à partir de patrons sur les fichiers acronymes et traduction

- Construction d'instructions "longues"

- Génération d'instructions spécifiques aux données Ouest-France

Les sections suivantes décrivent la méthodologie de chacune des approches.

## 3.1 Instructions synthétiques générées par LLMs

Nous définissons ici une instruction comme un triplet (amorce système, question utilisateur, réponse). La section 3.1.1 décrit l'utilisation de GPT-4.1-mini afin de générer la question utilisateur ainsi que la réponse de référence, en nous basant sur les segments obtenus après le traitement des documents décrits en section 2.2 pour quatre tâches. La sections 3.1.2 décrit l'utilisation de GPT-4o-mini pour la génération d'une cinquième tâche propre aux données journalistiques. Le processus de génération des amorces système utilise une autre méthode de génération détaillée en section 3.1.3.

### 3.1.1 Définition des tâches et curation des instructions générées

Nous avons utilisé le modèle GPT-4.1-mini<fnref n="5" /> d'OpenAI afin de générer des instructions sur quatre tâches cibles : le **résumé** de texte, le **titrage**, les **questions à choix multiples** (QCM), la réponse à des **questions factuelles**.

Pour chaque segment, nous utilisons GPT-4.1-mini afin de générer une question utilisateur ainsi que la réponse de référence. La constitution des prompts pour cette étape de génération a été guidée par deux objectifs :

1. garantir une diversité dans les formulations des instructions générées pour une même tâche

2. maîtriser le format des instructions produites pour faciliter l'étape de curation et les exploiter plus facilement dans une optique d'évaluation

<footnote n="5">5. La version exacte utilisée est : gpt-4.1-mini-2025-04-14</footnote>
**Diversité des formulations** : Le prompt utilisé pour la génération des instructions est donné dans le cadre suivant. Le champ **additional information** est spécifique à chaque tâche cible et a été conçu pour favoriser la diversité des instructions générées. Il contient des directives précises sur la façon de formuler les questions et réponses selon le type de tâche. Pour cela, nous avons défini des grammaires pour produire cette partie du prompt système. Par exemple, pour le cas du résumé ces informations additionnelles permettent d'obtenir des formulations très concises comme "Produire un résumé." ou des formulations plus détaillées comme « Pourriez-vous fournir un résumé de ce texte concernant la reconnaissance des harkis et les implications politiques et morales de leurs décisions durant et après la guerre d'Algérie ? ». Les grammaires sont détaillées en annexe A.1 pour chacune des tâches cibles.

## Prompt système pour la génération d'instructions

> You are {persona}, with an exhaustive knowledge of LLM instructions generation, your role is to create a set of high-quality {instruction type} instructions on the text input provided by the user. All your outputs should be written in french. {additional information}

> **Persona** : a senior expert specializing in the defense industry and military affairs. Your expertise covers weapon systems (land, naval, air), emerging technologies (AI, robotics, cyber, space), industrial processes, military R&D, operational doctrines and strategies, intelligence, as well as the economic aspects of the sector (markets, actors, regulations). You have a thorough understanding of geopolitical issues, international relations, and defense policies

## Format des instructions produites
Afin de maîtriser le format des instructions générées, nous avons exploité le mode de génération structurée d'OpenAI<fnref n="6" />. Ce mode de génération prend en entrée une amorce système, une amorce utilisateur ainsi qu'une classe **BaseModel** *Pydantic*<fnref n="7" /> contenant le nom des différents champs attendus lors de la génération, ainsi que leur type et leur description. Obtenir une sortie structurée permet à la fois d'exploiter les résultats de génération plus facilement par la suite pour les adapter au *chat template*, et également de les parser pour les retravailler si besoin. Par exemple, pour le cas des questions factuelles, on spécifie un format attendu dans lequel apparaissent distinctement le fait retenu, son type (date, lieu, etc..) et la question posée. Le détail complet des classes *Pydantic* avec la spécification des champs attendus est fourni en annexe A.2.

## Curation des instructions générées
Un problème récurrent lors de la génération d'instructions, même avec des efforts sur la formulation de l'amorce, est la tendance de certaines instructions à référencer explicitement le document plutôt que de l'exploiter comme ressource contextuelle. A contrario, il arrive fréquemment que l'instruction générée fasse référence à un document alors que l'on souhaite produire une instruction sans contexte. Nous filtrons donc toutes les instructions qui contiennent les expressions suivantes pour les tâches de *QCM* et de *questions factuelles* qui doivent être réalisés sans contexte additionnel : « mentionne » ; « selon le » ; « d'après le » ; « le document » ; « ce document » ; « le texte » ; ou « ce texte ».

D'autres cas plus complexes comme le cas suivant où la question contient une coréférence demeurent complexes à filtrer et n'ont pas été écartés dans cette étude. Exemple de QCM contenant une mention de coréférence ("le message") pour lequel il est impossible de répondre sans contexte :

<footnote n="6">6. https://platform.openai.com/docs/guides/structured-outputs</footnote>

<footnote n="7">7. https://docs.pydantic.dev/latest/</footnote>
« Que signifie le message survolé par l'avion du général Leclerc ?

a - Un appel à la résistance des Parisiens.

b - Une annonce d'arrivée imminente des Alliés.

c - Un ordre de retrait pour les troupes françaises.

d - Une déclaration de guerre.

e - Une invitation à abandonner la lutte. »

### 3.1.2 Instructions spécifiques générées à partir des données Ouest-France

En plus des instructions générées par l'approche décrite à la section 3.1, nous avons introduit une nouvelle tâche générative propre aux données journalistiques. L'objectif étant d'injecter le plus possible de connaissances du domaine aux modèles, les instructions sont construites de façon à produire un résumé des articles centré sur les faits principaux. Ces résumés ont été générés automatiquement par le modèle GPT-4o-mini d'OpenAI⁸ et respectent un format JSON contraint par le schéma décrit dans l'annexe A.2.5.

#### Prompt pour la génération de résumés Ouest-France

**SYSTEM** Vous êtes un assistant AI spécialisé NLP et en extraction d'information. Vous devez analyser des contenus journalistiques spécialisés dans le domaine en défense et affaires militaires. Fournissez des informations structurées en adaptant votre langage à l'interlocuteur et en respectant le format demandé.

**USER** Lister de faits importants pour résumer l'article suivant. Chaque fait doit être associé à une question factuelle. Les faits et questions doivent préciser un contexte suffisant (entités, dates...) pour être compris sans lire l'article original. Formater la réponse en JSON en respectant le schéma donné.

Cette étape a produit un total de 8 736 instructions qui viennent s'ajouter aux instructions précédemment décrites pour la source OF, soit un total de 37 429 instructions produites à partir des données journalistiques. Un exemple est fourni à l'annexe B.

### 3.1.3 Amorces système

L'amorce système conditionne l'assistant dans ses réponses et permet un contrôle plus fin du comportement du modèle. Ainsi, les instructions générées automatiquement par le processus décrit ci-dessus se voient adjoindre en préambule une amorce système avant de les exploiter pour l'adaptation des modèles. Pour éviter que nos modèles adaptés ne soient trop conditionnés par des amorces systèmes répétitives et afin qu'ils gardent le même niveau de performance sur le domaine spécifique quelle que soit l'amorce utilisée par l'utilisateur, nous avons défini une procédure pour produire des amorces système variées. Ainsi, nous avons construit plusieurs amorces système de manière dynamique à l'aide d'une grammaire, comprenant plus ou moins de détails sur le comportement à adopter face à la question posée. Les descriptions utilisées dans cette grammaire ont été tout d'abord rédigées à la main, puis réécrites et enrichies à l'aide de Claude-3.7-Sonnet. Au total, cette grammaire permet de générer 45 variations d'amorces systèmes qui sont ensuite associée de façon aléatoire aux instructions générées précédemment. La grammaire est fournie en détail à l'annexe A.4.
### 3.1.4 Statistiques sur les instructions générées retenues

L'approche décrite à la section 3.1 a été appliquée à la fois à partir des données fournies par les organisateurs (AMIAD) et à partir des données collectées par Ouest France (OF). Au total, environ 90k instructions générées ont été sélectionnées avec cette méthode pour la source AMIAD (et seront référées par la suite par la dénomination **Gen AMIAD**) et 29k instructions pour la source OF. Une tâche spécifique a été définie de surcroît pour les données journalistiques (cf. section 3.1.2). L'ensemble des instructions générées à partir des données journalistiques sera nommé par la suite **Gen OF**. Au final la répartition des instructions générées par type de tâche est fournie dans la table 5. Des exemples sont fournis en annexe B.

<table><caption>TABLE 5 – Répartition par type de tâche des instructions générées</caption><thead><tr><td>Type d'instructions</td><td>Gen AMIAD</td><td>Gen OF</td></tr></thead><tbody><tr><td>Questions factuelles</td><td>23 767</td><td>7 447</td></tr><tr><td>QCM</td><td>23 991</td><td>7 416</td></tr><tr><td>Titrage</td><td>24 900</td><td>7 806</td></tr><tr><td>Résumé</td><td>17 935</td><td>6 024</td></tr><tr><td>Résumé factuel</td><td>–</td><td>8 736</td></tr><tr><td>Total</td><td>90 593</td><td>37 429</td></tr></tbody></table>

## 3.2 Instructions construites à partir de patrons

Pour certaines tâches comme l'explication d'acronymes ou encore les tâches de traduction, l'intérêt d'utiliser des modèles génératifs pour obtenir des instructions est moindre. Ainsi, afin de réduire notre empreinte carbone, nous utilisons des patrons d'instructions, nous permettant de construire des instructions relativement diverses dans leur formulation. Ces patrons sont disponibles en annexes A.3 et leur application a permis de produire un total de 2 786 instructions focalisées sur la connaissance du vocabulaire métier (qui seront par la suite référencées par la dénomination **Patrons AMIAD**).

## 3.3 Construction d'instructions longues

Jusqu'ici, les instructions générées étaient construites pour répondre aux quatre tâches de NLP sus-mentionnées que l'on sait évaluer (résumé, titrage, QCM et question-réponse factuelle). En complément, afin que nos modèles continuent d'assimiler les connaissances des documents, nous avons également créé des instructions plus longues et génératives.

Pour cela, en s'appuyant sur les documents, nous avons construit de nouvelles tâches de génération, appelées instructions longues, où l'idée est de combiner, ou d'inverser certaines tâches pour passer à un problème où la réponse attendue est un texte long.

Nous avons ainsi créé les instructions génératives suivantes :

- combinaison d'acronymes : explication de 2 à 30 acronymes choisis aléatoirement;

- combinaison de traductions : traduction de 2 à 30 textes choisis aléatoirement;

- résumé inversé : génération d'un paragraphe complet à partir d'un résumé.
Finalement, ce sont près de 7 800 instructions qui viennent s'ajouter au jeu d'instructions global (référencées par la suite comme **Long AMIAD**). Ces dernières diversifient nos tâches tout en permettant un nouveau passage du modèle sur les documents fournis.

## 3.4 Instructions généralistes

Pour éviter que le modèle adapté ne perde certaines compétences préalables, comme des connaissances générales ou la capacité à respecter le format d'une instruction, nous avons également considéré l'inclusion de données hors du domaine visé. Pour cela, nous nous sommes appuyés sur le corpus Tulu 3 SFT mixture<fnref n="9" /> récemment proposé dans le cadre de l'apprentissage des modèles Tülu 3 (Lambert et al., 2024). Ce jeu de données est multi-tâches, multilingue et très volumineux (environ 1 million d'instructions).

Pour ne pas déséquilibrer nos données d'apprentissage avec trop d'instructions généralistes et dans la perspective de produire un modèle principalement pour le français, nous avons produit une version filtrée du corpus Tulu 3 SFT mixture, de sorte à n'inclure que des instructions dont la langue principale est le français<fnref n="10" />. Le filtrage a été effectué *via l'outil LangDetect*<fnref n="11" />. La version filtrée ainsi obtenu comporte 5 891 instructions (référencées par la suite comme **Tülu 3 Fr**).

## 3.5 Bilan

La table 6 regroupe l'ensemble des instructions produites pour l'adaptation des modèles. Celles ayant été produites à partir des segments de *train* seront utilisées pour l'affinage sur instructions décrit à la section 4.3, avec plusieurs configurations qui seront détaillées dans la partie expérimentale.

<table><caption>TABLE 6 – Statistiques sur les différents jeux d'instructions.</caption><thead><tr><th rowspan="2"></th><th colspan="2">Nb. d'instructions</th><th rowspan="2">Nb. tokens</th><th colspan="2">Longueur moyenne (tokens)</th></tr><tr><th>Total</th><th>Apprentissage</th><th>Entrée (utilisateur)</th><th>Sortie (assistant)</th></tr></thead><tbody><tr><td>Gen AMIAD</td><td>90 593</td><td>79 974</td><td>60.9M</td><td>577</td><td>93</td></tr><tr><td>Patrons AMIAD</td><td>2 786</td><td>2 228</td><td>138k</td><td>39</td><td>11</td></tr><tr><td>Long AMIAD</td><td>7 786</td><td>6 082</td><td>16.8M</td><td>272</td><td>2 008</td></tr><tr><td>Gen OF</td><td>37 429</td><td>32 912</td><td>28M</td><td>648</td><td>102</td></tr><tr><td>Tülu 3 Fr</td><td>5 891</td><td>5 891</td><td>10M</td><td>744</td><td>946</td></tr></tbody></table>

## 4 Adaptation des modèles

Différentes techniques d'adaptation existent quand on souhaite spécifier et affiner les connaissances et aptitudes d'un modèle. D'abord, la poursuite du pré-entraînement (PPE, *continued pre-training*) est

<footnote n="9">9. https://huggingface.co/datasets/allenai/tulu-3-sft-mixture</footnote>

<footnote n="10">10. Par « langue principale », il faut comprendre que les instructions peuvent contenir des passages dans une autre langue, par exemple dans le cas d'une tâche de traduction.</footnote>

<footnote n="11">11. https://pypi.org/project/langdetect</footnote>
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.3")
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.3")
# activation du calcul du gradient pour la couche d'entree
model.enable_input_require grads()
# ajout du token de rembourrage
tokenizer.add_special_tokens({"pad_token": "[PAD]"})
# mise a jour du nombre de plongements
model_resize_token_embeddings(len(tokenizer))
model.config.pad_token_id =\n
tokenizer.convert_tokens_to_ids(tokenizer.pad_token)

Algorithme 1 – Code Python d'ajout d'un token de rembourrage

une méthode visant à prolonger l'apprentissage du modèle sur un nouveau dataset. Ensuite, l'Affinage
Sur Instructions (ASI, instruction-tuning) nous permet d'apprendre des nouvelles tâches à notre
modèle. Ces deux techniques, appliquées au modèle Mistral-7B-Instruct-v0.3, sont détaillées
dans les paragraphes suivants.

4.1 Environnement logiciel et matériel

Le PPE et l'ASI ont été mis en œuvre avec les librairies tr1<sup>12</sup> (version 0.15.2), notamment la classe tr1.SFTTrainer et transformers<sup>13</sup> (version 4.49.0) de Hugging Face. Les expériences ont été menées en utilisant l'outil deepspeed<sup>14</sup> (version 0.15.3) et en particulier, la technique ZeRO (Zero Redundancy Optimizer) (Rajbhandari et al., 2020) a été utilisée au niveau 3, qui permet de partitionner les états de l'optimiseur, les gradients et les paramètres du modèle et de décharger la mémoire des GPUs (Graphics Processing Unit) vers celle du CPU (Central Processing Unit). Le fichier de configuration de l'outil deepspeed est fourni à l'annexe C.2 Les librairies d'apprentissage utilisent la librairie torch<sup>15</sup> (version 2.5.1) cuda<sup>16</sup> (version 12.2.r12.2). Le calcul de l'attention est optimisée par la librairie flash-attn<sup>17</sup> (version 2.7.4.post1) en utilisant l'algorithme FlashAttention-2 (Dao, 2023). La supervision de la fonction de perte est effectuée avec l'outil tensorboard<sup>18</sup>. Les adaptations ont été réalisées sur une carte NVIDIA H200.

Par ailleurs, à la fois pour le PPE et pour l'ASI, il a fallu ajouter un token de rembourrage (*padding token*) qui n'était pas présent dans le modèle Mistral-7B-Instruct-v0.3. Ce token qui doit être différent du token de fin de séquence est nécessaire pour pouvoir concaténer plusieurs exemples jusqu'à la taille de la fenêtre du modèle, comme cela est expliqué dans la section sur le poursuite du pré-entraînement 4.2. Ce token de rembourrage a été ajouté grâce au code Python présenté par l'algorithme 1.

Dans le code présenté, pour le chargement du modèle et du tokenizer, certains paramètres ont été
omis tels que le token d'identification sur le site de téléchargement et ceux nécessaires à la librairie
flash-attn. Cet environnement commun est spécialisé pour chacun des deux types d'adaptation, à
savoir le PPE et l'ASI.

<footnote n="12">12. https://huggingface.co/docs/tr1/</footnote>

<footnote n="13">13. https://huggingface.co/docs/transformers</footnote>

<footnote n="14">14. https://www.deepspeed.ai/</footnote>

<footnote n="15">15. https://pytorch.org/</footnote>

<footnote n="16">16. https://developer.nvidia.com/cuda-toolkit</footnote>

<footnote n="17">17. https://pypi.org/project/flash-attn/</footnote>

<footnote n="18">18. https://www.tensorflow.org/tensorboard</footnote>
gradientaccumulation steps: 64
gradient_checkpointing: true
group_by_length: false
learning rate: 2.0e-05
lr_scheduler_type: cosine # learning rate scheduler type
maxGradNorm: 1.0 # maximum gradient norm
num_train_epochs: 3 # number of training epochs
optim: pagedAdamW 32bit
per_device_train_batch_size: 2 # per device training batch size
warmup ratio: 0.05
weight decay: 0.1

<caption>Algorithme 2 – Hyper-paramètres</caption>

## 4.2 Poursuite du pré-entraînement (PPE)

Le domaine visé étant technique de par son vocabulaire et ses acronymes propres, il nous semblait intéressant de tester une approche de poursuite du pré-entraînement afin que le modèle assimile une première fois les documents du challenge.

De cette façon, nous distinguons deux jeux de données différentes :

- Jeu fermé : Documents constitués à partir des données fournies par les organisateurs.

- Jeu ouvert : Documents constitués à partir des données fournies par les organisateurs + les documents provenant de Ouest-France.

A cette étape, l'ensemble des données fournies par l'AMIAD sont utilisées, et ce, directement après les traitements décrits dans la section 2. Les hyper-paramètres de l'adaptation sont les paramètres d'initialisation de la classe `trl.SFTConfig`<fnref n="19" />, l'algorithme 5 donne les valeurs des principaux hyper-paramètres.

La définition de l'ensemble des paramètres est donnée dans un fichier au format `yaml` présenté à l'annexe C.2. Les paramètres qui ne sont pas définis dans l'annexe prennent les valeurs par défaut définis par la fonction d'initialisation de `trl.SFTConfig`, à l'exception du paramètre `packing` qui est initialisé à `True` et du paramètre `max_seq_length` qui est initialisé à la taille de la fenêtre du modèle. Le paramètre `packing` permet de concaténer plusieurs exemples à la suite dans un seul exemple jusqu'au maximum de `max_seq_length` caractères. Cette concaténation est réalisée par la fonction `_prepare_dataset` de la classe `trl.SFTTrainer`<fnref n="20" />. Les exemples concaténés sont alors les considérés pour la constitution des lots lors de l'apprentissage.

Partant d'un modèle instruit (à savoir Mistral-7B-Instruct-v0.3), la pertinence *a priori* de reprendre une étape de pré-entraînement pouvait sembler questionnable mais la courbe de la fonction de perte de la figure 1 permet d'observer que la valeur de perte finale est inférieure à celle initiale. L'évolution est cependant marquée par une augmentation lors d'une première phase. Elle peut sans doute s'expliquer par le fait que le modèle s'attend à recevoir des instructions, plutôt que des documents. Dans une seconde phase, la courbe diminue progressivement pour finalement se stabiliser. Après une période de confusion, le modèle interprète correctement les documents qui lui sont fournis. Il gagne alors peu à peu en précision ce qui se matérialise par une convergence progressive de la fonction de perte. En outre, si la valeur finale de la perte n'est pas si éloignée de son point initial – bien que quand même inférieure, il est intéressant de noter que de nouvelles données spécifiques au domaine ont alors été vues par le modèle, ce qui est prometteur pour la suite des expérimentations.

<footnote n="19">19. https://huggingface.co/docs/trl/main/en/sft_trainer#trl.SFTConfig</footnote>

<footnote n="20">20. https://huggingface.co/docs/trl/main/en/sft_trainer#trl.SFTTrainer</footnote>
<figure><img src="image_3.png" /><figcaption>FIGURE 1 – Courbe de la fonction de perte du PPE pour les jeux fermé et ouvert. Les courbes affichées sont régularisées et proviennent des fichiers de sortie de *TensorBoard*²².</figcaption></figure>

Sur un autre plan, les premiers apprentissages ont montré que les modèles résultant de la poursuite du pré-entraînement ne produisaient jamais le symbole de fin de séquence *EOS* (*End Of Sequence*) et donc généraient de nouveaux tokens indéfiniment. Ce symbole aurait dû être rajouté à chaque document par la méthode `_prepare_dataset` de la classe `trl.SFTTrainer` mais ce n’était pas le cas pour la version 0.15.2 de la bibliothèque de trl utilisée lors des expériences<fnref n="21" />. Nous avons alors explicitement ajouté le symbole de fin de séquence à la fin de chaque document lors du chargement des données d’adaptation et de validation. Cette modification a permis de rétablir la prédiction de la fin de séquence et d’arrêter la génération du texte lors de l’utilisation des modèles.

## 4.3 Affinage sur instructions (ASI)

Tout comme pour le pre-entraînement, nous avons continué l’entraînement de nos modèles sur nos corpus d'instructions via le trl.SFTTrainer de la librairie transformers. Chaque instruction est représentée par une liste de 3 dictionnaires. Chaque dictionnaire a deux clés :

- "role": la valeur précise le rôle attribué au texte contenu dans le champ "content", elle peut prendre l'une des valeurs suivantes "system", "user", ou "agent",

- "content": la valeur contient le texte associé à chacun des rôles.

Le premier dictionnaire contient le "role" "system", le deuxième le "role" "user" et le dernier le "role" "agent". Ils correspondent respectivement au rôle que doit jouer le système, à la question ou la requête formulée par l'utilisateur et à la réponse fournie par l'agent. Des exemples de ce format sont montrés sur le site la documentation d'application de modèle de conversation<fnref n="23" />. Cette liste est transformée en une chaîne de caractères par la fonction `transformers.PreTrainedTokenizerBase.apply聊天模板<fnref n="24" />` qui introduit les séparateurs textuels spécifiques à chaque tokenizer entre les différents éléments de l'instruction (c'est-à-

<footnote n="21">21. Ce défaut a été corrigé dans les versions plus récentes</footnote>

<footnote n="23">23. https://huggingface.co/docs/transformers/en/chat_templating</footnote>

<footnote n="24">24. https://huggingface.co/docs/transformers/internal/tokenization_utils#transformers.PreTrained main Base apply chat template</footnote>
learning_rate: 2.0e-06
lr_scheduler_type: cosine # learning rate scheduler type
num_train_epochs: 2 # number of training epochs
optim: paged_adamw_32bit
per_device_train_batch_size: 16 # per device training batch size
warmup_ratio: 0.05
weight_decay: 0.01

## Algorithme 3 – Hyper-paramètres pour l'affinage sur instructions

dire les 3 éléments de la liste initiale).

De plus lors de l'ASI, l'optimisation de la fonction de perte ne se fait que sur la partie du texte correspondant au rôle "agent". La fonction de préparation des lots d'exemples trl.DataCollatorForCompletionOnlyLM permet ce calcul de la fonction de perte. En plus de la conversion de la chaîne de caractères en suite de tokens, elle indique sur quels tokens il ne faut pas optimiser la fonction de perte. Il faut lui fournir dans le paramètre response_template les tokens correspondant aux séparateurs entre la fin de la requête de l'utilisateur et le début de la réponse de l'agent. Ces tokens sont identifiés au préalable sur une instruction factice. Le paramètre padding_free positionné à False permet de concaténer plusieurs exemples d'un même lot<fnref n="25" />, dans une seule fenêtre du modèle de langage, de ne calculer la fonction de perte que sur les réponses de l'agent, de respecter les bornes entre chaque exemple à l'intérieur de la fenêtre et d'utiliser les mécanisme Flash-Attention-2 (Dao, 2023). Contrairement à ce qui est réalisé pour le pré-entrainement continué 4.2, la concaténation est réalisée pour chaque lot et le paramètre packing de l'objet trl.SFTConfig est ici forcé à False.

Enfin, quelques paramètres de l'objet trl.SFTConfig utilisé pour réaliser l'affinage sont donnés dans l'algorithme 3.

Outre les différences sur la concaténation des exemples, par rapport à l'étape de poursuite du pré-entrainement décrite à la section 4.2, deux hyper-paramètres ont été modifiés : le learning rate est réduit d'un ordre de grandeur et nous entraînons le modèle pour seulement deux époques au lieu de trois. Ces changements sont motivés par des expériences d'optimisation de ces hyper-paramètres. L'ensemble des paramètres est fourni dans un fichier yaml présenté à l'annexe C.2. L'impact du learning rate est illustré en annexe dans la figure 2. Les autres valeurs sont les valeurs définies par défaut pour l'initialisation de l'objet trl.SFTConfig.

# 5 Evaluation

## 5.1 Modèles retenus pour le challenge

Nous avons soumis 3 modèles 7B dans chacune des conditions "Fermé" (en exploitant uniquement les données fournies par les organisateurs du challenge) et "Ouvert" (en exploitant également des données additionnelles). Les caractéristiques des 6 modèles sélectionnés sont fournies dans la table 7. Les choix ont principalement été guidés par la possibilité d'analyser l'impact de la phase de Poursuite du du Pré-Entrainement (PPE) d'une part et l'impact de la diversité des instructions pour l'affinage (ASI) d'autre part.

<footnote n="25">25. https://huggingface.co/blog/packing-with-FA2</footnote>
<table><caption>TABLE 7 – Description des configurations pour les différents modèles soumis. Détail des données sélectionnées pour les phases de PPE et d'ASI, à partir des données fournies par les organisateurs du challenge (AMIAD) et par Ouest-France (OF).</caption><thead><tr><th rowspan="2"></th><th colspan="2">Documents PPE</th><th colspan="5">Instructions ASI</th></tr><tr><th>AMIAD</th><th>OF</th><th>Gen AMIAD</th><th>Patrons AMIAD</th><th>Long AMIAD</th><th>Gen OF</th><th>Tülu 3 Fr</th></tr></thead><tbody><tr><td>O_FT-Fermé-run1</td><td></td><td></td><td>✓</td><td></td><td></td><td></td><td></td></tr><tr><td>O_FT-Fermé-run2</td><td></td><td></td><td>✓</td><td>✓</td><td>✓</td><td></td><td></td></tr><tr><td>O_FT-Fermé-run3</td><td>✓</td><td></td><td>✓</td><td>✓</td><td>✓</td><td></td><td></td></tr><tr><td>O_FT-Ouvert-run1</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td></td><td></td></tr><tr><td>O_FT-Ouvert-run2</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td></td></tr><tr><td>O_FT-Ouvert-run3</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr><tr><td>Instr. d'apprentissage</td><td>-</td><td>-</td><td>79 974</td><td>2 228</td><td>6 082</td><td>32 912</td><td>5 891</td></tr><tr><td>Nb. total de tokens</td><td>48.6M</td><td>11.5M</td><td>53.5M</td><td>110k</td><td>13.6M</td><td>24.3M</td><td>10M</td></tr></tbody></table>

En ce qui concerne les modèles en condition Fermé, nous avons choisi de soumettre deux modèles ayant uniquement subi un affinage sur instructions. Le run1 a été adapté uniquement sur les instructions de type Résumé, Titrage, Question factuelle, et QCM générées à partir des données AMIAD selon le processus décrit à la section 3.1. Le run2 a été adapté avec les instructions complémentaires produites à l'aides de Patrons sur deux documents spécifiques (cf section 3.2 ainsi qu'à l'aide d'instructions longues (cf section 3.3). L'objectif ici était de mesure si des connaissances du domaine pouvaient être apportées au modèle uniquement sur la base d'instructions. Le run3 correspond à une étape préliminaire de PPE.

Concernant les modèles en condition Ouvert, nous avons systématiquement appliqué l'étape de PPE sur l'ensemble des données fournies par les organisateurs (AMIAD) et par Ouest-France (OF). Le run1 a été affiné à l'aide d'instructions produites uniquement à partir des données AMIAD alors que le run2 a également été affiné à l'aide d'instructions produites sur la base des données OF. Enfin, pour le run3, un jeu d'instructions généralistes en français (cf section 3.4).

## 5.2 Protocole d'évaluation

Afin d'évaluer la qualité des différents modèles entraînés, nous nous appuyons sur plusieurs jeux de données complémentaires et diversifiés. Dans la suite de cette section nous décrivons les jeux de données de test utilisés pour l'évaluation, ainsi que les métriques utilisées. Lorsque les tâches sont évaluées par une métrique d'accuracy, nous décrivons le détail de l'évaluation de l'exactitude de la réponse. Pour les tâches génératives, plusieurs métriques ont été envisagées mais nous avons choisi de reporter une métrique de type MOS. Un score moyen d'opinion est estimé sur l'ensemble des échantillons, par une note de 0 à 5 qui est attribuée pour chaque échantillon par le modèle GPT-4o-mini selon le principe du LLM As a Judge, indiquant la pertinence du résumé généré par rapport à la référence. Ces aspects sont bien évidemment discutables mais dans le cadre de ce challenge, nous avons dû opter pour une approche d'évaluation pragmatique pour guider les développements et sélectionner les modèles à retenir dans un temps contraint.
## 5.3 Évaluation sur des jeux de données du domaine

Nous avons évalué nos modèles sur trois types de jeux de test : le premier est dérivé des ensembles d'instructions synthétiques générées à partir des documents (cf. section 5.3.1), le deuxième provient des organisateurs du challenge (cf. section 5.3.2) et le dernier regroupe plusieurs évaluations sur des données génériques (cf. section 5.3.3).

### 5.3.1 Benchmarks synthétiques

Nous avons retenu pour l'évaluation une partie des instructions décrites à la section 3 qui avaient été écartées dans la partition de test. De façon à ne pas trop surcharger nos jeux de tests, nous avons réalisé un échantillonnage aléatoire dans chacun des ensembles d'instructions pour constituer une base de test issues des différentes sources de données. Nous n'avons pas fait d'évaluation sur les instructions générées à partir des documents journalistiques, mais uniquement sur celle générée à partir des documents fournis par les organisateurs.

- **QCM** regroupe des échantillons de questions à choix multiples générés à l'aide de GPT-4.1-mini tels que décrits à la section 3.1. Ils sont évalués à l'aide d'une métrique d'*accuracy* sur la lettre extraite de la réponse (l'extraction de la lettre est réalisée à l'aide de GPT-4o-mini).

- **Questions factuelles** regroupe des échantillons de questions à choix multiples générés à l'aide de GPT-4.1-mini tels que décrits à la section 3.1. L'évaluation est faite à l'aide d'une métrique d'accuracy, où une réponse générée est considérée comme correcte si elle contient la chaîne de caractère correspondant au fait de référence. Plusieurs variantes d'écriture pour le fait de référence sont acceptées : pour les dates (JJ/MM/AAAA, MM/AAAA, JJ/MM, formats textuels, abréviations etc.), les nombres (séparateurs, suffixes d'unités, gestion des signes, formats mixtes etc..). Le texte est également normalisé afin de traiter correctement la ponctuation et les caractères de contrôle.

- **Acronymes** correspond à un échantillonnage de la partition de test pour le jeu de données construit à l'aide de patrons (cf. section 3.2. La métrique utilisée est l'*accuracy*, où une réponse générée est considérée comme correcte si elle contient la signification de référence de l'acronyme. La réponse générée ainsi que la référence sont tous les deux normalisés au préalable (passage des textes en minuscules, conversion des caractères unicode en ASCII, gestion des espaces) afin de rendre l'évaluation plus souple. Dans le cas où plusieurs significations existent pour un même acronyme, la réponse générée est considérée correcte si au moins une de ces significations est présente dans la réponse.

- **Résumé** contient un échantillonnage aléatoire de la partition de test des instructions générées selon l'approche décrite à la section 3.1. Pour limiter le coût de l'évaluation, nous n'avons conservé que les instructions produites à partir des sources *web-minarm-ad*, *web-minarm-airinterne-divers*, *interne-ema* et *wikipedia-portail-armee*. La métrique utilisée est la métrique MOS décrite en début de cette section.

- **Titrage** contient un échantillonnage aléatoire de la partition de test des instructions générées selon l'approche décrite à la section 3.1. Pour limiter le coût de l'évaluation, nous n'avons conservé que les instructions produites à partir des sources *web-minarm-dga*, *web-minarm-marine*, *interne-formation*, *interne-magazines* et *wikipedia-portail-armee*. La métrique utilisée est la métrique MOS décrite en début de cette section.

Les résultats obtenus sur ces jeux de données sont fournis à la table 8.

De façon générale, les modèles ayant subi une poursuite du pré-entrainement (PPE) sont moins
<table><caption>TABLE 8 – Résumé des résultats sur les tâches générées à partir des données AMIAD. En gras, les meilleurs résultats parmi les modèles Mistral-7B-Instruct-v0.3 et ses versions adaptées.</caption><thead><tr><th></th><th>Résumé</th><th>Titrage</th><th>QCM</th><th>Q. fact.</th><th>Acron.</th><th>Rg. moy.</th></tr></thead><tbody><tr><td><strong>Nombre d'échantillons</strong></td><td>620</td><td>542</td><td>2 083</td><td>2 029</td><td>128</td><td></td></tr><tr><td><strong>Métrique</strong></td><td>MOS</td><td>MOS</td><td>Accuracy</td><td>Accuracy</td><td>Accuracy</td><td></td></tr><tr><td>GPT-4o-mini (2024-07-18)</td><td>3,83<sub>(3)</sub></td><td>3,38<sub>(3)</sub></td><td>69,1<sub>(1)</sub></td><td>9,6<sub>(5)</sub></td><td>10,9<sub>(4)</sub></td><td>3,2</td></tr><tr><td>Mist.-Sm.-24B-Inst.-2501</td><td>3,55<sub>(5)</sub></td><td>3,26<sub>(5)</sub></td><td>68,1<sub>(2)</sub></td><td>6,5<sub>(8)</sub></td><td>7,0<sub>(7)</sub></td><td>5,4</td></tr><tr><td>Mistral-7B-Instruct-v0.3</td><td>3,24<sub>(6)</sub></td><td>3,27<sub>(4)</sub></td><td>57,5<sub>(9)</sub></td><td>5,6<sub>(9)</sub></td><td>3,9<sub>(8)</sub></td><td>7,2</td></tr><tr><td>O_FT-Fermé-run1</td><td><strong>3,93<sub>(1)</sub></strong></td><td><strong>3,81<sub>(1)</sub></strong></td><td>65,4<sub>(5)</sub></td><td>9,2<sub>(6)</sub></td><td>3,9<sub>(8)</sub></td><td>4,2</td></tr><tr><td>O_FT-Fermé-run2</td><td>3,86<sub>(2)</sub></td><td>3,76<sub>(2)</sub></td><td>64,4<sub>(7)</sub></td><td>6,8<sub>(7)</sub></td><td>8,6<sub>(6)</sub></td><td>4,8</td></tr><tr><td>O_FT-Fermé-run3</td><td>2,10<sub>(9)</sub></td><td>2,06<sub>(9)</sub></td><td>62,2<sub>(8)</sub></td><td>10,3<sub>(4)</sub></td><td>10,9<sub>(5)</sub></td><td>7,0</td></tr><tr><td>O_FT-Ouvert-run1</td><td>2,66<sub>(7)</sub></td><td>2,32<sub>(7)</sub></td><td>65,5<sub>(4)</sub></td><td><strong>13,2<sub>(1)</sub></strong></td><td><strong>15,6<sub>(1)</sub></strong></td><td>4,0</td></tr><tr><td>O_FT-Ouvert-run2</td><td>2,58<sub>(8)</sub></td><td>2,22<sub>(8)</sub></td><td>65,1<sub>(6)</sub></td><td>12,0<sub>(2)</sub></td><td>14,8<sub>(2)</sub></td><td>5,2</td></tr><tr><td>O_FT-Ouvert-run3</td><td>3,66<sub>(4)</sub></td><td>3,25<sub>(6)</sub></td><td><strong>65,6<sub>(3)</sub></strong></td><td>11,3<sub>(3)</sub></td><td>14,8<sub>(2)</sub></td><td><strong>3,6</strong></td></tr></tbody></table>

performants sur les tâches génératives de résumé et de titrage, tout du moins du point de vue de la métrique MOS implémentée en mode *LLM-as-a-judge*. En effet dans certains cas, les modèles avec PPE ont tendance à produire des sorties plus longues ou à boucler sur leurs réponses. Seule la version O_FT-Ouvert-run3 en condition ouverte permet de retrouver des performances acceptables, sans doute grâce à l'apport des instructions généralistes issues du corpus Tülu. Les modèles et O_FT-Fermé-run2, qui n'ont pas subi de PPE, sont quant à eux performants sur les tâches de résumé et de titrage, outrepassant les performances des baselines. Ce résultat est à relativiser par le fait que les instructions de test ont été générées selon des protocoles identiques aux instructions d'apprentissage. Dans ce contexte, la phase d'ASI s'apparente à un affinage à la tâche.

Concernant la tâche de QCM, il est intéressant de voir que les modèles baselines les plus performants évalués ici, n'ont pas des performances très importantes (inférieures à 70%), ce qui reflète bien la problématique des connaissances spécifiques. Le modèle 7B de référence Mistral-7B-Instruct-v0.3 présente quant à lui des performances inférieures avec une accuracy de 57,5%. Pour cette tâche les meilleurs modèles adaptés à partir de ce modèle 7B atteignent des performances de l'ordre de 65%. Dans le cas des données fermées, le run O_FT-Fermé-run3 qui a subi une poursuite de pré-apprentissage présente des performances inférieures. Une analyse plus détaillée des sorties montre que cette dégradation peut être également expliquée par des dysfonctionnements de format, avec des sorties longues et en boucle, rendant plus difficiles l'exploitation des sorties.

Enfin les tâches de question factuelles et d'acronymes présentent globalement des performances très basses, y compris pour les modèles *baseline*, même si l'adaptation produit une amélioration notable, en particulier pour le modèle O_FT-Fermé-run1. Il est intéressant de noter que la seule différence entre O_FT-Ouvert-run3 et O_FT-Fermé-run1 est l'ajout des données journalistiques Ouest France lors de la phase de poursuite du pré-apprentissage. L'écart de performances observées, sur des tâches qui ne sont pas issues du contexte journalistique laisse entrevoir que de telles données apportent une meilleure connaissance factuelle du domaine. Malgré cela, il reste des pistes à explorer pour améliorer l'injection de connaissances factuelles.
## 5.3.2 Benchmarks fournis par les organisateurs

Quelques échantillons de test ont été fournis, que nous avons également intégré pour l'évaluation, même si les résultats doivent être pris avec les précautions d'usage du fait de leur petite taille.

- **QCM Défense** regroupe des différents jeux de données de type QCM fournis sur les domaines de la défense (QCM Culture SecuDefense, QCM Culture Minarm, QCM Institution FR). Ils sont évalués à l'aide d'une métrique d'*accuracy* sur la lettre extraite de la réponse (l'extraction de la lettre est réalisée à l'aide de GPT-4o-mini).

- **Gold** contient des exemples de questions factuelles, dont la réponse de référence est fournie sous la forme d'une expression régulière. Ils sont évalués à l'aide d'une métrique d'*accuracy* sur le respect de l'expression régulière de référence dans la réponse générée par les modèles.

- **Résumé court**<sup>26</sup> contient des exemples de résumés de documents restreints à deux phrases en sortie. Ils sont évalués à l'aide de la métrique MOS décrite précédemment.

Le jeu de données "hallucination" a été écarté de l'évaluation, en raison des limites de sa méthode de validation automatique, qui repose uniquement sur la détection de motifs par regexp et où des réponses correctes pouvaient être considérées à tort comme des hallucinations.

Les résultats obtenus sur ces jeux de données sont fournis à la table 9.

<table><caption>TABLE 9 – Résumé des résultats sur les tâches provenant des échantillons fournis par les organisateurs. En gras, les meilleurs résultats parmi les modèles Mistral-7B-Instruct-v0.3 et ses versions adaptées.</caption><thead><tr><th></th><th>QCM Défense</th><th>Gold</th><th>Résumé Court</th><th>Rg. moy.</th></tr></thead><tbody><tr><td><strong>Nombre d'échantillons</strong></td><td>30</td><td>10</td><td>10</td><td></td></tr><tr><td><strong>Métrique</strong></td><td>Accuracy</td><td>Accuracy</td><td>MOS</td><td></td></tr><tr><td>GPT-4o-mini</td><td>66,7<sub>(1)</sub></td><td>40,0<sub>(5)</sub></td><td>3,40<sub>(1)</sub></td><td>2,3</td></tr><tr><td>Mist.-Sm.-24B-Inst.-2501</td><td>60,0<sub>(3)</sub></td><td>20,0<sub>(7)</sub></td><td>3,20<sub>(2)</sub></td><td>4,0</td></tr><tr><td>Mistral-7B-Instruct-v0.3</td><td>43,3<sub>(9)</sub></td><td>10,0<sub>(9)</sub></td><td>2,90<sub>(6)</sub></td><td>8,0</td></tr><tr><td>O_FT-Fermé-run1</td><td>50,0<sub>(7)</sub></td><td>20,0<sub>(7)</sub></td><td><strong>3,20</strong><sub>(2)</sub></td><td>5,3</td></tr><tr><td>O_FT-Fermé-run2</td><td>50,0<sub>(7)</sub></td><td>30,0<sub>(6)</sub></td><td><strong>3,20</strong><sub>(2)</sub></td><td>5,0</td></tr><tr><td>O_FT-Fermé-run3</td><td>56,7<sub>(4)</sub></td><td>50,0<sub>(3)</sub></td><td>2,10<sub>(9)</sub></td><td>5,3</td></tr><tr><td>O_FT-Ouvert-run1</td><td>56,7<sub>(4)</sub></td><td><strong>60,0</strong><sub>(1)</sub></td><td>2,40<sub>(8)</sub></td><td>4,3</td></tr><tr><td>O_FT-Ouvert-run2</td><td><strong>63,3</strong><sub>(2)</sub></td><td><strong>60,0</strong><sub>(1)</sub></td><td>2,90<sub>(6)</sub></td><td><strong>3,0</strong></td></tr><tr><td>O_FT-Ouvert-run3</td><td>53,3<sub>(6)</sub></td><td>50,0<sub>(3)</sub></td><td><strong>3,20</strong><sub>(2)</sub></td><td>3,7</td></tr></tbody></table>

Même si ces résultats sont à prendre avec beaucoup de précautions du fait du faible nombre d'échantillons, ils révèlent une tendance qui confirment les résultats précédents, à savoir que la poursuite du pré-entraînement permet d'améliorer l'apport de connaissances pour le domaine et que l'ajout d'instructions généralistes dans la phase d'affinage sur instructions permet de meilleurs comportements sur les tâches génératives.

<footnote n="26">26. Pour des raisons matérielles et de temps nous n'avons pas inclus les résumés longs fournis par les organisateurs dans nos évaluations.</footnote>
### 5.3.3 Jeux de données généralistes

Afin d'évaluer les capacités généralistes des modèles, et notamment de vérifier l'absence de régression des performances après l'affinage, nous avons introduit des jeux de données de test généralistes dans nos évaluations.

- **QCM Généraliste** regroupe les différents jeux de données de type QCM fournis par les organisateurs sur les connaissances générales (QCM culture générale, QCM égalité H/F, QCM numérique, QCM raisonnement).

- **MMLU** correspond à une sélection de questions à choix multiples issus du corpus MMLU (Hendrycks et al., 2020) dans sa version anglaise (/cais/mmlu<sup>27</sup>) et française (/openai/MMMLU<sup>28</sup>), Nous avons sélectionné 10 échantillons par thématique, soit un total de 570 questions à choix multiples par langue.

- **IFEval**: Utilisation des versions anglaise et française depuis le corpus M-IFEval (Dussolle et al., 2025), afin d'évaluer les capacités des modèles à respecter des contraintes de format. La version anglaise contient 541 échantillons alors que la française en contient 235. La métrique retenue dans nos tableaux traduit la capacité des modèles à satisfaire toutes les contraintes donnée pour un prompt donnée, sans tolérance (Dussolle et al., 2025). Celle-ci est notée « Accuracy (stricte) ».

Les résultats sur ces jeux de données de test généralistes sont fournis dans la table 10.

<table><caption>TABLE 10 – Résultats comparatifs des différents modèles sur les benchmarks QCM Généraliste (fourni par AMIAD), MMLU (anglais et français) et IFEval (anglais et français). En gras, les meilleurs résultats parmi les modèles Mistral-7B-Instruct-v0.3 et ses versions adaptées.</caption><thead><tr><th></th><th>QCM<br>Généraliste</th><th>MMLU<br>En</th><th>MMLU<br>Fr</th><th>IFEval<br>En</th><th>IFEval<br>Fr</th><th>Rg.<br>moy.</th></tr></thead><tbody><tr><td><strong>Nombre échantillons</strong></td><td>40</td><td>570</td><td>570</td><td>541</td><td>235</td><td></td></tr><tr><td><strong>Métrique</strong></td><td>Accuracy</td><td>Accuracy</td><td>Accuracy</td><td>Accuracy<br>(stricte)</td><td>Accuracy<br>(stricte)</td><td></td></tr><tr><td>GPT-4o-mini</td><td>80,0<sub>(2)</sub></td><td>79,8<sub>(1)</sub></td><td>76,8<sub>(1)</sub></td><td>80,0<sub>(1)</sub></td><td>79,6<sub>(1)</sub></td><td>1,2</td></tr><tr><td>Mist.-Sm.-24B-Inst.-2501</td><td>92,5<sub>(1)</sub></td><td>72,6<sub>(2)</sub></td><td>66,8<sub>(2)</sub></td><td>76,9<sub>(2)</sub></td><td>77,0<sub>(2)</sub></td><td>1,8</td></tr><tr><td>Mistral-7B-Instruct-v0.3</td><td>62,5<sub>(4)</sub></td><td>53,2<sub>(4)</sub></td><td>48,6<sub>(4)</sub></td><td>48,4<sub>(8)</sub></td><td>51,9<sub>(5)</sub></td><td>5,0</td></tr><tr><td>O_FT-Fermé-run1</td><td>60,0<sub>(5)</sub></td><td>51,2<sub>(6)</sub></td><td><strong>49,5<sub>(3)</sub></strong></td><td><strong>55,5<sub>(3)</sub></strong></td><td><strong>54,0<sub>(3)</sub></strong></td><td><strong>4,0</strong></td></tr><tr><td>O_FT-Fermé-run2</td><td><strong>67,5<sub>(3)</sub></strong></td><td><strong>53,3<sub>(3)</sub></strong></td><td>47,5<sub>(5)</sub></td><td>54,5<sub>(4)</sub></td><td>48,5<sub>(6)</sub></td><td>4,2</td></tr><tr><td>O_FT-Fermé-run3</td><td>57,5<sub>(7)</sub></td><td>48,1<sub>(9)</sub></td><td>43,0<sub>(6)</sub></td><td>44,5<sub>(9)</sub></td><td>43,8<sub>(7)</sub></td><td>7,0</td></tr><tr><td>O_FT-Ouvert-run1</td><td>60,0<sub>(5)</sub></td><td>51,4<sub>(5)</sub></td><td>42,3<sub>(8)</sub></td><td>49,7<sub>(6)</sub></td><td>43,4<sub>(8)</sub></td><td>6,4</td></tr><tr><td>O_FT-Ouvert-run2</td><td>57,5<sub>(7)</sub></td><td>48,9<sub>(7)</sub></td><td>42,3<sub>(8)</sub></td><td>49,0<sub>(7)</sub></td><td>41,3<sub>(9)</sub></td><td>7,6</td></tr><tr><td>O_FT-Ouvert-run3</td><td>57,5<sub>(7)</sub></td><td>48,4<sub>(8)</sub></td><td>42,6<sub>(7)</sub></td><td>50,3<sub>(5)</sub></td><td>53,6<sub>(4)</sub></td><td>6,2</td></tr></tbody></table>

Les performances sur le benchmark MMLU de QCMs généralistes baissent dès lors que l'on introduit de la poursuite de pré-entraînement. En revanche, l'affinage sur instructions seul (O_FT-Fermé-run1 et O_FT-Fermé-run2) n'entraîne pas de dégradation sur cette tâche, voire même entraîne une légère amélioration sur l'échantillon en français par rapport au modèle 7B de base. Sur l'échantillon de QCMs généralistes fournis par les organisateurs, le deuxième modèle O_FT-Fermé-run2 (affiné à l'aide des instructions générées ainsi qu'avec des instructions longues

<footnote n="27">27. https://huggingface.co/datasets/cais/mmlu</footnote>

<footnote n="28">28. https://huggingface.co/datasets/openai/MMMLU</footnote>
et des instructions à base de patrons issues des documents spéciaux) semble mieux se comporter, même si la petite taille du corpus incite à nuancer les observations.

Concernant le jeu de test IFEval, qui mesure le respect des instructions (*Instruction Following*), l'affinage sur le jeu d'instructions généré à partir des documents du challenge (*O_FT-Fermé-run1*) apporte un gain par rapport au modèle 7B instruit initial. L'étape de poursuite du pré-entraînement induit une dégradation des performances sauf pour le run *O_FT-Ouvert-run3*, où les instructions Tülu 3 Fr ont été utilisées, permettant de réintroduire de la diversité dans les instructions, y compris avec des instructions de code. Ce dernier résultat confirme plusieurs analyses précédentes selon lesquelles la poursuite du pré-entraînement sur un modèle instruit peut être bénéfique pour l'adaptation au domaine, moyennant une phase ultérieure d'affinage sur instructions suffisamment riche pour compenser la perte des capacités du modèle à bien suivre les instructions.

## 5.4 Evaluation du coût carbone

La table 11 fournit l'évaluation du coût carbone des différentes étapes du processus d'adaptation. Nous détaillons le coût lié aux étapes d'apprentissage (affinage par instruction (ASI) et poursuite du pré-entraînement (PPE) le cas échéant. Par ailleurs, nous donnons également le coût lié à la génération des instructions pour l'étape d'ASI. La génération d'instructions a été effectuée à l'aide de GPT-4.1-mini sur un serveur se trouvant en Norvège. Aucun détail sur l'architecture du modèle n'ayant été partagé par OpenAI, nous utilisons la calculatrice EcoLogits afin d'obtenir une estimation à partir de tokens générés pour la création du jeu d'instructions. Au total, 16 901 684 tokens GPT-4.1-mini ont été générés (comprend la génération de tous les champs de la sortie structurée, et non pas uniquement de l'instruction finale, pour toutes les partitions), ce qui revient à 1 890 gCO2e (65.7 kWh).

Les apprentissages pour le challenge ont été réalisés sur un cluster de 8 GPUs de modèle H200 se trouvant en France, présentant chacun 141 Go de mémoire GPU. Les valeurs d'équivalent carbone consommés par nos modèles ont été estimés via la calculatrice *Green Algorithms calculator*<fnref n="29" />.

Enfin, comme mentionné plus tôt dans ce rapport, l'apprentissage du modèle de base a été poursuivi sur certains modèles (PPE). De cette façon, les modèles ouverts 1, 2 et 3 ont été affinés sur instructions à partir du même modèle issu du PPE.

<table><caption>TABLE 11 – Coût carbone des modèles, en gCO2e (et en kWh). Le coût carbone associé à la génération des instructions est une estimation calculée sur la base des instructions générées par GPT-4.1-mini pour la partition de train. Le PPE en mode *Ouvert* n'a été réalisé qu'une fois et est commun aux trois runs.</caption><thead><tr><th>Modèle</th><th>PPE</th><th>ASI</th><th>Gen. instructions</th></tr></thead><tbody><tr><td>O_FT-Fermé-run1</td><td>0</td><td>385 (7.5)</td><td>1 420 (45.9)</td></tr><tr><td>O_FT-Fermé-run2</td><td>0</td><td>387 (7.5)</td><td>1 420 (45.9)</td></tr><tr><td>O_FT-Fermé-run3</td><td>724 (14.1)</td><td>388 (7.6)</td><td>1 420 (45.9)</td></tr><tr><td>O_FT-Ouvert-run1</td><td>930 (18.1)</td><td>386 (7.5)</td><td>1 420 (45.9)</td></tr><tr><td>O_FT-Ouvert-run2</td><td>930 (18.1)</td><td>560 (10.9)</td><td>1 730 (58.9)</td></tr><tr><td>O_FT-Ouvert-run3</td><td>930 (18.1)</td><td>623 (12.2)</td><td>1 730 (58.9)</td></tr></tbody></table>

<footnote n="29">29. https:// calculator.green-algorithms.org/</footnote>
L'équivalent carbone est une mesure intéressante à observer, cela dit, elle dépend très fortement de la localisation du cluster de calcul. Par exemple, toujours selon cette calculatrice, pour une même consommation énergétique, l'équivalent CO2 d'un apprentissage en Allemagne est 6.5 fois plus élevé qu'en France. C'est pour cette raison que nous indiquons également l'équivalent en kWh.

# 6 Discussion

Plusieurs points dans le processus complet peuvent encore être améliorés. Par exemple le nettoyage et le filtrage des documents en amont est perfectible (nous aurions pu par exemple concatené les segments courts plutôt que de les filtrer). Il serait intéressant par ailleurs de mieux exploiter les images et les tableaux. Comme présenté en section 2.2, le texte des fichiers PDF est extrait directement ou à l'aide d'un OCR. Cependant, nous n'avons pas réalisé de traitements supplémentaires pour prendre correctement en compte les tableaux. De même, nous n'avons pas du tout exploité les images. Il serait également possible de générer des descriptions textuelles des images afin de venir enrichir notre jeu de données avec des informations supplémentaires. Au niveau de la quantité d'instructions générées, nous générons actuellement une seule instruction par segment. Or, les segments contiennent dans la majorité des cas assez de contenu pour générer plusieurs instructions portant sur des connaissances différentes. En ce qui concerne l'adaptation en elle même, nous avons concentré nos efforts sur les connaissances et le respect des instructions, mais il serait également intéressant de travailler sur le style des réponses fournies par les modèles adaptés (avec notamment des approches par renforcement). Actuellement, nos modèles adaptés produisent des réponses plutôt brèves en comparaison avec le modèle Mistral-7B-Instruct-v0.3 original. Lors d'une évaluation humaine des modèles de type Arène (non incluse dans ce rapport) par des collaborateurs extérieurs au challenge, il s'agissait d'une remarque récurrente venant pénaliser les modèles produits. De plus, le formatage des réponses en MarkDown de certains modèles comme GPT-4.1-mini a été apprécié et a pu faire basculer la préférence des utilisateurs pour ce modèle quand les deux réponses étaient factuellement correctes. Enfin, nous nous sommes concentrés sur des approches Full Fine Tuning et il serait intéressant de confronter nos conclusions avec des approches plus efficientes de type LoRa afin de réduire l'empreinte carbone du processus.

# 7 Conclusion

Nous avons présenté le détail des approches mises en œuvre pour l'adaptation du modèle Mistral-7B-Instruct-v0.3 au domaine de la Défense, en mode Fermé où seules les données fournies par les organisateurs du challenge EvalLLM2025 ont été utilisées, puis en mode Ouvert avec des données additionnelles. L'effort a porté sur la constitution d'un ensemble d'instructions diversifiées pour l'apprentissage, ainsi que sur la mise en place d'un benchmark couvrant plusieurs tâches et compétences pour évaluer nos modèles. Les expériences montrent que nos modèles adaptés ont de meilleures de connaissances de fond et une meilleure capacité de traitement de tâches sur le domaine de la défense, ainsi que des performances comparables (voire supérieures) sur des connaissances ou capacités généralistes.
BARBOULE C., HUYNH V.-P., BUFORT A., CHABOT Y., DAMNATI G. & LECORVÉ G. (2024). Telcolm : collecting data, adapting, and benchmarking language models for the telecommunication domain.

DAO T. (2023). FlashAttention-2 : Faster Attention with Better Parallelism and Work Partitioning. arXiv :2307.08691 [cs], doi : 10.48550/arXiv.2307.08691.

DUSSOLLE A., CARDEÑA A., SATO S. & DEVINE P. (2025). M-IFEval : Multilingual instruction-
following evaluation. In L. CHIRUZZO, A. RITTER & L. WANG, Éds., *Findings of the Association
for Computational Linguistics : NAACL 2025*, p. 6161–6176, Albuquerque, New Mexico : Associa-
tion for Computational Linguistics. DOI : 10.18653/v1/2025.findings-naacl.344.

GROUP I. N. W. (2020). Newscodes guidelines.

HENDRYCKS D., BURNS C., BASART S., ZOU A., MAZEIKA M., SONG D. & STEINHARDT J.
(2020). Measuring massive multitask language understanding. *arXiv preprint arXiv:2009.03300*.

LAMBERT N., MORRISON J., PYATKIN V., HUANG S., IVISON H., BRAHMAN F., MIRANDA L. J. V., LIU A., DZIRI N., LYU S., GU Y., MALIK S., GRAF V., HWANG J. D., YANG J., BRAS R. L., TAFJORD O., WILHELM C., SOLDAINI L., SMITH N. A., WANG Y., DASIGI P. & HAJISHIRZI H. (2024). Tülu 3 : Pushing frontiers in open language model post-training.

MARTIN L., MULLER B., ORTIZ SUÁREZ P. J., DUPONT Y., ROMARY L., DE LA CLERGERIE, SEDDAH D. & SAGOT B. (2020). Camembert : a tasty french language model. In *Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics* : Association for Computational Linguistics. DOI : 10.18653/v1/2020.acl-main.645.

RAJBHANDARI S., RASLEY J., RUWASE O. & HE Y. (2020). ZeRO : memory optimizations toward training trillion parameter models. In *Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis*, SC '20, p. 1–16, Atlanta, Georgia : IEEE Press.

SHAHID A., KLIKS A., AL-TAHMEESSCHI A., ELBAKARY A., NIKOU A., MAATOUK A., MOKH A., KAZEMI A., DE DOMENICO A., KARAPANTELAKIS A. et al. (2025). Large-scale ai in telecom : Charting the roadmap for innovation, scalability, and enhanced digital experiences.
# A Génération d'instructions

## A.1 Grammaires pour guider la génération des instructions

Les grammaires suivantes produisent des consignes supplémentaires, spécifiques à chaque tâche, qui sont incluses dans l'amorce système lors de la génération des instructions en lieu et place du champ `additional_information`.

### Consignes de génération : QCM

**Prompt** -> **InitialInstruction** "Important instruction to follow: You will generate " **NumberOfChoices** "

**InitialInstruction** -> "Your question must be context-free: this means it should be answerable even without seeing the input text. Your question should concern an atomic fact and the answers should be short & easily verifiable. The different options provided to the user must all be sensible (but all but one should be actually true). In your justification, you will not refer to the original text."

**NumberOfChoices** -> "4 different choices: a, b, c, d." | "5 different choices: a, b, c, d, e."

### Consignes de génération : Résumé

**Prompt** -> **Context** | ""

**Context** -> "You will ask the user a summarization question. Your summarization question must only ask the user to summarize and not mention the subject of the text."

### Consignes de génération : Titrage

**Prompt** -> "The question asked must follow this constraint: " **constraint**
**constraint** -> "It must be short and to the point ('Titrer ce document')"
| "It must be short and to the point ('Générer un titre pertinent pour le document-ci dessus' or slight alternatives)" | "You must specify a certain titling style" | "You must specify that the title should be suitable for a document of type [YOUR CHOICE]" | "You must specify a target style for the title and that the title should be suitable for a document of type [YOUR CHOICE]"

Il n'y a pas de consignes supplémentaires à suivre pour générer des instructions de réponse à des questions factuelles.

## A.2 Description des classes Pydantic pour le contrôle du format

Les classes Pydantic permettent de forcer la génération à suivre un certain format. La réponse générée par `GPT-4.1-mini` est donc structurée en différents champs, qui sont écrit en gras ci-dessous.
## FactualQAInstruction

- **identified факт (Fact):** The atomic fact that was identified in the text as important, containing its value as well as its type

- **question (str):** The question asked to the user. The answer to that question should contain the identified fact.

- **answer (str):** The answer to the question, in natural language, containing the identified atomic fact. Note the emphasis on 'natural language', you must construct a full sentence that sounds natural to the reader.

## A.2.5 Résumés factuels Ouest-France

### Fact

Fait important extrait de l'article sous forme de phrase.

- **fact (str):** fait résumant un élément important de l'article analysé

- **question (str):** question posée à propos du fait

### Summary

- **summary (list[Fact]):** faits importants résumant l'article

## A.3 Grammaires pour la production des instructions Patron AMIAD

### Patron pour la génération d'acronymes

Prompt -> AmorceGenerale QuestionType1WithDelimiterAndAcronym |

QuestionType2

AmorceGenerale -> "" | "A partir de tes connaissances, répond à cette question : " | "Peux-tu m'expliquer ce " | "J'aimerais comprendre ce " | "Je cherche à savoir ce "

DenominationAcronymeLe -> "le sigle" | "l'acronyme"

DenominationAcronymeDu -> "du sigle" | "de l'acronyme"

DenominationAcronymeCe -> "ce sigle" | "cet acronym"

Suivant -> " suivant " | ""

QuestionType1 -> "que veut dire " DenominationAcronymeLe | "quelle est la signification " DenominationAcronymeDu | "que signifie "

DenominationAcronymeLe QuestionType1WithDelimiter -> QuestionType1

Suivant :" | "?" | "->" QuestionType1WithDelimiterAndAcronym ->

QuestionType1WithDelimiter " acronym "

QuestionType2 -> "quel est le sens de " DenominationAcronymeCe " ?"

QuestionType2WithDelimiterAndAcronym -> "'acronym' -> " QuestionType2
## Patron pour la génération de traductions en-fr

```
Prompt -> general_prefix Question_type punctuation
  general_prefix -> "Peux-tu me traduire en français " | "Pourrais-tu
  traduire en français " | "J'aimerais savoir comment on dit en français "
  | "Comment dire en français " | "Traduis en français " | "Merci de traduire
  en français " | "Pourrais-tu m'aider à traduire en français " | "Aide-moi à
  traduire en français "
  Denomination_le -> "" | "la phrase " | "la phrase suivante " | "les mots "
  | "les mots suivants " | "cette expression " | "le passage "
  Denomination_ce -> "" | "cette phrase " | "ces mots " | "cette expression
  | "ce passage "
  quote.wrapper -> "'sentence'" | "sentence" | ": sentence" | "sentence"
  Question_type -> Denomination_le quote.wrapper | Denomination_ce
  quote.wrapper
  punctuation -> "" | "." | " ?"
```

## Patron pour la génération de traductions fr-en

```
Prompt -> general_prefix Question_type punctuation
  general_prefix -> "Peux-tu me traduire en français " | "Pourrais-tu
  traduire en anglais " | "J'aimerais savoir comment on dit en anglais " |
  "Comment dire en anglais " | "Traduis en anglais " | "Merci de traduire
  en anglais " | "Pourrais-tu m'aider à traduire en anglais " | "Aide-moi à
  traduire en anglais "
  Denomination_le -> "" | "la phrase " | "la phrase suivante " | "les mots "
  | "les mots suivants " | "cette expression " | "le passage "
  Denomination-ce -> "" | "cette phrase " | "ces mots " | "cette expression
  | "ce passage "
  quote.wrapper -> "'sentence'" | "sentence" | ": sentence" | "sentence"
  Question_type -> Denomination_le quote.wrapper | Denomination_ce
  quote.wrapper
  punctuation -> "" | "." | " ?"
```

## A.4 Grammaire pour la diversification des amorces système

Les amorces système des instructions se déclinent en trois catégories : vides, généralistes, ou spécifiques au contexte de défense. Les amorces de type "défense" varient en niveau de détail, avec la possibilité que le champ `FollowUpDefense` reste non renseigné dans certains cas. L'amorce peut également inclure des directives supplémentaires concernant le respect du format demandé par l'utilisateur.
Prompt -> "" | PromptGeneraliste | PromptDefense

PromptGeneraliste -> Amores Format

PromptDefense -> AmoresDefense FollowUpDefense Format

Amores -> "Vous êtes un assistant dont le but est d'aider un utilisateur à répondre à des questions." | "En tant qu'assistant, votre mission consiste à aider les utilisateurs à trouver des réponses à leurs questions." | "Votre objectif est de venir en aide à un utilisateur." | "Votre rôle est d'assister les utilisateurs afin de répondre aux questions que ces derniers pourraient se poser sur une multitude de sujets."

AmoresDefense -> "" | "Vous êtes un assistant dont le but est d'aider un utilisateur à répondre à des questions." | "En tant qu'assistant, votre mission consiste à aider les utilisateurs à trouver des réponses à leurs questions." | "Votre objectif est de venir en aide à un utilisateur." | "Votre rôle est d'assister les utilisateurs afin de répondre aux questions que ces derniers pourraient se poser sur une multitude de sujets." | "Vous êtes un expert senior spécialisé dans l'industrie de la défense et les affaires militaires." | "Vous êtes un spécialiste chevronné dans le domaine militaire et l'industrie de l'armement." | "Vous possédez une connaissance approfondie et une longue expérience dans l'industrie de l'armement et les affaires militaires." | "Vous êtes un expert de longue date dans le secteur militaire et l'industrie de la défense."

FollowUpDefense -> "" | "Vous maîtrisez tous les aspects des armements - qu'ils soient terrestres, navals ou aériens - ainsi que les technologies de pointe comme l'IA, la robotique, le cyber et le spatial. Votre expertise couvre aussi bien les processus industriels que la R&D militaire, les stratégies opérationnelles, le renseignement et les réalités économiques du secteur. Vous avez une compréhension approfondie des enjeux géopolitiques et des politiques de défense." | "Vous êtes incollable sur les systèmes d'armement terrestres et aériens, ainsi que sur les technologies de rupture comme l'IA et le spatial. Les rouages économiques du secteur défense et les subtilités des relations internationales font partie de votre expertise quotidienne." | "Vous maîtrisez l'écosystème complet de la R&D militaire et du renseignement. Les technologies émergentes n'ont pas de secret pour vous, pas plus que les complexités des relations entre États en matière de défense." | "En tant qu'expert, vous comprenez les subtilités des armements de nouvelle génération et leurs implications stratégiques. Votre connaissance approfondie des acteurs industriels s'accompagne d'une vision claire des dynamiques géopolitiques qui façonnent le secteur."

Format -> "" | "Vous ferez attention à respecter le format attendu par l'utilisateur lorsque cette demande est explicitée." - "Si l'utilisateur vous demande de formuler votre réponse sous un certain format, vous le suivrez à la lettre."
B Exemples d'instructions générées

<table><caption>TABLE 12 – Exemples d'instructions générées</caption><thead><tr><td>Type d'instruction</td><td>Question utilisateur</td><td>Réponse</td></tr></thead><tbody><tr><td>Questions factuelles</td><td>Quelle est la date de lancement de l'expérimentation de l'outil Klaxoon au ministère des Armées ?</td><td>L'expérimentation de l'outil Klaxoon au ministère des Armées a été lancée le 28 mars 2023.</td></tr><tr><td>QCM</td><td>Quelle île accueille l'aéroport de Dzaoudzi, point d'arrivée du fret humanitaire transporté par les avions A400M Atlas ?<br/>a - L'île de Tahiti<br/>b - L'île de La Réunion<br/>c - L'île de Corse<br/>d - L'île de Madagascar<br/>e - L'île de Petite Terre à Mayotte</td><td>La bonne réponse est la lettre e).<br/>L'aéroport de Dzaoudzi est situé sur l'île de Petite Terre qui fait partie de Mayotte. Le fret humanitaire est acheminé via cet aéroport par des avions A400M Atlas. La Réunion est une île proche mais distincte, tandis que Madagascar, Corse et Tahiti sont des îles non concernées par ce contexte géographique précis.</td></tr><tr><td>Résumé</td><td>&lt;Texte à résumer&gt;<br/>Peux-tu résumer l'histoire et les contributions du LRBA ?</td><td>Le texte analyse les causes des défaites répétées des vaisseaux de guerre français face à la Royal Navy durant la Révolution et l'Empire. [...] De nombreux navires furent capturés et réutilisés par la Royal Navy, illustrant la supériorité britannique à cette époque.</td></tr><tr><td>Titling</td><td>&lt;Texte à titrer&gt;<br/>Générer un titre pertinent pour le document ci-dessus</td><td>Inauguration de la base navale de Ream au Cambodge : un enjeu stratégique entre la Chine et les États-Unis</td></tr><tr><td>Résumé factuel (OF)</td><td>Lister les faits importants du texte suivant : &lt;texte&gt;</td><td>-Foselev et Inouid expérimentent un projet de maintenance prédictive depuis 2018.<br/>-Le projet IoT4NR est financé à hauteur de 120 000 euros par le pôle européen SCS.<br/>-Le dock flottant de Foselev a été équipé de capteurs pour mesurer la stabilité du navire.<br/>-Des capteurs sur le Castor 02 permettent de détecter des anomalies pouvant conduire à des pannes.</td></tr></tbody></table>
# C Adaptation

## C.1 Impact du taux d'apprentissage

<figure><img src="image_4.png" /><figcaption>FIGURE 2 – Comparaison de l'évolution de la fonction de perte pour différents taux d'apprentissage sur les ensembles de validation des tâches de questions factuelles, titrage, QCM et résumé.</figcaption></figure>

## C.2 Paramètres pour l'apprentissage

L'apprentissage prolongé PPE a été entraîné sur un cluster de calcul interne composé de 8 machines NVIDIA H200. Ces dernières présente une mémoire GPU de 141Gb, nous permettant de faire tourner l'apprentissage prolongé du modèle Mistral-7B-Instruct-v0.3 sur un seul GPU, avec les paramètres suivants décrits dans le bloc 5. Les hyper-paramètres liés à l'étape d'affinage sur instructions sont donnés dans le bloc 3. Enfin la configuration DeepSpeed est donnée au bloc 6.
dataset_text_field: "content"
bf16: true
fp16: false
dataloader_num_workers: 4
dataloader_persistent_workers: true
dataloader pin_memory: true
dataloader_prefetch_factor: 2
disable_tqdm: true
eval_strategy: steps
eval_steps: 1
evalaccumulation_steps: 1
logging_steps: 1
logging_strategy: steps
report_to: tensorboard
gradientaccumulation_steps: 64
gradient_checkpointing: true
per_device_eval_batch_size: 1
per_device_train_batch_size: 2
group_by_length: false
learning_rate: 2.0e-05
lr_scheduler_type: cosine
loc_level: warning
maxGradNorm: 1.0
max_steps: -1
num Train_epochs: 3
optim: paged_adamw_32bit
push_to hub: false
save_steps: 0
save_strategy: epoch
save_total_limit: 1
torch_compile: false
use_ligerkernel: false
warmup_ratio: 0.05
weight decay: 0.1

<caption>Algorithme 4 – Hyper-paramètres PPE</caption>
bf16: true
dataloader_num_workers: 6
dataloader_persistent_workers: false
dataloader pin_memory: false
dataloader prefetch_factor: 2
disable_tqdm: true
evalaccumulation_steps: 1
eval_steps: 10
eval_strategy: steps
fp16: false
gradientaccumulation_steps: 16
gradient_checkpointing: true
group_by_length: false
learning_rate: 2.0e-06
log_level: warning
logging_steps: 10
lr_scheduler_type: cosine
maxGradNorm: 1.0
max_steps: -1
num Train_epochs: 2
optim: paged_adamw_32bit
per_device_eval_batch_size: 4
per_device_train_batch_size: 16
push_to hub: false
report_to: tensorboard
save_steps: 0
save_strategy: epoch
save_total_limit: 5
torch_compile: false
use_liger kernel: false
warmup_ratio: 0.05
weight decay: 0.1

<caption>Algorithme 5 – Hyper-paramètres apprentissage des instructions ASI</caption>
```json
{
  "fp16": {
    "enabled": "auto",
    "loss_scale": 0,
    "loss_scale_windows": 1000,
    "initial_scale_power": 16,
    "hysteresis": 2,
    "min_loss_scale": 1
  },
  "bf16": {
    "enabled": "auto"
  },
  "zero_optimization": {
    "stage": 3,
    "offload_optimizer": {
      "device": "cpu",
      "pin_memory": true
    },
    "offload_param": {
      "device": "cpu",
      "pin_memory": true
    },
    "overlap_comm": true,
    "contiguous_gradients": true,
    "sub_group_size": 1e9,
    "reduce bucket size": "auto",
    "stage3_prefetch bucket size": "auto",
    "stage3_param persistence threshold": "auto",
    "stage3_max live parameters": 1e9,
    "stage3_max reuse distance": 1e9,
    "stage3 gather 16bit weights on model save": true
  },
  "gradient accumulation steps": "auto",
  "gradient clipping": "auto",
  "steps per print": 2000,
  "train_batch_size": "auto",
  "train micro batch size per gpu": "auto",
  "wall clock breakdown": false
}
```

<caption>Algorithme 6 – Contenu du fichier zero3.json de configuration de deepspeed</caption>