Aller au contenu principal

Context Biasing : Améliorer la Précision

Mis à jour le 29 juillet 2026

Le problème des termes spécialisés

Les modèles de transcription sont entraînés sur du langage courant. Lorsque votre audio contient des noms propres, des acronymes, du jargon technique ou des termes métier peu courants, le modèle peut mal les transcrire : « Voxtral » devient « vox trail », « RGPD » ressort en « RG PD ». Sur une réunion d’une heure, ces erreurs se comptent par dizaines et ce sont précisément les mots que vous cherchiez à extraire.

Le context biasing résout ce problème en fournissant au modèle une liste de termes attendus. Le modèle ajuste alors ses probabilités pour favoriser ces termes lorsqu’il les détecte dans l’audio. Ce n’est pas un remplacement automatique après coup, mais une orientation du décodage pendant la transcription — la nuance explique pourquoi le résultat reste naturel.

Utiliser le context biasing

Le paramètre context_bias accepte une chaîne de caractères contenant jusqu’à 100 mots ou phrases, séparés par des virgules.

import os
from mistralai import Mistral

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

with open("reunion_tech.mp3", "rb") as f:
    response = client.audio.transcriptions.complete(
        model="voxtral-mini-2602",
        file={"content": f, "file_name": "reunion_tech.mp3"},
        context_bias="Voxtral,Mistral AI,RGPD,Kubernetes,PostgreSQL,FastAPI"
    )

print(response.text)

L’effet se mesure immédiatement. Sans context biasing, une réunion d’ingénierie peut produire ceci :

On a déployé le nouveau service sur cubernétisse avec fast API
et la base post grès cul.

Avec le paramètre "Kubernetes,FastAPI,PostgreSQL", la même phrase devient exploitable :

On a déployé le nouveau service sur Kubernetes avec FastAPI
et la base PostgreSQL.

Construire une liste efficace

Quatre familles de termes méritent d’y figurer. Les noms propres d’abord : personnes, entreprises, produits, c’est-à-dire tout ce que le modèle n’a aucune raison de connaître. Les termes techniques ensuite : acronymes, noms de technologies, protocoles. Le jargon métier propre à votre industrie, celui qui ne figure dans aucun dictionnaire généraliste. Et enfin les noms de lieux : villes, bâtiments, salles de réunion, souvent cités et rarement bien transcrits.

Le contenu de la liste dépend entièrement du contexte. Une réunion de startup technologique n’appelle pas le même vocabulaire qu’une consultation médicale ou qu’un entretien en cabinet d’avocats. Voici trois listes réelles pour vous servir de gabarit.

Réunion tech startup :

context_bias = ",".join([
    "Mistral AI", "Voxtral", "Claude", "GPT-5.6",
    "Kubernetes", "PostgreSQL", "FastAPI", "Redis",
    "RGPD", "HIPAA", "SOC 2",
    "sprint", "backlog", "user story",
    "CI/CD", "Docker", "Terraform"
])

Cabinet médical :

context_bias = ",".join([
    "paracétamol", "ibuprofène", "amoxicilline",
    "IRM", "scanner", "échographie",
    "glycémie", "hémoglobine", "créatinine",
    "Dr Martin", "Dr Dubois",
    "CHU Pitié-Salpêtrière"
])

Cabinet d’avocats :

context_bias = ",".join([
    "SARL", "SAS", "SASU",
    "article L.225-1", "Code de commerce",
    "assignation", "mise en demeure",
    "TGI", "Cour d'appel",
    "Maître Dupont", "Maître Leroy"
])

Gérer le vocabulaire par projet

Coder la liste en dur ne tient pas dès que plusieurs clients ou plusieurs services entrent en jeu. Le script suivant charge le vocabulaire depuis un fichier JSON, autorise l’ajout de termes ponctuels, déduplique l’ensemble et tronque à cent termes pour rester dans la limite de l’API.

import os
import json
from pathlib import Path
from mistralai import Mistral


def charger_vocabulaire(chemin_config: str) -> str:
    """Charge le vocabulaire de context biasing depuis un fichier JSON."""
    config = json.loads(Path(chemin_config).read_text(encoding="utf-8"))
    termes = config.get("termes", [])

    if len(termes) > 100:
        print(f"Attention : {len(termes)} termes fournis, "
              f"seuls les 100 premiers seront utilisés.")
        termes = termes[:100]

    return ",".join(termes)


def transcrire_avec_vocabulaire(
    chemin_audio: str,
    chemin_config: str = None,
    termes_supplementaires: list = None
) -> str:
    """Transcrit avec context biasing optionnel."""
    client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

    # Construire la liste de termes
    tous_les_termes = []

    if chemin_config and Path(chemin_config).exists():
        config = json.loads(
            Path(chemin_config).read_text(encoding="utf-8")
        )
        tous_les_termes.extend(config.get("termes", []))

    if termes_supplementaires:
        tous_les_termes.extend(termes_supplementaires)

    # Dédupliquer et limiter à 100
    tous_les_termes = list(dict.fromkeys(tous_les_termes))[:100]
    bias = ",".join(tous_les_termes) if tous_les_termes else None

    # Transcrire
    with open(chemin_audio, "rb") as f:
        kwargs = {
            "model": "voxtral-mini-2602",
            "file": {"content": f, "file_name": Path(chemin_audio).name}
        }
        if bias:
            kwargs["context_bias"] = bias
            print(f"Context biasing actif : {len(tous_les_termes)} termes")

        response = client.audio.transcriptions.complete(**kwargs)

    return response.text


# Fichier de configuration vocabulaire.json
# {
#   "termes": [
#     "Mistral AI", "Voxtral", "Kubernetes",
#     "PostgreSQL", "RGPD", "Dr Martin"
#   ]
# }

# Utilisation
texte = transcrire_avec_vocabulaire(
    "reunion.mp3",
    chemin_config="vocabulaire.json",
    termes_supplementaires=["nouveau_terme", "autre_terme"]
)
print(texte)

Ce qui marche, ce qui ne marche pas

Le context biasing donne ses meilleurs résultats sur des termes précis et distincts : noms propres, acronymes, vocabulaire technique rare. Il suppose aussi que les termes fournis soient effectivement présents dans l’audio — ajouter par précaution des mots qui ne seront jamais prononcés dilue le signal sans rien apporter. Une liste de vingt à cinquante termes bien choisis suffit dans la plupart des situations.

À l’inverse, inscrire des mots courants ne sert à rien : le modèle les reconnaît déjà très bien, et vous consommez une place utile. Les phrases longues fonctionnent mal, privilégiez les mots ou expressions courtes. Enfin, méfiez-vous du réflexe consistant à verser tout le glossaire de l’entreprise dans le paramètre : un vocabulaire trop large noie les quelques termes qui comptaient vraiment.

Un point de vigilance pour vos projets francophones : le context biasing est optimisé pour l’anglais, et le support des autres langues, dont le français, est qualifié d’expérimental par Mistral AI. En pratique, il fonctionne correctement pour les noms propres et les acronymes dans toutes les langues, mais peut être moins efficace pour les termes courants dans les langues non anglaises. Testez sur un extrait représentatif avant de généraliser à tout un corpus.

Points clés à retenir

  • Le context biasing améliore la reconnaissance des termes spécialisés via context_bias
  • Jusqu’à 100 termes séparés par des virgules
  • Efficace pour : noms propres, acronymes, jargon technique, noms de lieux
  • Optimisé pour l’anglais, support expérimental pour les autres langues
  • Privilégiez des termes précis et effectivement présents dans l’audio
  • Utilisez un fichier de configuration pour gérer le vocabulaire par projet