menu icon

Comprendre les différences entre les vecteurs sémantiques creux et denses

De plus en plus fréquemment, nous entendons parler de la recherche sémantique et de nouvelles façons de la mettre en œuvre. Dans la dernière version d'OpenSearch (2.11), la recherche sémantique à travers des vecteurs creux a été introduite. Mais que signifie vecteur creux? Comment cela diffère-t-il d'une matrice dense? Tentons de clarifier cela dans cet article.

Comprendre les différences entre les vecteurs sémantiques creux et denses

Table des matières

  1. À l’aube de l’informatique et des moteurs de recherche : vecteurs creux
  2. Des vecteurs creux aux vecteurs denses
  3. Recherche sémantique avec des vecteurs denses
  4. Recherche sémantique à travers des vecteurs creux
  5. Évaluations finales et conclusions

À l’aube des moteurs de recherche : vecteurs creux

Si vous êtes familier avec les moteurs de recherche conventionnels et les technologies comme OpenSearch et Elasticsearch, vous avez probablement rencontré tf-idf et bm-25, deux algorithmes exploitant des structures creux pour la représentation des documents et le calcul de la pertinence. Pour simplifier l’explication des structures creux, considérons une base de données avec trois documents :

  1. “The quick brown fox jumps.”
  2. “A lazy dog sleeps.”
  3. “The brown fox and the lazy dog.”

Représentons ces documents dans une matrice d’incidence :

quick brown fox jumps lazy dog sleeps the and a
Document 1 1 1 1 1 0 0 0 1 0 0
Document 2 0 0 0 0 1 1 1 1 0 1
Document 3 0 1 1 0 1 1 0 2 1 0

En utilisant la même matrice, nous pouvons calculer la matrice de fréquence à l’aide de la formule :

Formule de TF

quick brown fox jumps lazy dog sleeps the and a
Document 1 0.25 0.25 0.25 0.25 0 0 0 0.25 0 0
Document 2 0 0 0 0 0.33 0.33 0.33 0.33 0 0.33
Document 3 0 0.33 0.33 0 0.33 0.33 0 0.67 0.33 0

Enfin, en appliquant la formule :

Formule TF-IDF

Nous pouvons visualiser la matrice utilisée dans un algorithme tf-idf, qui est utilisé pour calculer la pertinence :

quick brown fox jumps lazy dog sleeps the and a
Document 1 0.044 0.044 0.044 0.146 0 0 0 0 0 0
Document 2 0 0 0 0 0.058 0.058 0.195 0 0 0.058
Document 3 0 0.058 0.058 0 0.058 0.058 0 0 0.058 0

Vous avez peut-être remarqué, comme illustré dans la matrice ci-dessus, que les valeurs sont principalement concentrées autour de quelques entrées non nulles, tandis que la majorité reste à zéro. Cette concentration de valeurs non nulles au milieu d’une mer de zéros caractérise ce que l’on appelle les “vecteurs épars”.

La rareté de ces vecteurs permet un stockage et un calcul plus efficaces : elle réduit la redondance, car seuls les éléments non nuls doivent être stockés, ce qui conduit à des structures de données plus compactes. Cette efficacité est particulièrement bénéfique lors du travail avec de grands ensembles de données, car elle permet des calculs plus rapides et réduit les besoins en mémoire.

Des vecteurs creux aux vecteurs denses

En utilisant des vecteurs creux, nous avons essentiellement représenté l’essence de chaque document en utilisant un ensemble de valeurs numériques, dont une partie importante est égale à 0.

Les vecteurs denses nous permettront de faire la même chose, sans avoir recours aux 0. Dans les vecteurs denses, chaque document est représenté par un vecteur où chaque valeur est comprise entre 0 et 1. Chaque valeur représentera une caractéristique de notre document.

Plongeons dans le fonctionnement des vecteurs denses avec un exemple. Nous avons quelques documents, chacun représentant un animal différent. Pour décrire chaque animal, nous utiliserons certaines caractéristiques communes. Par exemple, la taille, l’amabilité et l’intelligence.

Extraction de caractéristiques

