Data Cleaning
Очистка данных находит и исправляет повреждённые файлы, дубликаты, пропущенные значения и ошибки разметки в наборе данных перед обучением. Разбираем методы, инструменты и код.
Очистка данных, также называемая чисткой данных или устранением ошибок в данных, — это поиск и исправление либо удаление поврежденных, дублирующихся, неполных, противоречивых и неверно размеченных записей в наборе данных. В машинном обучении (ML) очистку выполняют до предобработки данных и обучения, потому что модель усваивает все, что содержат ее обучающие данные, включая ошибки. Детектор, обученный на изображениях, где половина велосипедов размечена как «мотоцикл», усвоит эту путаницу, а тестовая выборка с неверными метками исказит оценку качества модели. Очистка — ключевой элемент ИИ, ориентированного на данные: модели улучшают за счет улучшения данных, а не архитектуры.
Почему качество данных ограничивает модели#
Ошибки в данных снижают точность несколькими способами. Неверно размеченные примеры учат ошибочным соответствиям между входами и выходами и подталкивают модель к переобучению, когда она запоминает шум. Дубликаты придают некоторым примерам больший вес, а если их копии попадают и в обучающую, и в оценочную выборки, возникает утечка данных, завышающая оценки. Поврежденные файлы приводят к сбоям загрузчиков данных или незаметно пропускаются, а несогласованные названия классов разбивают одну категорию на несколько. Ошибки затрагивают и бенчмарки: в исследовании 10 широко используемых тестовых наборов в среднем неверно размеченными оказались как минимум 3,3% примеров, а в валидационной выборке ImageNet — как минимум 6%. При оценке на исправленных метках ResNet-18 превосходит ResNet-50, если доля изначально неверно размеченных тестовых примеров увеличивается всего на 6%.
Типичные задачи очистки данных#
Табличные данные обычно очищают с помощью библиотек, таких как pandas, а для наборов данных компьютерного зрения проверяют файлы изображений и их аннотации — от пикселей до координат ограничивающих рамок. Почти дублирующиеся изображения находят сравнением эмбеддингов, а поиск по векторам позволяет выполнять такое сравнение для миллионов изображений.
- Пропущенные значения: Записи с пустыми полями удаляют или заполняют методом импутации на основе статистики столбца либо ближайших соседей. В наборах данных компьютерного зрения изображение без файла с метками неоднозначно: возможно, это намеренно оставленное фоновое изображение, а возможно, его просто никто не аннотировал.
- Дубликаты и почти дубликаты: У побайтно идентичных файлов совпадает хеш. Измененные по размеру или повторно сжатые копии и соседние кадры видео отличаются, поэтому для их поиска нужны перцептивные хеши или сравнение эмбеддингов.
- Поврежденные и некорректные файлы: Неполные загрузки, неподдерживаемые форматы, неожиданные цветовые режимы и слишком маленькие изображения не декодируются или не содержат полезного сигнала.
- Ошибки в метках: Неверные классы, пропущенные объекты и неточные либо смещенные рамки — самые дорогостоящие ошибки в размеченных данных компьютерного зрения, которые труднее всего обнаружить визуально.
- Несогласованные категории: Написания вроде «Car» и «car» или пересекающиеся классы вроде «автомобиль» и «транспортное средство» объединяют в одну таксономию, чтобы у каждого понятия была одна метка.
- Выбросы: Невозможные значения, например отрицательный возраст или рамки, выходящие за границы изображения, — это ошибки, которые нужно исправить. Редкие, но допустимые случаи оставляют: именно на таких крайних примерах модели часто особенно важно обучаться.
Поиск ошибок в метках с помощью модели#
Проверить вручную каждую метку невозможно при больших объемах данных, поэтому конвейеры очистки используют обученную модель, чтобы ранжировать метки для проверки. Метод уверенного обучения, реализованный в библиотеке с открытым исходным кодом cleanlab, берет предсказанные вероятности для примеров вне обучающей выборки из кросс-валидации и отмечает примеры, для которых модель уверенно предсказывает класс, отличный от указанного в метке. Окончательное решение все равно принимают люди: в упомянутом выше исследовании тестовых наборов краудсорсинговые проверяющие подтвердили, что 51% отмеченных алгоритмом примеров действительно содержат ошибки в метках.
Автоматизация проверки файлов#
Проверки на уровне файлов достаточно дёшевы, чтобы запускать их для каждой новой порции данных, наряду с проверками меток и баланса классов из урока «Контроль качества набора данных». Следующий скрипт создаёт небольшую папку с одним изображением, его точной копией и усечённым файлом, а затем находит копию и повреждённый файл с помощью Pillow и хеша содержимого:
import hashlib
from pathlib import Path
from PIL import Image
# A tiny image folder: one original, one exact copy, and one truncated download
folder = Path("images")
folder.mkdir(exist_ok=True)
Image.new("RGB", (640, 480), "orange").save(folder / "a.jpg")
(folder / "b.jpg").write_bytes((folder / "a.jpg").read_bytes())
(folder / "c.jpg").write_bytes((folder / "a.jpg").read_bytes()[:1000])
seen = {}
for path in sorted(folder.glob("*.jpg")):
try:
Image.open(path).load() # decode every pixel; a truncated file raises OSError
except OSError as error:
print(f"{path.name}: corrupt ({error})")
continue
digest = hashlib.md5(path.read_bytes()).hexdigest() # identical bytes give identical hashes
if digest in seen:
print(f"{path.name}: duplicate of {seen[digest]}")
seen.setdefault(digest, path.name)Скрипт выводит b.jpg: duplicate of a.jpg и c.jpg: corrupt (image file is truncated (5 bytes not processed)). Важно полностью декодировать каждое изображение: при открытии файла считывается только его заголовок, поэтому усеченный файл может успешно пройти эту проверку. Ultralytics YOLO выполняет похожие проверки при создании кэша меток набора данных: повторно сохраняет JPEG без маркера конца изображения, удаляет дублирующиеся строки меток и пропускает пары изображение—метка, если изображение меньше 10 пикселей, координаты выходят за его границы или идентификаторы классов превышают допустимые в YAML набора данных; затем в сводке сканирования указывается количество изображений, фоновых и поврежденных изображений.
Очистка данных и связанные понятия#
- Предобработка данных: Преобразует корректные данные в формат, ожидаемый моделью, например изменяет размер изображений и нормализует значения пикселей. Очистка определяет, какие данные корректны.
- Аугментация данных: Добавляет к корректным данным намеренные вариации, например отражения и изменения цвета, во время обучения.
- Разметка данных: Создает метки для неразмеченных данных, а очистка проверяет и исправляет уже существующие метки.
- Смещение набора данных: В наборе данных может не быть ошибок, но при этом в нем могут быть недостаточно представлены некоторые условия или группы. Для устранения такого смещения нужно собирать другие данные; одной очисткой этого не добиться.










