Интерактивно изучайте результаты Cleanlab на CIFAR-100 с помощью Renumics Spotlight

Очистка данных — важный, но часто недооцениваемый шаг в реальных проектах машинного обучения. Наличие неверных данных, в том числе неправильно помеченных примеров, выбросов и дубликатов, может существенно повлиять на производительность и надежность моделей машинного обучения. Для решения этих проблем появились инструменты очистки данных, такие как Cleanlab, которые стали ценными помощниками для автоматического обнаружения проблем с данными. Cleanlab использует уверенные методы обучения, реализуя подход модель в цикле.

Хотя инструменты очистки данных помогают выявлять потенциальные проблемы с данными, все же необходим тщательный анализ и изучение результатов, чтобы получить полное представление об основных проблемах.

Расширенные инструменты визуализации играют незаменимую роль в этом контексте. Такие инструменты, как Renumics Spotlight, не просто предоставляют передовые визуализации для выявления моделей сбоев; они также позволяют нам тщательно проверить проблемы с данными. Примером их возможностей является карта подобия, усовершенствованный интерактивный график уменьшения размерности, который использует встраивание модели для идентификации проблемных кластеров.

В этой статье мы сосредоточимся на концепции совместного использования Cleanlab и Spotlight для решения проблем с данными. В качестве примера набора данных мы используем популярный набор данных CIFAR-100.

Полный код также доступен в сопроводительной записной книжке на GitHub.

Отказ от ответственности. Автор этой статьи также является одним из разработчиков Spotlight.

Подготовка

Набор данных CIFAR-100 является эталонным набором данных в области компьютерного зрения для классификации изображений. Он состоит из 100 различных классов, сгруппированных в 20 суперклассов. Набор данных содержит 60 000 небольших цветных изображений размером 32x32 пикселя. Для нашего анализа мы сосредоточимся на 10 000 тестовых изображений и рассмотрим метку «отлично», которая представляет определенный класс каждого изображения.

Чтобы упростить наш анализ, мы будем использовать расширенную версию набора данных CIFAR-100, которая уже была дополнена вложениями, прогнозами и вероятностями. Этот набор данных был создан с использованием доработанной модели edumunozsala/vit_base-224-in21k-ft-cifar100 из Hugging Face model Hub.

Прежде чем мы начнем, мы устанавливаем необходимые библиотеки:

!pip install renumics-spotlight cleanlab datasets

Чтобы загрузить обогащенный набор данных CIFAR-100, мы можем использовать репозиторий Hugging Face library, импортировав модуль наборы данных и используя следующий код:

import datasets
ds = datasets.load_dataset("renumics/cifar100-enriched", split="test")
df = ds.to_pandas()

Набор данных будет иметь следующие столбцы:

  • «изображение»: необработанные данные изображения.
  • «fine_label»: метка ссылки, представленная в виде целого числа.
  • «fine_label_str»: метка ссылки, представленная в виде удобочитаемой строки.
  • «fine_label_prediction»: предсказанная моделью метка в виде целого числа.
  • «fine_label_prediction_str»: предсказанная моделью метка в виде удобочитаемой строки.
  • встраивание: вложения, сгенерированные из данных изображения с использованием модели Vision Transformer (ViT) [1], обученной на CIFAR-100: edumunozsala/vit_base-224-in21k-ft-cifar100.
  • «вероятности»: значения вероятности, сгенерированные с использованием той же модели.

Автоматическое обнаружение проблем с данными с помощью Cleanlab

Теперь, когда у нас есть вероятности и готовые вложения в нашем фрейме данных df. Мы используем Cleanlab для выявления трех различных типов проблем в нашем наборе данных:

  • Проблемы с метками: ошибки, связанные с неправильной или непоследовательной маркировкой.
  • Выбросы: точки данных, которые значительно отклоняются от других наблюдений и могут снизить производительность модели.
  • Почти дубликаты: почти идентичные точки данных, которые могут исказить результаты.

со следующим кодом:

import pandas as pd
import numpy as np
from cleanlab import Datalab

