Systèmes de recommandation

Introduction aux embeddings avec l'API d'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 d'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 entre chaque point rouge et le point bleu indique la distance cosinus.

Introduction aux embeddings avec l'API d'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 sont mis en évidence.

Introduction aux embeddings avec l'API d'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 d'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 d'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 d'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 d'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 d'OpenAI

Ajouter l'historique d'un 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 d'OpenAI

Recommandations sur plusieurs points de données

Un graphique montrant les articles intégrés ; ceux de l'historique de l'utilisateur sont en bleu et les articles non lus en rouge.

Introduction aux embeddings avec l'API d'OpenAI

Recommandations sur plusieurs points de données

 

Processus :

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

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

Introduction aux embeddings avec l'API d'OpenAI

Recommandations sur plusieurs points de données

 

Processus :

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

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

Introduction aux embeddings avec l'API d'OpenAI

Recommandations sur plusieurs points de données

 

Processus :

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

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

Introduction aux embeddings avec l'API d'OpenAI

Recommandations sur plusieurs points de données

 

Processus :

  • Combiner plusieurs vecteurs en un seul en prenant la moyenne
  • Calculer les distances cosinus
  • Recommander le vecteur le plus proche
    • S'assurer qu'il est non lu

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

Introduction aux embeddings avec l'API d'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 d'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 d'OpenAI

Passons à la pratique !

Introduction aux embeddings avec l'API d'OpenAI

Preparing Video For Download...