Data Cleaning
يعثر تنظيف البيانات على الملفات التالفة والتكرارات والقيم المفقودة وأخطاء التسميات في مجموعة البيانات ويصلحها قبل التدريب. يتناول هذا الموضوع التقنيات والأدوات والأمثلة البرمجية.
تنظيف البيانات، الذي يُسمى أيضًا تنقية البيانات أو فرك البيانات، هو عملية العثور على السجلات التالفة والمكررة والناقصة وغير المتسقة والموسومة خطأً في مجموعة البيانات وإصلاحها أو إزالتها. وفي التعلم الآلي (ML)، يسبق التنظيف المعالجة المسبقة للبيانات والتدريب، لأن النموذج يتعلم كل ما تحتويه بيانات التدريب، بما في ذلك الأخطاء. فالكاشف المدرّب على صور وُسِم نصف الدراجات فيها على أنها «دراجة نارية» يتعلم هذا الخلط، كما أن مجموعة اختبار ذات وسوم خاطئة تعطي تقريرًا مضللًا عن جودة النموذج. ويُعد التنظيف ممارسة أساسية في الذكاء الاصطناعي المرتكز على البيانات، الذي يحسّن النماذج بتحسين بياناتها بدلًا من بنيتها.
لماذا تحد جودة البيانات من النماذج#
تقلل أخطاء البيانات الدقة بطرق عدة. فالأمثلة ذات الوسوم الخاطئة تعلّم تعيينات خاطئة بين المدخلات والمخرجات، وتدفع النموذج إلى فرط التكيّف حين يحفظ الضجيج. وتعطي النسخ المكررة بعض الأمثلة وزنًا إضافيًا، كما تتسبب بتسرّب البيانات الذي يضخم الدرجات عندما تظهر نسخ منها في جزأي التدريب والتقييم. وتتسبب الملفات التالفة بتعطل محمّلات البيانات أو تُتجاوز بصمت، كما تؤدي أسماء الفئات غير المتسقة إلى تقسيم الفئة الواحدة إلى فئات متعددة. وتتأثر المعايير المرجعية أيضًا: فقد قدرت دراسة لعشر مجموعات اختبار شائعة الاستخدام أن أخطاء الوسوم موجودة في 3.3% على الأقل من الأمثلة في المتوسط، وفي 6% على الأقل من مجموعة تحقق ImageNet. وعند التقييم باستخدام الوسوم المصححة، يتفوق ResNet-18 على ResNet-50 بمجرد ارتفاع نسبة أمثلة الاختبار الموسومة خطأً في الأصل بمقدار 6%.
مهام شائعة لتنظيف البيانات#
عادةً ما تُنظف البيانات الجدولية بمكتبات مثل pandas، في حين تتطلب مجموعات بيانات الرؤية فحص ملفات الصور والتوسيمات، بدءًا من وحدات البكسل ووصولًا إلى إحداثيات الصندوق المحيط. ويُعثر على الصور شبه المكررة بمقارنة التضمينات، فيما يتيح البحث المتجهي توسيع المقارنة لتشمل ملايين الصور.
- القيم المفقودة: تُحذف السجلات ذات الحقول الفارغة أو تُملأ بالتعويض استنادًا إلى إحصاءات الأعمدة أو أقرب الجيران. وفي مجموعات بيانات الرؤية، تكون الصورة التي لا تملك ملف وسوم ملتبسة، إذ قد تكون صورة خلفية مقصودة أو صورة لم يوسمها أحد.
- النسخ المكررة وشبه المكررة: تشترك الملفات المتطابقة على مستوى البايتات في قيمة تجزئة. أما النسخ التي غُيّر حجمها أو أعيد ضغطها وإطارات الفيديو المتتالية فلا تشترك فيها، لذا تحتاج إلى تجزئات إدراكية أو تشابه التضمينات.
- الملفات التالفة وغير الصالحة: تتعذر قراءة التنزيلات المبتورة والتنسيقات غير المدعومة وأنماط الألوان غير المتوقعة والصور الصغيرة جدًا، أو لا تحمل أي معلومات مفيدة.
- أخطاء الوسوم: الفئات الخاطئة والأجسام المفقودة والصناديق الفضفاضة أو الموضوعة في غير مكانها هي الأخطاء الأعلى تكلفة في بيانات الرؤية الخاضعة للإشراف، والأصعب اكتشافًا بالعين.
- الفئات غير المتسقة: تُدمج اختلافات الكتابة مثل «سيارة» و«سيارة»، أو الفئات المتداخلة مثل «سيارة» و«مركبة»، في تصنيف موحد بحيث يحمل كل مفهوم وسمًا واحدًا.
- القيم الشاذة: القيم المستحيلة، مثل الأعمار السالبة أو الصناديق التي تتجاوز حدود الصورة، أخطاء ينبغي إصلاحها. أما الحالات النادرة والصحيحة فتُحتفظ بها، لأن هذه الحالات الطرفية غالبًا ما تكون أكثر ما يحتاج النموذج إلى تعلمه.
اكتشاف أخطاء الوسوم باستخدام نموذج#
لا يتسع النطاق لمراجعة كل وسم يدويًا، لذا تستخدم مسارات التنظيف نموذجًا مدربًا لترتيب الوسوم المطلوب فحصها. ويستخدم التعلم الواثق، المنفذ في مكتبة 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 مجموعة البيانات، ثم تعرض أعداد الصور والخلفيات والملفات التالفة في ملخص الفحص.
تنظيف البيانات ومصطلحات ذات صلة#
- المعالجة المسبقة للبيانات: تحويل البيانات الصحيحة أصلًا إلى صيغة يتوقعها النموذج، مثل تغيير أحجام الصور وتطبيع قيم البكسل. أما التنظيف فيحدد البيانات الصحيحة.
- تعزيز البيانات: إضافة تنويع مقصود، مثل القلب وتغيير الألوان، إلى البيانات النظيفة أثناء التدريب.
- وسم البيانات: إنشاء وسوم للبيانات غير الموسومة، بينما يدقق التنظيف في الوسوم الموجودة ويصححها.
- تحيز مجموعة البيانات: قد تخلو مجموعة البيانات من الأخطاء، ومع ذلك لا تمثل بعض الظروف أو الفئات تمثيلًا كافيًا. ويتطلب تصحيح التحيز جمع بيانات مختلفة، وهو ما لا يمكن للتنظيف وحده تحقيقه.










