Modèles de langage N-gram – Technologie MTI
Le rôle des symboles de fin
Comme indiqué ci-dessus, notre modèle de langage affecte non seulement des probabilités aux mots, mais également des probabilités à toutes les phrases d’un texte. Par conséquent, pour garantir que les probabilités de toutes les phrases possibles totalisent 1, nous devons ajouter le symbole [END]
à la fin de chaque phrase et estimez sa probabilité comme s’il s’agissait d’un vrai mot. C’est un détail plutôt ésotérique, et vous pouvez en savoir plus sur sa justification ici (page 4).
Mesure d’évaluation: probabilité log moyenne
Lorsque nous prenons le log des deux côtés de l’équation ci-dessus pour la probabilité du texte d’évaluation, la probabilité log du texte (également appelée log vraisemblance), devient la somme des probabilités log pour chaque mot. Enfin, nous divisons cette probabilité logarithmique par le nombre de mots dans le texte d’évaluation pour nous assurer que notre métrique ne dépend pas du nombre de mots dans le texte.
Il y a un gros problème avec le modèle unigramme ci-dessus: pour un unigramme qui apparaît dans le texte d’évaluation mais pas dans le texte d’apprentissage, son comptage dans le texte d’apprentissage, donc sa probabilité, sera nul. Cela implosera complètement notre modèle unigramme: le log de cette probabilité nulle est l’infini négatif, conduisant à une probabilité logarithmique moyenne à l’infini négative pour l’ensemble du modèle!
Lissage de Laplace
Pour lutter contre ce problème, nous utiliserons une technique simple appelée Lissage de Laplace:
- Ensuite, nous ajoutons un pseudo-comptage de k à tous les unigrammes de notre vocabulaire. La valeur la plus courante de k est 1, et cela s’appelle le nom intuitif de «lissage add-one».
Effet du lissage de Laplace
En raison du pseudo-comptage k supplémentaire à chaque unigramme, chaque fois que le modèle unigramme rencontre un mot inconnu dans le texte d’évaluation, il convertira ledit unigramme en l’unigramme [UNK]. Ce dernier unigramme a un compte de zéro dans le texte d’apprentissage, mais grâce au pseudo-compte k, a maintenant une probabilité non négative:
Prétraitement des données
Avant d’appliquer le modèle unigram sur nos textes, nous devons diviser les textes bruts (enregistrés sous forme de fichiers txt) en mots individuels. Ceci est souvent appelé tokenisation, car nous divisons le texte en jetons, c’est-à-dire en mots individuels. La fonction principale pour symboliser chaque texte est tokenize_raw_test
:
- Ensuite, nous ajoutons un spécial
[END]
jeton à la fin de chaque phrase symbolisée:tokenized_sentence.append(‘[END]’)
. Le rôle de ce jeton de fin est expliqué dans la section suivante sur le modèle de langage unigram. - Enfin, nous écrivons chaque phrase symbolisée dans le fichier texte de sortie. Ce fichier texte tokenisé est ensuite utilisé pour former et évaluer nos modèles linguistiques.
Former le modèle
Les formules pour les probabilités unigrammes sont assez simples, mais pour s’assurer qu’elles fonctionnent rapidement, j’ai implémenté le modèle comme suit:
Évaluation du modèle
Une fois que nous avons calculé toutes les probabilités unigrammes, nous pouvons l’appliquer aux textes d’évaluation pour calculer une probabilité logarithmique moyenne pour chaque texte.
- Pour chaque unigramme, nous ajoutons le produit ci-dessus à la vraisemblance du journal du texte d’évaluation et répétons cette étape pour tous les unigrammes du texte. La dernière étape consiste à diviser cette probabilité logarithmique par le nombre de mots dans le texte d’évaluation pour obtenir la probabilité logarithmique moyenne du texte.
Probabilité logarithmique moyenne et similitude des distributions unigrammes
D’après le résultat ci-dessus, nous voyons que le dev1 texte («Un choc des rois») a une probabilité logarithmique moyenne plus élevée que dev2 (« Autant en emporte le vent ») lorsqu’il est évalué par le modèle unigram formé sur « A Game of Thrones » (avec lissage add-one). Cela a du sens, car il est plus facile de deviner avec précision la probabilité d’un mot dans un texte si nous avons déjà la probabilité de ce mot dans un texte similaire.
- Lorsque le dénominateur de la probabilité log moyenne – le nombre total de mots dans l’ensemble d’évaluation – est introduit dans la somme, il transforme la probabilité log moyenne en rien que la somme des produits entre la probabilité de l’unigramme dans le texte d’évaluation et la log probabilité d’unigramme dans le texte d’apprentissage.
- En revanche, un unigramme avec une faible probabilité d’évaluation (0,3) devrait aller avec une faible probabilité d’apprentissage (0,1). Le log de la probabilité d’entraînement sera un grand nombre négatif, -3,32. Cependant, il est neutralisé par la probabilité d’évaluation plus faible de 0,3, et leur produit négatif est minimisé.
Comparaison des distributions unigrammes
Lorsque la distribution unigramme du texte d’apprentissage (avec lissage add-one) est comparée à celle de dev1, nous voyons qu’ils ont une distribution très similaire d’unigrammes, au moins pour les 100 unigrammes les plus courants dans le texte de formation:
- Il y a pas mal d’unigrammes parmi les 100 plus communs dans l’ensemble de formation, mais avec une probabilité nulle dans dev2. Ils s’avèrent tous représenter les noms des personnages de Game of Thrones, tels que «jon», «ned» ou «sansa». Ces personnages, bien sûr, n’apparaissent jamais dans « Autant en emporte le vent ».
Les modèles statistiques sont susceptibles d’être inutiles en tant que prédicteurs si les ensembles d’entraînement et les ensembles de tests sont aussi différents que Shakespeare et The Wall Street Journal.
Étant donné la différence notable dans les distributions unigrammes entre train et dev2, pouvons-nous encore améliorer le modèle unigramme simple d’une manière ou d’une autre? Il s’avère que nous pouvons, en utilisant la méthode d’interpolation de modèle décrite ci-dessous.
Relation avec le lissage de Laplace
Rappelons la formule familière du lissage de Laplace, dans laquelle chaque compte unigramme dans le texte d’apprentissage est ajouté un pseudo-compte de k avant de calculer sa probabilité:
Poids d’interpolation variable
Cela dit, il n’y a pas de règle qui dit que nous devons combiner les modèles uniformes unigrammes dans une proportion de 96,4-3,6 dictée par le lissage add-one. En fait, différentes combinaisons de nos modèles unigrammes et uniformes correspondent à différents pseudo-comptes k, comme le montre le tableau ci-dessous:
- À mesure que k augmente, nous accélérons le lissage de la distribution des unigrammes: plus de probabilités sont prises des unigrammes communs aux unigrammes rares, nivelant toutes les probabilités. En conséquence, le modèle combiné devient de moins en moins comme une distribution unigramme, et plus comme un modèle uniforme où tous les unigrammes sont affectés de la même probabilité.
- Enfin, lorsque le modèle unigram est complètement lissé, son poids dans l’interpolation est nul. Cela revient à ajouter un pseudo-comptage infini à chaque unigramme afin que leurs probabilités soient aussi égales / uniformes que possible.
Réduisez la sur-tenue du modèle unigram
Au fur et à mesure que nous lissons le modèle unigramme, c’est-à-dire en l’interpolant davantage avec l’uniforme, le modèle s’adaptera de moins en moins aux données d’apprentissage. Ceci peut être vu ci-dessous pour un modèle avec une interpolation uniforme à 80–20 unigrammes (ligne orange). Il commence à s’éloigner du modèle unigramme non lissé (ligne rouge) vers le modèle uniforme (ligne grise).
Réduire la variance de l’estimation
Cette réduction de l’ajustement peut être considérée sous un angle différent, celui du compromis biais-variance (comme le montre le graphique familier ci-dessous):
- À droite, un modèle surajusté se rapproche très bien de nos données (biais faible), mais ses résultats peuvent être très différents s’ils sont formés sur différents ensembles de données (variance élevée). Par conséquent, le modèle qui s’adapte trop aux données sur lesquelles il a été formé peut donner des résultats extrêmement inexacts lorsqu’il est évalué sur un autre ensemble de données.
- Comme de plus en plus du modèle unigramme est ajouté à l’interpolation, la probabilité log moyenne de chaque texte augmente en général. Cependant, la probabilité logarithmique moyenne entre trois textes commence à diverger, ce qui indique une augmentation de la variance.
- En fait, à mesure que le modèle interpolé se rapproche d’un modèle unigramme pur, la probabilité logarithmique moyenne du texte d’apprentissage atteint naturellement son maximum. En revanche, la probabilité logarithmique moyenne des textes d’évaluation (dev1 et dev2) commencent à s’orienter de manière significative vers le bas, ce qui augmente encore la variance des performances du modèle.
- Pour dev1, sa probabilité logarithmique moyenne atteint le maximum lorsque 91% de l’unigramme est interpolé avec 9% de l’uniforme. Pour dev2, la proportion de modèle uniforme unigramme est 81–19. Cela correspond bien à notre observation précédente selon laquelle un modèle unigramme lissé avec une proportion similaire (80–20) dev2 que le modèle non lissé.
- En fait, plus le texte d’évaluation est différent du texte d’apprentissage, plus nous devons interpoler notre modèle unigramme avec l’uniforme. Cela a du sens, car nous devons réduire considérablement le surajustement du modèle unigramme afin qu’il puisse mieux se généraliser à un texte très différent de celui sur lequel il a été formé.
Faire ce projet m’ouvre vraiment les yeux sur la façon dont les phénomènes classiques d’apprentissage automatique, tels que la sur-adaptation et le compromis biais-variance, peuvent apparaître dans le domaine du traitement du langage naturel. J’espère que vous avez appris des leçons similaires après avoir lu mon billet de blog.
Références
Jurafsky & Martin “Traitement de la parole et du langage»Reste l’étalon-or pour un manuel de PNL à usage général, dont j’ai cité plusieurs fois dans ce post. Leur chapitre on n-gram model est l’endroit d’où j’ai tiré la plupart de mes idées et couvre bien plus que ce que mon projet peut espérer faire.