Rekommendationssystem

Introduktion till inbäddningar med OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Rekommendationssystem med inbäddningar

 

  • Mycket likt semantisk sökning!

 

Process:

  1. Bädda in potentiella rekommendationer och datapunkten

En blå datapunkt och flera röda datapunkter i vektorrymden.

Introduktion till inbäddningar med OpenAI API

Rekommendationssystem med inbäddningar

 

  • Mycket likt semantisk sökning!

 

Process:

  1. Bädda in potentiella rekommendationer och datapunkten
  2. Beräkna cosinusavstånd

En blå datapunkt och flera röda datapunkter i vektorrymden. En linje går från varje röd punkt till den blå för att visa cosinusavståndet.

Introduktion till inbäddningar med OpenAI API

Rekommendationssystem med inbäddningar

 

  • Mycket likt semantisk sökning!

 

Process:

  1. Bädda in potentiella rekommendationer och datapunkten
  2. Beräkna cosinusavstånd
  3. Rekommendera närmaste objekt

De tre närmaste röda punkterna har markerats.

Introduktion till inbäddningar med OpenAI API

Exempel: Rekommenderade artiklar

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"]}
Introduktion till inbäddningar med OpenAI API

Kombinera särdrag

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
Introduktion till inbäddningar med OpenAI API

Skapa inbäddningar

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)
Introduktion till inbäddningar med OpenAI API

Hitta den mest liknande artikeln

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'])
Introduktion till inbäddningar med OpenAI API

Hitta den mest liknande artikeln

Tech Giant Buys 49% Stake In AI Startup
Tech Company Launches Innovative Product to Improve Online Accessibility
Scientists Make Breakthrough Discovery in Renewable Energy
Introduktion till inbäddningar med OpenAI API

Lägga till användarhistorik

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"]}
]
Introduktion till inbäddningar med OpenAI API

Rekommendationer på flera datapunkter

Ett diagram med inbäddade artiklar, där artiklarna i användarens historik visas i blått och artiklar de inte har sett visas i rött.

Introduktion till inbäddningar med OpenAI API

Rekommendationer på flera datapunkter

 

Process:

  • Kombinera flera vektorer till en genom att ta medelvärdet
  • Beräkna cosinusavstånd

En punkt beräknad från medelvärdet av de två vektorerna har lagts till mellan de två punkterna.

Introduktion till inbäddningar med OpenAI API

Rekommendationer på flera datapunkter

 

Process:

  • Kombinera flera vektorer till en genom att ta medelvärdet
  • Beräkna cosinusavstånd
  • Rekommendera närmaste vektor

Den närmaste röda punkten har markerats som rekommendation.

Introduktion till inbäddningar med OpenAI API

Rekommendationer på flera datapunkter

 

Process:

  • Kombinera flera vektorer till en genom att ta medelvärdet
  • Beräkna cosinusavstånd
  • Rekommendera närmaste vektor

Den närmaste punkten har nu färgats blå för att visa att koden bör exkludera artiklar som användaren redan har läst.

Introduktion till inbäddningar med OpenAI API

Rekommendationer på flera datapunkter

 

Process:

  • Kombinera flera vektorer till en genom att ta medelvärdet
  • Beräkna cosinusavstånd
  • Rekommendera närmaste vektor
    • Säkerställ att den är oläst

Den närmaste röda punkten, längre bort den här gången, har markerats.

Introduktion till inbäddningar med OpenAI API

Rekommendationer på flera datapunkter

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)
Introduktion till inbäddningar med OpenAI API

Rekommendationer på flera datapunkter

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
Introduktion till inbäddningar med OpenAI API

Nu kör vi en övning!

Introduktion till inbäddningar med OpenAI API

Preparing Video For Download...