Sisteme de recomandare

Introducere în Embeddings cu API-ul OpenAI

Emmanuel Pire

Senior Software Engineer, DataCamp

Sisteme de recomandare cu embedding-uri

 

  • Foarte similar cu căutarea semantică!

 

Proces:

  1. Încorporați recomandările potențiale și punctul de date

Un punct de date albastru și mai multe puncte roșii în spațiul vectorial.

Introducere în Embeddings cu API-ul OpenAI

Sisteme de recomandare cu embedding-uri

 

  • Foarte similar cu căutarea semantică!

 

Proces:

  1. Încorporați recomandările potențiale și punctul de date
  2. Calculați distanțele cosinus

Un punct de date albastru și mai multe puncte roșii în spațiul vectorial. Există o linie între fiecare punct roșu și cel albastru pentru a indica distanța cosinus.

Introducere în Embeddings cu API-ul OpenAI

Sisteme de recomandare cu embedding-uri

 

  • Foarte similar cu căutarea semantică!

 

Proces:

  1. Încorporați recomandările potențiale și punctul de date
  2. Calculați distanțele cosinus
  3. Recomandați elementele cele mai apropiate

Cele trei puncte roșii cele mai apropiate au fost evidențiate.

Introducere în Embeddings cu API-ul OpenAI

Exemplu: Articole recomandate

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"]}
Introducere în Embeddings cu API-ul OpenAI

Combinarea caracteristicilor

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
Introducere în Embeddings cu API-ul OpenAI

Crearea embedding-urilor

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)
Introducere în Embeddings cu API-ul OpenAI

Găsirea articolului cel mai similar

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'])
Introducere în Embeddings cu API-ul OpenAI

Găsirea articolului cel mai similar

Tech Giant Buys 49% Stake In AI Startup
Tech Company Launches Innovative Product to Improve Online Accessibility
Scientists Make Breakthrough Discovery in Renewable Energy
Introducere în Embeddings cu API-ul OpenAI

Adăugarea istoricului utilizatorului

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"]}
]
Introducere în Embeddings cu API-ul OpenAI

Recomandări pe mai multe puncte de date

Un grafic cu articole încorporate: articolele din istoricul utilizatorului sunt afișate în albastru, iar cele nevăzute în roșu.

Introducere în Embeddings cu API-ul OpenAI

Recomandări pe mai multe puncte de date

 

Proces:

  • Combinați mai mulți vectori într-unul singur folosind media
  • Calculați distanțele cosinus

Un punct calculat din media celor doi vectori a fost adăugat între cele două puncte.

Introducere în Embeddings cu API-ul OpenAI

Recomandări pe mai multe puncte de date

 

Proces:

  • Combinați mai mulți vectori într-unul singur folosind media
  • Calculați distanțele cosinus
  • Recomandați vectorul cel mai apropiat

Cel mai apropiat punct roșu a fost evidențiat pentru recomandare.

Introducere în Embeddings cu API-ul OpenAI

Recomandări pe mai multe puncte de date

 

Proces:

  • Combinați mai mulți vectori într-unul singur folosind media
  • Calculați distanțele cosinus
  • Recomandați vectorul cel mai apropiat

Cel mai apropiat punct a fost colorat în albastru pentru a sublinia că articolele deja citite de utilizator trebuie excluse.

Introducere în Embeddings cu API-ul OpenAI

Recomandări pe mai multe puncte de date

 

Proces:

  • Combinați mai mulți vectori într-unul singur folosind media
  • Calculați distanțele cosinus
  • Recomandați vectorul cel mai apropiat
    • Asigurați-vă că nu a fost citit

Cel mai apropiat punct roșu, de această dată mai îndepărtat, a fost evidențiat.

Introducere în Embeddings cu API-ul OpenAI

Recomandări pe mai multe puncte de date

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)
Introducere în Embeddings cu API-ul OpenAI

Recomandări pe mai multe puncte de date

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
Introducere în Embeddings cu API-ul OpenAI

Să exersăm!

Introducere în Embeddings cu API-ul OpenAI

Preparing Video For Download...