Connect with us

Intelligence artificielle

GPT-3 : Apprentissage à quelques exemples pour le modèle de langage ?

mm

Au cours des dernières années, l’industrie de l’IA et du ML a connu une ascension météorique dans le développement et l’application des systèmes NLP, car les chercheurs ont pu mettre en œuvre des pratiques NLP de manière très flexible et agnostique pour les tâches de transfert en aval.

Initialement, c’étaient les représentations à une seule couche qui utilisaient des vecteurs de mots, puis qui étaient alimentées à l’architecture spécifique à la tâche. Ensuite, c’était l’architecture RNN qui utilisait des représentations à plusieurs couches et un état contextuel pour former de meilleures représentations. Et plus récemment, nous avons les modèles de langage de transfert ou les modèles récurrents pré-entraînés qui ont entièrement supprimé le besoin d’architectures spécifiques à la tâche en affinant ces réseaux.

Les modèles de langage de transfert se sont révélés être un tournant majeur dans l’industrie NLP, car ils ont entraîné des progrès considérables sur des tâches difficiles comme la réponse à des questions, la compréhension de textes ou de blocs de texte, l’implication textuelle, et bien plus encore.

Cependant, malgré leurs avantages, les modèles de langage de transfert ont une limitation majeure, car ils nécessitent un affinement spécifique à la tâche ou un jeu de données spécifique à la tâche pour atteindre les performances souhaitées sur une tâche. De plus, les modèles de langage de transfert nécessitent que les développeurs affinent les jeux de données à des centaines de milliers d’exemples spécifiques à une tâche particulière.

Il va sans dire que supprimer l’exigence d’un jeu de données spécifique à la tâche et d’un affinement spécifique à la tâche sera très souhaitable et bénéfique pour l’industrie NLP pour de nombreuses raisons.

Problèmes avec les modèles de langage de transfert pré-entraînés existants ou les modèles récurrents

  • Limitation de la praticité et de l’applicabilité

Tout d’abord et avant tout, l’exigence d’un grand jeu de données avec des données étiquetées pour chaque tâche limite l’applicabilité et la praticité des modèles de langage. Les modèles de langage trouvent leurs applications dans une grande variété de tâches allant de la génération d’une histoire courte à la correction d’erreurs grammaticales, en passant par la génération d’exemples sur un concept. Parfois, il s’agit d’une tâche difficile de collecter un grand jeu de données supervisé avec des données étiquetées, en particulier lorsque le processus doit être répété pour chaque tâche individuelle.

  • Exploitation de corrélations spuriques dans les données d’entraînement

Les limitations et la étroitesse de la distribution d’entraînement couplées avec l’expressivité du modèle peuvent entraîner une croissance fondamentale du potentiel pour exploiter des corrélations spuriques dans les données d’entraînement. Le potentiel pour exploiter les données d’entraînement peut entraîner des problèmes pendant le paradigme d’affinement et de pré-entraînement, car les modèles de langage de transfert sont conçus pour absorber une grande quantité d’informations pendant le pré-entraînement.

De plus, les travaux sur les modèles précédents ont indiqué que les grands modèles ne conduisent pas à de meilleures performances en dehors de la distribution à chaque fois. De plus, il a également été indiqué que la généralisation obtenue sous un tel paradigme peut entraîner de mauvaises performances, principalement parce que le modèle est très spécifique aux données d’entraînement et ne peut pas performer bien dans des situations au-delà de la portée des données d’entraînement.

  • Comparaison avec l’apprentissage humain

Enfin, lorsqu’on les compare aux modèles de langage de transfert, les humains n’ont pas besoin d’un grand jeu de données d’entraînement lorsqu’il s’agit d’apprendre la plupart des tâches de langage. La plupart du temps, une brève directive dans la langue naturelle d’une personne ou une petite démonstration de la tâche de langage est suffisante pour qu’un humain comprenne et effectue une tâche de langage avec un certain niveau de compétitivité.

La capacité des humains à s’adapter a de nombreux avantages pratiques, car elle leur permet de passer d’un ensemble de compétences à un autre ou de les combiner pour mieux performer pendant un dialecte, ce qui dépasse les capacités des systèmes NLP actuels.

Résolution des problèmes avec l’apprentissage meta et le GPT-3

