Sistemas de recomendación

Introducción a las incrustaciones con la OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Sistemas de recomendación con embeddings

 

  • ¡Muy parecido a la búsqueda semántica!

 

Proceso:

  1. Genera embeddings de las posibles recomendaciones y del punto de datos

Un punto de datos azul y varios puntos rojos en el espacio vectorial.

Introducción a las incrustaciones con la OpenAI API

Sistemas de recomendación con embeddings

 

  • ¡Muy parecido a la búsqueda semántica!

 

Proceso:

  1. Genera embeddings de las posibles recomendaciones y del punto de datos
  2. Calcula distancias coseno

Un punto de datos azul y varios puntos rojos en el espacio vectorial. Hay una línea entre cada punto rojo y el azul para indicar la distancia coseno.

Introducción a las incrustaciones con la OpenAI API

Sistemas de recomendación con embeddings

 

  • ¡Muy parecido a la búsqueda semántica!

 

Proceso:

  1. Genera embeddings de las posibles recomendaciones y del punto de datos
  2. Calcula distancias coseno
  3. Recomienda los elementos más cercanos

Se han resaltado los tres puntos rojos más cercanos.

Introducción a las incrustaciones con la OpenAI API

Ejemplo: Artículos recomendados

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"]}
Introducción a las incrustaciones con la OpenAI API

Combinación de características

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
Introducción a las incrustaciones con la OpenAI API

Creación de 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)
Introducción a las incrustaciones con la OpenAI API

Encontrar el artículo más 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'])
Introducción a las incrustaciones con la OpenAI API

Encontrar el artículo más 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
Introducción a las incrustaciones con la OpenAI API

Añadir historial del usuario

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"]}
]
Introducción a las incrustaciones con la OpenAI API

Recomendaciones con múltiples puntos de datos

Un diagrama con artículos embebidos, donde los del historial del usuario aparecen en azul y los no vistos en rojo.

Introducción a las incrustaciones con la OpenAI API

Recomendaciones con múltiples puntos de datos

 

Proceso:

  • Combina varios vectores en uno tomando la media
  • Calcula distancias coseno

Se ha añadido un punto calculado como la media de los dos vectores entre ambos puntos.

Introducción a las incrustaciones con la OpenAI API

Recomendaciones con múltiples puntos de datos

 

Proceso:

  • Combina varios vectores en uno tomando la media
  • Calcula distancias coseno
  • Recomienda el vector más cercano

Se ha resaltado el punto rojo más cercano para recomendarlo.

Introducción a las incrustaciones con la OpenAI API

Recomendaciones con múltiples puntos de datos

 

Proceso:

  • Combina varios vectores en uno tomando la media
  • Calcula distancias coseno
  • Recomienda el vector más cercano

El punto más cercano ahora aparece en azul para destacar que el código debe excluir artículos ya leídos por el usuario.

Introducción a las incrustaciones con la OpenAI API

Recomendaciones con múltiples puntos de datos

 

Proceso:

  • Combina varios vectores en uno tomando la media
  • Calcula distancias coseno
  • Recomienda el vector más cercano
    • Asegúrate de que no se haya leído

Se ha resaltado el punto rojo más cercano, esta vez más alejado.

Introducción a las incrustaciones con la OpenAI API

Recomendaciones con múltiples puntos de datos

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)
Introducción a las incrustaciones con la OpenAI API

Recomendaciones con múltiples puntos de datos

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
Introducción a las incrustaciones con la OpenAI API

¡Vamos a practicar!

Introducción a las incrustaciones con la OpenAI API

Preparing Video For Download...