Aller au contenu principal

Context Biasing : Améliorer la Précision

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. Par exemple, “Voxtral” pourrait devenir “vox trail”, ou “RGPD” pourrait être transcrit “RG PD”.

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.

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)

Ce que le context biasing corrige

Sans context biasing, la transcription pourrait produire :

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

Avec context biasing ("Kubernetes,FastAPI,PostgreSQL"), vous obtiendrez :

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

Construire une liste de context biasing efficace

Types de termes à inclure

  1. Noms propres — Noms de personnes, entreprises, produits
  2. Termes techniques — Acronymes, noms de technologies, protocoles
  3. Jargon métier — Termes spécifiques à votre industrie
  4. Noms de lieux — Villes, bâtiments, salles de réunion

Exemples par domaine

Réunion tech startup :

context_bias = ",".join([
    "Mistral AI", "Voxtral", "Claude", "GPT-5",
    "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"
])

Script complet avec context biasing dynamique

Voici un script qui charge le vocabulaire depuis un fichier de configuration :

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)

Bonnes pratiques

Ce qui fonctionne bien

  • Des termes précis et distincts : noms propres, acronymes, termes techniques rares
  • Des termes effectivement présents dans l’audio — n’ajoutez pas de termes inutiles
  • Un nombre raisonnable de termes (20-50 est souvent suffisant)

Ce qui fonctionne moins bien

  • Des mots courants (le modèle les reconnaît déjà très bien)
  • Des phrases longues — privilégiez les mots ou expressions courtes
  • Un vocabulaire trop large qui noie les termes vraiment importants

Support linguistique

Le context biasing est optimisé pour l’anglais. Le support pour les 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.

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