lab = Datalab(data=df, label_name="fine_label")
features = np.array([x.tolist() for x in df["embedding"]])
pred_probs = np.array([x.tolist() for x in df["probabilities"]])
lab.find_issues(features=features, pred_probs=pred_probs)

Метод find_issues позволяет нам анализировать вложения и предсказанные вероятности, в результате чего получается таблица проблем с данными. Эта таблица включает логические индикаторы для проблем с метками, выбросов и почти дубликатов, а также соответствующие оценки, отражающие достоверность каждого обнаружения:

lab.get_issues()
+------+------------------+---------------+--------------------+-----------------+---------------------------+------------------------+
|      | is_label_issue   |   label_score | is_outlier_issue   |   outlier_score | is_near_duplicate_issue   |   near_duplicate_score |
|------+------------------+---------------+--------------------+-----------------+---------------------------+------------------------|
|    0 | False            |      0.152339 | False              |        0.61018  | False                     |               0.432467 |
|    1 | False            |      0.967271 | False              |        0.683433 | False                     |               0.268029 |
|    2 | False            |      0.981884 | False              |        0.707834 | False                     |               0.299303 |
|    3 | False            |      0.989626 | False              |        0.690585 | False                     |               0.313452 |
|  ... | ...              |           ... | ...                |             ... | ...                       |                    ... |
| 9997 | False            |      0.988529 | False              |        0.707655 | False                     |               0.304715 |
| 9998 | False            |      0.990591 | False              |        0.8521   | False                     |               0.111629 |
| 9999 | False            |      0.990379 | False              |        0.634265 | False                     |               0.387416 |
+------+------------------+---------------+--------------------+-----------------+---------------------------+------------------------+

Мы можем объединить эти обнаруженные проблемы с исходным фреймом данных df с помощью:

df = pd.concat([df, lab.get_issues()], axis=1)

Проверьте проблемы с данными с помощью Spotlight

После выявления потенциальных проблем с данными с помощью Cleanlab важно отметить, что только часть автоматически обнаруженных проблем являются реальными проблемами с данными (около 25% для CIFAR-100 [2]). Поэтому следующим важным шагом является рассмотрение и понимание этих вопросов. Spotlight предоставляет для этой цели комплексную интерактивную среду.

Ознакомьтесь с онлайн-демонстрацией этой статьи по адресу: huggingface.co/spaces/renumics/navigate-data-issues.

Сначала мы создаем DataIssues для представления проблем, обнаруженных Cleanlab:

from renumics.spotlight.analysis import DataIssue

label_issue_rows = df[df["is_label_issue"]].sort_values("label_score").index.tolist()
label_issue = DataIssue(
    severity="medium",
    title="label-issue",
    rows=label_issue_rows,
    description="Label issue found by Cleanlab - Review and correct if necessary",
)

outlier_issue_row = (
    df[df["outlier_score"] < 0.6].sort_values("outlier_score").index.tolist()
)
outlier_issue = DataIssue(
    severity="medium",
    title="outlier-issue",
    rows=outlier_issue_row,
    description="Outlier score < 0.6 - Review and remove or collect more data",
)

near_duplicate_issue_row = (
    df[df["is_near_duplicate_issue"]].sort_values("near_duplicate_score").index.tolist()
)
near_duplicate_issue = DataIssue(
    severity="medium",
    title="near-duplicate-issue",
    rows=near_duplicate_issue_row,
    description="Near duplicate issue found by Cleanlab - Review and remove if necessary",
)

Представления содержат список индексов всех примеров для каждой из трех проблем и отсортированы по соответствующей оценке проблемы. Эти представления вместе с DataFrame df передаются в Spotlight. Spotlight использует проблемы с данными, чтобы показать три группы проблем, что позволяет нам выбирать и отображать все примеры для группы, отсортированные по оценке проблемы.

from renumics import spotlight

dtypes = {
    "image": spotlight.Image,
    "full_image": spotlight.Image,
    "embedding": spotlight.Embedding,
    "embedding_reduced": spotlight.Embedding,
    "probabilities": spotlight.Embedding,
}


