Paramètres de configuration
Sachez exactement quel paramètre activer et pourquoi.
La configuration par défaut fonctionne bien pour la plupart des transcriptions. Ces paramètres existent pour gérer des workflows d'annotation spécifiques : QA arabe, comparaison positionnelle, exclusion de colonnes de métadonnées et contrôle de la détection structurelle. Chaque section montre la différence exacte produite dans les résultats.
Quand personnaliser la configuration
Commencez sans configuration. Lancez un diff et analysez les résultats. N'utilisez un paramètre que lorsque vous identifiez un problème précis :
stripDiacriticsTranscriptions arabes où les ajouts de diacritiques gonflent le nombre de MODIFIEDsimpleModeQA purement de contenu — vous savez que l'annotateur n'a fait aucun changement structurelignoreColNamesColonnes de métadonnées (score de confiance, catégorie) qui diffèrent entre les couches QA mais ne sont pas la cible de comparaisonpositionalModeDébogage d'alignements inattendus, ou traitement de grands ensembles de données uniformesenableSplits: falseLes directives du projet interdisent les divisions à cette couche d'annotationenableInlineDiff: falseGrands lots où seuls les statuts et scores sont nécessaires — supprimer le calcul du diff de transcription pour la vitesseenableCER / enableWEROptimisation des performances pour les grands lots — ignorer Levenshtein quand seules les métriques structurelles ou de phrase sont nécessairesenableComposite: falseSupprimer la note agrégée quand votre système consomme les valeurs individuelles directementstructuralTransformsLes lignes ont des préfixes ID, URL ou formats téléphoniques qui varient entre les couches mais ne font pas partie du contenu de la transcriptionsimpleMode
Par défaut, le moteur exécute un algorithme d'alignement en 8 passes qui fait correspondre les lignes par similarité sur l'ensemble de la transcription, même si elles ont changé de position. simpleMode désactive ceci : la ligne 0 est comparée à la ligne 0, la ligne 1 à la ligne 1, strictement par position.
Par défaut (simpleMode: false) : le moteur détecte qu'un long segment a été divisé en deux et l'étiquette SPLIT.
Original
{
"original": [
{ "speaker": "Candidate", "words": "For new users we relied on content-based filtering. For new items we used metadata clustering to find similar items." }
],
"reworked": [
{ "speaker": "Candidate", "words": "For new users, we relied on content-based filtering." },
{ "speaker": "Candidate", "words": "For new items, we used metadata clustering to find similar items." }
]
}Reworked
/* config: {} (default) */API Result
{
"results": [
{
"status": "SPLIT",
"notes": "split into 2 rows",
"originalRow": { "words": "For new users we relied on content-based filtering..." },
"reworkedRows": [
{ "words": "For new users, we relied on content-based filtering." },
{ "words": "For new items, we used metadata clustering..." }
]
}
]
}Avec simpleMode: true : le moteur compare la ligne 0 à la ligne 0 (trouve une différence → MODIFIED) et voit une ligne supplémentaire dans reworked (→ ADDED). L'intention structurelle est perdue, mais chaque modification de caractère est visible.
{
"results": [
{
"status": "MODIFIED",
"notes": "words changed",
"snapData": ["Candidate", "For new users we relied on content-based filtering..."],
"currData": ["Candidate", "For new users, we relied on content-based filtering."],
"transcriptDiff": [
{ "type": "equal", "value": "For new users" },
{ "type": "insert", "value": "," },
{ "type": "equal", "value": " we relied on content-based filtering." }
]
},
{
"status": "ADDED",
"notes": "new row in reworked",
"currData": ["Candidate", "For new items, we used metadata clustering..."]
}
]
}Utilisez quand vous êtes certain que l'annotateur n'a fait aucun changement structurel — seulement des corrections textuelles et de ponctuation. Également utile pour obtenir des diffs de caractères bruts sans interprétation structurelle.
enableSplits / enableMerges
Alternatives plus granulaires à simpleMode. Au lieu de désactiver toute la détection structurelle, vous pouvez désactiver un seul type.
enableSplits: false — les candidats SPLIT sont émis comme MODIFIED (correspondance tronquée) + ADDED (lignes résiduelles). Utile quand vos directives interdisent les divisions à cette couche.
enableMerges: false — les candidats MERGE deviennent MODIFIED (première ligne originale) + DELETED (originaux absorbés). Utile quand les fusions ne sont pas permises à cette couche.
{
"config": {
"enableSplits": false,
"enableMerges": true
}
}Ces paramètres sont utiles dans les pipelines QA multi-couches où chaque couche a ses propres opérations autorisées. Désactiver une opération inattendue fait remonter les changements structurels non autorisés comme des ADDED/DELETED distincts.
stripDiacritics
Avant la comparaison, le moteur normalise les caractères arabes et accentués en supprimant les marques diacritiques. Pour l'arabe, cela inclut les harakat (voyelles courtes : fathah, dammah, kasrah), tanwin, shadda, sukun et variantes de hamza (U+064B–U+065F, U+0670). Ce paramètre est ACTIVÉ par défaut.
Scénario courant de QA arabe : un annotateur normalise le texte selon les guides de style de l'arabe écrit (ajout de harakat, normalisation de hamza). Avec le comportement par défaut (stripDiacritics: true), seules les différences lexicales et de segmentation sont comptées.
Comportement par défaut (stripDiacritics: true — aucune configuration nécessaire) : مرحبا → مرحباً est UNCHANGED car les marques diacritiques sont supprimées avant la comparaison, rendant les formes strippées identiques.
Original
{
"original": [{ "speaker": "المذيع", "transcript": "مرحبا بكم في نشرة الاخبار" }],
"reworked": [{ "speaker": "المذيع", "transcript": "مرحباً بكم في نشرة الأخبار" }]
}Reworked
/* config: {} (default — stripDiacritics: true) */API Result
{ "status": "UNCHANGED", "notes": "high similarity match (diacritics stripped)" }Avec stripDiacritics: false (remplacement) : مرحبا → مرحباً est MODIFIED car le signe ً n'est plus supprimé — les différences de caractères bruts sont signalées.
{ "status": "MODIFIED", "notes": "transcript changed",
"transcriptDiff": [
{ "type": "EQUAL", "text": "مرحب" },
{ "type": "DELETE", "text": "ا" },
{ "type": "INSERT", "text": "اً" },
{ "type": "EQUAL", "text": " بكم في نشرة ال" },
{ "type": "DELETE", "text": "ا" },
{ "type": "INSERT", "text": "أ" },
{ "type": "EQUAL", "text": "خبار" }
]
}{ "config": { "stripDiacritics": false } }Le comportement par défaut (true) convient à la plupart des QA de transcriptions arabes. Remplacez par stripDiacritics: false uniquement quand vous vérifiez explicitement que l'annotateur a correctement ajouté ou supprimé des marques diacritiques — c'est-à-dire quand la précision diacritique est un critère QA suivi.
positionalMode
Ignore complètement l'algorithme d'alignement par similarité. Chaque ligne originale à l'indice N est comparée à la ligne retravaillée à l'indice N. Si les tableaux ont des longueurs différentes, les lignes supplémentaires sont ADDED ou DELETED.
Par défaut : si un annotateur corrige une phrase et elle passe de la position 4 à la position 6, le moteur les fait quand même correspondre (MODIFIED). Avec positionalMode, la ligne 4 de l'original est comparée à la ligne 4 du reworked — qui peut être une phrase complètement différente.
Utile pour le débogage et les ensembles de données très uniformes où la correspondance positionnelle est la vérité terrain.
{ "config": { "positionalMode": true } }ignoreColNames
Un tableau de noms de colonnes à exclure de la détection MODIFIED. Une ligne n'est MODIFIED que si une colonne non ignorée a changé. Les colonnes ignorées sont toujours incluses dans la réponse mais ne déclenchent pas MODIFIED.
Scénario : vos données ont une colonne confidence définie par l'outil d'annotation. La couche QA 1 peut enregistrer confidence: 0.88 tandis que la couche QA 2 enregistre confidence: 0.91 pour la même utterance. Sans ignoreColNames, chaque ligne est MODIFIED même si la transcription est identique.
Without ignoreColNames
Original
{
"original": [
{ "transcript": "The patient reports mild chest pain.", "speaker": "Doctor", "confidence": 0.88, "category": "symptom" }
],
"reworked": [
{ "transcript": "The patient reports mild chest pain.", "speaker": "Doctor", "confidence": 0.94, "category": "complaint" }
]
}Reworked
/* config: {} */API Result
{ "status": "MODIFIED", "notes": "confidence, category changed" }With ignoreColNames
{
// request: { "config": { "ignoreColNames": ["confidence", "category"] } }
"status": "UNCHANGED", "notes": "exact match (after ignoring confidence, category)"
}Utilisez chaque fois que votre schéma inclut des colonnes de métadonnées qui changent indépendamment du contenu de la transcription : scores de confiance, IDs de réviseur, numéros de lot, étiquettes de catégorie, horodatages auto-générés.
enableInlineDiff
Contrôle si le moteur calcule un diff de caractères inline pour les lignes MODIFIED. Quand activé (défaut), chaque ligne MODIFIED inclut un tableau transcriptDiff pour afficher les changements en surbrillance. Le désactiver ignore entièrement le calcul du diff.
Avec enableInlineDiff: false, les lignes MODIFIED apparaissent toujours dans les résultats (statut et notes inchangés), mais le champ transcriptDiff est absent. À utiliser quand vous avez seulement besoin de comptages de statuts et de scores pour réduire la taille du payload.
{ "config": { "enableInlineDiff": false } }Chaque segment transcriptDiff a la forme { type: "EQUAL" | "INSERT" | "DELETE", text: string }. Reconstruisez l'original en joignant tous les spans non-INSERT ; le reworked en joignant tous les spans non-DELETE. Note : les valeurs de type sont en MAJUSCULES.
// transcriptDiff format — type is UPPERCASE, field is "text"
[
{ "type": "EQUAL", "text": "Hello " },
{ "type": "DELETE", "text": "world" },
{ "type": "INSERT", "text": "there" }
]Désactivez (enableInlineDiff: false) pour le traitement de grands lots où vous n'avez besoin que de scores CER/WER/SegER/SER et de comptages de statuts. Cela réduit à la fois le CPU serveur et la taille du payload réseau. Réactivez pour les interfaces de révision interactives.
Indicateurs de scoring
Six paramètres booléens contrôlent les métriques calculées par le moteur et si une note composite est renvoyée. Tous sont à true par défaut. Désactiver un indicateur ignore entièrement sa boucle de calcul — le champ est null dans la réponse, pas 0.
| Flag | Default | What it measures · When to disable |
|---|---|---|
enableCER | true | Taux d'erreur de caractère sur toutes les colonnes (overallCER). Calculé via Levenshtein sur les chaînes de ligne sérialisées. Utilisez enableTranscriptCER pour contrôler indépendamment la variante colonne transcript uniquement. Quand vous n'avez besoin que de métriques structurelles ou de phrase. Levenshtein est O(m×n) — ignorer CER + WER sur les grands lots (5 000+ longs segments) réduit notablement la latence. |
enableTranscriptCER | true | Calcule transcriptCER — CER limité à la colonne transcript uniquement. Indépendant de enableCER : désactiver enableCER supprime overallCER mais laisse transcriptCER actif, et inversement. Quand vous avez besoin de overallCER mais pas de la décomposition transcript uniquement, ou inversement. |
enableWER | true | Taux d'erreur de mot sur toutes les colonnes (overallWER). Tokenise par espace blanc après suppression de la ponctuation. Utilisez enableTranscriptWER pour contrôler indépendamment la variante transcript uniquement. Mêmes conditions qu'enableCER. Généralement désactivé en même temps. |
enableTranscriptWER | true | Calcule transcriptWER — WER limité à la colonne transcript uniquement. Indépendant de enableWER. Quand vous avez besoin de overallWER mais pas de la décomposition transcript uniquement, ou inversement. |
enableSegER | true | Taux d'erreur de segmentation : événements limites (splits + merges + lignes ajoutées + supprimées) / nombre de segments attendus. Le signal de qualité structurelle — indépendant du contenu textuel. Uniquement si votre pipeline ne s'intéresse qu'aux changements lexicaux et que les événements de segmentation sont non pertinents — rare pour la QA de transcriptions. |
enableSER | true | Taux d'erreur de phrase : lignes MODIFIED / (lignes UNCHANGED + MODIFIED). Fraction des lignes comparables avec au moins une modification. Renvoie null — pas 0 — quand le dénominateur est 0 (toutes les lignes sont des événements structurels sans paires comparables). Quand vous n'avez besoin que de taux d'erreur caractère/mot sans signal au niveau phrase. |
enableTranscriptSER | true | SER au niveau phrase dans le texte de la colonne transcript. Découpe le contenu en phrases (sur . ! ? ؟ et sauts de ligne) et compte les phrases modifiées sur les lignes MODIFIED, MERGED et SPLIT. Analogue à transcriptWER mais au niveau phrase plutôt que mot — mesure le renouvellement de phrases dans le document, pas les modifications au niveau ligne. Quand le SER au niveau ligne (enableSER) est suffisant et que la granularité phrase n'apporte pas de valeur diagnostique supplémentaire. |
enableSACR | true | Taux de changement d'attribution de locuteur : lignes où la colonne speaker a changé / lignes MODIFIED. Détection automatique des colonnes nommées speaker, talker ou spk. Renvoie null automatiquement sans colonne speaker — activer sur des données sans speaker ne coûte rien. Uniquement pour supprimer explicitement le champ SACR de la réponse quelle que soit la présence d'une colonne speaker. |
enableComposite | true | Calcule la moyenne des notes par métrique (échelle 1–5) des métriques activées ayant produit une valeur non nulle. CER, Transcript CER, WER, Transcript WER, SegER, SER et Transcript SER contribuent — SACR est exclu car de nombreux jeux de données n'ont pas de colonne speaker, rendant un composite incluant SACR incomparable entre lots. Quand votre système lit directement les valeurs individuelles sans afficher de note agrégée. |
cerInComposite | true | Inclure CER dans le calcul de la note composite. Quand false, CER est toujours calculé et renvoyé dans la réponse mais n'affecte pas le composite. Quand CER est une métrique de diagnostic uniquement et que vous voulez que le composite reflète WER/SegER/SER seulement. |
werInComposite | true | Inclure WER dans le calcul de la note composite. Quand false, WER est calculé mais exclu de la moyenne composite. Quand WER est suivi comme référence mais ne doit pas pénaliser le composite (ex. : segments très courts où le nombre de mots est peu fiable). |
segerInComposite | true | Inclure SegER dans le calcul de la note composite. Quand false, SegER est calculé mais exclu de la moyenne composite. Quand la qualité de la segmentation est un problème séparé examiné indépendamment et ne doit pas faire baisser la note composite globale. |
serInComposite | true | Inclure SER dans le calcul de la note composite. Quand false, SER est calculé mais utilisé comme signal diagnostique autonome sans affecter le composite. Quand le taux d'erreur de phrase est un signal de diagnostic uniquement et que vous voulez que CER/WER/SegER déterminent le composite. |
transcriptCerInComposite | true | Inclure le CER de transcription dans le calcul de la note composite. Quand false, transcriptCER est toujours calculé et renvoyé mais n'affecte pas le composite. Quand le CER de la colonne transcript est une métrique de référence uniquement et que vous voulez que le composite reflète les autres métriques. |
transcriptWerInComposite | true | Inclure le WER de transcription dans le calcul de la note composite. Quand false, transcriptWER est calculé mais exclu de la moyenne composite. Quand le WER de la colonne transcript est suivi comme référence mais ne doit pas influencer la note composite. |
transcriptSerInComposite | true | Inclure le SER de transcription dans le calcul de la note composite. Quand false, transcriptSER est calculé mais utilisé comme signal diagnostique de phrase sans affecter le composite. Quand le taux de renouvellement de phrases est un signal secondaire et que vous voulez que CER/WER/SegER/SER déterminent le composite. |
{
"config": {
"enableCER": false,
"enableWER": false,
"enableSACR": false
}
}structuralTransforms
Un tableau de règles de recherche/remplacement appliquées au texte de la transcription AVANT que l'algorithme de scoring de similarité s'exécute. Cela permet au moteur d'aligner des lignes qui diffèrent uniquement par des préfixes ou des formats prévisibles et non-contenu.
Chaque règle : { find: string, replace: string, isRegex: boolean }. Les règles de chaîne font un remplacement littéral. Les règles regex (isRegex: true) supportent la syntaxe regex JavaScript standard (insensible à la casse). Jusqu'à 20 règles par requête.
{
"config": {
"structuralTransforms": [
{ "find": "^ID-\\d+:\\s*", "replace": "", "isRegex": true },
{ "find": "https?://[^\\s]+", "replace": "[URL]", "isRegex": true }
]
}
}À utiliser quand vos données partagent un schéma commun mais les lignes incluent des IDs auto-générés, des préfixes de lot ou un formatage que l'annotateur a modifié. Sans transformations, l'algorithme traite les lignes avec des préfixes différents comme entièrement différentes — produisant de fausses paires ADDED/DELETED.
Seuils de similarité et de timing experts
Ces sept nombres contrôlent la sensibilité de l'algorithme de correspondance. Les valeurs par défaut sont calibrées pour des segments de transcription de longueur standard (5–30 secondes, 10–60 mots). Ne les ajustez qu'après avoir analysé les scores de similarité bruts.
| Parameter | Default | When to adjust · Effect |
|---|---|---|
SIM_CONFIDENTnombre (0–1) | 0.70 | Deux lignes aussi similaires ou plus sont une correspondance certaine — validée dans la passe haute similarité. Augmentez pour exiger des correspondances de texte très proches. Diminuez pour les courtes utterances. |
SIM_MODERATEnombre (0–1) | 0.40 | Correspondance plausible — acceptée quand le timing le confirme aussi. Diminuez si les annotateurs réécrivent significativement les phrases tout en gardant le même sens. |
SIM_WEAKnombre (0–1) | 0.20 | Correspondance tentative — acceptée uniquement avec une forte preuve temporelle. Diminuez à 0.10–0.15 pour les très courts segments (mots isolés, disfluences) qui ne peuvent atteindre 0.20. |
TIME_EXACT_TOLnombre (s) | 0.05 | Timestamps ≤ cela apart = correspondance exacte. Augmentez à 0.5–1.0 si l'outil arrondit les timestamps à la seconde entière. |
TIME_FUZZY_TOLnombre (s) | 2.5 | Timestamps ≤ cela apart = correspondance floue. Augmentez quand les annotateurs déplacent significativement les limites des segments. |
SPLIT_COMBINED_MINnombre (0–1) | 0.35 | Score de texte combiné min pour accepter un SPLIT. Augmentez pour réduire les faux splits. Diminuez si votre contenu a de très courts segments cibles. |
MERGE_COMBINED_MINnombre (0–1) | 0.65 | Score de texte combiné min pour accepter un MERGE. Augmentez pour réduire les faux merges. Diminuez pour les ensembles avec de nombreuses fusions légitimes. |
CHAR_DIFF_LIMITentier (100–50000) | 1500 | Longueur de caractères combinée max avant de basculer vers un diff au niveau mot. Augmentez pour les lots avec de très longs segments. Diminuez pour forcer les diffs au niveau mot sur tous les segments. |
{
"config": {
"SIM_WEAK": 0.15,
"TIME_EXACT_TOL": 1.0,
"SPLIT_COMBINED_MIN": 0.70
}
}