Une solution possible aux défis ci-dessus est l’utilisation de l’apprentissage meta, un concept dans le ML moderne qui permet à un modèle de développer un ensemble plus large et plus vaste de compétences et de capacité à reconnaître des modèles pendant l’entraînement, puis utilise ces capacités apprises pendant l’inférence pour s’adapter rapidement ou reconnaître la tâche requise.

L’apprentissage meta est mis en œuvre dans l’architecture du modèle de langage via une technique appelée « apprentissage en contexte » qui utilise la saisie de texte d’un modèle de langage pré-entraîné comme spécification de tâche. Dans le processus, le modèle conditionne une instruction en langage naturel et peut même utiliser quelques démonstrations, et le modèle est ensuite censé compléter le reste de la tâche en prédisant les prochaines étapes.

Le seul problème majeur avec l’apprentissage meta est qu’il a montré un potentiel positif, mais qu’il est encore inférieur à l’approche d’affinement dans l’architecture de langage naturel, et qu’il nécessite une amélioration supplémentaire pour devenir une méthode pratique pour surmonter les tâches de langage.

En plus de l’apprentissage meta, une autre méthode qui gagne en popularité est l’augmentation de la capacité des modèles de langage de transfert. Au cours des dernières années, les modèles de transfert ont connu une augmentation considérable de leur capacité avec le modèle RNSS18 avec 100 millions de paramètres, le modèle DCLT18 avec 300 millions de paramètres, le modèle RWC19 avec 1,5 milliard de paramètres, le modèle SSP19 avec 8 milliards de paramètres, le modèle RSR19 avec 11 milliards de paramètres, et le modèle TUR20 avec 17 milliards de paramètres.

L’augmentation de la capacité du modèle ou l’augmentation du nombre de paramètres a historiquement entraîné des améliorations dans la synthèse de texte, et il y a eu une indication que la perte de log, qui est corrélée avec les tâches en aval, suit également une tendance lisse d’amélioration avec l’échelle.

Cela nous amène au modèle GPT-3 qui dispose de plus de 175 milliards de paramètres, et lorsqu’il a été lancé, il s’agissait du modèle de langage de transfert avec la plus grande capacité. Parlons maintenant du modèle GPT-3.

Introduction au modèle GPT-3

Le GPT-3 est un modèle de langage auto-agressif avec plus de 175 milliards de paramètres qui a été publié par OpenAI en 2020. Le GPT-3 est également classé comme un grand modèle de langage qui, tout comme son prédécesseur le modèle GPT-2, est un modèle de transformateur de codage uniquement qui utilise une architecture basée sur le codage pour générer des données textuelles.

Le modèle GPT-3 mesure ses propres capacités d’apprentissage en contexte, et le modèle GPT-3 est évalué sur plus de deux douzaines de jeux de données NLP et de tâches nouvelles. Pour chaque tâche individuelle, le modèle GPT-3 est évalué dans trois conditions,

  • Apprentissage à quelques exemples ou apprentissage en contexte : Dans l’apprentissage à quelques exemples, le modèle GPT-3 permet autant de distributions que possible pour s’adapter au contexte du modèle.
  • Apprentissage à un exemple : Dans l’apprentissage à un exemple, le modèle permet une seule démonstration.
  • Apprentissage à zéro exemple : Dans l’apprentissage à zéro exemple, il n’y a pas de démonstrations, et il n’y a qu’une instruction en langage naturel qui est fournie au modèle.

De manière générale, le modèle GPT-3 atteint les performances souhaitées dans les paramètres zéro-exemple et un-exemple, et dans le paramètre à quelques exemples, il surpasse la plupart du temps les modèles de transfert de l’état de l’art. De plus, le modèle GPT-3 se comporte bien dans les paramètres un-exemple et zéro-exemple pour les tâches de langage naturel conçues pour tester la raison sur le vif, ou nécessitant une attention rapide comme l’utilisation de nouveaux mots après une phrase, ou le déchiffrement de mots, ou l’exécution d’opérations arithmétiques. D’un autre côté, lorsqu’il est exploité dans un paramètre à quelques exemples, le modèle GPT-3 génère des articles de presse synthétiques qui ressemblent à l’écriture humaine lorsqu’ils sont soumis à des évaluateurs humains.

Modèle GPT-3 : approche