Pour chaque caractéristique, nous pouvons attribuer une valeur de 0 à 1, où 0 signifie moins et 1 plus. Par exemple, un chat est un animal assez amical, de petite taille et extrêmement intelligent (bien qu’il aime dormir tout le temps).

Ainsi, nous pouvons transformer notre chat et tous les animaux de notre collection en vecteurs :

Animal Taille Amabilité Intelligence
Chat 0.25 0.85 0.80
Chien 0.30 0.90 0.80
Éléphant 0.90 0.70 0.60
Dauphin 0.60 0.95 0.85
Perroquet 0.15 0.80 0.75

Comme vous l’avez peut-être remarqué, nous avons représenté la collection à l’aide de vecteurs sans adopter de valeurs 0. De plus, chaque document est caractérisé par des caractéristiques spécifiques, ce qui permet des comparaisons faciles. En effet, nous pouvons facilement représenter cet espace vectoriel tridimensionnel à l’aide d’un graphique 3D.

Espace 3D

Le processus de création de vecteurs denses est généralement réalisé à l’aide de modèles spécifiques. Ces modèles génèrent des vecteurs de plusieurs dimensions, souvent dans les centaines. Alors que l’exemple d’animal était relativement simple avec un vecteur tridimensionnel, imaginez travailler avec un vecteur de 784 dimensions. Cette complexité suggère que la génération de ces vecteurs peut être chronophage et nécessiter plus d’espace que ce que l’on rencontre généralement avec des vecteurs creux.

Recherche sémantique avec des vecteurs denses

En recherche vectorielle ou sémantique, nous comparons essentiellement notre base de données vectorielle à un vecteur de requête. Le vecteur de requête est essentiellement notre requête transformée en un vecteur.

La comparaison entre le vecteur de requête et la base de données peut se faire à travers différentes fonctions mathématiques, telles que la similarité cosinus ou la distance du produit scalaire. Les documents les plus similaires à notre vecteur de requête sont les documents les plus pertinents, et, normalement, les documents que nous recherchons.

Si vous souhaitez en savoir plus sur le fonctionnement de la recherche vectorielle et comment la mettre en œuvre, vous voudrez peut-être jeter un coup d'œil à Exploration de la recherche vectorielle avec JINA. Aperçu et guide et Plongée dans le traitement du langage naturel avec le stack Elastic.

Recherche sémantique à travers des vecteurs creux

La recherche sémantique peut également être réalisée à travers des vecteurs creux, grâce à une technique appelée “Expansion de termes”. L’expansion de termes consiste à élargir la représentation d’un document en incorporant des termes supplémentaires pertinents qui peuvent capturer le sens du document. Ces termes élargis sont indexés comme s’ils faisaient initialement partie du document. Dans ce contexte, des modèles d’apprentissage automatique tels que “elser” d’Elasticsearch ou le Neural Encoder d’Amazon pour OpenSearch peuvent être utilisés pour une expansion de termes efficace.

Voyons comment cela fonctionne, une fois de plus, à travers des exemples :

Comme nous l’avons fait précédemment, considérons ces phrases :

  1. “The quick brown fox jumps.”
  2. “A lazy dog sleeps.”
  3. “The brown fox and the lazy dog.”

et leur matrice d’incidence :

quick brown fox jumps lazy dog sleeps the and a
Document 1 1 1 1 1 0 0 0 1 0 0
Document 2 0 0 0 0 1 1 1 1 0 1
Document 3 0 1 1 0 1 1 0 2 1 0

L’expansion de termes vise à associer de nouveaux mots pertinents à chaque document. Par exemple, le terme “rapide” peut être étendu en utilisant différents synonymes, tels que “fast” ou “swift”. Cela peut être fait pour chaque terme et pour chaque phrase de notre base de données.

Par exemple :

  • Quick: fast, swift
  • Brown: reddish-brown, tan
  • Fox: mammal, animal
  • Jumps: leaping, hopping, bounding
  • Lazy: lethargic, inactive
  • Dog: canine, domesticated animal
  • Sleeps: dozes, naps

ce qui aboutira à une nouvelle matrice d’incidence

