ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

التحقق من صحة بيانات TensorFlow: فحص بياناتك وتحليلها

بمجرد أن تكون بياناتك في خط أنابيب TFX ، يمكنك استخدام مكونات TFX لتحليلها وتحويلها. يمكنك استخدام هذه الأدوات حتى قبل تدريب نموذج.

هناك العديد من الأسباب لتحليل بياناتك وتحويلها:

  • للعثور على مشاكل في بياناتك. تتضمن المشاكل الشائعة ما يلي:
    • البيانات المفقودة ، مثل الميزات ذات القيم الفارغة.
    • تعامل التسميات على أنها ميزات ، بحيث يلقي نموذجك نظرة خاطفة على الإجابة الصحيحة أثناء التدريب.
    • ميزات بقيم خارج النطاق الذي تتوقعه.
    • شذوذ البيانات.
  • هندسة مجموعات ميزات أكثر فعالية. على سبيل المثال ، يمكنك تحديد:
    • ميزات مفيدة بشكل خاص.
    • ميزات زائدة.
    • الميزات التي تختلف على نطاق واسع لدرجة أنها قد تبطئ التعلم.
    • الميزات التي تحتوي على معلومات تنبؤية فريدة أو معدومة.

يمكن أن تساعد أدوات TFX في العثور على أخطاء البيانات والمساعدة في هندسة الميزات.

التحقق من صحة بيانات TensorFlow

نظرة عامة

يحدد التحقق من صحة بيانات TensorFlow الشذوذ في بيانات التدريب والعرض ، ويمكنه تلقائيًا إنشاء مخطط من خلال فحص البيانات. يمكن تكوين المكون للكشف عن فئات مختلفة من الشذوذ في البيانات. يمكن

  1. قم بإجراء فحوصات الصلاحية من خلال مقارنة إحصائيات البيانات بمخطط يقنن توقعات المستخدم.
  2. كشف الانحراف في خدمة التدريب عن طريق مقارنة الأمثلة في بيانات التدريب والعرض.
  3. اكتشف انجراف البيانات بالنظر إلى سلسلة من البيانات.

نقوم بتوثيق كل من هذه الوظائف بشكل مستقل:

التحقق من صحة المثال القائم على المخطط

يحدد التحقق من صحة بيانات TensorFlow أي حالات شاذة في بيانات الإدخال من خلال مقارنة إحصائيات البيانات بمخطط. يرمز المخطط إلى الخصائص التي يُتوقع أن تفي بها بيانات الإدخال ، مثل أنواع البيانات أو القيم الفئوية ، ويمكن للمستخدم تعديلها أو استبدالها.

ميزات المخطط المتقدمة

يغطي هذا القسم تكوين مخطط أكثر تقدمًا يمكن أن يساعد في عمليات الإعداد الخاصة.

ميزات متفرقة

عادةً ما يقدم تشفير الميزات المتفرقة في الأمثلة ميزات متعددة يُتوقع أن يكون لها نفس التكافؤ لجميع الأمثلة. على سبيل المثال ميزة متفرق:

 
WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
 
سيتم ترميزه باستخدام ميزات منفصلة للفهرس والقيمة:
 
WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
 
مع تقييد أن تكافؤ المؤشر وميزة القيمة يجب أن يتطابقان مع جميع الأمثلة. يمكن توضيح هذا التقييد في المخطط عن طريق تحديد خاصية sparse_feature:
 
sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}
 

يتطلب تعريف الميزة المتناثرة فهرسًا واحدًا أو أكثر وميزة قيمة واحدة تشير إلى الميزات الموجودة في المخطط. يُمكّن التحديد الصريح للميزات المتفرقة TFDV من التحقق من تطابق قيم جميع الميزات المشار إليها.

تقدم بعض حالات الاستخدام قيود تكافؤ متشابهة بين الميزات ، ولكنها لا تشفر بالضرورة ميزة متفرقة. يجب أن يؤدي استخدام ميزة متفرقة إلى إلغاء حظرك ، ولكنه ليس مثاليًا.

