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 vitessestructuralTransformsLes 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/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.
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
}
}