La recherche à l’ère de l’IA David Pilato | @dadoonet

Agenda ● La recherche “classique” et ses limites ● Modèle de ML et usages ● La recherche vectorielle ou hybride dans Elasticsearch ● OpenAI ChatGPT ou LLM avec Elasticsearch

Elasticsearch You Know, for Search

These are not the droids you are looking for.

GET /_analyze { “char_filter”: [ “html_strip” ], “tokenizer”: “standard”, “filter”: [ “lowercase”, “stop”, “snowball” ], “text”: “These are <em>not</em> the droids you are looking for.” }

These are <em>not</em> the droids you are looking for. { “tokens”: [{ “token”: “droid”, “start_offset”: 27, “end_offset”: 33, “type”: “<ALPHANUM>”, “position”: 4 },{ “token”: “you”, “start_offset”: 34, “end_offset”: 37, “type”: “<ALPHANUM>”, “position”: 5 }, { “token”: “look”, “start_offset”: 42, “end_offset”: 49, “type”: “<ALPHANUM>”, “position”: 7 }]}

Recherche sémantique ≠ Correspondance littérale

Elasticsearch You Know, for Vector Search

Qu’est-ce qu’un Vecteur ?

Les embeddings représentent vos données Exemple : vecteur 1 dimension Réaliste Dessin

Plusieurs dimensions pour représenter plusieurs aspects Mammifère pour représenter plusieurs aspects Réaliste Dessin Oiseau

Dans l’espace des embeddings les données similaires sont regroupées Mammifère Réaliste Dessin Oiseau

Recherche vectorielle

Choisir son modèle d’Embedding Commencer avec des modèles sur étagère Développer pour une plus forte pertinence ●Text data: Hugging Face ●Appliquer un scoring hybride ●Images: OpenAI’s CLIP ●Bring Your Own Model : nécessite de l’expertise + des données labelisées

Comment indexer avec des vecteurs ?

Ingestion des données avec embeddings POST /_doc { } Source data “_id”:”product-1234”, “product_name”:”Summer Dress”, “description”:”Our best-selling…”, “Price”: 118, “color”:”blue”, “fabric”:”cotton”

Ingestion des données avec embeddings { } Source data POST /_doc “_id”:”product-1234”, “product_name”:”Summer Dress”, “description”:”Our best-selling…”, “Price”: 118, “color”:”blue”, “fabric”:”cotton”, “desc_embedding”:[0.452,0.3242,…], “img_embedding”:[0.012,0.0,…]

Co m m er ci Avec Elastic ML al { } Source data POST /_doc “_id”:”product-1234”, “product_name”:”Summer Dress”, “description”:”Our best-selling…”, “Price”: 118, “color”:”blue”, “fabric”:”cotton”, “desc_embedding”:[0.452,0.3242,…]

Configurer son modèle Co m m er ci al $ eland_import_hub_model —url https://cluster_URL —hubmodel-id BERT-MiniLM-L6 —tasktype text_embedding —start BERT-MiniLM-L6 Choisir le modèle approprié Charger le modèle dans le cluster Gérer les modèles

Gestion des modèles ● C’est un domaine qui évolue rapidement. La flexibilité vous permet de vous adapter facilement. ● Utilisation des modèles tiers PyTorch ● Support de plusieurs types de modèles NLP Co m m er ci al Liste complète des modèles supportés par Elastic : ela.st/nlp-supported-models

Comment chercher avec des vecteurs ?

Requête Vectorielle GET product-catalog/_search { “knn”: { “field”: “desc_embbeding”, “k”: 5, “num_candidates”: 50, “query_vector”: [0.123, 0.244,…], “filter”: { “term”: { “department”: “women” } } } }, “size”: 10