spotlight.show(
    df.rename(columns={"fine_label_str": "label", "fine_label_prediction_str": "pred"}),
    dtype=dtypes,
    layout="https://spotlight.renumics.com/resources/layout_data_issues.json",
    issues=[label_issue, outlier_issue, near_duplicate_issue],
)

Кроме того, необработанные данные изображения из DataFrame df используются для отображения изображений, что делает возможным рассмотрение проблем данных с исходными данными. Кроме того, вложения используются для создания карты сходства с использованием UMAP (равномерная аппроксимация и проекция многообразия). Это позволяет нам перемещаться по изображениям и находить похожие изображения для выявленных проблем.

Проблемы с ярлыками

Если мы нажмем «проблема с этикеткой» в таблице проблем, мы сможем просмотреть все проблемы с этикеткой, выявленные Cleanlab, например, крупный рогатый скот, ошибочно помеченный как лиса. Карта сходства является ценным инструментом для улучшения нашего процесса обзора. Выбирая окружающие примеры на этой карте, мы можем получить представление о соседних примерах и найти устойчивые шаблоны ошибок. Кроме того, с помощью интерактивной статистической визуализации, такой как гистограммы, мы можем лучше понять природу и частоту этих проблем.

Использование этих инструментов улучшает идентификацию и понимание проблем с этикетками. Их интеграция подчеркивает эффективность визуализации при обработке обнаруженных проблем.

Выбросы

Если мы нажмем «выбросы» в таблице проблем, мы сможем изучить все аномалии, обнаруженные Cleanlab, такие как полоса тигра, помеченная как тигр. Карта подобия здесь также играет важную роль, позволяя нам увидеть, как эти выбросы связаны с более типичными точками данных. Сосредоточив внимание на этих отклонениях на карте, мы можем распознать закономерности и оценить их значимость. Более того, использование интерактивной статистической визуализации, такой как гистограммы, может пролить свет на распределение и крайность этих выбросов.

Дубликаты

Если мы нажмем «почти повторяющиеся проблемы» в таблице проблем, нам будут представлены все повторяющиеся экземпляры, идентифицированные Cleanlab. Например, мы можем найти изображение, отнесенное к категории «тюлень» и «выдра» в наборе данных. Карта подобия оказывается здесь бесценной, иллюстрируя близость этих дубликатов к их оригинальным аналогам. Отмечая эти совпадения на карте, мы можем определить избыточность и оценить ее последствия. Кроме того, интерактивная статистическая визуализация, такая как гистограммы, может помочь выяснить частоту и кластеризацию этих дубликатов.

Заключение

Сочетание сильных сторон Cleanlab и Spotlight позволяет нам обнаруживать и анализировать потенциальные проблемы с данными. Этот подход позволяет нам ориентироваться в несоответствиях меток, выбросах и почти дубликатах в нашем наборе данных.

У вас есть проблемы с данными в вашем наборе данных? Используйте описанные здесь методы Cleanlab и Spotlight, чтобы определить и просмотреть их. Примените эти инструменты к своим собственным данным и сделайте шаг к более надежному анализу.

Я профессионал с опытом создания передовых программных решений для интерактивного исследования неструктурированных данных. Я пишу о неструктурированных данных и использую мощные инструменты визуализации для анализа и принятия обоснованных решений.

Рекомендации

[1] Алексей Досовицкий, Лукас Бейер, Александр Колесников, Дирк Вайссенборн, Сяохуа Чжай, Томас Унтертинер, Мостафа Дегани, Матиас Миндерер, Георг Хейгольд, Сильвен Гелли, Якоб Ушкорейт, Нил Хоулсби, Изображение стоит 16x16 слов: Трансформеры для изображения Признание в масштабе (2020), arXiv

[2] Кертис Г. Норткатт, Аниш Атали, Джонас Мюллер Повсеместные ошибки меток в наборах тестов дестабилизируют тесты машинного обучения (2021), arXiv