Académique Documents
Professionnel Documents
Culture Documents
Séance de TP 5
Réseaux récurrents pour la classification de texte
La normalisation Unicode est une étape importante pour traiter les caractères Unicode
de manière uniforme. La méthode unicodedata.normalize('NFD', s) prend une chaîne
Unicode s et la normalise selon la forme de décomposition canonique (NFD). Cela
signifie que les caractères Unicode composés sont décomposés en une séquence de
caractères de base et de caractères diacritiques.
Filtrage des caractères non désirés :
Une fois que tous les caractères non désirés ont été filtrés, la méthode retourne la
chaîne résultante, qui est une version ASCII de la chaîne Unicode d'origine, ne
contenant que des caractères autorisés.
En résumé, la méthode unicodeToAscii() normalise d'abord la chaîne Unicode en
utilisant la forme de décomposition canonique, puis filtre les caractères diacritiques et
non autorisés, pour finalement retourner une version ASCII de la chaîne initiale.
Le tenseur résultant est alors prêt à être utilisé comme entrée pour un modèle
d'apprentissage profond.
output est le vecteur de probabilité de chaque langue possible pour une entrée donnée.
Il est produit par la première couche linéaire avec softmax activation, et est utilisé pour
déterminer la prédiction finale du réseau récurrent.
4- Expliquez chaque ligne de la méthode categoryFromOutput()
1. top_n = output.topk(1) : Cette ligne utilise la fonction topk() de PyTorch pour obtenir
les n éléments les plus probables de la sortie output. Dans ce cas, n est défini sur 1, ce
qui signifie que seul l'élément le plus probable sera renvoyé.
2. category_index = top_n[1][0].item() : Cette ligne récupère l'indice du résultat le plus
probable (stocké dans top_n[1][0]) et le convertit en un entier Python (avec la méthode
item()).
3. return category_index : Enfin, la fonction renvoie l'indice de la catégorie la plus
probable, qui correspond à la langue prédite pour l'entrée actuelle.
Le critère `nn.NLLLoss` dans PyTorch est une fonction de perte pour la classification
des problèmes à classes multiples. Il correspond à la fonction de perte négative log-
vraisemblance (NLL) qui calcule la perte entre la prédiction du modèle et la véritable
distribution des classes d'un exemple.
* Le tenseur d'entrée doit avoir la forme `(N, C)`, où `N` est le nombre d'exemples et `C`
est le nombre de classes possibles.
* Le tenseur cible doit avoir la forme `(N)` et contenir les indices des classes vraies pour
chaque exemple.
De plus, elle n'évalue le modèle que sur l'ensemble de données d'entraînement, il est
important d'évaluer le modèle sur un ensemble de données de test distinct pour
s'assurer que le modèle ne surajuste pas les données d'entraînement et est capable de
généraliser correctement à de nouvelles données non vues.
En outre, la matrice de confusion peut être trompeuse si la distribution des classes est
déséquilibrée, car elle ne prend pas en compte le nombre d'instances dans chaque
classe. Par conséquent, des métriques d'évaluation supplémentaires telles que le
score F1, qui prend en compte à la fois la précision et le rappel, doivent être utilisées
pour évaluer les performances du modèle sur des ensembles de données
déséquilibrés.
11- Quelles sont les langues les moins bien identifiées ? Quelles sont les
principales confusions ?
Après execution des cellules, nous obtenons le tableau suivant :
Les langues les moins bien identifiées, selon l’image, semblent être le japonais, le
vietnamien, le chinois et le grec, car elles ont des couleurs plus claires indiquant une
faible précision dans l’identification.
Le chinois utilise des caractères logographiques (hanzi) qui représentent des mots ou
des morphèmes, ce qui est très différent de l'alphabet latin utilisé dans de nombreuses
autres langues. La reconnaissance des caractères chinois peut être complexe en
raison du grand nombre de caractères et de la similarité entre certains d'entre eux.
1. Tout d'abord, elle initialise l'état caché du réseau récurrent, généralement réglé à
zéro ou à une valeur fixe.
2. Ensuite, elle itère sur chaque caractère de la séquence d'entrée, fournissant le
caractère encodé one-hot actuel et l'état caché précédent au réseau.
3. Le réseau produit un vecteur de probabilités pour chaque langue, et la langue avec
la probabilité la plus élevée est sélectionnée comme la langue prédite pour le nom
d'entrée.
4. La langue prédite est ensuite renvoyée en tant que sortie.
Ce processus est effectué pour chaque nom dans l'ensemble de données d'entrée,
permettant au modèle de prédire la langue d'origine de chaque nom.
Pour améliorer les résultats en faisant évoluer l'architecture du réseau, nous pouvons
envisager les modifications suivantes :