Le modèle GPT-3 utilise une approche de pré-entraînement conventionnelle qui comprend le modèle, les données et l’entraînement, et il ressemble au processus de pré-entraînement suivi par le modèle de langage de transfert RWC-19. Le modèle GPT-3 augmente la taille du modèle, la taille du jeu de données, la diversité du jeu de données et augmente la durée de l’entraînement.

Le modèle utilise également une approche d’apprentissage en contexte qui ressemble à nouveau à l’approche du modèle RWC-19, mais modifie légèrement les choses en explorant systématiquement différents paramètres pour l’apprentissage de modèles dans le contexte du jeu de données.

Commençons donc par explorer ces paramètres et évaluer la façon dont le modèle GPT-3 se comporte dans différents paramètres.

Affinement

L’affinement du modèle a été l’approche conventionnelle dans les modèles de langage de transfert, et cette approche consiste à mettre à jour les poids d’un modèle pré-entraîné en entraînant le modèle sur un jeu de données supervisé spécifique à la tâche souhaitée, et des centaines de milliers d’exemples étiquetés sont utilisés pendant le processus.

L’approche d’affinement est bénéfique car elle retourne de solides performances sur de nombreux benchmarks. D’un autre côté, la principale limitation de l’utilisation de l’approche d’affinement est qu’elle nécessite un nouveau jeu de données et un grand jeu de données pour chaque tâche individuelle, a le potentiel pour exploiter des caractéristiques spuriques du jeu de données d’entraînement, peut potentiellement entraîner une comparaison injuste avec les performances humaines et une mauvaise généralisation pour les données hors de la distribution.

La portée actuelle du modèle GPT-3 ne met pas en œuvre l’approche d’affinement en raison de ses performances agnostiques à la tâche, bien que l’affinement puisse être appliqué au modèle GPT-3 à l’avenir.

Apprentissage à quelques exemples

L’apprentissage à quelques exemples est un terme qui fait référence au paramètre dans lequel le modèle GPT-3 reçoit quelques démonstrations de la tâche pendant l’inférence en tant que condition, mais les poids du modèle ne sont pas mis à jour. Dans les paramètres d’apprentissage à quelques exemples, le jeu de données contient généralement un exemple avec un contexte et une réalisation souhaitée (par exemple, une phrase en français et sa traduction en anglais). L’apprentissage à quelques exemples fournit au modèle K exemples de contexte et de réalisation, puis fournit au modèle un contexte final et attend que le modèle fournisse la réalisation.

Le principal avantage de l’utilisation de l’apprentissage à quelques exemples est qu’il réduit considérablement le besoin de données spécifiques à la tâche et réduit également le potentiel pour apprendre une distribution étroite à partir d’un grand jeu de données affiné de manière étroite. D’un autre côté, le principal inconvénient de l’utilisation de l’apprentissage à quelques exemples est que les résultats obtenus dans le paramètre d’apprentissage à quelques exemples ne sont pas à la hauteur et sont considérablement mauvais par rapport aux autres modèles de l’état de l’art qui sont affinés.

Apprentissage à un exemple

Dans le paramètre d’apprentissage à un exemple, le modèle reçoit une seule démonstration, et le reste est similaire au paramètre d’apprentissage à quelques exemples. La raison pour laquelle le paramètre d’apprentissage à un exemple est pertinent dans les modèles de langage de transfert est qu’il ressemble le plus à la façon dont les tâches sont communiquées aux humains. C’est parce que, dans la plupart des tâches, il est courant de donner une démonstration de la tâche, sinon il peut être difficile de comprendre le contexte de la tâche.

Apprentissage à zéro exemple

Dans le paramètre d’apprentissage à zéro exemple, il n’y a pas de démonstrations, et le modèle reçoit une instruction en langage naturel qui décrit la tâche. La méthode d’apprentissage à zéro exemple est celle qui offre le maximum de commodité, est robuste et évite également les corrélations spuriques, mais c’est également le paramètre le plus difficile de tous. C’est parce que, parfois, il est difficile même pour les humains de déterminer le contexte d’une tâche sans voir une démonstration d’abord.

Quoi qu’il en soit, pour certaines tâches, le paramètre d’apprentissage à zéro exemple est celui qui ressemble le plus à la façon dont les humains effectuent des tâches de langage naturel.

Modèle GPT-3 : architecture