quick fast swift brown fox animal jumps lazy dog sleeps the and a
Document 1 1 1 1 1 1 1 1 0 0 0 1 0 0
Document 2 0 0 0 0 0 1 0 1 1 1 1 0 1
Document 3 0 0 0 1 1 1 0 1 1 0 2 1 0

Maintenant, si nous recherchons ‘naps’, nous récupérerons le deuxième document où ‘A lazy dog sleeps.’

Tout comme dans la recherche sémantique avec vecteurs denses, la recherche sémantique avec vecteurs creux peut également utiliser le modèle d’apprentissage automatique pendant la phase de recherche pour étendre notre requête. Dans ce cas, il s’agit des bi-codeurs dans la recherche avec vecteurs denses. Si nous utilisons l’expansion de termes uniquement pendant l’indexation, nous sommes en mode “only-document”. Cette deuxième solution est beaucoup plus rapide car il n’y a pas d’expansion de termes à l’exécution.

La recherche avec vecteurs creux a trois grands avantages par rapport à la recherche avec vecteurs denses :

  1. La taille de l’index est beaucoup plus petite, car seules les valeurs non nulles sont stockées dans les vecteurs creux.
  2. Coût mémoire réduit à l’exécution, surtout lorsque nous utilisons la modalité “only-document”.
  3. Coût de calcul plus faible, car nous pouvons utiliser un index Lucene natif pour stocker les nouveaux termes.

Évaluations finales et conclusions

Dans cette exploration des vecteurs creux et denses, nous avons plongé dans les aspects fondamentaux des moteurs de recherche. Nous avons couvert l’utilisation traditionnelle de vecteurs creux dans des algorithmes tels que tf-idf et bm-25, ainsi que des techniques plus modernes impliquant à la fois des vecteurs denses et creux pour la recherche sémantique.

Il est crucial de se rappeler que le choix entre la recherche par mot-clé et la recherche sémantique dépend des exigences spécifiques d’une application donnée, et la recherche vectorielle n’est pas toujours la solution la plus efficace. De plus, décider entre des vecteurs creux et denses peut être complexe et nécessite une analyse approfondie des exigences.

En conclusion, le paysage de la recherche d’informations continue d'évoluer. Comprendre les avantages des approches avec vecteurs creux et denses est essentiel pour construire des systèmes de recherche efficaces et évolutifs, et nous espérons que cet article a contribué à clarifier chaque différence.

Guide complet sur le RAG Open-Source

01/12/2023

Plongée dans le Retrieval-Augmented Generation (RAG). Dans cet article, nous explorons les concepts fondamentaux derrière le RAG, en mettant l'accent sur son rôle dans l'amélioration de la compréhension contextuelle et la synthèse d'informations. De plus, nous fournissons un guide pratique sur la mise en œuvre d'un système RAG en utilisant uniquement des outils open-source et des modèles de langage volumineux.

Lire l'article

Retour de la conférence DevFest Toulouse

19/11/2023

Nous sommes de retour du DevFest Toulouse, occasion pour nous d'assister à plusieurs conférences, nous former et partager une version personnalisée de notre presentation Cloner ChatGPT avec Hugging Face et Elasticsearch.

Lire l'article

L'Art de la Vectorisation d'Images - Un Guide avec OpenSearch

01/10/2023

BLIP-2 est un modèle qui combine les forces de la vision par ordinateur et des grands modèles de langage. Ce mélange puissant permet aux utilisateurs d'engager des conversations avec leurs propres images et de générer du contenu descriptif. Dans cet article, nous verrons comment tirer parti de BLIP-2 pour créer des descriptions d'images enrichies, suivies de leur indexation en tant que vecteurs dans Opensearch.

Lire l'article

NLP dans OpenSearch

18/06/2023

Un guide pratique sur l'importation et l'utilisation de modèles NLP dans OpenSearch pour l'analyse et l'inférence de texte dans vos flux de recherche et d'analyse.

Lire l'article

Plonger dans le NLP avec Elastic

01/04/2023

Un aperçu sur le NLP et un guide pratique sur la façon dont il peut être utilisé avec la Suite Elastic pour améliorer les capacités de recherche.

Lire l'article