La recherche à l’ère de l’IA

A presentation at JUG Summer Camp 2023 in September 2023 in La Rochelle, France by David Pilato

Slide 1

Slide 1

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

Slide 2

Slide 2

Co m Agenda ● ● ● ● m er ci al 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 #JugSummerCamp @dadoonet

Slide 3

Slide 3

Elasticsearch: You Know, for Search #JugSummerCamp @dadoonet

Slide 4

Slide 4

#JugSummerCamp @dadoonet

Slide 5

Slide 5

#JugSummerCamp @dadoonet

Slide 6

Slide 6

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

Slide 7

Slide 7

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 }]} #JugSummerCamp @dadoonet

Slide 8

Slide 8

Recherche sémantique ≠ correspondance littérale #JugSummerCamp @dadoonet

Slide 9

Slide 9

Elasticsearch: You Know, for Search #JugSummerCamp @dadoonet

Slide 10

Slide 10

Elasticsearch: You Know, for Vector Search #JugSummerCamp @dadoonet

Slide 11

Slide 11

Qu’est-ce qu’un Vecteur ? #JugSummerCamp @dadoonet

Slide 12

Slide 12

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

Slide 13

Slide 13

Plusieurs dimensions pour représenter plusieurs aspects Mammifère Réaliste Dessin Oiseau #JugSummerCamp @dadoonet

Slide 14

Slide 14

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

Slide 15

Slide 15

Recherche vectorielle #JugSummerCamp @dadoonet

Slide 16

Slide 16

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 ● Images: OpenAI’s CLIP ● Appliquer un scoring hybride ● Bring Your Own Model : nécessite de l’expertise + des données labelisées #JugSummerCamp @dadoonet

Slide 17

Slide 17

Comment indexer avec des Vecteurs ? #JugSummerCamp @dadoonet

Slide 18

Slide 18

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

Slide 19

Slide 19

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

Slide 20

Slide 20

Co m Configurer son modèle m er ci al $ eland_import_hub_model —url https:-/cluster_URL —hub-model-id BERT-MiniLM-L6 —task-type text_embedding —start BERT-MiniLM-L6 Choisir le modèle approprié #JugSummerCamp Charger le modèle dans le cluster Gérer les modèles @dadoonet

Slide 21

Slide 21

Co m Gestion des modèles ● ● ● m er ci al 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 Liste complète des modèles supportés par Elastic : ela.st/nlp-supported-models #JugSummerCamp @dadoonet

Slide 22

Slide 22

Comment chercher avec des Vecteurs ? #JugSummerCamp @dadoonet

Slide 23

Slide 23

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

Slide 24

Slide 24

Co m Requête Vectorielle m er ci al GET product-catalog/_search { Transformer model } #JugSummerCamp “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” } } }, “size”: 10 @dadoonet

Slide 25

Slide 25

Mais comment ça fonctionne en vrai ? #JugSummerCamp @dadoonet

Slide 26

Slide 26

Hierarchical Navigable Small Worlds (HNSW) #JugSummerCamp @dadoonet

Slide 27

Slide 27

Elasticsearch + Lucene = des progrès rapides #JugSummerCamp @dadoonet

Slide 28

Slide 28

“Scaler” la recherche vectorielle Recherche vectorielle 1. Besoin énorme de mémoire 2. Indexation plus lente 3. Merge est plus lent * Améliorations permanentes dans Lucene et Elasticsearch #JugSummerCamp Bonnes pratiques 1. Eviter les recherches pendant l’indexation 2. Exclure les vecteurs du champ _source 3. Réduire le nombre de dimensions des vecteurs 4. Utiliser des bytes plutôt que des float @dadoonet

Slide 29

Slide 29

Reduce Required Memory

  1. Stocker des vecteurs de bytes plutôt que de float 2. Appliquer la réduction de dimensions, ex: Principal Component Analysis PCA
  2. Reduce of number of dimensions per vector
  3. Vector element size reduction (“quantize”) #JugSummerCamp @dadoonet

Slide 30

Slide 30

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) #JugSummerCamp @dadoonet

Slide 31

Slide 31

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… #JugSummerCamp @dadoonet

Slide 32

Slide 32

Benchmarketing #JugSummerCamp @dadoonet

Slide 33

Slide 33

Elasticsearch: You Know, for Hybrid Search #JugSummerCamp @dadoonet

Slide 34

Slide 34

Calcul hybride du score de pertinence Score basé sur les termes Score de similarité vectorielle Combinaison #JugSummerCamp @dadoonet

Slide 35

Slide 35

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 } #JugSummerCamp @dadoonet

Slide 36

Slide 36

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 } #JugSummerCamp @dadoonet

Slide 37

Slide 37

ELSER: Elastic Learned Sparse EncodER Co m m er ci al text_expansion ● not BM25 or (dense) vector ● sparse vector like BM25 ● stored as inverted index #JugSummerCamp @dadoonet

Slide 38

Slide 38

ELSER - pertinence sur étagère, multi domaines Co m m er ci 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 #JugSummerCamp @dadoonet

Slide 39

Slide 39

Co POST /_ingest/pipeline/_simulate {“pipeline”:{“processors”:[ {“inference”:{“model_id”:”.elser_model_1”}} m m er ci al ]}, “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”}} ]} #JugSummerCamp @dadoonet

Slide 40

Slide 40

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

Slide 41

Slide 41

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

Slide 42

Slide 42

Reciprocal Rank Fusion (RRF) Ranking Algorithm 1 Ranking Algorithm 2 Doc Doc Score r(d) Score D - set of docs R - set of rankings as permutation on 1..|D| K - typically set to 60 by default r(d) Doc 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 #JugSummerCamp A C B F D @dadoonet

Slide 43

Slide 43

GET product-catalog/_search { “sub_searches”: [ { “query”: { “match”: {…} } }, { “query”: { “text_expansion”: {…} } } ], “knn”: {…}, “rank”: { “rrf”: { “window_size”: 50, “rank_constant”: 20 } } } #JugSummerCamp Co m BM25f m er ci al

  • ELSER + Vector Recherche Hybride avec RRF @dadoonet

Slide 44

Slide 44

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) #JugSummerCamp Inference in Elasticsearch 1. Génération des embeddings (comme les transformers HuggingFace) 2. ELSER @dadoonet

Slide 45

Slide 45

https://github.com/dadoonet/music-search/ #JugSummerCamp @dadoonet

Slide 46

Slide 46

ChatGPT : Elastic et les LLM #JugSummerCamp @dadoonet

Slide 47

Slide 47

https://github.com/ Mooler0410/ LLMsPracticalGuide #JugSummerCamp @dadoonet

Slide 48

Slide 48

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

Slide 49

Slide 49

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 ✓ 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 Résultats de recherche Elastic cherche dans les données spécifique métier #JugSummerCamp @dadoonet

Slide 50

Slide 50

https://www.elastic.co/ blog/chatgpt-elasticsearchopenai-meets-private-data #JugSummerCamp @dadoonet

Slide 51

Slide 51

Conclusion #JugSummerCamp @dadoonet

Slide 52

Slide 52

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

Slide 53

Slide 53

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

Slide 54

Slide 54

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

Slide 55

Slide 55

… sont les fonctionnalités que nous livrons avec ESRE #JugSummerCamp 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 @dadoonet

Slide 56

Slide 56

CFP Meetup ElasticFR Envie de participer en tant qu’orateur/oratrice et/ou d’héberger notre prochain meetup Elastic France ? Pour participer, scannez le code, ou allez sur ela.st/cfp-elasticfr #JugSummerCamp @dadoonet

Slide 57

Slide 57

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