Quels sont les meilleurs modèles d'incrustation pour les pipelines de récupération de données?
By James Briggs · 2024-03-23
Aujourd'hui, nous explorons les meilleurs modèles d'incrustation pour les pipelines de récupération de données, en mettant en lumière des alternatives telles que Cohere Embed v3 et des solutions open source.
Les meilleurs modèles d'incrustation pour les pipelines de récupération de données
- Aujourd'hui, nous allons jeter un œil à quelques-uns des meilleurs modèles d'incrustation que nous pouvons utiliser lors de la construction de pipelines de récupération. Pour l'instant, presque tout le monde utilise OpenAI GPT-2, mais il existe en fait de nombreux autres modèles et certains sont soit compétitifs, voire même meilleurs que le GPT-2. Si l'on se réfère aux classements, de nombreux modèles sont nettement meilleurs. Cependant, tout ne se résume pas aux classements, et lorsque vous les testez sur des données réelles, le GPT-2 fonctionne toujours bien mais est comparable à de nombreux autres modèles. Je vais commencer par jeter un œil à l'un des classements les plus populaires pour les modèles d'incrustation, qui est le benchmark MTEP. MTE est le Massive Text Embedding Benchmark et il est hébergé sur Hugging Face Spaces. Je crois qu'aujourd'hui même, un nouveau modèle est en tête du classement. Nous n'allons pas examiner ce modèle dans cette vidéo, mais je le ferai très bientôt. Nous allons plutôt nous pencher sur un autre modèle de Google qui est très proche, avec très peu de différence du point de vue des résultats de ce benchmark. Nous allons examiner l'un des petits modèles d'incrustation open source. Il existe de nombreux modèles open source, mais celui que j'ai trouvé le plus performant sans être énorme est en fait celui-ci : E5 base V1. Si la taille du modèle ne pose pas de problème, vous pouvez passer à la version E5 large V2. Nous allons également les comparer pour voir quel est généralement le modèle d'incrustation le plus populaire, à savoir le GPT-2. Nous allons examiner quelques éléments différents ici, mais je vais vous guider sur ce que vous devez savoir pour utiliser chacun de ces trois modèles. Pour commencer, nous allons évidemment débuter par les installations. L'installation PIP pour chacun de ces modèles est assez simple : nous avons OpenAI GPT-2 ici et Transformers là-bas. Le jeu de données que vous voyez en haut ici est celui que nous allons utiliser pour ce guide, à savoir le jeu de données AI Archive Trunk. Nous allons installer cela comme vous pouvez le voir ici. Vous pourrez retrouver ce notebook et un lien en haut de la vidéo dès maintenant. Ensuite, nous descendons à notre fonction d'incrustation. Les fonctions d'incrustation sont ce qui varie le plus entre chacun de ces modèles. Bien sûr, les deux modèles d'incrustation API OpenAI sont les plus simples. En particulier, avec OpenAI, il n'y a pas grand-chose à savoir, vous insérez simplement vos documents et vous avez votre modèle ici. Avec Cair, vous devez être conscient de l'utilisation du bon type d'importation, qui sera 'search document' lorsque nous insérons des documents et 'search query' lorsque nous insérons une requête, et nous avons également le nom du modèle ici.
Les meilleurs modèles d'incrustation pour les pipelines de récupération de données
Utilisation d'un modèle open source pour l'indexation de documents textuels
- Sinon, c'est assez simple. Les choses se compliquent un peu lorsque nous commençons à examiner comment utiliser notre modèle open source. C'est normal, c'est open source, nous ne cachons pas tout derrière une API, mais de toute façon, ce n'est pas vraiment si compliqué. La seule chose dont nous avons besoin d'être conscient, c'est que si vous voulez des vitesses rapides, vous aurez probablement besoin d'une GPU refroidie activée. Je pense que vous pouvez exécuter cela sur NPS sur Mac, donc vous devez en être conscient lorsque vous exécutez sur NPS plutôt que d'utiliser Cuda ici, vous devriez basculer vers MPS et sur cet appareil ici, vous voulez vous assurer de passer à votre appareil MPS. Ensuite, nous initialisons un tokenizer et un modèle, puis nous créons nos embeddings. Pour créer ces embeddings, une chose que nous devons faire avec ce modèle - un petit détail de mise en forme - est de préfixer chaque document d'entrée ou passage avec le texte 'passage', cela indique simplement au modèle d'embedding que c'est un passage de texte et non une requête de texte. Plus tard, vous verrez que nous remplaçons cela par 'requête' plutôt que 'passage' lorsque nous effectuons une requête. Nous tokenisons tout, puis nous traitons tout à travers un modèle, extrayons l'état caché du modèle et le transformons en un seul embedding pour chaque document d'entrée ou passage que nous y mettons. Ensuite, nous passons à l'ajout de tout dans notre index. Là où nous stockons nos vecteurs, nous utilisons simplement un tableau numpy local car il s'agit d'un ensemble de données très petit et nous le faisons simplement pour une démonstration. Évidemment, si vous souhaitez le mettre en production, n'agissez pas ainsi, utilisez une base de données de vecteurs à moins que vous ne soyez prêt à gérer toute la gestion des données qui l'entoure. Pour nos API, j'ai utilisé une taille d'environ 128, mais en réalité, j'aurais probablement pu augmenter cela à 256 pour que cela aille un peu plus vite. OpenAI a mis environ 9 minutes pour indexer tous ces documents, avec Cair, cela a pris 5 minutes et demi, donc il semble que Cair soit un peu plus rapide pour l'ingestion et la génération d'embeddings. Ensuite, si nous examinons notre modèle open source, c'est un modèle assez petit, donc nous pouvons intégrer les choses assez rapidement. Pour cela, j'utilisais un GPU V100 sur Google Colab, vous pouvez utiliser un T5, mais si vous intégrez l'ensemble de cet index en mémoire, ce que vous ne devriez probablement pas faire de toute façon, votre mémoire peut être insuffisante, vous risquez de manquer de mémoire RAM réelle où vous stockez votre tableau numpy plutôt que la mémoire d'embedding réelle du GPU. Une chose est évidente, nous avons ici une taille de lot plus importante, donc si nous la réduisons, nous verrons probablement des résultats plus lents. Après avoir terminé, notre index est prêt, nous sommes prêts à effectuer une requête, donc nous passons à notre fonction de requête. Les fonctions de requête sont essentiellement les mêmes que ce que nous avons fait précédemment, nous créons nos embeddings.
Utilisation d'un modèle open source pour l'indexation de documents textuels
La comparaison entre les modèles d'embedding E5 et Coher
- Ici, j'aurais pu simplement utiliser la fonction d'embedding du notebook OpenAI, mais je ne pouvais pas le faire car j'ai besoin d'ajuster le type d'entrée en requête plutôt que document ou passage. Pour le modèle E5, nous aurions également besoin de le modifier, donc ici nous avons une requête au lieu d'un Passage, d'accord. Sinon, il n'y a pas grand-chose de différent ici. Après tout cela, nous calculons la similarité par produit scalaire entre notre vecteur de requête et l'index, et nous faisons exactement la même chose pour le modèle Coher. Les deux sont normalisés, donc nous calculons simplement le produit scalaire. Je crois que la sortie de E5 n'était pas normalisée, donc nous pourrions soit normaliser les vecteurs et ensuite utiliser le produit scalaire, soit nous utilisons simplement la similarité cosinus, qui n'est que le produit scalaire normalisé. Une chose importante à prendre en compte ici est que chaque modèle d'embedding a des dimensionalités d'embedding différentes. En utilisant E2, la dimensionalité de sortie est de 1536, soit des vecteurs dimensionnels de 1536, ce qui signifie que nous allons utiliser plus de stockage que si nous utilisions un modèle d'embedding Coher qui est seulement de 1224, et cela va encore être plus que si nous utilisions le modèle d'embedding E5 qui est de 768. Il est important de prendre cela en considération, surtout à long terme, cela va coûter plus cher de stocker des vecteurs de plus haute dimension. En regardant les résultats entre chacun de ces modèles, on voit une performance assez similaire du moins sur les quelques requêtes que j'ai lancées. Ce n'est pas un ensemble de données facile pour un modèle d'embedding à comprendre, c'est très désordonné, mais c'est plus représentatif du monde réel que des données de benchmark propres. Je pense que c'est un bon exemple de ce qu'ils peuvent faire et de ce qu'ils ne peuvent pas faire. J'ai demandé pourquoi devrais-je utiliser Llama 2, question assez simple. Je sais que l'article de Llama 2 est dans cet ensemble de données, donc je sais que nous devrions pouvoir trouver des choses à ce sujet. Quand vous voyez ce texte ici, c'est en fait Llama 2, c'est juste formaté étrangement. On parle de Llama 2 et je demande pourquoi devrais-je l'utiliser. Il dit qu'il est destiné aux assistants de discussion et utilisé pour une variété de tâches de génération de langage naturel, mais bon c'est à peu près ça dans le premier document. Ici encore, on parle de Llama 2, on voit qu'il est optimisé pour les cas d'utilisation des dialogues, surpassant les modèles de chat open-source sur la plupart des benchmarks et nos évaluations humaines pour l'utilité et la sécurité peuvent être un substitut aux modèles de source fermée. Donc, on voit que c'est une bonne réponse. Et enfin, ici, nous obtenons des réponses similaires pour Coher, on voit qu'il est meilleur que l'open source et rivalise avec certaines sources fermées. C'est tout pour E2, regardons maintenant le modèle Coher et voyons
La comparaison entre les modèles d'embedding E5 et Coher
L'importance du Red Teaming dans les Tests de Sécurité des Modèles d'IA
- En examinant différentes réponses concernant le red teaming pour les modèles d'IA, nous pouvons constater que certaines ne parviennent pas à fournir des informations pertinentes. Cependant, l'une d'entre elles aborde la question en décrivant des scénarios de test impliquant des insultes et des caractéristiques racistes, montrant ainsi une certaine pertinence. Une autre réponse mentionne l'approche du red teaming, permettant d'identifier les vulnérabilités dans un système, mais sans apporter de résultats exceptionnels. En revanche, une réponse plus détaillée souligne l'importance du red teaming dans la détection des contenus extrémistes et des risques potentiels, suggérant des méthodes manuelles ou automatisées pour son application. Enfin, l'inclusion des limitations et des risques exploitables par des acteurs malveillants met en lumière l'utilité du red teaming pour contrer de telles menaces.
L'importance du Red Teaming dans les Tests de Sécurité des Modèles d'IA
L'importance des exercices de red teaming dans le contexte de l'IA
- Les pratiques de red teaming en matière d'IA, telles que les exercices d'équipe rouge, aident les organisations à découvrir leurs propres limites et vulnérabilités ainsi que celles des systèmes d'IA qu'elles développent, et à les aborder de manière réaliste. Un exercice d'équipe rouge est un effort structuré pour trouver des failles et des vulnérabilités dans un plan, une organisation ou un système technique, souvent réalisé par une équipe rouge dédiée qui adopte l'état d'esprit et les méthodes d'un attaquant. Ces exercices permettent aux organisations d'améliorer leur sécurité. En comparaison avec les réponses d'Open AI, on constate que les exercices de red teaming offrent des avantages plus significatifs. De plus, en examinant les données et attaques de l'équipe rouge disponibles publiquement, il est possible de tirer des enseignements importants pour renforcer la sécurité des systèmes d'IA. Les membres des équipes rouges ont montré un réel intérêt à participer à ces expériences et étaient motivés par la mission de rendre les systèmes d'IA moins nocifs.
L'importance des exercices de red teaming dans le contexte de l'IA
Conclusion:
En conclusion, les modèles d'incrustation tels que Cohere Embed v3 offrent une performance similaire, voire supérieure, aux modèles traditionnels. Il est important d'explorer les alternatives open source pour optimiser les pipelines de récupération de données.