بيئات المخطط

افتراضيا ، تفترض عمليات التحقق أن جميع الأمثلة في خط الأنابيب تلتزم بمخطط واحد. في بعض الحالات ، يلزم إدخال اختلافات طفيفة في المخطط ، على سبيل المثال الميزات المستخدمة كعلامات مطلوبة أثناء التدريب (ويجب التحقق من صحتها) ، ولكنها مفقودة أثناء العرض. يمكن استخدام البيئات للتعبير عن مثل هذه المتطلبات ، ولا سيما default_environment() ، in_environment() ، not_in_environment() .

على سبيل المثال ، افترض أن الميزة المسماة "LABEL" مطلوبة للتدريب ، ولكن من المتوقع أن تكون مفقودة من العرض. يمكن التعبير عن ذلك من خلال:

  • حدد بيئتين مميزتين في المخطط: ["SERVING" و "TRAINING"] وربط "LABEL" بالبيئة "TRAINING" فقط.
  • ربط بيانات التدريب بالبيئة "TRAINING" وبيانات الخدمة بالبيئة "SERVING".
جيل المخطط

يتم تحديد مخطط بيانات الإدخال كمثيل لمخطط TensorFlow.

بدلاً من إنشاء مخطط يدويًا من البداية ، يمكن للمطور الاعتماد على الإنشاء التلقائي للمخطط للتحقق من صحة بيانات TensorFlow. على وجه التحديد ، يقوم التحقق من بيانات TensorFlow تلقائيًا بإنشاء مخطط مبدئي بناءً على الإحصائيات المحسوبة عبر بيانات التدريب المتوفرة في خط الأنابيب. يمكن للمستخدمين ببساطة مراجعة هذا المخطط التلقائي ، وتعديله حسب الحاجة ، والتحقق منه في نظام التحكم في الإصدار ، ودفعه صراحة في خط الأنابيب لمزيد من التحقق من الصحة.

يتضمن infer_schema() لإنشاء مخطط تلقائيًا. فمثلا:

 schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)
 

يؤدي هذا إلى إنشاء مخطط تلقائي بناءً على القواعد التالية:

  • إذا كان المخطط قد تم إنشاؤه تلقائيًا بالفعل ، فسيتم استخدامه كما هو.

  • خلاف ذلك ، يقوم TensorFlow التحقق من صحة البيانات بفحص إحصائيات البيانات المتاحة وحساب مخطط مناسب للبيانات.

ملاحظة: يعد المخطط الذي يتم إنشاؤه تلقائيًا هو أفضل جهد ويحاول فقط استنتاج الخصائص الأساسية للبيانات. من المتوقع أن يقوم المستخدمون بمراجعته وتعديله حسب الحاجة.

الكشف عن الانحراف في خدمة التدريب

نظرة عامة

يعمل كاشف الانحراف لخدمة التدريب كمكون فرعي للتحقق من بيانات TensorFlow ويكشف الانحراف بين بيانات التدريب والعرض.

أنواع الانحراف

