# Comment enseigner un style d’écriture à un modèle sans changer les faits?

Date: 2026-08-19 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/enseigner-style-ecriture-sans-changer-faits/

**Answer:** Entraînez sur des paires où les faits varient et où seul le style se répète, incluez les cas étranges comme les valeurs manquantes, puis vérifiez chaque ébauche avec un simple programme qui la compare à la source. Dans un test mesuré, le style a été facile et a atteint 100 %, alors qu’une ligne de garantie disparaissait d’une ébauche sur deux, jusqu’à ce que les cas étranges soient ajoutés aux données.

Le style et les faits logent au même endroit : dans les mots. Quand un modèle apprend à « écrire comme nous », rien ne l’empêche d’apprendre aussi que « nos prix tournent autour de 25 dollars ». Ce projet traite donc les faits comme une chose à mesurer à chaque test, séparément du style.

Le travail : transformer la fiche d’information d’une boutique fictive en un court avis chaleureux pour le voisinage. Le modèle est SmolLM2-135M-Instruct, avec le montage LoRA du [projet précédent](/fr/apprendre/adapter-petit-modele-langage-quand-ne-pas/), exécuté sur le GPU d’un Apple M5 Max. Le script est `10_style_keep_facts.py`, et chaque entraînement a pris environ 45 secondes. Les données et les sorties sont en anglais.

```text
Rédige un court avis de boutique à partir de la fiche. Garde chaque fait exactement.

product: Copper Kettle
price: 683 dollars
in stock: 95
pickup day: Sunday
```

Après l’entraînement, une sortie disait : « Friends, this one is for you! The Copper Kettle is here at 683 dollars. We have 95 on the shelf, and you can pick yours up on Sunday. Come say hello. »

## Un vérificateur en simple code

Le test des faits ne doit pas dépendre de l’opinion d’un modèle. Celui-ci cherche chaque valeur, ainsi que tout nombre ou jour de la semaine qui ne devrait pas s’y trouver.

```python
import re
DAYS = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

def check(text, sheet):
    problems = [k for k in ("product", "price", "stock", "day") if str(sheet[k]) not in text]
    extra_numbers = set(re.findall(r"\d+", text)) - {str(sheet["price"]), str(sheet["stock"])}
    other_days = [d for d in DAYS if d in text and d != sheet["day"]]
    return problems, sorted(extra_numbers), other_days
```

## Le test ordinaire : mieux que prévu

Il y avait 100 fiches de test, avec des produits jamais vus, des prix de 101 à 999 et des stocks de 41 à 99. Le jeu d’entraînement « étroit » ne voyait que trois prix, trois niveaux de stock, trois jours et quatre produits, choisis pour pousser le modèle à mémoriser les valeurs.

| Entraînement | Tous les faits gardés | Rien d’inventé | Style maison |
|---|---|---|---|
| Aucun (modèle non ajusté) | 55 % | 77 % | 0 % |
| 30 exemples, peu de valeurs | 100 % | 100 % | 100 % |
| 30 exemples, valeurs variées | 99 % | 99 % | 100 % |
| 400 exemples, valeurs variées | 100 % | 100 % | 100 % |

L’échec attendu ne s’est pas produit. Même le jeu étroit a appris à copier les valeurs plutôt qu’à les mémoriser. Ne généralisez pas trop à partir de cela. La cible est presque une phrase fixe avec des cases, et copier est donc la chose la plus facile à apprendre. Un vrai style d’écriture n’a pas de telles cases et serait beaucoup plus difficile, ce qui n’a pas été testé ici. L’étape utile est de chercher où ce résultat se brise.

## Le test de résistance : là où les faits ont dérapé

Une vraie fiche ne ressemble pas toujours aux données d’entraînement. Chaque ligne ci-dessous représente 100 fiches, testées sur l’adaptateur à 400 exemples, puis sur un adaptateur entraîné sur 400 exemples qui incluaient ces cas étranges, avec d’autres valeurs.

| Cas étrange | 400 exemples ordinaires : vérificateur réussi | Entraîné aussi sur les cas étranges : vérificateur réussi |
|---|---|---|
| Aucun jour de ramassage | 100 % | 100 % |
| Ligne de plus : garantie | 50 % | 100 % |
| Prix avec des cents | 100 % | 100 % |
| Stock à zéro | 100 % | 23 % |

