24 points par GN⁺ 2024-04-18 | 1 commentaires | Partager sur WhatsApp

Guide d’utilisation des embeddings pour les développeurs d’apps

  • Les embeddings vectoriels sont efficaces pour mesurer la similarité entre différents types d’entrées, ce qui les rend adaptés aux fonctions de recherche et de recommandation. Ils fonctionnent aussi bien dans d’autres langues comme le français ou le japonais.
  • Pgvector est une extension Postgres permettant de stocker et d’interroger des embeddings. Elle est puissante car elle permet de combiner la logique SQL et les opérations sur embeddings sans ajouter de nouveau service.
  • Contrairement aux LLM, l’usage des embeddings donne une sensation proche du code déterministe classique.

Développement d’un projet de recherche et de recommandation d’icônes

  • Après la mise en place de Pgvector, une stratégie est définie pour encoder les données d’icônes sous forme de vecteurs d’embedding.
  • Utilisation du modèle text-embedding-3-small d’OpenAI.
  • Mesure de la similarité entre la requête de recherche et l’embedding de chaque icône avec la similarité cosinus.
  • Combinaison de la recherche par embeddings avec de la logique métier, comme le filtrage par jeu d’icônes.
  • Présentation d’un exemple d’algorithme de classement utilisant les données de clics sur les icônes pour une requête donnée.
  • Utilisation de la comparaison d’embeddings pour recommander des icônes similaires à l’icône sélectionnée.

Résumé de l’approche d’implémentation

  • Choix de pgvector/Postgres comme base de données vectorielle. D’autres options existent, comme MongoDB.
  • Développement en Typescript avec drizzle-orm. Il existe aussi de nombreuses bibliothèques pour d’autres langages/frameworks.
  • L’app est hébergée sur Neon. Il est aussi possible d’utiliser des services d’hébergement de bases de données managés comme fly.io ou Supabase.
  • Utilisation du modèle d’embedding text-embedding-3-small d’OpenAI. D’autres modèles peuvent être choisis via le leaderboard de Huggingface.
  • Embedding des propriétés des icônes les plus pertinentes pour la recherche sous forme de paires clé-valeur.
  • Utilisation de la similarité cosinus comme fonction de distance. Pgvector prend aussi en charge la distance l2 et le produit scalaire.
  • Limitation des résultats de recherche aux 50 premiers. En cas d’utilisation d’une plage de distance, il est recommandé de la définir largement et de l’utiliser avec limit.

L’avis de GN⁺

  • Pour la plupart des projets, il semble suffisant d’ajouter des fonctionnalités vectorielles à une base existante avec quelque chose comme pgvector. Une base vectorielle séparée ne paraît nécessaire que pour des services à grande échelle.
  • La possibilité de combiner naturellement la recherche par embeddings avec la logique métier est un avantage majeur. Cela permet de profiter pleinement de la puissance de SQL.
  • L’idée d’intégrer les données de feedback utilisateur dans l’algorithme de classement est excellente. Cela semble permettre d’améliorer continuellement la précision de la recherche.
  • Par rapport aux LLM, les services fondés sur les embeddings ont un fonctionnement plus clair et sont plus faciles à déboguer, ce qui semble les rendre bien plus simples à appliquer dans un vrai service.
  • De nombreux modèles d’embedding open source sont disponibles, ce qui permet d’utiliser facilement des embeddings de haute qualité même lorsqu’il est difficile de développer son propre modèle.

1 commentaires

 
GN⁺ 2024-04-18
Avis Hacker News

Résumé des commentaires Hacker News

Facilité de l’embedding de documents et de la recherche de similarité avec les modèles RAG

  • Avec les bibliothèques sentence-transformers et faiss, il est facile d’implémenter l’embedding de documents et la recherche de similarité
  • Cela pourrait faire un projet amusant montrant de meilleures performances que le système de recommandation du New York Times
  • Le sujet est bien expliqué sur la chaîne YouTube de James Briggs

Comprendre les concepts de base des embeddings

  • Même sans IA ou deep learning, on peut créer des embeddings en attribuant un index unique à chaque mot et en accumulant des valeurs selon leur fréquence
  • Il est aussi possible d’effectuer une recherche de similarité avec la similarité cosinus, etc.
  • Les embeddings fondés sur le deep learning ajoutent à ces concepts de base des fonctions comme le filtrage des mots/tokens et la gestion des synonymes

Manque d’explications détaillées sur le processus de génération des embeddings

  • L’article se contente de dire They're a bit of a black box à propos du processus de génération des embeddings, sans entrer dans les détails
  • Il peut être utile de créer soi-même des vecteurs de mots et de comprendre des méthodes comme Word2Vec

La difficulté de traiter les homonymes

  • À cause des homonymes, les résultats de recherche peuvent parfois être inattendus (par exemple, une recherche sur "king" peut faire apparaître une icône de souverain)
  • Cela peut être un défi intéressant, tout en offrant l’avantage de retrouver des icônes liées

Utiliser des embeddings sans vector store

  • En production avec de gros volumes de données, un vector store est important pour des raisons comme la latence, mais pour un petit projet, une implémentation simple avec Numpy suffit
  • On peut calculer la similarité en utilisant l’opérateur @ de Numpy pour obtenir le produit scalaire entre un vecteur de requête normalisé et une matrice d’enregistrements

Comment exécuter la logique d’embedding en local

  • Une question est posée sur la manière de générer directement des embeddings en local ou dans une base de données, sans dépendre de l’API OpenAI

Potentiel des embeddings pour la rédaction de documentation technique

  • Depuis l’arrivée de ChatGPT, les rédacteurs techniques discutent activement de leur potentiel comme outil de recherche sémantique
  • Ils peuvent aider à gagner en efficacité lors de la phase de recherche nécessaire à la rédaction de documentation

Méthodes de stockage et d’utilisation des embeddings

  • En général, on génère et stocke les embeddings, puis on les recharge au besoin
  • Dans les cas simples, on peut aussi les passer directement sous forme de tableau
  • Le stockage des embeddings est la partie délicate, mais il ne nécessite pas forcément une base spécialisée : un BLOB SQLite peut suffire
  • Les embeddings n’« expirent » pas

Manque de contexte pour les développeurs débutants en IA

  • L’article passe directement à l’usage des embeddings et des bases de données vectorielles sans expliquer ces concepts
  • Pour les personnes qui cherchent un bon point de départ en tant que développeurs d’apps curieux de l’IA, une introduction à ces notions aurait probablement été utile