langModel

lmDecode

Description

Décode les scores d'un réseau de neurones récurrent (RNN) en utilisant un modèle de langage (LM) spécifié. Cette action est une étape fondamentale dans les systèmes de reconnaissance vocale (speech-to-text), où les probabilités brutes du modèle acoustique (RNN) sont combinées avec les probabilités d'un modèle de langage (généralement n-gram) pour trouver la séquence de mots la plus probable.

proc cas; langModel.lmDecode table={name='nom_table_scores_rnn', groupBy={'id_variable'}} langModelTable={name='nom_modele_langage'} casOut={name='table_resultat', replace=true} columnMap={'label_1', 'label_2', ...} alpha=1.0 beta=0.0 maxPathSize=100 ngramsOrder=3 blankLabel='_' spaceLabel='<space>'; run;
Paramètres
ParamètreDescription
alphaSpécifie le paramètre ajustable (poids du LM) qui contrôle le compromis entre le modèle acoustique et le modèle de langage. Plus alpha est grand, plus le modèle de langage pèsera dans le classement des candidats pour la transcription finale.
betaSpécifie le paramètre ajustable (pénalité d'insertion de mot) qui contrôle le compromis entre le modèle acoustique et la longueur de la phrase. Plus beta est grand, plus la longueur de la phrase pèsera dans le classement des candidats pour la transcription finale.
blankLabelSpécifie la chaîne de caractères utilisée pour indiquer l'étiquette 'vide' (blank) dans les sorties du modèle acoustique, utilisée par l'algorithme CTC.
casOutSpécifie la table de sortie CAS pour stocker les résultats du décodage, y compris la transcription et le score de confiance.
columnMapSpécifie les étiquettes (caractères, phonèmes) que les colonnes de score représentent pour chaque pas de temps (time frame). L'ordre des étiquettes doit correspondre à l'ordre des colonnes de score dans la table d'entrée.
copyVarsSpécifie une liste de variables à transférer de la table d'entrée vers la table de sortie.
langModelTableSpécifie la table du modèle de langage n-gram à utiliser pour le processus de décodage. Cette table contient les n-grams et leurs probabilités logarithmiques.
maxPathSizeSpécifie le nombre maximum de chemins (hypothèses de transcription) à conserver comme candidats pendant le processus de décodage (beam width).
ngramsOrderSpécifie l'ordre le plus élevé des n-grams à utiliser depuis le modèle de langage pendant le processus de décodage.
spaceLabelSpécifie la chaîne de caractères utilisée pour indiquer l'étiquette 'espace'.
tableSpécifie la table d'entrée contenant les scores (probabilités) du RNN retournés par le modèle acoustique. Les données doivent être groupées par séquence à décoder.
Préparation des Données Voir la fiche de ce code dataprep
Création des Données de Démonstration

Le code suivant simule les deux tables CAS requises. La table `acoustic_scores` contient les probabilités de sortie d'un modèle acoustique RNN pour deux énoncés (`utterance`). La table `language_model` est un modèle de langage simple de type n-gram.

Copié !
1DATA public.acoustic_scores;
2 LENGTH _ID_ $10;
3 INPUT _ID_ $ _TIME_ _C_A _C_B _C_C _BLANK _SPACE;
4 CARDS;
5utterance1 1 0.1 0.7 0.1 0.05 0.05
6utterance1 2 0.8 0.1 0.0 0.05 0.05
7utterance1 3 0.1 0.1 0.2 0.3 0.3
8utterance2 1 0.6 0.2 0.1 0.05 0.05
9;
10RUN;
11 
12DATA public.language_model;
13 LENGTH _NGRAM_ $50.;
14 INPUT _NGRAM_ $ _PROBABILITY_;
15 CARDS;
16A -5.2
17B -4.8
18C -6.1
19A B -1.5
20B C -2.0
21;
22RUN;

Exemples

Cet exemple de base utilise l'action `lmDecode` pour transcrire les séquences de la table `acoustic_scores` en utilisant le `language_model`. Les résultats sont regroupés par `_ID_` pour traiter chaque énoncé séparément.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 langModel.lmDecode
3 TABLE={name='acoustic_scores', groupBy={'_ID_'}}
4 langModelTable={name='language_model'}
5 columnMap={'A', 'B', 'C', '_', ' '}
6 casOut={name='decoded_results', replace=true};
7RUN;
8PROC PRINT DATA=casuser.decoded_results;
9RUN;
Résultat :
La table `decoded_results` est créée dans la caslib `casuser`. Elle contient les colonnes `_ID_`, `_DECODE_` (le texte transcrit, par exemple 'B A'), et `_SCORE_` (le score de confiance du décodage) pour chaque énoncé.

Cet exemple détaillé ajuste les paramètres `alpha` et `beta`. Une valeur d'`alpha` plus élevée (par exemple, 1.8) donne plus d'importance au modèle de langage par rapport au modèle acoustique. Une valeur de `beta` positive favorise les transcriptions plus longues. `maxPathSize` est également ajusté pour contrôler la largeur du faisceau de recherche.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 langModel.lmDecode
3 TABLE={name='acoustic_scores', groupBy={'_ID_'}}
4 langModelTable={name='language_model'}
5 columnMap={'A', 'B', 'C', '_', ' '}
6 casOut={name='decoded_results_detailed', replace=true}
7 alpha=1.8
8 beta=0.5
9 maxPathSize=50;
10RUN;
11PROC PRINT DATA=casuser.decoded_results_detailed;
12RUN;
Résultat :
La table `decoded_results_detailed` est générée. Les transcriptions dans la colonne `_DECODE_` peuvent différer de l'exemple simple car les poids accordés au modèle de langage et à la longueur de la phrase ont été modifiés, influençant le choix final parmi les hypothèses.

FAQ

À quoi sert l'action lmDecode ?
Quels sont les paramètres principaux pour contrôler le processus de décodage ?
Quelles sont les tables d'entrée requises pour l'action lmDecode ?
Comment spécifier les étiquettes pour les blancs (blank) et les espaces (space) ?
Que contrôle le paramètre 'maxPathSize' ?
Quel est le rôle du paramètre 'ngramsOrder' ?