استنادًا إلى الإنتاجات المختلفة لما بعد البوابات ، قمنا بتقليل الأنواع المختلفة من الانحراف إلى أربع فئات رئيسية. بعد ذلك نناقش كل من هذه الفئات بالإضافة إلى تقديم أمثلة على السيناريوهات التي تحدث فيها.

  1. يحدث مخطط Skew عندما لا تتوافق بيانات التدريب والعرض مع نفس المخطط. كما يصف المخطط الخصائص المنطقية للبيانات ، من المتوقع أن يلتزم التدريب بالإضافة إلى بيانات العرض بنفس المخطط. يجب تحديد أي انحرافات متوقعة بين الاثنين (مثل ميزة الملصق الموجودة فقط في بيانات التدريب ولكن ليس في العرض) من خلال مجال البيئات في المخطط.

    نظرًا لأن إنشاء بيانات التدريب هو خطوة معالجة بيانات مجمعة ، في حين أن إنشاء بيانات العرض (عبر الإنترنت) عادةً ما يكون خطوة حساسة لوقت الاستجابة ، فمن الشائع أن يكون لديك مسارات رمز مختلفة تولّد بيانات التدريب والعرض. هذا خطأ. يمكن أن يؤدي أي اختلاف بين هذين المسارين (إما بسبب خطأ المطور أو الإصدارات الثنائية غير المتسقة) إلى انحراف المخطط.

    سيناريو مثال

    يريد بوب إضافة ميزة جديدة إلى النموذج وإضافتها إلى بيانات التدريب. تبدو مقاييس التدريب في وضع عدم الاتصال رائعة ولكن المقاييس عبر الإنترنت أسوأ بكثير. بعد ساعات من تصحيح الأخطاء ، أدرك بوب أنه نسي إضافة الميزة نفسها في مسار شفرة العرض. أعطى النموذج أهمية كبيرة لهذه الميزة الجديدة ولأنها كانت غير متوفرة في وقت العرض ، ولدت توقعات سيئة تؤدي إلى مقاييس أسوأ عبر الإنترنت.

  2. يحدث انحراف الميزة عندما تكون قيم العنصر التي يدربها النموذج مختلفة عن قيم المعالم التي يراها في وقت العرض. يمكن أن يحدث هذا لأسباب متعددة ، بما في ذلك:

    • إذا تم تعديل مصدر بيانات خارجي يوفر بعض قيم الميزة بين التدريب ووقت العرض.

    • منطق غير متناسق لتوليد الميزات بين التدريب والعرض. على سبيل المثال ، إذا قمت بتطبيق بعض التحول فقط في أحد مساري الكود.

    سيناريو مثال

    تمتلك أليس خطًا مستمرًا للتعلم الآلي حيث يتم تسجيل بيانات العرض اليوم واستخدامها لإنشاء بيانات التدريب في اليوم التالي. من أجل توفير المساحة ، قررت فقط تسجيل معرف الفيديو في وقت العرض وجلب خصائص الفيديو من مخزن البيانات أثناء إنشاء بيانات التدريب.

    من خلال القيام بذلك ، تقدم عن غير قصد انحرافًا خطيرًا بشكل خاص على مقاطع الفيديو الفيروسية التي تم تحميلها حديثًا والتي يمكن أن يتغير وقت عرضها بشكل كبير بين وقت العرض ووقت التدريب (كما هو موضح أدناه).

     
     Serving Example           Training Example
     -------------------------  -------------------------
     features {                 features {
       feature {                  feature {
         key "vid"                  key "vid"
         value { int64_list {       value { int64_list {
           value 92392               value 92392
         } }                         } }
       }                          }
       feature {                  feature {
         key "views"               key "views"
         value { int_list {       value { bytes_list {
           value " 10 "                value " 10000 "  # skew
         } }                         } }
       }                          }
     }                          }
     

    هذا مثال على انحراف الميزة لأن بيانات التدريب ترى عددًا كبيرًا من المشاهدات.

  3. يحدث انحراف التوزيع عندما يختلف توزيع قيم الميزة لبيانات التدريب بشكل كبير عن بيانات العرض. أحد الأسباب الرئيسية لانحراف التوزيع هو إما استخدام مجموعة مختلفة تمامًا لتدريب بيانات التدريب للتغلب على نقص البيانات الأولية في الجسم المطلوب. سبب آخر هو آلية أخذ العينات الخاطئة التي تختار فقط عينة فرعية من بيانات العرض للتدريب عليها.

    سيناريو مثال

    على سبيل المثال ، من أجل التعويض عن شريحة بيانات ممثلة تمثيلاً ناقصًا ، إذا تم استخدام أخذ عينات متحيزة دون زيادة وزن الأمثلة المختزلة بشكل مناسب ، فإن توزيع قيم الميزات بين بيانات التدريب والعرض ينحرف بشكل واضح.

  4. يصعب اكتشاف Scew / Serving Skew ويحدث عندما يتم عرض مجموعة فرعية فقط من الأمثلة المسجلة. نظرًا لأن التصنيفات متاحة فقط للأمثلة المعروضة وليس الأمثلة المسجلة ، يتم استخدام هذه الأمثلة فقط للتدريب. ويؤدي هذا ضمنيًا إلى إساءة تفسير النموذج بشأن الأمثلة المسجلة نظرًا لعدم تمثيلها تدريجيًا في بيانات التدريب.

    سيناريو مثال

    ضع في اعتبارك نظام إعلانات يخدم أعلى 10 إعلانات. من بين هذه الإعلانات العشرة ، يمكن للمستخدم النقر على إعلان واحد فقط. وتستخدم جميع 10 من هذه الأمثلة عمل للتدريب الأيام المقبلة - 1 إيجابية وسلبية 9. ومع ذلك ، في وقت العرض ، تم استخدام النموذج المدرّب لتسجيل 100s من الإعلانات. تتم إزالة الإعلانات الـ 90 الأخرى التي لم يتم عرضها مطلقًا من بيانات التدريب. وينتج عن ذلك حلقة تغذية مرتدة ضمنية تخطئ في فهم الأشياء الأقل مرتبة لأنها لا تظهر في بيانات التدريب.

