Que sont les embeddings et pourquoi sont-ils importants
(simonwillison.net)- Les embeddings transforment des contenus comme du texte, des images ou du code en tableaux de nombres à virgule flottante de longueur fixe, ce qui permet de retrouver des éléments sémantiquement proches via un calcul de distance
- Dans l’espace vectoriel produit par un même modèle, il n’est pas nécessaire de connaître la signification de chaque nombre pour comparer des documents liés, des images similaires ou des fragments de code avec la similarité cosinus
- Dans un cas où 472 billets TIL ont été stockés sous forme de vecteurs de 1 536 dimensions avec OpenAI
text-embedding-ada-002, une requête de recherche d’articles liés prenait environ 400 ms, et le coût d’embedding total de 402 500 tokens était d’environ 0,04 $ - Même avec seulement des modèles locaux et de petits outils combinés, il est possible d’implémenter la recherche dans des README, la recherche de code, la recherche d’images, le clustering et le RAG, avec comme exemples
LLM,llm-sentence-transformers,Symbex,CLIPetE5-large-v2 - La recherche sémantique fondée sur les embeddings ne dépend pas d’une correspondance exacte des mots, ce qui en fait un moyen clé, notamment dans le RAG pour les questions-réponses sur des documents internes, d’insérer dans le prompt du LLM des extraits pertinents
Concepts de base des embeddings
- Un embedding est une manière de convertir un fragment de contenu en tableau de nombres à virgule flottante
- Quelle que soit la longueur du contenu, la longueur du tableau reste toujours identique
- La longueur du tableau est déterminée par le modèle d’embedding utilisé, par exemple 300, 1 000 ou 1 536 nombres
- Ce tableau peut être vu comme des coordonnées dans un espace multidimensionnel
- La position dans cet espace représente le sens du contenu tel qu’interprété par le modèle d’embedding
- Des caractéristiques du contenu comme la couleur, la forme ou des concepts peuvent s’y refléter
- Même sans comprendre complètement la signification de chaque nombre, on peut exploiter les relations de position pour des tâches utiles, comme retrouver des éléments proches
Recommander des contenus liés : le cas du blog TIL
- Sur un site TIL comptant 472 articles, le modèle OpenAI
text-embedding-ada-002a été utilisé pour calculer un vecteur d’embedding de 1 536 dimensions pour chaque billet- Les vecteurs ont été stockés dans la base de données SQLite du site
- Les articles liés ont été trouvés en calculant la similarité cosinus entre le vecteur de l’article cible et tous les autres, puis en renvoyant les 10 plus proches
- Pour l’article d’exemple « Geospatial SQL queries in SQLite using TG, sqlite-tg and datasette-sqlite-tg », les premiers résultats liés portaient sur SQLite, SpatiaLite, GDAL et les requêtes SQL spatiales
- La similarité avec lui-même était de 1.0
sqlite_geopoly.mdavait 0.8817322855676049spatialite_viewing-geopackage-data-with-spatialite-and-datasette.mdavait 0.8813094978399854
- La requête de calcul des articles liés prenait environ 400 ms, donc les 10 meilleures similarités ont été pré-calculées pour tous les articles puis enregistrées dans une table
similarities - Le coût de l’API d’embedding d’OpenAI pour le site TIL était d’environ 0,04 $, sur la base d’environ 402 500 tokens au tarif de 0.0001 $ / 1 000 tokens
- Les modèles propriétaires demandent une vigilance opérationnelle
- OpenAI a déjà arrêté certains anciens modèles d’embedding
- Si beaucoup d’embeddings ont été stockés avec un ancien modèle, il peut être nécessaire de les recalculer avec un modèle encore pris en charge pour embedder de nouveaux contenus
- OpenAI a promis de prendre en charge le coût du ré-embedding avec les nouveaux modèles, mais le risque de dépendance à un modèle propriétaire demeure
- Les modèles sous licence ouverte peuvent être exécutés sur son propre matériel, ce qui évite le risque de disparition du modèle
Comprendre l’espace vectoriel avec Word2Vec
- Efficient Estimation of Word Representations in Vector Space de Google Research est l’article Word2Vec publié le 16 janvier 2013
- Word2Vec est un des premiers modèles d’embedding qui transforme un mot en tableau de 300 nombres
- turbomaze.github.io/word2vecjson est une démo qui permet d’explorer 10 000 mots et leur tableau de 300 nombres
- Parmi les mots proches de « france », on trouve
french,belgium,paris,germany,italy,spain
- Parmi les mots proches de « france », on trouve
- Les opérations vectorielles révèlent aussi des relations
- Si on ajoute « paris » au vecteur « germany » puis qu’on retire « france », le vecteur résultant est le plus proche de « berlin »
- Cela montre que le modèle a capturé des relations de nationalité et de géographie dans l’espace vectoriel
- Word2Vec a été entraîné sur 1,6 milliard de mots, et les modèles d’embedding actuels sont entraînés sur des jeux de données bien plus vastes, capables de capturer des relations plus riches
Calculer des embeddings avec les outils LLM
- LLM est un outil en ligne de commande et une bibliothèque Python pour manipuler de grands modèles de langage
- Il peut être installé avec
pip install llmoubrew install llm - Par défaut, il peut être utilisé avec l’API OpenAI
- Il peut être installé avec
- En installant des plugins, il est possible d’ajouter de nouveaux modèles de langage ou modèles d’embedding
- Le plugin
llm-sentence-transformersencapsule la bibliothèque SentenceTransformers- Il permet de télécharger le modèle
all-MiniLM-L6-v2depuis Hugging Face et de l’utiliser en local - La commande
llm embedrenvoie un tableau JSON de nombres pour une phrase
- Il permet de télécharger le modèle
- Un embedding seul, sous forme de tableau de nombres, a peu d’intérêt ; il devient utile une fois stocké puis comparé
llm embed-multipermet d’embedder plusieurs contenus à la fois et de les stocker dans une table SQLite appelée collection- La commande d’exemple cherche tous les fichiers
README.mdsous le répertoire personnel et les enregistre dans la collectionreadmes - L’option
--storeenregistre aussi le texte source dans la table SQLite - Au total, 16 796 fichiers
README.mdont été enregistrés, ce qui a pris environ 30 minutes sur un ordinateur local
- La commande d’exemple cherche tous les fichiers
Recherche sémantique et « vibes-based search »
- La commande
llm similarcherche dans une collection d’embeddings stockée les éléments similaires à une phrase d’entrée - Si l’on interroge la collection
readmesavec la phrasesqlite backup tools, les premiers résultats incluent les README de projets liés aux sauvegardes SQLite, commesqlite-diffable,sqlite-dump,sqlite-generate,sqlite-historyetsqlite-utils - Rien ne garantit que le mot « backups » apparaisse directement dans les documents trouvés
- Un contenu peut ressortir comme résultat s’il est sémantiquement similaire à la requête
- Cette méthode relève de la recherche sémantique, que l’auteur appelle ici vibes-based search
- Comme une correspondance textuelle exacte ne permet pas toujours de trouver ce que cherche l’utilisateur, cette approche est utile pour différents moteurs de recherche de contenu
Embeddings de code : Symbex et Datasette
- Symbex est un outil d’exploration des symboles dans un codebase Python
- Il a été créé pour retrouver rapidement des fonctions et classes Python à transmettre à un LLM
- Il a ensuite permis de calculer les embeddings de toutes les fonctions d’un codebase pour construire un moteur de recherche de code
- Symbex peut produire les symboles trouvés en JSON ou CSV, formats qui peuvent servir d’entrée à
llm embed-multi - L’exemple d’embedding de toutes les fonctions et méthodes de classe du projet Datasette utilise le modèle gte-tiny
gte-tinyest un fichier de 60 MBsymbex '*' '*:*' --nlproduit les fonctions et méthodes de classe du répertoire courant au format JSON délimité par des retours à la lignellm embed-multi ... --format nlpeut consommer directement cette sortie pour produire les embeddings
- On peut ensuite utiliser Datasette et le plugin datasette-llm-embed pour exécuter une recherche sémantique de code en SQL
- SQLite sert de point d’intégration pour assembler plusieurs outils
- Extraire les fonctions du code
- Les faire passer dans le modèle d’embedding
- Écrire les résultats dans SQLite
- Rechercher avec SQL
Embeddings de texte et d’image dans le même espace avec CLIP
- CLIP est un modèle publié par OpenAI en janvier 2021, capable d’embedder à la fois du texte et des images
- L’idée clé est que texte et image sont placés dans le même espace vectoriel
- La position de l’embedding de la chaîne « dog » est proche de celle d’une photo de chien dans le même espace
- On peut ainsi retrouver des images liées à partir de texte, ou du texte lié à partir d’images
- La démo CLIP exécutée dans le navigateur a été construite sous forme de notebook Observable et exécute le modèle CLIP dans le navigateur
- La page charge 158 MB de ressources
- Le modèle texte CLIP pèse 64.6 MB et le modèle image 87.6 MB
- Un exemple calcule des scores de similarité entre une photo de plage et différents textes
beach: 26.946%city: 19.839%sunshine: 24.146%california beach: 27.427%
- Plus que de demander la similarité entre une photo quelconque et un seul mot, l’enjeu est de construire au-dessus une interface de recherche
Faucet Finder : recherche d’images fondée sur CLIP
- Faucet Finder est un outil de recherche sur mesure pour retrouver des photos de robinets de salle de bain
- Drew Breunig a collecté 20 000 images de robinets auprès de fournisseurs et a calculé leurs embeddings CLIP
- L’implémentation utilise LLM et le plugin llm-clip
- Le tout est déployé avec Datasette
- L’outil permet de trouver d’autres robinets visuellement similaires à un modèle donné
- Si un robinet cher plaît, on peut trouver des alternatives moins coûteuses mais visuellement proches
- La démo de Drew affiche des résultats similaires à partir d’embeddings pré-calculés, sans exécuter le modèle CLIP côté serveur
- Par la suite, un modèle CLIP côté serveur a été déployé sur Fly.io, et une démo sous forme de notebook Observable a été créée en combinant une API d’embedding de chaînes de texte et une API de table d’embeddings de robinets
- Il devient alors possible de rechercher sémantiquement des images de robinets avec une requête comme « gold purple »
Clustering et visualisation en 2D
- Les embeddings ne servent pas seulement à recommander des contenus liés ou à faire de la recherche sémantique, ils peuvent aussi servir au clustering
- llm-cluster est un plugin qui implémente le clustering avec sklearn.cluster de scikit-learn
- À partir de l’API GitHub issues et de paginate-json, on peut créer une collection
llm-issuesà partir des titres des issues du dépôtsimonw/llm, puis générer 10 clusters - L’option
llm cluster llm-issues 10 --summarytransmet le texte des clusters à un LLM pour générer des noms descriptifs- Parmi les noms d’exemple figurent « Log Management and Interactive Prompt Tracking » et « Continuing Conversation Mechanism and Management »
- Les espaces de grande dimension sont difficiles à visualiser, et l’on peut réduire la dimension avec une analyse en composantes principales (PCA)
- Matt Webb a créé des embeddings OpenAI des descriptions d’épisodes du podcast BBC
In Our Time, puis généré une visualisation 2D avec la PCA - Même réduits de 1 536 dimensions à 2 dimensions, les épisodes sur les guerres historiques ou les découvertes scientifiques modernes apparaissent encore proches les uns des autres
- Matt Webb a créé des embeddings OpenAI des descriptions d’épisodes du podcast BBC
Classer des phrases par position moyenne
- Les embeddings peuvent aussi être utilisés pour la classification
- On calcule d’abord la position moyenne de groupes d’embeddings classés selon un certain critère
- On compare ensuite l’embedding d’un nouveau contenu à ces positions pour lui attribuer une catégorie selon celle dont il est le plus proche
- Getting creative with embeddings d’Amelia Wattenberger présente un cas où l’on attribue un score à une phrase selon qu’elle est concrète ou abstraite
- On crée des exemples de phrases concrètes et abstraites, puis on calcule la position moyenne de chaque groupe
- Une nouvelle phrase reçoit un score selon sa proximité avec l’une ou l’autre position moyenne
- Ce score peut aussi être transformé en couleur pour représenter de manière souple à quel point la phrase est abstraite ou concrète
RAG : questions-réponses sur documents personnels et documents internes
- Les personnes qui ont utilisé ChatGPT se demandent souvent comment obtenir des réponses fondées sur leurs notes personnelles ou sur des documents internes à l’entreprise
- La réponse n’est peut-être pas un entraînement coûteux d’un modèle sur mesure, mais une combinaison de LLM standard et de RAG (génération augmentée par la recherche)
- La procédure de base du RAG est simple
- L’utilisateur pose une question
- On recherche dans les documents personnels les contenus qui semblent liés à la question
- En respectant la limite de taille du LLM, on insère dans le prompt les extraits pertinents avec la question d’origine
- Le LLM répond à partir du contenu additionnel fourni
- La limite de taille courante est généralement de l’ordre de 3 000 à 6 000 mots
- La partie difficile du RAG consiste à trouver les meilleurs extraits à inclure dans le prompt
- La recherche sémantique fondée sur les embeddings est bien adaptée pour rassembler les contenus les plus susceptibles d’être pertinents
Implémenter un Q&R hors ligne fondé sur un blog avec E5-large-v2
- Un exemple de RAG fondé sur le contenu d’un blog utilise E5-large-v2
- Les phrases de question et de réponse ont une grammaire différente, donc une question n’est pas toujours sémantiquement proche d’un document qui contient la réponse
- E5-large-v2 prend en charge deux types de contenu
- Une factual sentence est embedded comme phrase
- Une question est embedded comme query
- Cela ressemble à la manière dont CLIP place images et texte dans le même espace
- Les 19 000 paragraphes du blog sont embeddés en tant que phrase, et la question est embeddée en tant que query pour trouver les paragraphes les plus proches de la réponse
- L’exemple implémente un RAG avec une simple ligne de commande Bash
llm similarsert à trouver les paragraphes pertinentsjqextrait le contenu- La question et les paragraphes sont ensuite transmis à un modèle Llama 2 Chat 7B exécuté sur un ordinateur portable local
- À la question
What is shot-scraper?, la réponse générée explique queshot-scraperest un utilitaire Python qui encapsule Playwright et automatise les captures d’écran de pages web ainsi que le scraping fondé sur JavaScript via une interface en ligne de commande et un flux de configuration basé sur YAML - La réponse générée ne correspondait pas à une phrase exactement présente dans le contenu du blog
Choix ajustables en pratique
- LangChain est un framework pour implémenter des fonctionnalités au-dessus des LLM, et le RAG en est l’une des fonctions centrales
- On peut construire les mêmes fonctionnalités avec LangChain, mais sa compréhension demande un investissement important
- Ici, la préférence va à une boîte à outils de petits composants combinables plutôt qu’à un framework unique censé tout résoudre
- La fonction de distance utilisée par défaut est la similarité cosinus
- D’autres fonctions de distance n’ont pas encore été testées
- Le RAG comporte de nombreux paramètres ajustables : fonction de distance, modèle d’embedding, stratégie de prompt, LLM, etc.
- Les exemples portaient sur un volume maximal d’environ 20 000 embeddings, taille à laquelle un calcul brute force de similarité cosinus sur l’ensemble reste raisonnablement rapide
- Pour des volumes bien plus grands, comme 1 milliard d’objets, on peut envisager une base de données vectorielle ou une extension de base de données existante
- SQLite dispose de sqlite-vss
- PostgreSQL dispose de pgvector
- FAISS de Facebook a aussi été utilisé dans des expérimentations, ainsi que le plugin Datasette datasette-faiss qui s’appuie dessus
- Parmi les évolutions attendues figurent les modèles multimodaux et des modèles plus petits
- ImageBind de Facebook apprend un embedding commun pour six modalités de données : image, texte, audio, profondeur, thermique et IMU
- Des modèles plus compacts comme
gte-tiny, qui ne pèse que 60 MB, augmentent les possibilités d’exécution sur des appareils contraints ou directement dans le navigateur
Pour aller plus loin
- What are embeddings? par Vicki Boykis
- Text Embeddings Visually Explained par Meor Amer pour Cohere
- The Tensorflow Embedding Projector : outil interactif d’exploration d’espaces d’embedding
- Learn to Love Working with Vector Embeddings : série de tutoriels Pinecone sur les embeddings vectoriels
1 commentaires
Avis sur Hacker News
Après avoir publié cet article, j’ai trouvé quelques ressources supplémentaires utiles pour comprendre les embeddings à un niveau plus bas
Mon article était volontairement très général, avec un accent surtout mis sur les applications
Text Embeddings Visually Explained de Cohere : https://txt.cohere.com/text-embeddings/
L’outil Tensorflow Embedding Projector : https://projector.tensorflow.org/
What are embeddings? de Vicki Boykis vaut aussi le détour : https://vickiboykis.com/what_are_embeddings/
Je vais les ajouter à la section « further reading » en bas de page
J’ai utilisé des embeddings pour augmenter l’engagement sur les articles liés et, personnellement, je pense que les embeddings sont un outil puissant et sous-estimé
On peut s’en servir pour naviguer par similarité entre des documents ou des extraits, ou au contraire pour trouver du contenu atypique, et c’est plutôt « sûr » puisqu’on n’a pas à se soucier des hallucinations
La manière dont les embeddings sont créés peut aussi être intéressante. Par exemple, il y a des approches consistant à retirer la couche de classification après l’entraînement, ou des méthodes comme EfficientNet
Ils sont en train de devenir un socle central du machine learning
En vision par ordinateur et dans les algorithmes de SLAM visuel, les embeddings sont devenus la méthode de fait pour la reconnaissance de lieux, et c’est très proche de ce que décrit l’article
On appelle cela la « bag-of-word place recognition », et c’est utilisé aujourd’hui dans presque toutes les bibliothèques open source
L’idée centrale est de faire passer chaque image dans un pipeline d’extraction de caractéristiques et de descripteurs pour l’« embedder » sous forme de vecteur contenant les N meilleures caractéristiques
Pendant que la caméra se déplace, on construit une base de données d’images appelées keyframes, et les images sont stockées sous forme de vecteurs de dimension bien plus faible
Ensuite, on interroge la base avec chaque image et l’on cherche la meilleure correspondance dans la base vectorielle avec une méthode comme la similarité cosinus
S’il y a une correspondance, on peut calculer les contraintes stéréo entre l’image requête et l’image correspondante afin de mettre à jour la carte
L’article original est [1] et l’implémentation la plus connue est https://github.com/dorian3d/DBoW2
[1] : https://www.google.com/search?client=firefox-b-d&q=Bags+of+B...
Excellente ressource d’introduction
J’avais autrefois créé ma propre application de notes iOS, et ajouter des embeddings à la recherche plein texte existante s’est révélé 1) étonnamment facile et 2) bien plus puissant que ce que j’imaginais au départ
Je savais qu’une recherche sur « dog » ferait aussi remonter des notes contenant « canine », mais ce n’est qu’en essayant que j’ai compris qu’une recherche comme « un animal de compagnie que je pourrais aimer » retrouvait plusieurs notes sur des animaux avec une tonalité positive
C’était mon premier grand moment de révélation
À l’époque, la PR DocsGPT de Supabase m’avait été utile comme exemple de code : https://github.com/supabase/supabase/pull/12056
Beaucoup d’applications dépendent fortement des noms et des noms propres, avec souvent peu de contexte
Si vous désignez votre chien uniquement par son nom, sans description, certains modèles d’embedding risquent de ne pas le retrouver
Les noms propres de personnes, de lieux ou de rues peuvent être très importants pour ancrer une recherche personnalisée ou propre à un domaine, mais les modèles de langage généralistes ne les connaissent pas
Je me demande s’il existe des méthodes concrètes pour traiter ce problème
La grande question pour l’instant est de savoir quelle quantité de texte mettre dans un seul embedding
Faut-il le faire phrase par phrase, ou plutôt regrouper en un seul embedding tout le bloc de phrases appartenant à une page dans l’application de notes ?
L’exemple emblématique des embeddings de mots est le fameux King - Man + Woman = Queen
Cela fonctionne bien dans l’espace vectoriel, mais une fois projeté en 2D, ce n’est pas très parlant visuellement
D’après mon expérience, c’était pareil avec PCA, MDS et t-SNE : https://bhugueney.gitlab.io/test-notebooks-org-publish/jupyt...
C’est un notebook JupyterLite qui effectue des embeddings de mots dans le navigateur, et il vaut mieux éviter de le lancer sur smartphone
Je me demande si quelqu’un connaît une bonne façon de visualiser joliment cet exemple classique d’embedding de mots
Si l’on veut vraiment de l’orthogonalité, on peut utiliser Gram-Schmidt
En 3D, on peut ajouter un axe Z défini par “king”-“queen”, et la version orthogonalisée est plus proche de la notion de distance vue par le modèle
En 2D, on ne peut pas montrer à quel point “king”-“man”+“woman” s’écarte de “queen”, mais on peut obtenir exactement les distances restantes
En 3D, on devrait pouvoir donner la distance exacte
“queen” est généralement choisi parce que c’est le mot dont l’embedding est le plus proche de X="king"-"man"+"woman"
On peut aussi afficher quelques-uns des mots suivants les plus proches sur le graphique 2D, et ajouter pour chaque mot sa distance orthogonale au plan 2D
Ainsi, “queen” devrait être le mot pour lequel la somme de la distance au carré depuis X et de la distance orthogonale au carré depuis le plan est la plus petite, ce qui permet de le vérifier plus ou moins à l’œil nu
C’était du genre : « On ne peut pas visualiser la 4D… en tout cas moi je ne peux pas. Je n’ai que trois branes », avec un jeu de mots entre branes et brains
Plus tard, ChatGPT a reconnu l’avoir inventée et s’est excusé
Il a ensuite sorti des citations de John von Neumann, H. G. Wells et Ian Stewart, puis a fini par répondre quelque chose comme : « Pour visualiser la 4D, visualisez la 3D, puis dites ‘n+1’ », ce qui ressemblait le plus à la blague dont je me souvenais, mais en moins drôle
Alors je lui ai demandé de fabriquer des citations hallucinées dans le style de Deepak Chopra sur la visualisation d’espaces de grande dimension, et il m’a déversé des fausses citations plausibles mêlant des expressions comme septillion-dimensional embeddings, Hilbert space, Poincaré conjecture, Heisenberg uncertainty principle et Shannon entropy
Une erreur courante en trigonométrie pratique consiste à faire des calculs de racine carrée inutiles
Dans le code d’exemple,
magnitude_a = sum(x * x for x in a) * 0.5etmagnitude_b = sum(x * x for x in b) * 0.5n’ont pas besoin de*0.5Si l’on veut comparer des cosinus, on peut comparer les valeurs au carré, ce qui évite un calcul de racine coûteux
De même, en cryptographie sur courbes elliptiques, on repousse autant que possible les opérations coûteuses comme le calcul d’inverses, ou bien, lorsqu’il s’agit seulement de comparer deux points, on évite parfois même de calculer la valeur canonique
Sinon, il aurait été remplacé par du code SIMD bas niveau
dot_product = sum(x * y for x, y in zip(a, b))— je me demande pourquoi faire comme ça au lieu d’utiliser des opérations numpy vectoriséesJ’ai compris en voyant le passage disant qu’il avait demandé à ChatGPT d’écrire plusieurs versions du code de similarité cosinus
Premièrement, quand j’explique à des gens, je trouve que la syntaxe numpy gêne plutôt qu’elle n’aide
Deuxièmement, numpy n’est pas la dépendance la plus légère
Je l’utilise quand j’ai besoin de performance, mais je ne veux pas en faire mon choix par défaut
Si vous voulez voir des posts Show HN, des startups ProductHunt, des entreprises YC ou des dépôts Github liés aux embeddings LLM, vous pouvez les trouver rapidement dans le MVP de moteur de recherche basé sur les embeddings LLM que je viens de lancer
https://payperrun.com/%3E/search?displayParams={%22q%22:%22L...
Je m’attendais à ce que les résultats soient immédiatement mis à jour en appuyant sur les différents boutons de filtre, et je ne pensais pas qu’il faudrait relancer la recherche
Je comprends pourquoi vous l’avez fait ainsi
C’est ce que j’ai lu de plus intéressant sur l’“IA” ces derniers mois
Chaque fois que je voyais un modèle d’embedding dans une liste, je me demandais ce que c’était, et je me demandais aussi pourquoi tout le monde parlait de bases de données vectorielles
Je vois tout de suite comment l’appliquer à un side project que je mène depuis longtemps
Si tous les documents disposent d’un embedding, il pourrait devenir réaliste de produire des regroupements utiles de données utilisateur
Je me demande si quelqu’un a déjà utilisé les embeddings en pratique pour autre chose que les plus proches voisins approximatifs et le clustering
Les possibilités qui me viennent à l’esprit sont la projection, l’indexation et le tri selon des axes arbitraires. Par exemple des axes comme « chaud-froid », « bonheur-tristesse », « SF-réalisme », « littérarité-commercialité »
Il doit aussi exister des façons d’entraîner directement des embeddings, au-delà de faire de la classification façon SVM dans l’espace des embeddings, du raisonnement façon word2vec comme woman-man+king=queen, ou de récupérer une couche d’un LLM
Je sais que l’apprentissage contrastif est utilisé, mais d’autres approches semblent aussi mériter d’être explorées, comme entraîner des embeddings avec un réseau de fonctions, générer des équations fonctionnelles et calculer une perte d’erreur quadratique moyenne
Je suis surpris de voir à quel point tout semble centré sur la recherche sémantique, et il doit sûrement y avoir d’autres applications intéressantes
Le premier et le troisième sont en fait la même chose
En vision par ordinateur, on peut vouloir modifier sémantiquement une image, par exemple ajouter des lunettes sur une photo, et les tâches qu’on voit dans les publicités Google en sont des exemples
Ce genre d’opération se fait dans l’espace latent
C’est particulièrement clair avec les flots normalisants, puisqu’ils transforment l’espace en gaussienne
Les modèles de diffusion font quelque chose de similaire par approximation, mais ils ne sont pas inversibles, même si l’on peut revenir en arrière
On projette l’image, la phrase ou les données que l’on veut manipuler, on les modifie dans l’espace gaussien, puis on les ramène dans l’espace cible
Cela dit, il se peut aussi qu’on se mélange les pinceaux parce que le mot embedding est un terme surchargé qui veut dire trop de choses
Peut-être que vous pensez seulement au premier bloc qui transforme des tokens entiers discrets en nombres à virgule flottante continus
Mais cet embedding-là est lui aussi appris, donc même s’il finit par ressembler à une table de correspondance, cela reste un processus de réseau neuronal
On utilise aussi des SVM dans cet espace
Je le vois comme proche de l’espace latent, mais un peu plus abstrait
Au minimum, un embedding devrait être injectif. Mathématiquement, c’est le cas, mais…
Entraîner directement des embeddings, c’est littéralement Word2Vec, le modèle d’embeddings d’origine
J’y ai trouvé beaucoup de variantes et d’abréviations de noms chimiques et biochimiques, avec ou sans trait d’union, ou avec des espaces
On aurait probablement pu en faire un dictionnaire de termes techniques
Je ne sais pas jusqu’où on aurait pu aller pour les définitions, mais même si les vecteurs seuls ont leurs limites, c’est un point de départ
Il est très probable que d’autres aient construit des dictionnaires de cette manière
J’ai manipulé des embeddings et construit quelques cas d’usage en production ; c’est un excellent outil qui rend possibles beaucoup d’applications très intéressantes
Mais quand on en crée pour un domaine précis, on se heurte aux limites des modèles d’embeddings prêts à l’emploi
Les modèles prêts à l’emploi ont beaucoup de dimensions, mais certaines de ces dimensions peuvent être importantes pour la classification, la similarité de contenu ou le clustering dans mon application, tandis que d’autres ne le sont pas
Autrement dit, deux vecteurs peuvent sembler proches parce qu’ils sont proches sur des dimensions qui ne m’intéressent pas
J’espère voir apparaître de meilleurs outils et davantage de littérature pour le fine-tuning des modèles d’embeddings
Ce type d’outil existe depuis longtemps : par exemple, il suffit d’étiqueter un peu de données, puis d’entraîner un SVM de classification sur l’espace des embeddings