Explication détaillée du BERT à l'ère des grands modèles

J'apprends actuellement le BERT.

Juste quelques mots.

BERT = Représentation de l'encodeur bidirectionnel du transformateur

L'auteur est une équipe de Google

Le principal point fort est d'utiliser des données non étiquetées de transformateur et de pré-formation + pour former un modèle de langage général.

0 : arrière-plan

En raison de l'existence d'ImageNet, les algorithmes visuels sont très pratiques pour l'apprentissage ou le réglage fin de la migration, mais le NLP n'était pas disponible à ce moment-là.

Dans ce cas, BERT a vu le jour.

1 : Cadre technique

a :Modèle de langage masqué

Dans BERT, Masked LM (Masked Language Model) construit un modèle de langage. En termes simples, il couvre ou remplace de manière aléatoire n'importe quel mot ou mot dans une phrase, puis laisse le modèle prédire la partie couverte ou remplacée à travers le contexte, puis lors de l'exécution Perte, seule la perte de la partie couverte est calculée . Il s'agit en fait d'une tâche facile à comprendre. L'opération réelle est la suivante :

  1. Remplacez au hasard 15 % des jetons (mots ou expressions) d'une phrase par ce qui suit :

    1. Ces jetons ont 80% de chances d'être remplacés par  [MASK], par exemple, mon chien est poilu→mon chien est [MASQUE]
    2. Il y a 10% de chance d'être remplacé par n'importe quel autre jeton, par exemple, mon chien est poilu→mon chien est pomme
    3. Il y a 10% de chance d'être inchangé, par exemple mon chien est poilu → mon chien est poilu
  2. Ensuite, laissez le modèle prédire et restaurer les pièces couvertes ou remplacées. Lors du calcul de la perte, seule la partie qui a été couverte ou remplacée de manière aléatoire lors de la première étape est calculée, et le reste n'est pas perdu. la sortie est.

Pourquoi veux-tu faire cela?

L'objectif principal est d'utiliser le transformateur pour fournir des informations sémantiques globales afin que le modèle puisse tenir compte du contexte. Améliorant ainsi la connexion entre chaque fonctionnalité.

b : Prédiction de la prochaine phrase

Nous obtenons d'abord une paire de phrases appartenant au contexte, c'est-à-dire deux phrases, puis nous devons ajouter des jetons spéciaux à ces deux phrases : [CLS]上一句话[SEP]下一句话[SEP]. C'est-à-dire en ajouter un au début de la phrase  [CLS], entre deux phrases et à la fin de la phrase  [SEP], plus précisément comme indiqué dans la figure ci-dessous

On peut voir que les deux phrases de l'image ci-dessus sont évidemment continues. S'il existe maintenant une telle phrase  [CLS]我的狗很可爱[SEP]企鹅不擅长飞行[SEP], on peut voir que ces deux phrases ne sont pas continues. En formation réelle, on fera le nombre de ces deux situations  1:1 (ce rapport est à adapter au déséquilibre de l'échantillon)

Token Embedding Est le vecteur de mot normal, c'est-à-dire dans PyTorch nn.Embedding()

Segment Embedding Le rôle de est d'utiliser l'information d'intégration pour laisser le modèle séparer les phrases supérieures et inférieures. Nous donnons au jeton de la phrase supérieure tous les 0 et le jeton de la phrase suivante tous les 1, afin que le modèle puisse juger du début et de la fin positions des phrases supérieures et inférieures, par exemple

[CLS]我的狗很可爱[SEP]企鹅不擅长飞行[SEP]
 0   0 0 0 0 0 0 0  1 1 1 1 1 1 1 1

Position Embedding Contrairement à Transformer, ce n'est pas une fonction trigonométrique, mais apprise

Apprentissage multitâche

L'étape de pré-formation BERT combine en fait les deux tâches ci-dessus, se déroule en même temps, puis ajoute toutes les pertes

2 : Formation

Le réglage fin de BERT est divisé en 4 types.

La principale référence ici est le professeur Li Hongyi de l'Université nationale de Taiwan.

 Le début de la tâche de classification est cls, puis envoyez la sortie de cette position au classificateur linéaire et laissez-le prédire une classe. Dans l'ensemble du processus, les paramètres du classificateur linéaire doivent être appris à partir de zéro, et le réglage fin des paramètres dans BERT est suffisant.

 Si la tâche en cours est  Slot Filling , la sortie correspondant à chaque mot de la phrase est envoyée à différents Linear pour prédire l'étiquette du mot. En fait, il s'agit essentiellement d'un problème de classification, mais il est nécessaire de prévoir une catégorie pour chaque mot

 Si la tâche en cours est  NLI (Natural Language Inference) . Autrement dit, une prémisse est donnée, puis une hypothèse est donnée, et le modèle doit juger si l'hypothèse est correcte, fausse ou inconnue. Il s'agit essentiellement d'un problème à trois catégories, similaire au cas 1,  [CLS] il suffit de prédire la sortie de

Si la tâche en cours est QA (question answering), par exemple, comme le montre la figure ci-dessus, un article et une question (l'exemple ici est relativement simple, la réponse apparaîtra certainement dans l'article) sont envoyés au modèle, et le modèle en sortira deux Les nombres s et e, ces deux nombres indiquent que la réponse à cette question tombe dans le sième mot au ième mot de l'article. Le processus spécifique, nous pouvons voir la figure suivante 

Tout d'abord, la question et l'article sont  [SEP] séparés et envoyés à BERT pour obtenir la sortie jaune dans l'image ci-dessus. À ce stade, nous devons également former deux vecteurs, les vecteurs orange et jaune dans la figure ci-dessus. Commencez par produire les vecteurs orange et tous les vecteurs jaunes, puis utilisez softmax pour voir lequel a la plus grande valeur de sortie. Par exemple, la probabilité de sortie correspondant à d2 dans la figure ci-dessus est la plus grande, alors nous pensons que s = 2 

De même, nous utilisons le vecteur bleu et tous les vecteurs jaunes pour le produit scalaire, et prédisons finalement que la probabilité que d3 soit la plus élevée, donc e=3. En fin de compte, la réponse est s=2,e=3.

3 : Implémentation du code

Je cours sur la carte A100.

 À en juger par les résultats, on ne peut que dire qu'il peut être utilisé.

Guess you like

Origin blog.csdn.net/qq_33083551/article/details/130827307