لماذا يجب أن تهتم؟

يصعب اكتشاف الانحراف وهو منتشر في العديد من خطوط أنابيب ML. كانت هناك عدة حوادث تسببت في تدهور الأداء وخسارة الإيرادات.

ما هو المدعوم حاليا؟

في الوقت الحالي ، يدعم التحقق من صحة بيانات TensorFlow انحراف المخطط وكشف انحراف الميزة وكشف التوزيع.

كشف الانجراف

يتم دعم كشف الانجراف للميزات الفئوية وبين فترات متتالية من البيانات (أي بين N و span N + 1) ، مثل بين أيام مختلفة من بيانات التدريب. نعبر عن الانجراف من حيث مسافة اللانهاية ، ويمكنك تعيين مسافة العتبة بحيث تتلقى تحذيرات عندما يكون الانجراف أعلى مما هو مقبول. عادةً ما يكون تحديد المسافة الصحيحة عملية تكرارية تتطلب معرفة المجال والتجريب.

باستخدام المرئيات للتحقق من البيانات الخاصة بك

يوفر TensorFlow Data Validation أدوات لتصور توزيع قيم الميزة. من خلال فحص هذه التوزيعات في دفتر ملاحظات Jupyter باستخدام Facets ، يمكنك اكتشاف المشاكل الشائعة في البيانات.

إحصائيات الميزة

تحديد التوزيعات المشبوهة

يمكنك تحديد الأخطاء الشائعة في بياناتك باستخدام عرض نظرة عامة على الواجهات للبحث عن التوزيعات المشبوهة لقيم الميزة.

بيانات غير متوازنة

الميزة غير المتوازنة هي الميزة التي تسود فيها قيمة واحدة. يمكن أن تحدث الميزات غير المتوازنة بشكل طبيعي ، ولكن إذا كانت الميزة لها نفس القيمة دائمًا ، فقد يكون لديك خطأ في البيانات. لاكتشاف الميزات غير المتوازنة في نظرة عامة على الجوانب ، اختر "عدم الاتساق" من القائمة المنسدلة "فرز حسب".

سيتم إدراج أكثر الميزات غير المتوازنة في أعلى كل قائمة بنوع الميزة. على سبيل المثال ، تُظهر لقطة الشاشة التالية ميزة واحدة هي جميع الأصفار ، وثانية غير متوازنة للغاية ، في أعلى قائمة "الميزات الرقمية":

تصور البيانات غير المتوازنة

البيانات الموزعة بشكل موحد

ميزة موزعة بشكل موحد هي ميزة تظهر فيها جميع القيم الممكنة قريبة من نفس التردد. كما هو الحال مع البيانات غير المتوازنة ، يمكن أن يحدث هذا التوزيع بشكل طبيعي ، ولكن يمكن أيضًا إنتاجه بواسطة أخطاء البيانات.

