?> calculateErrorRate - WeAreCAS
langModel

calculateErrorRate

Beschreibung

L'action `calculateErrorRate` est un outil fondamental dans les projets de reconnaissance vocale (Speech-to-Text). Elle permet de quantifier la performance d'un modèle en comparant ses transcriptions (hypothèses) avec un texte de référence (vérité terrain). Elle calcule des métriques clés comme le Taux d'Erreur par Mot (WER - Word Error Rate) et le Taux d'Erreur par Caractère (CER - Character Error Rate), qui sont des standards pour évaluer la précision de ces systèmes.

proc cas; langModel.calculateErrorRate / reference={caslib="string", computedOnDemand=TRUE | FALSE, computedVars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1, ...}, importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, name="table-name", singlePass=TRUE | FALSE, vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, name="table-name", vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, where="where-expression"}}, referenceId="variable-name", referenceText="variable-name", table={caslib="string", computedOnDemand=TRUE | FALSE, computedVars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1, ...}, importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, name="table-name", singlePass=TRUE | FALSE, vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, name="table-name", vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}, where="where-expression"}}, tableId="variable-name", tableText="variable-name"; run;
Einstellungen
ParameterBeschreibung
referenceSpécifie la table CAS contenant les transcriptions de référence (la vérité terrain). C'est la table qui contient le texte correct.
referenceIdNom de la colonne dans la table de référence qui contient l'identifiant unique pour chaque transcription. Permet de joindre avec la table d'hypothèses.
referenceTextNom de la colonne dans la table de référence qui contient le texte de référence lui-même.
tableSpécifie la table CAS contenant les transcriptions hypothétiques (généralement la sortie d'un modèle de reconnaissance vocale).
tableIdNom de la colonne dans la table d'hypothèses qui contient l'identifiant unique pour chaque transcription. Doit correspondre aux identifiants de `referenceId`.
tableTextNom de la colonne dans la table d'hypothèses qui contient le texte à évaluer.
Datenaufbereitung
Création des transcriptions de référence et d'hypothèse

Nous créons deux tables dans la caslib `casuser`. La première, `ref_transcripts`, contient le texte correct (vérité). La seconde, `hyp_transcripts`, contient le texte généré par un modèle, avec quelques erreurs intentionnelles (substitution, insertion, suppression) pour illustrer le calcul du taux d'erreur.

1DATA casuser.ref_transcripts;
2 INFILE DATALINES dsd;
3 LENGTH id 8 text $100;
4 INPUT id text $;
5 DATALINES;
61,le chat est sur le tapis
72,il fait beau aujourd'hui
83,ceci est un test
9;
10run;
11 
12data casuser.hyp_transcripts;
13 infile datalines dsd;
14 length id 8 text $100;
15 input id text $;
16 datalines;
171,le chat est sur la tapis
182,il fait aujourd'hui
193,ceci est un super test
20;
21RUN;

Beispiele

Cet exemple compare les deux tables (`ref_transcripts` et `hyp_transcripts`) pour calculer le taux d'erreur global (mots et caractères). Les colonnes sont explicitement mappées avec les paramètres `referenceId`, `referenceText`, `tableId` et `tableText`.

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 langModel.calculateErrorRate /
3 reference={name='ref_transcripts'},
4 referenceId='id',
5 referenceText='text',
6 TABLE={name='hyp_transcripts'},
7 tableId='id',
8 tableText='text';
9RUN;
10QUIT;
Ergebnis :
La sortie affichera une table de résultats (`ErrorRate`) résumant les taux d'erreur. Elle montrera le nombre total de mots et de caractères, ainsi que le nombre de substitutions, d'insertions et de suppressions. Les taux d'erreur par mot (WER) et par caractère (CER) seront calculés à partir de ces statistiques. Une seconde table (`Detailed_Result`) détaillera les erreurs pour chaque paire de phrases.

Cet exemple montre comment utiliser la clause `where` à l'intérieur des définitions de table pour ne calculer le taux d'erreur que sur un sous-ensemble des données. Ici, nous ignorons la première phrase (id=1) et ne calculons les erreurs que pour les phrases avec un id supérieur à 1.

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 langModel.calculateErrorRate /
3 reference={name='ref_transcripts', where='id > 1'},
4 referenceId='id',
5 referenceText='text',
6 TABLE={name='hyp_transcripts', where='id > 1'},
7 tableId='id',
8 tableText='text';
9RUN;
10QUIT;
Ergebnis :
Le résultat sera similaire à l'exemple de base, mais les calculs ne porteront que sur les phrases 2 et 3. Le nombre total de mots et de caractères sera plus faible, et les taux d'erreur (WER, CER) refléteront uniquement la performance du modèle sur ce sous-ensemble de données.

Ce scénario simule une situation où les tables source ont des noms de colonnes différents des noms par défaut. Nous créons les tables `ref_alt` et `hyp_alt` avec les colonnes `doc_id` et `transcription`. L'exemple montre comment mapper correctement ces noms de colonnes en utilisant les paramètres `referenceId`, `referenceText`, `tableId` et `tableText` pour que l'action fonctionne correctement.

SAS® / CAS-Code
Kopiert!
1DATA casuser.ref_alt;
2 INFILE DATALINES dsd;
3 LENGTH doc_id $10 transcription $100;
4 INPUT doc_id $ transcription $;
5 DATALINES;
6sentence1,le chat est sur le tapis
7sentence2,il fait beau aujourd'hui
8;
9run;
10 
11data casuser.hyp_alt;
12 infile datalines dsd;
13 length doc_id $10 transcription $100;
14 input doc_id $ transcription $;
15 datalines;
16sentence1,le chat est sur la tapis
17sentence2,il fait aujourd'hui
18;
19RUN;
20 
21PROC CAS;
22 langModel.calculateErrorRate /
23 reference={name='ref_alt'},
24 referenceId='doc_id',
25 referenceText='transcription',
26 TABLE={name='hyp_alt'},
27 tableId='doc_id',
28 tableText='transcription';
29RUN;
30QUIT;
Ergebnis :
L'action produira les mêmes tables de résultats (`ErrorRate` et `Detailed_Result`) que l'exemple de base pour les deux premières phrases. Cela démontre la flexibilité de l'action pour s'adapter à différents schémas de données, à condition que les colonnes soient correctement mappées via les paramètres dédiés.

FAQ

Quelle est la fonction principale de l'action calculateErrorRate ?
Quelles sont les tables d'entrée obligatoires pour cette action ?
Comment spécifier la colonne contenant le texte de référence ?
Comment spécifier la colonne contenant le texte d'hypothèse ?
Est-il possible de faire correspondre les transcriptions si les identifiants ne sont pas dans la première colonne de chaque table ?
Peut-on filtrer les données d'entrée utilisées par l'action ?