Systèmes de recommandation

Introduction aux embeddings avec l’API OpenAI

Emmanuel Pire

Senior Software Engineer, DataCamp

Systèmes de recommandation avec embeddings

 

  • Très proche de la recherche sémantique !

 

Processus :

  1. Créer les embeddings des recommandations potentielles et du point de données

Un point de données bleu et plusieurs points rouges dans l'espace vectoriel.

Introduction aux embeddings avec l’API OpenAI

Systèmes de recommandation avec embeddings

 

  • Très proche de la recherche sémantique !

 

Processus :

  1. Créer les embeddings des recommandations potentielles et du point de données
  2. Calculer les distances cosinus

Un point de données bleu et plusieurs points rouges dans l'espace vectoriel. Une ligne relie chaque point rouge au point bleu pour indiquer la distance cosinus.

Introduction aux embeddings avec l’API OpenAI

Systèmes de recommandation avec embeddings

 

  • Très proche de la recherche sémantique !

 

Processus :

  1. Créer les embeddings des recommandations potentielles et du point de données
  2. Calculer les distances cosinus
  3. Recommander les éléments les plus proches

Les trois points rouges les plus proches ont été mis en évidence.

Introduction aux embeddings avec l’API OpenAI

Exemple : articles recommandés

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"]}
]

current_article = {"headline": "How NVIDIA GPUs Could Decide Who Wins the AI Race", "topic": "Tech", "keywords": ["ai", "business", "computers"]}
Introduction aux embeddings avec l’API OpenAI

Combiner des caractéristiques

def create_article_text(article):
  return f"""Headline: {article['headline']}
Topic: {article['topic']}
Keywords: {', '.join(article['keywords'])}"""
article_texts = [create_article_text(article) for article in articles]
current_article_text = create_article_text(current_article)
print(current_article_text)
Headline: How NVIDIA GPUs Could Decide Who Wins the AI Race
Topic: Tech
Keywords: ai, business, computers
Introduction aux embeddings avec l’API OpenAI

Créer des embeddings

def create_embeddings(texts):
  response = openai.Embedding.create(
    model="text-embedding-3-small",
    input=texts
  )
  response_dict = response.model_dump()

  return [data['embedding'] for data in response_dict['data']]
current_article_embeddings = create_embeddings(current_article_text)[0]
article_embeddings = create_embeddings(article_texts)
Introduction aux embeddings avec l’API OpenAI

Trouver l'article le plus similaire

def find_n_closest(query_vector, embeddings, n=3):
  distances = []
  for index, embedding in enumerate(embeddings):
    dist = spatial.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]
hits = find_n_closest(current_article_embeddings, article_embeddings)

for hit in hits: article = articles[hit['index']] print(article['headline'])
Introduction aux embeddings avec l’API OpenAI

Trouver l'article le plus similaire

Tech Giant Buys 49% Stake In AI Startup
Tech Company Launches Innovative Product to Improve Online Accessibility
Scientists Make Breakthrough Discovery in Renewable Energy
Introduction aux embeddings avec l’API OpenAI

Ajouter l'historique utilisateur

user_history = [
    {"headline": "How NVIDIA GPUs Could Decide Who Wins the AI Race",
     "topic": "Tech",
     "keywords": ["ai", "business", "computers"]},
    {"headline": "Tech Giant Buys 49% Stake In AI Startup",
     "topic": "Tech",
     "keywords": ["business", "AI"]}
]
Introduction aux embeddings avec l’API OpenAI

Recommandations sur plusieurs points de données

Un nuage de points d'articles encodés ; ceux de l'historique de l'utilisateur sont en bleu et les autres en rouge.

Introduction aux embeddings avec l’API OpenAI

Recommandations sur plusieurs points de données

 

Processus :

  • Combiner plusieurs vecteurs en un seul via la moyenne
  • Calculer les distances cosinus

Un point calculé par la moyenne des deux vecteurs a été ajouté entre les deux points.

Introduction aux embeddings avec l’API OpenAI

Recommandations sur plusieurs points de données

 

Processus :

  • Combiner plusieurs vecteurs en un seul via la moyenne
  • Calculer les distances cosinus
  • Recommander le vecteur le plus proche

Le point rouge le plus proche a été mis en évidence pour la recommandation.

Introduction aux embeddings avec l’API OpenAI

Recommandations sur plusieurs points de données

 

Processus :

  • Combiner plusieurs vecteurs en un seul via la moyenne
  • Calculer les distances cosinus
  • Recommander le vecteur le plus proche

Le point le plus proche est maintenant coloré en bleu pour signaler que le code doit exclure les articles déjà lus par l'utilisateur.

Introduction aux embeddings avec l’API OpenAI

Recommandations sur plusieurs points de données

 

Processus :

  • Combiner plusieurs vecteurs en un seul via la moyenne
  • Calculer les distances cosinus
  • Recommander le vecteur le plus proche
    • Vérifier qu'il n'a pas été lu

Le point rouge le plus proche, plus éloigné cette fois, a été mis en évidence.

Introduction aux embeddings avec l’API OpenAI

Recommandations sur plusieurs points de données

def create_article_text(article):
  return f"""Headline: {article['headline']}
Topic: {article['topic']}
Keywords: {', '.join(article['keywords'])}"""

history_texts = [create_article_text(article) for article in user_history]
history_embeddings = create_embeddings(history_texts)

mean_history_embeddings = np.mean(history_embeddings, axis=0)
articles_filtered = [article for article in articles if article not in user_history]
article_texts = [create_article_text(article) for article in articles_filtered] article_embeddings = create_embeddings(article_texts)
Introduction aux embeddings avec l’API OpenAI

Recommandations sur plusieurs points de données

hits = find_n_closest(mean_history_embeddings, article_embeddings)

for hit in hits: article = articles_filtered[hit['index']] print(article['headline'])
Tech Company Launches Innovative Product to Improve Online Accessibility
New Social Media Platform Has Everyone Talking!
Scientists Make Breakthrough Discovery in Renewable Energy
Introduction aux embeddings avec l’API OpenAI

Passons à la pratique !

Introduction aux embeddings avec l’API OpenAI

Preparing Video For Download...