لاكتشاف الميزات الموزعة بشكل موحد في نظرة عامة على الواجهات ، اختر "عدم التوحيد" من القائمة المنسدلة "فرز حسب" وحدد مربع الاختيار "عكس الترتيب":

الرسم البياني للبيانات الموحدة

يتم تمثيل بيانات السلسلة باستخدام المخططات الشريطية إذا كان هناك 20 قيمة فريدة أو أقل ، وكمخطط توزيع تراكمي إذا كان هناك أكثر من 20 قيمة فريدة. لذلك ، بالنسبة لبيانات السلسلة ، يمكن أن تظهر التوزيعات الموحدة إما كرسوم بيانية مسطحة مثل المخطط أعلاه أو خطوط مستقيمة مثل المخطط أدناه:

الرسم البياني الخطي: التوزيع التراكمي للبيانات الموحدة

الأخطاء التي يمكن أن تنتج بيانات موزعة بشكل موحد

فيما يلي بعض الأخطاء الشائعة التي يمكن أن تنتج بيانات موزعة بشكل موحد:

  • استخدام السلاسل لتمثيل أنواع البيانات غير السلاسل مثل التواريخ. على سبيل المثال ، سيكون لديك العديد من القيم الفريدة لميزة datetime مع تمثيلات مثل "2017-03-01-11-45-03". سيتم توزيع القيم الفريدة بشكل موحد.

  • بما في ذلك مؤشرات مثل "رقم الصف" كميزات. هنا مرة أخرى لديك العديد من القيم الفريدة.

بيانات مفقودة

للتحقق مما إذا كانت الميزة تفتقد القيم بالكامل:

  1. اختر "المبلغ المفقود / صفر" من القائمة المنسدلة "فرز حسب".
  2. حدد مربع الاختيار "عكس الترتيب".
  3. انظر إلى العمود "مفقود" لمعرفة النسبة المئوية للمثيلات التي تحتوي على قيم مفقودة لعنصر.

يمكن أن يتسبب خطأ البيانات أيضًا في قيم الميزة غير مكتملة. على سبيل المثال ، قد تتوقع أن تحتوي قائمة قيم العنصر دائمًا على ثلاثة عناصر وتكتشف أنه في بعض الأحيان يحتوي على عنصر واحد فقط. للتحقق من عدم اكتمال القيم أو الحالات الأخرى حيث لا تحتوي قوائم قيم الميزة على العدد المتوقع للعناصر:

  1. اختر "طول قائمة القيمة" من القائمة المنسدلة "المخطط المراد إظهاره" على اليمين.

  2. انظر إلى الرسم البياني على يمين كل صف ميزة. يعرض المخطط نطاق أطوال قائمة القيم للعنصر. على سبيل المثال ، يُظهر الصف المميز في لقطة الشاشة أدناه ميزة تحتوي على بعض قوائم القيم ذات الطول الصفري:

عرض نظرة عامة على الجوانب مع ميزة مع قوائم قيم الميزة ذات طول صفري

اختلافات كبيرة في المقياس بين الميزات

إذا اختلفت ميزاتك على نطاق واسع ، فقد يواجه النموذج صعوبات في التعلم. على سبيل المثال ، إذا اختلفت بعض الميزات من 0 إلى 1 وأخرى تختلف من 0 إلى 1،000،000،000 ، فلديك فرق كبير في الحجم. قارن بين عمودي "الحد الأقصى" و "الحد الأدنى" عبر الميزات للعثور على مقاييس متفاوتة على نطاق واسع.

ضع في اعتبارك تطبيع قيم الميزة لتقليل هذه الاختلافات الواسعة.

التصنيفات ذات التصنيفات غير الصالحة

يضع مقدرو TensorFlow قيودًا على نوع البيانات التي يقبلونها كعلامات. على سبيل المثال ، تعمل المصنفات الثنائية عادةً فقط مع تصنيفات {0، 1}.

راجع قيم الملصق في نظرة عامة على الواجهات وتأكد من أنها تتوافق مع متطلبات المقدرين .