Эмбеддинги для задач классификации

Введение в эмбеддинги с OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Задачи классификации

 

Присвоение меток объектам

  • Категоризация
    • Пример: распределение заголовков по темам
  • Анализ тональности

 

Таблица тем для категоризации статей.

Введение в эмбеддинги с OpenAI API

Задачи классификации

 

Присвоение меток объектам

  • Категоризация
    • Пример: распределение заголовков по темам
  • Анализ тональности
    • Пример: классификация отзывов как положительных или отрицательных

 

Эмбеддинги отражают семантическое значение

 

Таблица со смайликом и грустным лицом для категоризации по тональности.

Введение в эмбеддинги с OpenAI API

Классификация с помощью эмбеддингов

  • Классификация без обучения:
    • Не требует размеченных данных

 

Процесс:

  1. Создать эмбеддинги описаний классов

Эмбеддинги описаний классов в векторном пространстве.

Введение в эмбеддинги с OpenAI API

Классификация с помощью эмбеддингов

  • Классификация без обучения:
    • Не требует размеченных данных

 

Процесс:

  1. Создать эмбеддинги описаний классов
  2. Создать эмбеддинг классифицируемого объекта
  3. Вычислить косинусные расстояния

Эмбеддинги описаний классов в векторном пространстве с неизвестным вектором.

Введение в эмбеддинги с OpenAI API

Классификация с помощью эмбеддингов

  • Классификация без обучения:
    • Не требует размеченных данных

 

Процесс:

  1. Создать эмбеддинги описаний классов
  2. Создать эмбеддинг классифицируемого объекта
  3. Вычислить косинусные расстояния
  4. Присвоить наиболее похожую метку

Эмбеддинги описаний классов в векторном пространстве; неизвестному вектору присвоена метка Tech.

Введение в эмбеддинги с OpenAI API

Создание эмбеддингов описаний классов

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

class_descriptions = [topic['label'] for topic in topics]
class_embeddings = create_embeddings(class_descriptions)
Введение в эмбеддинги с OpenAI API

Создание эмбеддинга классифицируемого объекта

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]
Введение в эмбеддинги с OpenAI API

Вычисление косинусных расстояний

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)
Введение в эмбеддинги с OpenAI API

Извлечение наиболее похожей метки

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

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

Ограничение:

  • Описания классов недостаточно детальны
Введение в эмбеддинги с OpenAI API

Более подробные описания

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
Введение в эмбеддинги с OpenAI API

Давайте потренируемся!

Введение в эмбеддинги с OpenAI API

Preparing Video For Download...