Le modèle GPT-3 utilise la même architecture que celle utilisée dans le modèle GPT-2, et il comprend la pré-normalisation, l’initialisation modifiée et les techniques de tokenisation réversibles telles qu’elles étaient utilisées sur le modèle GPT avec l’exception de l’utilisation d’une stratégie alternative pour les modèles d’attention locaux à bande et les couches denses alternées dans les couches de transformateur, similaires au Sparse Transformer.

Pour étudier la dépendance des performances du modèle à la taille du modèle, les développeurs ont entraîné 8 tailles de modèles différentes qui s’étendent sur trois ordres de grandeur, de 125 millions à plus de 175 milliards de paramètres, le dernier étant appelé le modèle GPT-3. Les travaux précédents sur les modèles LLM ont indiqué que la mise à l’échelle de la perte de validation avec une quantité suffisante de données d’entraînement devrait être une loi de puissance lisse approximative en fonction de la taille. L’entraînement de modèles de tailles différentes permet aux développeurs de tester l’hypothèse pour les tâches de langage en aval ainsi que pour la perte de validation.

La figure ci-dessus compare la taille et l’architecture des 8 modèles utilisés pour le développement du GPT-3. Ici, n(params) définit le nombre total de modèles formables, n(couches) définit le nombre total de couches dans le modèle, d(modèle) définit le nombre d’unités dans chaque couche de la bouteille, et d(tête) définit les dimensions de chaque tête d’attention. La fenêtre de contexte pour chaque modèle est la même avec 2048 jetons.

De plus, pour minimiser le transfert de données entre les nœuds, le modèle est partitionné à travers les GPU le long de la profondeur et de la largeur des dimensions. Les paramètres architecturaux pour chaque modèle ont été choisis sur la base de l’efficacité computationnelle et de l’équilibrage de charge pour maximiser la précision dans la disposition des modèles sur les GPU.

Jeux de données d’entraînement

Typiquement, les grands modèles de langage utilisent des jeux de données qui ont considérablement augmenté avec les développements récents et qui se terminent par le jeu de données Common Crawl qui comprend plus d’un trillion de mots différents. La taille du jeu de données est suffisamment grande pour entraîner le modèle GPT-3 sans mettre à jour sur la même séquence plusieurs fois. Cependant, les études et les analyses de performances indiquent que les versions légèrement filtrées ou non filtrées du jeu de données Common Crawl ont une qualité inférieure par rapport aux jeux de données plus soigneusement sélectionnés.

Pour résoudre le problème de la qualité moyenne du jeu de données, les développeurs ont pris 3 étapes pour améliorer la qualité du jeu de données.

  1. Les développeurs ont téléchargé et filtré une version du jeu de données Common Crawl basée sur une plage similaire à des corpus de référence de haute qualité.
  2. Les développeurs ont effectué une duplication floue au niveau du document à travers le jeu de données dans une tentative pour préserver l’intégrité de leur ensemble de validation mis de côté comme mesure efficace du sur-ajustement et également pour éviter la redondance.
  3. Les développeurs ont également ajouté des corpus de référence de haute qualité aux données d’entraînement pour augmenter le jeu de données Common Crawl et pour accroître encore la diversité du jeu de données.

La figure ci-dessous montre la proportion finale ou le mélange des jeux de données utilisés pour l’entraînement du modèle GPT-3. Les données Common Crawl comprenaient plus de 45 To de texte brut avant le filtrage qui ont été réduits à 570 Go de données après le filtrage, un équivalent approximatif à plus de 400 milliards de jetons codés par paires de bytes. Il est important de noter que les jeux de données dans l’entraînement qui sont considérés comme de haute qualité sont échantillonnés plus fréquemment que l’échantillonnage du jeu de données proportionnel à leur taille. Par conséquent, des jeux de données comme Books2 et Common Crawl sont échantillonnés moins d’une fois pendant l’entraînement, tandis que les autres jeux de données sont échantillonnés plusieurs fois. Cela permet au modèle d’accepter une petite quantité de sur-ajustement en échange de l’entraînement sur des données d’entraînement de haute qualité.

