Embeddings para tareas de clasificación

Introducción a las incrustaciones con la OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Tareas de clasificación

 

Asignar etiquetas a elementos

  • Categorización
    • Ejemplo: titulares por temas
  • Análisis de sentimiento

 

Una tabla de temas que podríamos usar para categorizar artículos.

Introducción a las incrustaciones con la OpenAI API

Tareas de clasificación

 

Asignar etiquetas a elementos

  • Categorización
    • Ejemplo: titulares por temas
  • Análisis de sentimiento
    • Ejemplo: clasificar reseñas como positivas o negativas

 

Los embeddings capturan el significado semántico

 

Una tabla con una cara sonriente y otra triste, que podría usarse para categorizar por sentimiento.

Introducción a las incrustaciones con la OpenAI API

Clasificación con embeddings

  • Zero-shot classification:
    • Sin usar datos etiquetados

 

Proceso:

  1. Generar embeddings de descripciones de clases

Descripciones de clases con embeddings en el espacio vectorial.

Introducción a las incrustaciones con la OpenAI API

Clasificación con embeddings

  • Zero-shot classification:
    • Sin usar datos etiquetados

 

Proceso:

  1. Generar embeddings de descripciones de clases
  2. Generar el embedding del elemento a clasificar
  3. Calcular distancias coseno

Descripciones de clases con embeddings en el espacio vectorial, con un vector desconocido mostrado.

Introducción a las incrustaciones con la OpenAI API

Clasificación con embeddings

  • Zero-shot classification:
    • Sin usar datos etiquetados

 

Proceso:

  1. Generar embeddings de descripciones de clases
  2. Generar el embedding del elemento a clasificar
  3. Calcular distancias coseno
  4. Asignar la etiqueta más similar

Descripciones de clases con embeddings en el espacio vectorial, con un vector desconocido asignado a la etiqueta Tech.

Introducción a las incrustaciones con la OpenAI API

Generar embeddings de descripciones de clases

topics = [
  {'label': 'Tech'},
  {'label': 'Science'},
  {'label': 'Sport'},
  {'label': 'Business'},
]

class_descriptions = [topic['label'] for topic in topics]
class_embeddings = create_embeddings(class_descriptions)
Introducción a las incrustaciones con la OpenAI API

Generar embedding del elemento a clasificar

article = {"headline": "How NVIDIA GPUs Could Decide Who Wins the AI Race",
           "keywords": ["ai", "business", "computers"]}

def create_article_text(article): return f"""Headline: {article['headline']} Keywords: {', '.join(article['keywords'])}""" article_text = create_article_text(article)
article_embeddings = create_embeddings(article_text)[0]
Introducción a las incrustaciones con la OpenAI API

Calcular distancias coseno

def find_closest(query_vector, embeddings):
  distances = []
  for index, embedding in enumerate(embeddings):
    dist = distance.cosine(query_vector, embedding)
    distances.append({"distance": dist, "index": index})
  return min(distances, key=lambda x: x["distance"])

closest = find_closest(article_embeddings, class_embeddings)
Introducción a las incrustaciones con la OpenAI API

Extraer la etiqueta más similar

label = topics[closest['index']]['label']

print(label)
Business
article = {"headline": "How NVIDIA GPUs Could Decide Who Wins the AI Race",
           "keywords": ["ai", "business", "computers"]}

Limitación:

  • Las descripciones de clase tenían poco detalle
Introducción a las incrustaciones con la OpenAI API

Descripciones más detalladas

topics = [
  {'label': 'Tech', 'description': 'A news article about technology'},
  {'label': 'Science', 'description': 'A news article about science'},
  {'label': 'Sport', 'description': 'A news article about sports'},
  {'label': 'Business', 'description': 'A news article about business'},
]

class_descriptions = [topic['description'] for topic in topics] class_embeddings = create_embeddings(class_descriptions)
[...] label = topics[closest['index']]['label'] print(label)
Tech
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...