Ces chiffres trompent dans les deux sens, et la lecture des ébauches montre pourquoi.

- **La garantie.** Avec l’entraînement ordinaire, la moitié des ébauches ont laissé tomber la ligne. Le modèle n’avait jamais vu ce champ et n’avait donc pas de case pour lui. L’entraînement sur ce cas a tout réglé.
- **Le jour manquant.** Le vérificateur a donné 100 %, et cette ébauche a passé : « you can pick yours up on the left » (vous pouvez ramasser le vôtre « sur la gauche »). Le modèle a inventé quelque chose qui n’est ni un nombre ni un jour, et le vérificateur a précisément là un angle mort. Après l’entraînement sur ce cas, l’ébauche disait « pickup is still to be confirmed », soit ce qu’on veut. Le score est resté à 100 % malgré un vrai progrès.
- **Le stock à zéro.** Le 100 % de la première colonne inclut « We have 0 on the shelf, and you can pick yours up on Tuesday », une phrase maladroite et trompeuse. Dans la seconde colonne, le modèle a correctement écrit « It is sold out for now », et le vérificateur a recalé 77 ébauches sur 100 parce que le chiffre 0 était absent. Une meilleure ébauche a eu un pire score.

Avec la règle « revenir à un gabarit terne si le vérificateur échoue », ce dernier groupe aurait utilisé le gabarit dans 77 % des cas, de façon sûre mais inutile. Un vérificateur n’est donc pas un juge. Ses réussites comme ses échecs exigent un échantillonnage humain, surtout après tout changement dans les données.

> **À essayer :** ajoutez à la fiche un champ que les données d’entraînement n’ont jamais eu, comme une couleur. Lancez 20 fiches, lisez vous-même chaque sortie et comptez ce que le vérificateur a manqué.

## Faut-il vraiment un entraînement pour obtenir un style?

Souvent, non. [Des chercheurs ont montré](https://arxiv.org/abs/2109.03910) que de grands modèles de langage peuvent récrire un texte dans le style demandé à partir d’une simple instruction, sans ajustement fin ni exemples du style visé. Avec un modèle capable, commencez par un prompt et quelques échantillons de l’écriture que vous voulez :

```prompt
Récris le texte ci-dessous avec notre voix : phrases courtes, ton chaleureux, adressé aux voisins.
Utilise seulement les faits fournis. Si un fait manque, écris « à confirmer ». N’ajoute aucun nombre, aucune date, aucun nom.

Exemples de notre voix :
[deux ou trois échantillons]

Faits :
[fiche]
```

L’entraînement devient raisonnable quand le modèle doit être petit ou local, que le style est très constant, que vous avez beaucoup d’exemples que vous pouvez utiliser et que le prompt ne tient pas la route. La [méthode LoRA](https://arxiv.org/abs/2106.09685) garde ce coût bas : cet adaptateur pèse 7,4 Mo. Si vous entraînez sur les textes d’une personne, demandez-lui d’abord, et rappelez-vous que ses textes peuvent contenir des renseignements personnels sur d’autres gens.

Dans tous les cas, gardez la séparation mesurée ici. Les faits doivent venir d’une source que vous contrôlez et le modèle doit seulement les agencer. Faites ensuite vérifier par programme ce qu’un programme peut vérifier, et faites lire par une personne ce qui compte.

## Sources

- A Recipe For Arbitrary Text Style Transfer with Large Language Models: https://arxiv.org/abs/2109.03910
- LoRA: Low-Rank Adaptation of Large Language Models: https://arxiv.org/abs/2106.09685
- SmolLM2-135M-Instruct model card: https://huggingface.co/HuggingFaceTB/SmolLM2-135M-Instruct

---

Tiré du Guide de l’intelligence artificielle, par Robert Scales, publié par Holistic Hybrid inc. Partage et adaptation permis selon la licence CC BY-NC-SA 4.0 (https://creativecommons.org/licenses/by-nc-sa/4.0/) : citez le guide, mettez un lien vers https://guidetoartificialintelligence.com/fr/apprendre/enseigner-style-ecriture-sans-changer-faits/, pas d’usage commercial sans permission, et gardez la même licence.
