Aanbevelingssystemen

Introductie tot Embeddings met de OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Aanbevelingen met embeddings

 

  • Erg vergelijkbaar met semantisch zoeken!

 

Proces:

  1. Embed de mogelijke aanbevelingen en het datapunt

Eén blauwe datapunt en meerdere rode datapunten in de vectorruimte.

Introductie tot Embeddings met de OpenAI API

Aanbevelingen met embeddings

 

  • Erg vergelijkbaar met semantisch zoeken!

 

Proces:

  1. Embed de mogelijke aanbevelingen en het datapunt
  2. Bereken cosinusafstanden

Eén blauwe datapunt en meerdere rode datapunten in de vectorruimte. Er loopt een lijn van elk rood punt naar het blauwe punt om de cosinusafstand aan te duiden.

Introductie tot Embeddings met de OpenAI API

Aanbevelingen met embeddings

 

  • Erg vergelijkbaar met semantisch zoeken!

 

Proces:

  1. Embed de mogelijke aanbevelingen en het datapunt
  2. Bereken cosinusafstanden
  3. Raad aan: dichtstbijzijnde items

De drie dichtstbijzijnde rode punten zijn gemarkeerd.

Introductie tot Embeddings met de OpenAI API

Voorbeeld: aanbevolen artikelen

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"]}
Introductie tot Embeddings met de OpenAI API

Features combineren

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
Introductie tot Embeddings met de OpenAI API

Embeddings maken

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)
Introductie tot Embeddings met de OpenAI API

Meest gelijkende artikel vinden

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'])
Introductie tot Embeddings met de OpenAI API

Meest gelijkende artikel vinden

Tech Giant Buys 49% Stake In AI Startup
Tech Company Launches Innovative Product to Improve Online Accessibility
Scientists Make Breakthrough Discovery in Renewable Energy
Introductie tot Embeddings met de OpenAI API

Gebruikersgeschiedenis toevoegen

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"]}
]
Introductie tot Embeddings met de OpenAI API

Aanbevelingen op meerdere datapunten

Een plot met embedded artikelen: artikelen uit de gebruikersgeschiedenis zijn blauw, ongelezen artikelen rood.

Introductie tot Embeddings met de OpenAI API

Aanbevelingen op meerdere datapunten

 

Proces:

  • Combineer meerdere vectoren tot één via het gemiddelde
  • Bereken cosinusafstanden

Een punt, berekend als het gemiddelde van twee vectoren, is toegevoegd tussen de twee punten.

Introductie tot Embeddings met de OpenAI API

Aanbevelingen op meerdere datapunten

 

Proces:

  • Combineer meerdere vectoren tot één via het gemiddelde
  • Bereken cosinusafstanden
  • Raad aan: dichtstbijzijnde vector

Het dichtstbijzijnde rode punt is gemarkeerd als aanbeveling.

Introductie tot Embeddings met de OpenAI API

Aanbevelingen op meerdere datapunten

 

Proces:

  • Combineer meerdere vectoren tot één via het gemiddelde
  • Bereken cosinusafstanden
  • Raad aan: dichtstbijzijnde vector

Het dichtstbijzijnde punt is nu blauw om te tonen dat je gelezen artikelen moet uitsluiten.

Introductie tot Embeddings met de OpenAI API

Aanbevelingen op meerdere datapunten

 

Proces:

  • Combineer meerdere vectoren tot één via het gemiddelde
  • Bereken cosinusafstanden
  • Raad aan: dichtstbijzijnde vector
    • Zorg dat die ongelezen is

Het dichtstbijzijnde rode punt, dit keer iets verder weg, is gemarkeerd.

Introductie tot Embeddings met de OpenAI API

Aanbevelingen op meerdere datapunten

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)
Introductie tot Embeddings met de OpenAI API

Aanbevelingen op meerdere datapunten

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
Introductie tot Embeddings met de OpenAI API

Laten we oefenen!

Introductie tot Embeddings met de OpenAI API

Preparing Video For Download...