Que sont les intégrations ? Vecteurs et similarité cosinus expliqués simplement
Les intégrations permettent aux ordinateurs de comparer le sens au lieu de faire correspondre des mots exacts. Ils alimentent la recherche sémantique, les recommandations et le RAG. Apprenez ce qu’ils sont, comment la similarité est mesurée et où ils vous ont laissé tomber.
- Une intégration est une liste de nombres qui représente la signification d’un texte, d’une image ou d’autres données.
- Des éléments similaires aboutissent à des nombres similaires, leur signification peut donc être comparée aux mathématiques.
- La similarité cosinusoïdale compare la direction, et c’est un moyen courant d’évaluer la similitude de deux intégrations.
- Comparez uniquement les intégrations du même modèle et testez les résultats sur vos propres données.
Recherchez « comment récupérer mon argent » et un bon système devrait trouver une page intitulée « Politique de remboursement », même si les deux ne partagent aucun mot important. Cette capacité vient des intégrations, l’une des idées les plus utiles de l’IA moderne.
Ce guide explique les intégrations sans mathématiques lourdes. Nous avons exécuté un petit exemple dans Python 3.13 et son résultat est présenté ci-dessous. Les vecteurs qu’il contient sont ceux que nous créons à la main, avec seulement trois nombres chacun, pour rendre l’idée facile à voir. Les intégrations réelles proviennent d’un modèle entraîné et comportent souvent des centaines ou des milliers de nombres.
Qu’est-ce qu’une intégration ?
Une intégration est une représentation de quelque chose sous la forme d’une liste de nombres, appelée vecteur. Un modèle est entraîné de manière à ce que les éléments ayant des significations connexes obtiennent des vecteurs proches les uns des autres.
"kitten" -> [0.9, 0.8, 0.1]
"cat" -> [0.9, 0.7, 0.2]
"invoice" -> [0.0, 0.1, 0.9]
Une fois le texte sous cette forme, un ordinateur peut calculer la similitude de deux morceaux de texte, ce qu’il ne peut pas faire directement avec des mots. Les intégrations ne se limitent pas non plus aux mots. Des phrases, des documents entiers, des images, des fichiers audio et des produits peuvent tous être intégrés.
Pourquoi ne pas simplement faire correspondre les mots-clés ?
| Requête et document | Recherche par mot-clé | Recherche intégrée |
|---|---|---|
| “satisfait ou remboursé” et “politique de remboursement” | Ça me manque, pas de mots partagés | Je peux le trouver |
| “laptop” et “notebook” | Ça manque | Je peux le trouver |
| “erreur E1042” et une page avec “E1042” | Le trouve exactement | Je peux le manquer |
| “banque” (rivière) et “banque” (argent) | Les traite de la même manière | Peut les séparer, compte tenu du contexte |
Notre guide de RAG le montre en pratique. Une simple recherche par nombre de mots a donné un résultat nul pour « Quand puis-je récupérer mon argent ? » contre un document de remboursement, puisqu’ils n’ont partagé aucun mot. Notez également la troisième ligne : les identifiants exacts sont une faiblesse des intégrations, donc la recherche par mot clé a toujours sa place.
Pensez à une carte
Imaginez placer chaque mot sur une immense carte, où l’emplacement reflète le sens. « Chat » et « chaton » sont assis presque l’un à côté de l’autre, « chien » est dans le même quartier et « facture » est dans une ville différente. Pour trouver des mots apparentés, il vous suffit de regarder à proximité.
Une véritable intégration fonctionne de la même manière, sauf que la carte a des centaines de dimensions au lieu de deux. Les gens ne peuvent pas imaginer cela, mais les calculs fonctionnent de la même manière. Les nombres individuels n’ont généralement pas de signification précise, comme « furriness ». Ce qui compte, c’est la position globale.
Un petit exemple fonctionnel
Voici comment comparer nos vecteurs fabriqués à la main :
import math
def cosine(a, b):
dot = sum(x * y for x, y in zip(a, b))
return dot / (math.sqrt(sum(x * x for x in a)) *
math.sqrt(sum(y * y for y in b)))
vectors = {
"kitten": [0.9, 0.8, 0.1],
"cat": [0.9, 0.7, 0.2],
"dog": [0.8, 0.3, 0.2],
"invoice": [0.0, 0.1, 0.9],
}
for word in ("kitten", "dog", "invoice"):
print(word, round(cosine(vectors["cat"], vectors[word]), 3))
# kitten 0.994
# dog 0.955
# invoice 0.238
Par rapport au « chat », le « chaton » obtient le score le plus élevé, le « chien » vient ensuite et la « facture » est bien inférieure. Nous avons choisi ces vecteurs pour produire ce modèle, donc le classement ne prouve rien sur le langage réel. Il montre uniquement le comportement du calcul. Une recherche sémantique fait la même chose en trois étapes : intégrer la requête, l’évaluer par rapport à chaque élément stocké et trier.
query = [0.85, 0.75, 0.15]
sorted(vectors, key=lambda w: cosine(query, vectors[w]), reverse=True)
# ['kitten', 'cat', 'dog', 'invoice']
Similitude cosinus expliquée
Chaque vecteur peut être considéré comme une flèche pointant depuis l’origine. La similarité cosinus mesure l’angle entre deux flèches, en ignorant leur longueur. Nous avons confirmé les valeurs clés :
cosine([1, 2, 3], [2, 4, 6]) # 1.0 same direction
cosine([1, 0], [0, 1]) # 0.0 unrelated (at right angles)
cosine([1, 0], [-1, 0]) # -1.0 opposite directions
| Score | Signification |
|---|---|
| Près de 1 | Pointent presque dans la même direction, donc très similaires |
| Proche de 0 | Sans rapport |
| Proche de -1 | Pointer dans des directions opposées |
Regardez la première ligne. [2, 4, 6] est deux fois plus long que [1, 2, 3], mais le score est parfait de 1,0, car seule la direction compte. Cela est utile pour le texte, où la longueur peut refléter des éléments tels que la taille du document plutôt que sa signification. Soyez également prudent avec les seuils. Il n’existe pas de score universel signifiant « similaire », car les plages utiles diffèrent d’un modèle à l’autre, alors testez sur vos propres données.
Autres mesures de distance
| Mesurer | À quoi ça ressemble | Remarques |
|---|---|---|
| Similitude cosinus | Angle seulement | Un défaut courant pour le texte |
| Produit scalaire | Angle et longueur | Rapide et égal au cosinus sur les vecteurs normalisés |
| Distance euclidienne | Distance en ligne droite | Plus petit signifie plus similaire |
La différence est facile à voir. Ces deux mêmes vecteurs avec un score cosinus de 1,0 ont une distance euclidienne de 3,742, puisque l’un est plus long que l’autre. De nombreux systèmes normalisent les vecteurs, en les mettant chacun à une longueur de 1. Après cela, le produit scalaire et le cosinus donnent la même réponse, et nous l’avons confirmé : les deux ont donné 0,955 pour “chat” et “chien”. Consultez la documentation de votre modèle pour voir quelle mesure il recommande.
Comment les intégrations sont apprises
Personne n’attribue ces numéros à la main dans les systèmes réels. Un réseau de neurones les apprend lors de l’entraînement. Une idée ancienne et influente est que les mots apparaissant dans des contextes similaires ont tendance à avoir des significations similaires, comme « J’ai nourri mon chat » et « J’ai nourri mon chien ». Des modèles tels que Word2Vec et GloVe ont appris des vecteurs de mots à partir de ces modèles.
Plus tard, des modèles basés sur des transformateurs tels que BERT ont rendu les intégrations sensibles au contexte, de sorte que « banque » puisse obtenir un vecteur différent dans « berge de rivière » et « prêt bancaire ». De nombreux modèles modernes intègrent des phrases ou des passages entiers à la fois. Notre guide des grands modèles de langage explique comment les transformateurs gèrent le contexte.
Où les intégrations sont utilisées
| Utiliser | Comment ça aide |
|---|---|
| Recherche sémantique | Trouve des résultats par le sens plutôt que par des mots exacts |
| CHIFFON | Récupère les passages pertinents pour un modèle de langage |
| Recommandations | Suggère des articles similaires à ceux que vous avez aimés |
| Regroupement | Les groupes prennent en charge les tickets ou les avis par sujet |
| Détection des doublons | Repère des questions ou des listes similaires |
| Classement | Fournit des fonctionnalités pour les modèles simples |
| Détection d’anomalies | Signale les éléments éloignés de tout le reste |
Recherche à grande échelle
Notre exemple a comparé une requête à chaque élément, ce que l’on appelle une recherche exacte. Cela fonctionne bien pour des milliers d’éléments, mais cela devient lent avec plusieurs millions. Les index Approximativement le plus proche voisin (ANN) tels que HNSW résolvent ce problème. Ils trouvent rapidement des matchs très serrés, en renonçant à une petite chance de rater le meilleur absolu.
Les bases de données vectorielles et les extensions, telles que pgvector pour PostgreSQL, fournissent ces index ainsi que le filtrage et le stockage. Notre guide des bases de données vectorielles couvre les options. Pour un petit projet, vous n’en aurez peut-être pas besoin du tout, et une recherche en mémoire est un très bon moyen de commencer.
Conseil : Envisagez dès le début la recherche hybride. La combinaison de la similarité intégrée et de la correspondance de mots clés donne souvent de meilleurs résultats que l’une ou l’autre solution seule, en particulier lorsque les utilisateurs recherchent des codes de produits, des noms ou des messages d’erreur.
Choisir un modèle d’intégration
- Langue. Si votre contenu est en hindi ou en tamoul par exemple, vérifiez que le modèle le gère bien.
- Domaine. Les modèles généraux peuvent avoir des difficultés avec les termes juridiques ou médicaux spécialisés.
- Dimensions. Plus de dimensions peuvent capturer plus de détails, mais elles coûtent plus de stockage et de mémoire.
- Coût et hébergement. Comparez une API hébergée avec un modèle ouvert que vous pouvez exécuter vous-même, notamment pour les données privées.
- Longueur d’entrée. Les modèles ont une limite, les documents longs doivent donc d’abord être divisés en morceaux.
Le meilleur test est celui de vos propres données. Collectez environ 20 requêtes réelles ainsi que les documents qu’elles devraient trouver et comparez la façon dont chaque modèle les classe. Les benchmarks publiés peuvent ne pas refléter votre contenu.
Limites
- Verrouillage du modèle. Les vecteurs de différents modèles ne peuvent pas être comparés. Si vous changez de modèle, vous devez tout réintégrer.
- Termes exacts. Les identifiants, codes et noms rares peuvent ne pas correspondre de manière fiable.
- Négation. Les « remboursements autorisés » et les « remboursements non autorisés » peuvent se rapprocher, même s’ils signifient des choses opposées.
- Similaire ne veut pas dire correct. Une correspondance serrée peut être obsolète ou tout simplement fausse.
- Biais. Les intégrations peuvent absorber les stéréotypes de leurs données de formation.
- Le cosinus n’est pas magique. Les chercheurs se demandent quelle est sa signification sur certaines intégrations apprises, donc traitez les scores comme un signal utile et non comme une mesure de vérité.
Erreurs courantes
- Mélange de modèles. Intégrez des requêtes et des documents avec le même modèle et la même version.
- Utiliser un seuil de similarité partout. Ajustez-le pour chaque modèle et chaque tâche.
- Intégrer d’énormes documents dans leur intégralité. Le sens se dilue, alors les fragmenter en premier.
- Ignorer l’évaluation. Sans requêtes de test, vous ne pouvez pas savoir si un changement a aidé.
- Utiliser des intégrations pour tout. Si les utilisateurs recherchent des identifiants exacts, un index de base de données normal est préférable.
Pour conclure
Une intégration transforme le sens en nombres, afin que le logiciel puisse comparer des idées plutôt que des chaînes. Le concept est simple, tandis que le travail pratique consiste à choisir un modèle, à regrouper les données et à tester sur des requêtes réelles. Pour l’essayer vous-même, intégrez quelques dizaines de vos propres documents avec n’importe quel modèle d’intégration, recherchez-les avec de vraies questions et voyez où les résultats vous surprennent.
Questions fréquentes
Que sont les intégrations en termes simples ?
Les intégrations sont des listes de nombres qui représentent une signification. Les éléments ayant une signification similaire obtiennent des nombres similaires, ce qui permet à un ordinateur de les comparer mathématiquement.
Qu’est-ce que la similarité cosinus ?
Il mesure l’angle entre deux vecteurs, de -1 à 1. Un score proche de 1 signifie qu’ils pointent presque dans la même direction, ce qui suggère un contenu similaire.
Quelle est la différence entre les intégrations et les jetons ?
Un jeton est un morceau de texte traité par un modèle. Une intégration est un vecteur numérique représentant la signification d’un jeton, d’une phrase ou d’un document.
Combien de dimensions doit avoir une intégration ?
Cela dépend du modèle, et des centaines à quelques milliers sont courants. Plus peut capturer plus de détails, mais cela coûte plus de stockage, alors testez ce dont votre cas d’utilisation a besoin.
Ai-je besoin d’une base de données vectorielles pour utiliser les intégrations ?
Non. Les petites collections peuvent être recherchées en mémoire. Les bases de données vectorielles deviennent utiles avec des collections plus importantes, des mises à jour fréquentes ou des besoins de filtrage.
Continuez à apprendre
Besoin d’aide pour les tests, WordPress ou le référencement ?
Nous aidons les équipes à proposer de meilleurs logiciels et à développer leurs sites. Dites-nous sur quoi vous travaillez et nous vous proposerons une prochaine étape claire.
Plus de guides sur tests, IA et développement moderne
Vous avez apprécié cet article ? Choisissez un sujet et accédez directement à nos nouveaux didacticiels.
Les hallucinations de l'IA expliquées : pourquoi les modèles de langage inventent les choses et comment les réduire
Les hallucinations de l'IA ont expliqué : ce qu'elles sont, pourquoi les modèles de langage les produisent, les types courants, comment les réduire …
Lire l'article →DevOpsVariables d'environnement expliquées : fichiers .env, secrets et configuration correctement effectués
Variables d'environnement expliquées avec des exemples Python que nous avons exécutés : lecture et définition, pourquoi chaque valeur est une chaîne…
Lire l'article →Développement logicielLimitation du débit de l'API expliquée : algorithmes, en-têtes et gestion des erreurs 429
Limitation du débit de l'API expliquée avec une simulation que nous avons exécutée : compartiment de jetons, fenêtre fixe, fenêtre glissante, 429 ré…
Lire l'article →Automatisation des testsSe moquer en Python : unittest.mock, patch et les erreurs qui font mentir les tests
Moquerie en Python avec unittest.mock, testée : Mock et return_value, side_effect, correctifs où un nom est utilisé, spec et autospec, dates moqueus…
Lire l'article →Tests logicielsCouverture du code expliquée : couverture des lignes par rapport aux branches et ce que signifie réellement 100 %
Couverture du code expliquée avec une véritable exécution de cover.py : couverture des lignes, des branches et des conditions, lecture d'un rapport,…
Lire l'article →Bases de données et SQLDELETE vs TRUNCATE vs DROP dans SQL : différences, restauration et quand les utiliser
DELETE vs TRUNCATE vs DROP expliqué avec SQL testé : ce que chacun supprime, restauration, déclencheurs, réinitialisation d'identité, vitesse et en …
Lire l'article →Bases de données et SQLVues SQL expliquées : créez, utilisez et évitez les pièges, avec des exemples
Vues SQL expliquées avec les requêtes que nous avons exécutées : création d'une vue, résultats en direct, masquage des colonnes, performances, vues …
Lire l'article →Développement logicielInterface TypeScript vs Type : différences réelles, testées avec le compilateur
Interface TypeScript vs type, vérifiée avec le vrai compilateur : ce que les deux peuvent faire, ce qu'un seul peut faire, la fusion des déclaration…
Lire l'article →Développement logicielPython *args et **kwargs expliqués : fonctions flexibles avec des exemples clairs
Python *args et **kwargs expliqués avec le code que nous avons exécuté : emballage et déballage, ordre des paramètres, arguments de mot-clé uniqueme…
Lire l'article →Développement logicielFonctions Python Lambda : syntaxe, utilisations réelles et quand ne pas les utiliser
Fonctions Python lambda expliquées avec le code que nous avons exécuté : syntaxe, tri avec clé, carte et filtre, fermetures, piège de liaison tardiv…
Lire l'article →Intelligence artificielleQue sont les agents IA ? Comment ils fonctionnent, avec une simple boucle d'agent que vous pouvez exécuter
Que sont les agents IA ? Un guide simple sur la boucle d'agent, les outils, la mémoire et les garde-fous, avec une petite boucle Python que nous avo…
Lire l'article →DevOpsSurveillance vs observabilité : la vraie différence, avec les journaux, les métriques et les traces
Surveillance et observabilité expliquées : échecs connus et inconnus, journaux, métriques et traces, présentation pas à pas des incidents de paiemen…
Lire l'article →DevOpsVolumes Docker vs montages Bind : conserver les données du conteneur de la bonne manière
Volumes Docker et montages de liaison expliqués : pourquoi les données du conteneur disparaissent, volumes nommés, montages de liaison, tmpfs, exemp…
Lire l'article →Automatisation des testsTDD vs BDD : principales différences, une fonctionnalité conçue dans les deux sens et quand les utiliser
TDD vs BDD expliqué avec une fonctionnalité de remise construite dans les deux sens : refactor rouge-vert avec le code que nous avons exécuté, scéna…
Lire l'article →Tests logicielsTests d'acceptation utilisateur (UAT) : processus, liste de contrôle et exemples réels
Les tests d'acceptation des utilisateurs sont expliqués : qui les exécute, en quoi ils diffèrent du contrôle qualité, un processus en sept étapes, u…
Lire l'article →Bases de données et SQLExplication des valeurs SQL NULL : IS NULL, COALESCE, NULLIF et les pièges à éviter
Les valeurs SQL NULL expliquées avec les requêtes que nous avons exécutées : logique à trois valeurs, IS NULL, COALESCE, NULLIF, comment les agrégat…
Lire l'article →Bases de données et SQLInstruction SQL CASE WHEN : syntaxe, exemples réels et erreurs courantes
SQL CASE WHEN expliqué avec les requêtes que nous avons exécutées : formulaires simples et recherchés, ordre des conditions, pivots avec SUM, astuce…
Lire l'article →Développement logicielQu'est-ce que JWT ? Les jetons Web JSON expliqués avec un exemple fonctionnel
Qu’est-ce que JWT ? JSON Web Tokens expliqué : les trois parties, un jeton construit et falsifié dans le code que nous avons exécuté, JWT vs session…
Lire l'article →Développement logicielBoucle d'événements JavaScript expliquée : pile d'appels, microtâches et minuteries avec des exemples
La boucle d'événements JavaScript expliquée avec le code que nous avons exécuté : pile d'appels, files d'attente de tâches et de microtâches, pourqu…
Lire l'article →Développement logicielGénérateurs Python et rendement expliqués : économisez de la mémoire avec des exemples réels
Les générateurs Python et le rendement expliqués avec le code que nous avons exécuté : comment ils s'arrêtent et reprennent, les économies de mémoir…
Lire l'article →Intelligence artificielleQue sont les intégrations ? Vecteurs et similarité cosinus expliqués simplement
Que sont les intégrations ? Un guide en langage simple sur les vecteurs, la similarité cosinus et la recherche sémantique, avec un petit exemple que…
Lire l'article →DevOpsDéploiement Bleu-Vert vs Canary : différences, compromis et comment choisir
Explication du déploiement bleu-vert ou canari : comment chacun fonctionne, coût, risque et restauration, regroupement d'utilisateurs stable que nou…
Lire l'article →Automatisation des testsTests instables : quelles sont leurs causes et comment les corriger définitivement
Des tests irréguliers expliqués avec des démos que nous avons exécutées : les principales causes, comment en confirmer et en diagnostiquer une, les …
Lire l'article →Tests logicielsTests de charge vs tests de contrainte : différences, métriques et exemples k6
Explication des tests de charge et des tests de stress : ce que chacun prouve, les tests de pointe et de trempage, les métriques qui comptent, pourq…
Lire l'article →Tests logicielsScénario de test et scénario de test : principales différences, exemples et quand les utiliser
Scénario de test et scénario de test expliqués : des définitions claires, un tableau côte à côte, une fonctionnalité de réinitialisation de mot de p…
Lire l'article →Bases de données et SQLOptimisation des requêtes SQL : lire les plans d'exécution et corriger les requêtes lentes, avec des délais
Optimisation des requêtes SQL testée sur un million de lignes : lire les plans d'exécution, ajouter les bons index, corriger les filtres non Sargabl…
Lire l'article →Bases de données et SQLSQL UNION vs UNION ALL : différences, exemples et performances testées
SQL UNION vs UNION ALL expliqué avec les requêtes que nous avons exécutées : des doublons, les règles suivent toutes les deux, un véritable bug de d…
Lire l'article →Développement logicielTutoriel API JavaScript Fetch : GET, POST, gestion des erreurs et délais d'attente
Un didacticiel de l'API JavaScript Fetch testé sur un serveur local : GET et POST, pourquoi 404 ne lance pas, un assistant réutilisable, des chaînes…
Lire l'article →Développement logicielGestion des fichiers Python : lecture, écriture, CSV, JSON et pathlib avec exemples
Gestion des fichiers Python expliquée avec le code que nous avons exécuté : modes ouverts, avec lecture de fichiers volumineux, CSV, JSON, pathlib, …
Lire l'article →Développement logicielClasses et objets Python : didacticiel POO avec des exemples réels
Classes et objets Python expliqués avec le code que nous avons exécuté : __init__, méthodes, attributs de classe par rapport à l'instance, héritage,…
Lire l'article →Intelligence artificielleQu'est-ce qu'un grand modèle de langage ? Comment fonctionnent les LLM, expliqués sans battage médiatique
Qu’est-ce qu’un grand modèle de langage ? Les LLM expliqués en langage simple : jetons, intégrations, attention, formation, fenêtres de température …
Lire l'article →DevOpsCommandes Linux pour les débutants : le guide du terminal essentiel avec des exemples
Commandes Linux pour débutants, regroupées par tâche : navigation, fichiers, affichage des journaux, grep, tuyaux, autorisations, processus et archi…
Lire l'article →Automatisation des testsSelenium vs Playwright : principales différences, code comparé et lequel choisir
Comparatif Selenium vs Playwright : architecture, attente, support du navigateur et du langage, débogage, même test dans les deux outils, conseils d…
Lire l'article →Tests logicielsPartitionnement d'équivalence : technique de conception de tests expliquée avec des exemples concrets
Le partitionnement d'équivalence expliqué : comment trouver des partitions valides et invalides, des exemples concrets d'âges, de mots de passe et d…
Lire l'article →Tests logicielsGravité vs priorité dans les tests logiciels : différences, matrice et exemples réels
Explication de la gravité et de la priorité dans les tests logiciels : des définitions claires, une matrice à quatre voies avec des exemples, des éc…
Lire l'article →Bases de données et SQLTutoriel sur les sous-requêtes SQL : types, sous-requêtes corrélées et EXISTE avec des exemples
Un didacticiel sur les sous-requêtes SQL avec les requêtes que nous avons exécutées : les sous-requêtes scalaires, IN, FROM et SELECT, les sous-requ…
Lire l'article →Bases de données et SQLTransactions SQL et ACID expliquées : COMMIT, ROLLBACK et niveaux d'isolement
Transactions SQL et ACID expliquées avec un virement bancaire que nous avons effectué : COMMIT, ROLLBACK, points de sauvegarde, verrous, niveaux d'i…
Lire l'article →Développement logicielGit merge vs rebase : différences, exemples et quand utiliser chacun
Git merge vs rebase expliqué avec de vraies sorties de log, un tableau comparatif, la règle d'or du rebase et un flux de travail sûr pour les équipes.
Lire l'article →Développement logicielList comprehension Python : syntaxe, exemples et cas à éviter
La list comprehension Python expliquée : syntaxe, filtres, if-else, boucles imbriquées, temps mesurés et cas où une boucle for classique est préféra…
Lire l'article →Bases de données et SQLJointures SQL expliquées avec exemples (Inner, Left, Right, Full)
Comprenez les jointures SQL pas à pas avec des tables et requêtes d'exemple : INNER, LEFT, RIGHT, FULL, CROSS et SELF, plus erreurs courantes et con…
Lire l'article →