Une préoccupation importante avec les grands modèles de langage pré-entraînés sur une grande quantité de données Internet avec la capacité de mémoriser et d’apprendre une grande quantité de contenu est le potentiel de contamination des tâches en aval en ayant leurs ensembles de développement ou de test vus pendant le processus de pré-entraînement. Pour réduire une telle contamination potentielle, les développeurs ont recherché toute superposition avec les ensembles de test et de développement des benchmarks étudiés pour le GPT-3 et ont tenté de supprimer ces superpositions.

L’image ci-dessus montre le calcul total utilisé pendant l’entraînement du modèle GPT-3. Le modèle utilise les lois de mise à l’échelle pour les modèles de langage neuronale pour entraîner des modèles beaucoup plus grands sur moins de jetons que la normale. Par conséquent, à la fois le GPT-3 et le modèle RoBERTa-Large, qui est 10 fois plus petit que le GPT-3, ont nécessité près de 50 petaflops/jour de calcul pendant le processus de pré-entraînement.

Évaluation

Pour l’apprentissage à quelques exemples, le modèle évalue chaque exemple présent dans l’ensemble de données d’évaluation en tirant K exemples au hasard à partir de l’ensemble de données d’entraînement de la tâche comme condition et les délimite par 1 ou 2 nouvelles lignes selon la tâche.

K peut être n’importe quelle valeur allant de 0 à la quantité maximale autorisée par la fenêtre de contexte du modèle qui est next = 2048 pour tous les modèles, et il contient généralement entre 10 et 100 exemples. Des valeurs plus grandes de K entraînent souvent de meilleurs résultats, mais pas toujours, c’est pourquoi lorsque le modèle a un ensemble de test et un ensemble de développement distincts disponibles, le modèle expérimente sur quelques valeurs de K sur l’ensemble de développement et, en fonction des résultats, il exécute la meilleure valeur sur l’ensemble de test.

De plus, sur les tâches qui nécessitent de sélectionner une réalisation correcte parmi plusieurs options, les développeurs fournissent K exemples de correction plus contexte et réalisation, puis suivent cela en fournissant un exemple de contexte uniquement, et les tâches sont ensuite comparées sur la base de la probabilité du modèle de langage de chaque réalisation.

Pour les tâches qui nécessitent une réalisation à forme libre, le modèle utilise une recherche en faisceau avec des paramètres identiques à ceux utilisés dans le cadre RSR, avec un faisceau de longueur 4 et une pénalité de 0,6. Le modèle est ensuite noté en utilisant soit le score de similarité F1, soit la correspondance exacte, soit BLEU, selon la norme du jeu de données.

Résultats

La figure ci-dessus montre les courbes d’entraînement pour les 8 modèles utilisés dans l’architecture du modèle GPT-3, comme décrit dans les sections précédentes. Semblable aux résultats du modèle de langage KMH, les performances du modèle GPT-3 suivent une loi de puissance propre lors de l’utilisation efficace du calcul d’entraînement. Il y a une légère différence de la loi uniquement lorsque la tendance est étendue de deux ordres de grandeur supplémentaires. Il peut sembler que les améliorations de la perte de croissance entraînent une modélisation de détails spuriques du corpus d’entraînement. Cependant, les améliorations de la perte de croissance entraînent des gains constants dans les performances globales sur une large gamme de tâches NLP.

Avant d’évaluer les 8 modèles différents sur une large gamme de données d’entraînement, les jeux de données sont regroupés en 8 catégories différentes qui représentent des tâches similaires. Ces catégories sont

  1. Évaluation sur les tâches de modélisation de langage traditionnelles et les tâches qui ressemblent à la modélisation de langage comme les tâches de complétion de phrases ou les tâches de complétion de paragraphes.
  2. Évaluation sur les tâches de questions-réponses « fermées ».
  3. Évaluation de la capacité du modèle à traduire entre les langues (en particulier à un exemple et à quelques exemples).
  4. Évaluation des capacités du modèle à effectuer des tâches de type Winograd.
  5. Évaluation sur les jeux de données qui impliquent un raisonnement basé sur le bon sens ou des questions-réponses.
  6. Évaluation sur les tâches de compréhension de lecture.
  7. Évaluation sur le benchmark SuperGLUE.
  8. Exploration de l’inférence d’implication de sens.

Modélisation de langage, complétion et tâches de complétion

