Maintenant que vous avez décomposé vos documents en segments et enrichi les segments, l’étape suivante consiste à générer des embeddings pour ces segments et pour tous les champs de métadonnées sur lesquels vous prévoyez d’effectuer des recherches vectorielles. Un embedding est une représentation mathématique d’un objet, tel que du texte. Lorsqu’un réseau neuronal est entraîné, de nombreuses représentations d’un objet sont créées et chaque représentation a des connexions avec d’autres objets dans le réseau. Un embedding est l’une des représentations de l’objet qui est sélectionnée parce qu’elle capture la signification sémantique de l’objet.
Étant donné qu’un embedding est une représentation mathématique de cet objet et que cette représentation a des connexions avec les représentations d’autres objets, vous pouvez comparer les objets mathématiquement. Un exemple célèbre pour montrer comment les embeddings capturent la signification sémantique et les relations entre eux est :
embedding(« king ») - embedding(« man ») + embedding(« woman ») ≈ embedding(« queen »)
Les embeddings sont comparés les uns aux autres en utilisant les notions de similarité et de distance. Le diagramme suivant illustre comment les embeddings peuvent être comparés.
Figure 1. Comparer les embeddings
Dans une solution de génération augmentée par récupération (RAG), vous insérez souvent la requête utilisateur en utilisant le même modèle d’embedding que vos segments et recherchez les vecteurs pertinents dans votre base de données pour renvoyer les segments les plus sémantiquement pertinents. Le texte original des segments pertinents est ensuite transmis au grand modèle de langage en tant que données de base.
Remarque
Cette caractéristique des vecteurs souligne l’importance de nettoyer les segments afin que la proximité mathématique puisse être suivie de plus près avec la pertinence sémantique.
Cet article fait partie d’une série. Lisez l’introduction.
Importance du modèle d’embedding
Le modèle d’embedding que vous choisissez peut avoir un effet significatif sur la pertinence de vos résultats de recherche vectorielle. L’un des facteurs clés que vous devez prendre en compte lors du choix d’un modèle d’embedding est le vocabulaire du modèle. Chaque modèle d’embedding est entraîné avec un vocabulaire spécifique. Par exemple, la taille du vocabulaire de BERT est d’environ 30 000 mots.
Le vocabulaire d’un modèle d’embedding est important en raison de la façon dont les modèles d’embedding traitent les mots qui ne sont pas dans leur vocabulaire. Même si le mot n’est pas dans son vocabulaire, le modèle doit toujours calculer un vecteur pour celui-ci. Pour ce faire, de nombreux modèles décomposent les mots en sous-mots, qu’ils traitent comme des jetons distincts ou ils agrègent les vecteurs des sous-mots pour créer un seul embedding.
Figure 2 : Décomposer un mot inconnu en sous-mots
Prenons un exemple fictif où le mot « histamine » n’est pas dans le vocabulaire du modèle d’embedding. La sémantique du terme « Histamine » est une substance chimique que votre corps libère, ce qui cause de nombreux symptômes d’allergies. Parce que le modèle d’embedding ne contient pas « histamine », il pourrait le décomposer en sous-mots qui sont dans son vocabulaire, tels que « his », « ta », et « mine ». Les significations sémantiques de ces sous-mots sont très éloignées de la signification de « histamine ». Les valeurs vectorielles individuelles ou agrégées des sous-mots produisent des correspondances vectorielles moins bonnes que si « histamine » était dans le vocabulaire du modèle.
Choisir un modèle d’embedding
Déterminer le bon modèle d’embedding pour votre cas d’utilisation est une activité humaine. Le chevauchement entre le vocabulaire du modèle d’embedding et les mots de vos données devrait être un facteur clé à considérer lors du choix de votre modèle d’embedding.
Figure 3. Choisir un flux de modèle d’embedding
La première chose que vous devez déterminer est si votre contenu est spécifique à un domaine. Par exemple, vos documents sont-ils spécifiques à un cas d’utilisation, à votre organisation ou à une industrie ? Une bonne façon de déterminer la spécificité du domaine est de voir si les entités et les mots-clés dans votre contenu sont généralement disponibles ou trouvables sur Internet. Si c’est le cas, il est probable qu’un modèle d’embedding général le soit aussi.
Contenu général ou non spécifique à un domaine
Lorsque vous choisissez un modèle d’embedding général, un bon point de départ est le classement Hugging Face. Ce site fournit un classement à jour des modèles d’embedding. Évaluez comment les modèles fonctionnent avec vos données, en commençant par les modèles les mieux classés.
Contenu spécifique à un domaine
Pour le contenu spécifique à un domaine, la première étape consiste à déterminer s’il existe un modèle spécifique à ce domaine que vous pouvez utiliser. Imaginez, par exemple, que vos données se trouvent dans le domaine biomédical. Vous devriez envisager d’utiliser le modèle BioGPT, qui est un modèle de langage pré-entraîné sur un large corpus de littérature biomédicale. Ce modèle est destiné à l’exploration et à la génération de textes biomédicaux. Si des modèles de domaine sont disponibles, commencez par évaluer comment ces modèles fonctionnent avec vos données.
S’il n’existe pas de modèles spécifiques à un domaine disponibles, ou si les modèles spécifiques à un domaine ne fonctionnent pas bien, l’option suivante consiste à ajuster un modèle d’embedding général avec votre vocabulaire spécifique au domaine.
Important
Pour tout modèle que vous choisissez, vous devez vérifier que la licence est adaptée à vos besoins et que le modèle fournit le support linguistique nécessaire.
Évaluer les modèles d’embedding
Deux moyens efficaces d’évaluer un modèle d’embedding sont de visualiser les embeddings et d’évaluer la distance entre les vecteurs de questions et de segments.
Visualiser les embeddings
Vous pouvez utiliser des bibliothèques telles que t-SNE pour tracer les vecteurs de vos segments et de votre question sur un graphique X-Y. Vous pouvez ensuite déterminer à quelle distance les segments se trouvent les uns des autres et de la question. La figure montre des vecteurs de segments tracés. Les deux flèches proches l’une de l’autre représentent deux vecteurs de segments tandis que l’autre flèche représente un vecteur de question. Vous pouvez utiliser cette visualisation pour comprendre à quelle distance la question se trouve des segments.
Figure 4. Tracer les embeddings
Calculer les distances des embeddings
Un moyen programmatique d’évaluer la performance de votre modèle d’embedding avec vos questions et segments est de calculer la distance entre les vecteurs de questions et les vecteurs de segments. Vous pouvez utiliser la distance euclidienne ou la distance de Manhattan.
Économie des embeddings
Lors du choix d’un modèle d’embedding, il y a un compromis entre la performance et le coût. Les modèles d’embedding plus grands ont généralement de meilleures performances sur les ensembles de données de référence. Cependant, l’augmentation des performances a un coût. Les vecteurs plus grands nécessitent plus d’espace pour être stockés dans une base de données vectorielle, et nécessitent plus de ressources informatiques et de temps lors de la comparaison des embeddings. Les modèles d’embedding plus petits ont généralement des performances inférieures sur les mêmes références. Ils nécessitent moins d’espace dans votre base de données vectorielle, et nécessitent moins de calculs et de temps lors de la comparaison des embeddings.
Lors de la conception de votre système, vous devez prendre en compte le coût de l’embedding en termes de stockage, de calcul et des exigences de performance. Valider la performance des modèles par des expérimentations est crucial. Les références disponibles publiquement sont principalement des ensembles de données académiques. La plupart des résultats ne peuvent pas être directement transposés aux données et cas d’utilisation commerciaux. En fonction des exigences, vous pouvez privilégier la performance par rapport au coût, ou accepter un compromis de performance suffisante en échange d’un coût inférieur.