lmDecode
Description
L'action `lmDecode` de l'ensemble `langModel` est le traducteur magique qui prend les scores bruts de votre réseau de neuronesUn réseau de neurones est un modèle d'IA bio-inspiré composé de couches de nœuds interconnectés, capable d'apprendre des relations complexes dans les données pour prédire ou classifier avec précision. récurrents (RNNRéseau de neurones récurrent conçu pour les données séquentielles. Il utilise des boucles de rétroaction pour mémoriser l'information passée, idéal pour l'analyse de texte ou de séries temporelles.) issu d'un modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). acoustique, et les transforme en texte lisible (et compréhensible, espérons-le !) en utilisant un modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). de langage n-GramUn n-Gram est une séquence continue de n éléments (lettres, mots) extraite d'un texte. Utilisé en NLP pour prédire le mot suivant ou analyser le contexte local. . C'est l'étape cruciale des systèmes Speech-to-Text (reconnaissance vocaleTechnologie SAS Viya transformant un signal audio en texte via des modèles de Deep Learning (RNN, CNN) pour l'analyse de conversations, le sous-titrage ou le contrôle par commandes vocales.) où le babil robotique devient de la vraie prose humaine.
Paramètres Clés
| Nom du paramètre | Description |
|---|---|
| alpha | Un coefficient d'ajustement (double) qui contrôle le compromis entre le modèle acoustique et le modèle de langage. Plus `alpha` est élevé, plus le modèle de langage pèse lourd dans la balance lors du classement des candidats finaux. (Défaut: 1) |
| beta | Un coefficient (double) gérant le compromis entre le modèle acoustique et la longueur de la phrase. Un `beta` élevé favorise l'apparition de phrases plus longues pour éviter que le modèle ne devienne trop laconique. (Défaut: 0) |
| blankLabel | La chaîne de caractères utilisée pour identifier l'étiquette 'vide' (silence ou transition) générée par le RNN. (Défaut: '_') |
| casOut | Les spécifications de la table CAS de sortie qui contiendra les phrases décodées et les chemins finaux. |
| columnMap | La liste des étiquettes correspondant aux colonnes de scores pour chaque trame temporelle. Attention, l'ordre est roi et doit correspondre exactement aux sorties du modèle ! |
| copyVars | Les variables de la table d'entrée que l'on souhaite conserver précieusement pour les copier telles quelles vers la table de sortie (très pratique pour garder un identifiant de session audio). |
| langModelTable | La table CAS contenant le fameux modèle de langage n-Gram indispensable pour le décodage. |
| maxPathSize | Le nombre maximum de chemins (ou de candidats parallèles) conservés en mémoire lors du décodage. (Défaut: 100) |
| ngramsOrder | L'ordre maximum des n-Grams à prendre en compte (par exemple, 3 pour utiliser des trigrammes). (Défaut: 3) |
| spaceLabel | La chaîne de caractères représentant explicitement un espace entre les mots. |
| table | La table CAS d'entrée contenant les scores bruts générés préalablement par votre modèle acoustique RNN. |
Préparation des données
Création des données simulées
Création de tables minimalistes simulant la sortie d'un modèle acoustique RNN et un modèle de langage afin de pouvoir exécuter l'action dans SAS Studio.
| 1 | PROC CAS; |
| 2 | /* Table simulant les scores du RNN. En pratique, ceci provient de l'action dlScore d'un reseau RNN */ |
| 3 | datastep.runCode / code="data casuser.rnn_scores; id=1; time=1; _A_=0.1; _B_=0.8; _blank_=0.1; run;"; |
| 4 | /* Table simulant le modele n-Gram. En pratique, ceci est genere par l'action nGramCountToLm */ |
| 5 | datastep.runCode / code="data casuser.ngram_model; ngram='B'; prob=0.9; run;"; |
| 6 | RUN; QUIT; |
Exemples d'utilisation
Décodage basique d'une séquence RNN
Utilisation de l'action `lmDecode` avec une configuration minimale pour convertir des scores acoustiques en texte brut.
| 1 | PROC CAS; |
| 2 | langModel.lmDecode / |
| 3 | TABLE={name="rnn_scores", caslib="casuser"} |
| 4 | langModelTable={name="ngram_model", caslib="casuser"} |
| 5 | columnMap={"_A_", "_B_", "_blank_"} |
| 6 | blankLabel="_blank_" |
| 7 | casOut={name="decode_results", caslib="casuser", replace=true}; |
| 8 | RUN; |
| 9 | QUIT; |
Résultat Attendu :
Décodage avancé avec ajustement des pondérations (alpha/beta) et transfert de variables
Cet exemple illustre comment affiner la recherche de la meilleure transcription textuelle en ajustant `alpha` (poids de la grammaire) et `beta` (bonus de longueur). Nous transférons également la variable 'id' pour pouvoir croiser nos résultats avec la base d'origine.
| 1 | PROC CAS; |
| 2 | langModel.lmDecode / |
| 3 | TABLE={name="rnn_scores", caslib="casuser"} |
| 4 | langModelTable={name="ngram_model", caslib="casuser"} |
| 5 | columnMap={"_A_", "_B_", "_blank_"} |
| 6 | blankLabel="_blank_" |
| 7 | spaceLabel="_space_" |
| 8 | alpha=1.5 |
| 9 | beta=0.5 |
| 10 | maxPathSize=150 |
| 11 | ngramsOrder=2 |
| 12 | copyVars={"id"} |
| 13 | casOut={name="decode_advanced", caslib="casuser", replace=true}; |
| 14 | RUN; |
| 15 | QUIT; |