Dans cette section, les performances du modèle GPT-3 sont évaluées sur les tâches de modélisation de langage traditionnelles ainsi que sur les tâches qui nécessitent la prédiction d’un seul mot d’intérêt, ou la complétion d’un paragraphe ou d’une phrase, ou la complétion d’un morceau de texte. Discutons-les en détail.

Modélisation de langage

Le modèle GPT-3 calcule la perplexité à zéro exemple sur le jeu de données PTB ou la banque de données de Penn Tree. Le modèle omet les tâches liées à Wikipedia car elles sont déjà incluses dans les données d’entraînement du modèle, et le benchmark d’un milliard de mots est également omis car il entraîne une friction considérable du jeu de données étant dans les données d’entraînement. Cependant, le jeu de données PTB traite de ces problèmes car il peut précéder l’Internet moderne. Le plus grand modèle de l’architecture du modèle GPT-3 établit un nouveau SOA sur le jeu de données PTB avec une marge considérable de 15 points et atteint une perplexité de 20,50.

LAMBADA

Le jeu de données LAMBADA est utilisé pour tester la modélisation du modèle sur les dépendances à longue portée dans les paragraphes ou les textes. Cela signifie que le modèle est invité à prédire le dernier mot d’une phrase après avoir lu le paragraphe pour le contexte. De plus, la mise à l’échelle continue des modèles de langage entraîne des rendements décroissants sur le benchmark.

Le modèle GPT-3 atteint une précision de 76 % sur LAMBADA et a un gain de plus de 8 % par rapport aux meilleurs modèles précédents. De plus, le modèle LAMBADA démontre la flexibilité de l’apprentissage à quelques exemples car il a abordé le problème de manière classique avec le jeu de données. La complétion d’une phrase dans LAMBADA est généralement le dernier mot de la phrase, mais comme un modèle de langage ne peut pas savoir cela, il attribue une probabilité non seulement à la fin correcte, mais également à d’autres continuations dans le paragraphe.

De plus, lorsque les exemples fournis au modèle GPT-3 sont modifiés d’une certaine manière, le modèle retourne une précision de plus de 86 %, une augmentation de plus de 18 % par rapport aux modèles précédents. De plus, les résultats ont également indiqué que les performances du modèle dans un paramètre à quelques exemples augmentent proportionnellement à l’augmentation de la taille du modèle. Bien que cette stratégie réduise le plus petit modèle de l’architecture du GPT-3 de 20 %, elle améliore la précision du modèle GPT-3 principal avec 175 milliards de paramètres de 10 %.

Questions-réponses « fermées »

Les questions-réponses « fermées » sont une tentative pour mesurer la capacité du modèle GPT-3 à répondre à des questions basées sur des connaissances factuelles générales. Puisque de telles questions ont souvent un grand nombre de requêtes possibles, la tâche est généralement réalisée à l’aide d’un système de récupération d’informations qui permet au modèle de trouver du texte pertinent en combinaison avec le modèle qui apprend à générer une réponse à une réponse donnée le texte récupéré et la question.

L’image ci-dessus compare le résultat pour le modèle GPT-3 par rapport à différents modèles et en exécutant différents jeux de données. Sur le jeu de données TriviaQA, le modèle atteint un score de précision de 64,3 % dans le paramètre zéro-exemple, tandis qu’il atteint des scores de précision de 68 % et 71,2 % dans les paramètres un-exemple et à quelques exemples, respectivement.

Il est évident que le modèle GPT-3 dans le paramètre zéro-exemple surpasse le modèle T5-11B affiné de plus de 14 %.

La figure ci-dessus montre que les performances du modèle GPT-3 augmentent de manière lisse avec l’augmentation de la taille du modèle. Les performances suggèrent que les modèles de langage continuent d’apprendre à partir du jeu de données à mesure que leur capacité augmente.

Pensées finales

Il serait sage de dire que le GPT-3 a été une phase révolutionnaire dans l’industrie LLM, car le GPT-3 a contribué à repousser les limites de ce qu’un modèle de langage pouvait faire. C’étaient les développements et les obstacles surmontés par le GPT-3 qui ont ouvert la voie au modèle de langage le plus avancé et le plus précis à ce jour, le GPT-4.

Un ingénieur de profession, un écrivain de cœur. Kunal est un rédacteur technique avec une profonde affection et une compréhension de l'IA et du ML, dédié à simplifier les concepts complexes dans ces domaines grâce à sa documentation engageante et informative.