Vecteurs d'empaquetage pour les tâches de classification

Introduction aux embeddings avec l'API d'OpenAI

Emmanuel Pire

Senior Software Engineer, DataCamp

Tâches de classification

 

Attribuer des étiquettes aux éléments

  • Catégorisation
    • Exemple : titres par sujets
  • Analyse de sentiment

 

Un tableau de sujets pouvant servir à classer des articles.

Introduction aux embeddings avec l'API d'OpenAI

Tâches de classification

 

Attribuer des étiquettes aux éléments

  • Catégorisation
    • Exemple : titres par sujets
  • Analyse de sentiment
    • Exemple : classer des avis en positifs ou négatifs

 

Les vecteurs d'empaquetage captent le sens sémantique

 

Un tableau avec un visage souriant et un visage triste, pouvant servir à classer par sentiment.

Introduction aux embeddings avec l'API d'OpenAI

Classification avec vecteurs d'empaquetage

  • Classification zéro donnée :
    • Sans données étiquetées

 

Processus :

  1. Créer l'empaquetage des descriptions de classes

Descriptions de classes empaquetées dans l'espace vectoriel.

Introduction aux embeddings avec l'API d'OpenAI

Classification avec vecteurs d'empaquetage

  • Classification zéro donnée :
    • Sans données étiquetées

 

Processus :

  1. Créer l'empaquetage des descriptions de classes
  2. Créer l'empaquetage de l'élément à classer
  3. Calculer les distances cosinus

Descriptions de classes empaquetées dans l'espace vectoriel, avec un vecteur inconnu.

Introduction aux embeddings avec l'API d'OpenAI

Classification avec vecteurs d'empaquetage

  • Classification zéro donnée :
    • Sans données étiquetées

 

Processus :

  1. Créer l'empaquetage des descriptions de classes
  2. Créer l'empaquetage de l'élément à classer
  3. Calculer les distances cosinus
  4. Attribuer l'étiquette la plus similaire

Descriptions de classes empaquetées dans l'espace vectoriel, avec un vecteur inconnu étiqueté Tech.

Introduction aux embeddings avec l'API d'OpenAI

Empaqueter les descriptions de classes

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

class_descriptions = [topic['label'] for topic in topics]
class_embeddings = create_embeddings(class_descriptions)
Introduction aux embeddings avec l'API d'OpenAI

Empaqueter l'élément à classer

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]
Introduction aux embeddings avec l'API d'OpenAI

Calculer les distances cosinus

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)
Introduction aux embeddings avec l'API d'OpenAI

Extraire l'étiquette la plus similaire

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

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

Limite :

  • Descriptions de classes trop peu détaillées
Introduction aux embeddings avec l'API d'OpenAI

Descriptions plus détaillées

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
Introduction aux embeddings avec l'API d'OpenAI

Passons à la pratique !

Introduction aux embeddings avec l'API d'OpenAI

Preparing Video For Download...