Recherche sémantique et plongements enrichis

Introduction aux embeddings avec l'API d'OpenAI

Emmanuel Pire

Senior Software Engineer, DataCamp

Recherche sémantique

  • Utiliser des plongements pour renvoyer les résultats les plus similaires à une requête
  • Exemple : recherche sémantique pour un site de nouvelles en ligne

Fonctionnement de la recherche sémantique : le texte de recherche est converti en plongement par le modèle d'empaquetage, puis on calcule la distance entre ce plongement et ceux des manchettes. La manchette la plus proche est renvoyée.

Introduction aux embeddings avec l'API d'OpenAI

Recherche sémantique

Fonctionnement de la recherche sémantique : le texte de recherche est converti en plongement par le modèle d'empaquetage, puis on calcule la distance entre ce plongement et ceux des manchettes. La manchette la plus proche est renvoyée.

  1. Convertir en plongements la requête et les autres textes
  2. Calculer les distances cosinus
  3. Extraire les textes avec la distance cosinus la plus petite
Introduction aux embeddings avec l'API d'OpenAI

Plongements 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 d'OpenAI

Combiner des caractéristiques avec des 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 d'OpenAI

Créer des plongements 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 d'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 d'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 d'OpenAI

Passons à la pratique !

Introduction aux embeddings avec l'API d'OpenAI

Preparing Video For Download...