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.
| Paramètre | Description |
|---|---|
| alpha | Spé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. |
| beta | Spé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. |
| blankLabel | Spé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. |
| casOut | Spécifie la table de sortie CAS pour stocker les résultats du décodage, y compris la transcription et le score de confiance. |
| columnMap | Spé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. |
| copyVars | Spécifie une liste de variables à transférer de la table d'entrée vers la table de sortie. |
| langModelTable | Spé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. |
| maxPathSize | Spécifie le nombre maximum de chemins (hypothèses de transcription) à conserver comme candidats pendant le processus de décodage (beam width). |
| ngramsOrder | Spécifie l'ordre le plus élevé des n-grams à utiliser depuis le modèle de langage pendant le processus de décodage. |
| spaceLabel | Spécifie la chaîne de caractères utilisée pour indiquer l'étiquette 'espace'. |
| table | Spé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. |
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.
| 1 | DATA public.acoustic_scores; |
| 2 | LENGTH _ID_ $10; |
| 3 | INPUT _ID_ $ _TIME_ _C_A _C_B _C_C _BLANK _SPACE; |
| 4 | CARDS; |
| 5 | utterance1 1 0.1 0.7 0.1 0.05 0.05 |
| 6 | utterance1 2 0.8 0.1 0.0 0.05 0.05 |
| 7 | utterance1 3 0.1 0.1 0.2 0.3 0.3 |
| 8 | utterance2 1 0.6 0.2 0.1 0.05 0.05 |
| 9 | ; |
| 10 | RUN; |
| 11 | |
| 12 | DATA public.language_model; |
| 13 | LENGTH _NGRAM_ $50.; |
| 14 | INPUT _NGRAM_ $ _PROBABILITY_; |
| 15 | CARDS; |
| 16 | A -5.2 |
| 17 | B -4.8 |
| 18 | C -6.1 |
| 19 | A B -1.5 |
| 20 | B C -2.0 |
| 21 | ; |
| 22 | RUN; |
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.
| 1 | PROC 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}; |
| 7 | RUN; |
| 8 | PROC PRINT DATA=casuser.decoded_results; |
| 9 | RUN; |
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.
| 1 | PROC 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; |
| 10 | RUN; |
| 11 | PROC PRINT DATA=casuser.decoded_results_detailed; |
| 12 | RUN; |