Recherche sémantique et embeddings enrichis

Introduction aux embeddings avec l’API OpenAI

Emmanuel Pire

Senior Software Engineer, DataCamp

Recherche sémantique

  • Utilisez des embeddings pour renvoyer les résultats les plus similaires à une requête de recherche
  • Exemple : recherche sémantique pour un site d'actualités en ligne

Fonctionnement de la recherche sémantique : le texte de recherche est transformé en vecteur par le modèle d'embedding, puis on évalue la distance avec les titres vectorisés. Le titre le plus proche est renvoyé.

Introduction aux embeddings avec l’API OpenAI

Recherche sémantique

Fonctionnement de la recherche sémantique : le texte de recherche est transformé en vecteur par le modèle d'embedding, puis on évalue la distance avec les titres vectorisés. Le titre le plus proche est renvoyé.

  1. Vectoriser la requête et les autres textes
  2. Calculer les distances cosinus
  3. Extraire les textes avec la distance cosinus la plus faible
Introduction aux embeddings avec l’API OpenAI

Embeddings enrichis

articles = [
    {"headline": "Economic Growth Continues Amid Global Uncertainty",
     "topic": "Business",
     "keywords": ["economy", "business", "finance"]},
    ...
    {"headline": "1.5 Billion Tune-in to the World Cup Final",
     "topic": "Sport",
     "keywords": ["soccer", "world cup", "tv"]}
]
Headline: Economic Growth Continues Amid Global Uncertainty
Topic: Business
Keywords: economy, business, finance
Introduction aux embeddings avec l’API OpenAI

Combiner des attributs avec les F-strings

articles = [..., {"headline": "1.5 Billion Tune-in to the World Cup ",
                  "topic": "Sport",
                  "keywords": ["soccer", "world cup", "tv"]}]


def create_article_text(article):
return f"""Headline: {article['headline']} Topic: {article['topic']} Keywords: {', '.join(article['keywords'])}"""
print(create_article_text(articles[-1]))
Headline: 1.5 Billion Tune-in to the World Cup Final
Topic: Sport
Keywords: soccer, world cup, tv
Introduction aux embeddings avec l’API OpenAI

Créer des embeddings enrichis

article_texts = [create_article_text(article) for article in articles]

article_embeddings = create_embeddings(article_texts)
print(article_embeddings)
[[-0.019609929993748665, -0.03331860154867172, ...],
 ...,
 [..., -0.014373429119586945, -0.005235843360424042]]
Introduction aux embeddings avec l’API OpenAI

Calculer les distances

from scipy.spatial import distance

def find_n_closest(query_vector, embeddings, n=3):

distances = [] for index, embedding in enumerate(embeddings): dist = distance.cosine(query_vector, embedding) distances.append({"distance": dist, "index": index})
distances_sorted = sorted(distances, key=lambda x: x["distance"])
return distances_sorted[0:n]
Introduction aux embeddings avec l’API OpenAI

Renvoyer les résultats de recherche

query_text = "AI"

query_vector = create_embeddings(query_text)[0]
hits = find_n_closest(query_vector, article_embeddings)
for hit in hits: article = articles[hit['index']] print(article['headline'])
Tech Giant Buys 49% Stake In AI Startup
Tech Company Launches Innovative Product to Improve Online Accessibility
India Successfully Lands Near Moon's South Pole
Introduction aux embeddings avec l’API OpenAI

Passons à la pratique !

Introduction aux embeddings avec l’API OpenAI

Preparing Video For Download...