Co m m er ci Requête Vectorielle al GET product-catalog/_search { “knn”: { “field”: “desc_embbeding”, “k”: 5, “num_candidates”: 50, “query_vector_builder”: { “text_embedding”: { “model_text”: “summer clothes”, “model_id”: <text-embedding-model> }, “filter”: { “term”: { “department”: “women” } } Transformer model } }, “size”: 10

Mais comment ça fonctionne en vrai ?

Hierarchical Navigable Small Worlds (HNSW)

Elasticsearch + Lucene des progrès rapides ❤

“Scaler” la recherche vectorielle Recherche vectorielle Bonnes pratiques

  1. Besoin énorme de mémoire
  2. Eviter les recherches pendant l’indexation
  3. Indexation plus lente 3. Merge est plus lent * Améliorations permanentes dans Lucene et Elasticsearch
  4. Exclure les vecteurs du champ _source 3. Réduire le nombre de dimensions des vecteurs 4. Utiliser des bytes plutôt que des float

Réduire la mémoire requise

  1. Réduction taille élément (“quantize”)

Réduire la mémoire requise 2. Réduction du nombre de dimensions par vecteur

  1. Réduction taille élément (“quantize”)

Base de données vectorielles ● Stockage efficace de vecteurs numériques, support des opérations CRUD ● Recherche rapide de vecteurs ● Conçu pour de la recherche vectorielle à grande échelle (scalable)

Elasticsearch bien plus qu’une base de données vectorielles Elasticsearch est capable de : ● Créer des vector embeddings (représentations numériques des données) ● Est optimisé pour stocker des vecteurs éparpillés et denses, en volume Elasticsearch a aussi : ● Filtres et agrégations : sur l’ensemble des résultats ● Sécurité native au niveau document* : utilisé en production par les clients enterprise ● Types de données : Geo, full text, support des langues ● Outils d’ingestion : connecteurs, API, crawler web et des intégrations tierces ● Communité, adoption massive par les enterprises, Track record, Elastic stack… * nécessite une license commerciale

Benchmarketing

Elasticsearch You Know, for Hybrid Search

Calcul hybride du score de pertinence Score basé sur les termes Score de similarité vectorielle Combinaison

GET product-catalog/_search { “query”: { “match”: { “description”: { “query”: “summer clothes”, “boost”: 0.9 } } }, “knn”: { “field”: “desc_embbeding”, “query_vector”: [0.123, 0.244,…], “k”: 5, “num_candidates”: 50, “boost”: 0.1, “filter”: { “term”: { “department”: “women” } } }, “size”: 10 }

GET product-catalog/_search { “query”: { “match”: { “description”: { “query”: “summer clothes”, “boost”: 0.9 } } }, “knn”: [ { “field”: “image-vector”, “query_vector”: [54, 10, -2], “k”: 5, “num_candidates”: 50, “boost”: 0.1 }, { “field”: “title-vector”, “query_vector”: [1, 20, -52, 23, 10], “k”: 10, “num_candidates”: 10, “boost”: 0.5 }], “size”: 10 }

ELSER Elastic Learned Sparse EncodER text_expansion Not BM25 or (dense) vector Sparse vector like BM25 Stored as inverted index Co m m er ci al

Co m m er ci ELSER - pertinence sur étagère, multi domaines al ● Permet d’implémenter la recherche sémantique sans avoir à entraîner votre propre modèle ● Généraliste : plein de domaines sans entraînement ● Excellente pertinence, sur étagère Démo

POST /_ingest/pipeline/_simulate { “pipeline”:{“processors”:[ Co m m er ci { “inference”:{“model_id”:”.elser_model_1”} } ]}, “docs”: [ {“_source”:{“text_field”:”These are not the droids you are looking for.”}}, {“_source”:{“text_field”:”Obi-Wan never told you what happened to your father.”}}, {“_source”:{“text_field”: “No. I am your father!”}} ] } al

Co m m er ci al These are not the droids you are looking for. “ml”: { “inference”: { “predicted_value”: { “lucas”: 0.50047517, “ship”: 0.29860738, “dragon”: 0.5300422, “quest”: 0.5974301, “dr”: 2.1055143, “space”: 0.49377063, “robot”: 0.40398192, …

Combinaison de score Co m m er ci al Score basé sur les termes Combinaison linéaire Boosting manuel Reciprocal Rank Fusion (RRF) Mélange de plusieurs méthodes de ranking Score de similarité vectorielle Combinaison Extension du score ELSER

Reciprocal Rank Fusion (RRF) D - set of docs R - set of rankings as permutation on 1..|D| k - typically set to 60 by default Ranking Algorithm 1 Doc Score r(d) Ranking Algorithm 2 Doc Score r(d) A 1 1 C 1,341 1 B 0.7 2 A 739 2 C 0.5 3 F 732 3 D 0.2 4 G 192 4 E 0.01 5 H 183 5 Doc RRF Score A 1/61 + 1/62 = 0,0325 C 1/63 + 1/61 = 0,0323 B 1/62 = 0,0161 F 1/63 = 0,0159 D 1/64 = 0,0156

GET product-catalog/_search { “sub_searches”: [ { “query”: { “match”: {…} } }, { “query”: { “text_expansion”: {…} } } ], “knn”: {…}, “rank”: { “rrf”: { “window_size”: 50, “rank_constant”: 20 } } } Co m m er ci al BM25f + ELSER + Vector Recherche Hybride avec RRF

Gratuit vs Payant (platinum) kNN with HNSW

  1. Fournissez vos propres embeddings 2. Attention à la mémoire requise pour faire tenir les vecteurs en RAM (off-heap) Inference in Elasticsearch 1. Génération des embeddings (transformers HuggingFace, autres) 2. ELSER

https://github.com/dadoonet/music-search/

ChatGPT Elastic et les LLMs

LLMs : opportunités et limitations Je souhaite avoir une recette pour le déjeuner du dimanche midi question d’origine Résultats de recherche Données publiques d’entraînement ✓ Réalise des tâches et génère du nouveau contenu × Context générique × Hallucinations – confiance affirmée, informations erronées

Elastic fournit une technologie complémentaire Je souhaite avoir une recette pour le déjeuner du dimanche midi question d’origine fenêtre contextuelle question en temps que requête Résultats de recherche Elastic cherche dans les données spécifique métier ✓ Des réponses plus pertinentes prenant en compte les spécificités du domaine ✓ Des résultats plus puissants avec la plateforme Elastic ✓ Personnalisation utilisateur

https://www.elastic.co/ blog/chatgpt-elasticsearchopenai-meets-private-data Peut-être remplacée par votre propre source de données

Conclusion

La recherche lexicale enrichie en sémantique Support des modèles tiers de ML Dense vector text embeddings Recherche Lexicale Dense vector image embeddings ELSER Modèle sémantique sur étagère pour le contenu texte RRF API de Recherche Sémantique

Co m m er ci al Composants de recherche Intégration et Gestion de modèles BM25F Modèles de transformation custom RRF Vector Database Intégration OpenAI Facettes Facets / Filtering Elastic Learned Sparse EncodeR Combinaison linéaire Recherche Hybride

Données corporate: texte, images, docs Les ingrédients nécessaires pour la recherche IA… Recherche textuelle, vectorielle Capacités en langage naturel Usage des LLMs et de modèles ML publiques / propriétaires

… sont les fonctionnalités que nous livrons avec ESRETM Ingestion, Sécurité niveau document pour les données corporate Recherche Hybride (BM25, Vecteur..) Recherche Vectorielle permettant l’usage du langage naturel Flexibilité des Modèles pour rester à jour : nouveaux modèles tiers et LLM

La recherche à l’ère de l’IA David Pilato | @dadoonet