Embeddings voor classificatietaken

Introductie tot Embeddings met de OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Classificatietaken

 

Labels toekennen aan items

  • Categorisatie
    • Voorbeeld: koppen naar topics
  • Sentimentanalyse

 

Een tabel met topics die we kunnen gebruiken om artikelen te categoriseren.

Introductie tot Embeddings met de OpenAI API

Classificatietaken

 

Labels toekennen aan items

  • Categorisatie
    • Voorbeeld: koppen naar topics
  • Sentimentanalyse
    • Voorbeeld: reviews als positief of negatief

 

Embeddings vangen de semantische betekenis

 

Een tabel met een smiley en een verdrietig gezicht, te gebruiken voor categorisatie op sentiment.

Introductie tot Embeddings met de OpenAI API

Classificatie met embeddings

  • Zero-shot-classificatie:
    • Geen gelabelde data gebruiken

 

Proces:

  1. Embed class-beschrijvingen

Geëmbedde class-beschrijvingen in de vectorruimte.

Introductie tot Embeddings met de OpenAI API

Classificatie met embeddings

  • Zero-shot-classificatie:
    • Geen gelabelde data gebruiken

 

Proces:

  1. Embed class-beschrijvingen
  2. Embed het item om te classificeren
  3. Bereken cosinusafstanden

Geëmbedde class-beschrijvingen in de vectorruimte, met een onbekende vector.

Introductie tot Embeddings met de OpenAI API

Classificatie met embeddings

  • Zero-shot-classificatie:
    • Geen gelabelde data gebruiken

 

Proces:

  1. Embed class-beschrijvingen
  2. Embed het item om te classificeren
  3. Bereken cosinusafstanden
  4. Ken het meest gelijkende label toe

Geëmbedde class-beschrijvingen in de vectorruimte, met een onbekende vector die het label Tech krijgt.

Introductie tot Embeddings met de OpenAI API

Class-beschrijvingen embedden

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

class_descriptions = [topic['label'] for topic in topics]
class_embeddings = create_embeddings(class_descriptions)
Introductie tot Embeddings met de OpenAI API

Item om te classificeren embedden

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]
Introductie tot Embeddings met de OpenAI API

Cosinusafstanden berekenen

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)
Introductie tot Embeddings met de OpenAI API

Het meest gelijkende label ophalen

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

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

Beperking:

  • Class-beschrijvingen waren te weinig gedetailleerd
Introductie tot Embeddings met de OpenAI API

Meer gedetailleerde beschrijvingen

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
Introductie tot Embeddings met de OpenAI API

Laten we oefenen!

Introductie tot Embeddings met de OpenAI API

Preparing Video For Download...