Huit exemples suffisent ✨
Ce n'est un secret pour personne que la puissance des modèles d'apprentissage automatique provient des données sur lesquelles ils sont formés. Il n'est donc pas surprenant que la question la plus courante que nous recevions au début de tout projet que nous entreprenons ici chez Mantis soit « Quelle quantité de données est nécessaire ? ». Étant donné que le plus souvent, les données doivent être préparées spécifiquement pour la tâche à accomplir, il existe un compromis entre le coût de la collecte de données et les performances que vous obtenez en retour.
La bonne nouvelle est que nous avons progressé dans la quantité de données nécessaires pour atteindre un certain niveau de performance. Jusqu'à récemment, une bonne règle de base était d'avoir au moins 100 exemples par classe dans un problème de classification. Un problème de classification serait, par exemple, d'identifier les spams par rapport aux e-mails sans spam. Ensuite, l'apprentissage par transfert et les modèles préformés sont arrivés, ce qui, je dirais, a réduit de moitié cette exigence à environ 50 exemples par classe. La capacité de ces modèles à apprendre plus efficacement est venue de leur pré-formation dans de grandes quantités de données textuelles ou d'images, ce qui leur a permis d'apprendre des informations utiles qu'ils peuvent «transférer» à la tâche à accomplir.
Contrairement aux approches plus traditionnelles, ces modèles pré-entraînés, en particulier les transformateurs, semblaient bien évoluer avec plus de données, il était donc naturel de se demander si des modèles plus grands réduiraient encore plus la quantité de données nécessaires. Comme nous l'avons vu avec GPT3 et ChatGPT plus récemment, la réponse semble être oui. Ces modèles semblent être capables d'effectuer presque toutes les tâches avec peu ou pas de données. Ces grands modèles de langage (LLM) sont accompagnés de deux mises en garde principales
- Ils étaient extrêmement volumineux et, par conséquent, coûteux à utiliser de manière routinière par rapport aux modèles préformés plus petits.
- Ils étaient assez sensibles aux "incitations", c'est-à-dire aux "instructions" que vous leur avez données au début pour effectuer une tâche. Nous avons écrit une série complète d'articles de blog si vous êtes plus intéressé par ce sujet.
Le graphique ci-dessus compare SetFit utilisant Mpnet avec Roberta large, un choix de base standard pour les modèles pré-formés. Comme nous pouvons le voir, il ne faut que 8 exemples par classe pour atteindre la même performance que Roberta exige près de 64. Nous voyons également que le point de rendements décroissants est de 8 exemples par classe. À ce stade, nous obtenons beaucoup moins d'un point de pourcentage chaque fois que nous doublons les données. Le modèle fonctionne très près d'un modèle formé avec tous les exemples de cet ensemble de données indiqué par la ligne rouge pointillée. Voyons un graphique similaire que j'ai produit sur deux ensembles de données supplémentaires
Dans le graphique ci-dessus, nous comparons SetFit avec AutoTrain qui est une solution AutoML de huggingface ainsi que GPT3 et Tf Idf SVM, un modèle plus traditionnel. Le graphique de gauche porte sur les ensembles de données ag_news tandis que celui de droite porte sur l'émotion. SetFit semble facilement surpasser les autres modèles en ce qui concerne la quantité de données dont il a besoin pour une performance donnée et 8 exemples semblent toujours être le point de rendements décroissants. Dans le même temps, GPT3 fonctionne assez mal, mais cela peut être lié au choix rapide.
Il y a certainement quelques mises en garde avec SetFit. D'une part, comme nous le voyons sur le graphique de droite, il ne fonctionne pas toujours aussi près de l'état de l'art avec peu d'exemples. Cela peut être lié au choix du modèle pré-formé, mais même ainsi, il convient de garder à l'esprit que l'utilisation de SetFit avec 8 exemples par classe n'est pas une solution miracle. Plus important encore, SetFit ne fonctionne que dans les tâches de classification de texte, il existe donc un certain nombre d'applications de traitement du langage naturel auxquelles il ne sera pas pertinent, comme l'extraction de mentions de documents ou la génération de texte. Ces mises en garde mises à part, la tendance à avoir besoin de moins d'exemples par classe pour faire fonctionner un modèle fonctionnel est là pour rester.
Comment fait SetFit ?
Comme nous l'avons dit précédemment, SetFit s'appuie sur des modèles pré-formés et une technique appelée apprentissage contrastif. L'apprentissage contrastif est généralement utilisé pour apprendre de meilleures fonctionnalités ou intégrations pour le texte ou les images. Ceci est très pertinent dans des applications telles que la recherche de similarité où vous souhaitez produire des représentations plus proches dans l'espace pour des éléments similaires. Pour entraîner un modèle à l'aide de l'apprentissage contrastif, vous avez besoin de paires d'éléments similaires, c'est-à-dire positifs, et dissemblables, c'est-à-dire négatifs. L'astuce principale derrière SetFit est qu'un ensemble de données de classification de texte peut être transformé en paires d'exemples positifs et négatifs, qui dans ce cas seraient des paires de la même classe et des paires appartenant à une classe différente. Voici l'ensemble du pipeline SetFit.
La première étape du pipeline consiste à générer des paires de phrases à partir de vos données d'entraînement de la même manière que nous en avons discuté. Ce processus finit par produire beaucoup plus d'exemples qu'initialement disponible car chaque exemple de formation peut être combiné avec n'importe quel autre. Il s'avère qu'il y avait plus d'informations utiles dans un ensemble de données de classification de texte que les méthodes traditionnelles de classification de texte n'en utilisaient. C'est l'information que les paires d'exemples de différentes classes sont différentes alors que les exemples de la même classe sont similaires. En utilisant l'apprentissage contrastif, SetFit peut faire un meilleur usage de ces informations supplémentaires, dans cette première étape résultant en un modèle pré-formé qui peut nous donner de meilleures représentations.
Ayant ce modèle, la deuxième étape est plutôt simple. SetFit utilise ce modèle pour intégrer l'ensemble de données de classification de texte d'origine et utilise une approche plus traditionnelle comme SVM pour classer les exemples en classes.
Alors pourquoi ne pas utiliser un modèle pré-formé comme Roberta pour commencer pour intégrer les données et ajouter une tête linéaire au-dessus ? Ou du moins pourquoi cela fonctionne-t-il moins bien? Personnellement, je pense que c'est pour deux raisons
- Nous savions déjà, grâce aux transformateurs de phrases, que les modèles pré-entraînés ne produisent pas les meilleures représentations pour les tâches de similarité sémantique et que l'apprentissage contrastif était plutôt un bien meilleur objectif pour y parvenir. D'autre part, ce n'est pas une tâche de similarité sémantique, ce qui m'amène au point suivant
- Modéliser le problème comme une similarité de texte et produire des combinaisons d'exemples comme des exemples similaires et différents comme nous le montrons, peut être considéré comme une technique d'augmentation des données. Cela multiplie la quantité de données disponibles et conduit sans surprise à de meilleures représentations.
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































