المعالجة المسبقة للبيانات لتعلم الآلة: الخيارات والتوصيات

هذه الوثيقة هي الأولى في سلسلة مكونة من جزأين تستكشف موضوع هندسة البيانات وهندسة الميزات للتعلم الآلي (ML)، مع التركيز على مهام التعلم الخاضعة للإشراف. يناقش هذا الجزء الأول أفضل الممارسات لمعالجة البيانات مسبقًا في مسار تعلم الآلة على Google Cloud. تركز الوثيقة على استخدام TensorFlow ومكتبة TensorFlow Transform ( tf.Transform ) مفتوحة المصدر لإعداد البيانات وتدريب النموذج وخدمة النموذج للتنبؤ. يسلط هذا المستند الضوء على تحديات المعالجة المسبقة للبيانات لتعلم الآلة، ويصف الخيارات والسيناريوهات اللازمة لإجراء تحويل البيانات على Google Cloud بشكل فعال.

يفترض هذا المستند أنك على دراية بـ BigQuery و Dataflow و Vertex AI و TensorFlow Keras API.

يقدم المستند الثاني، المعالجة المسبقة للبيانات لتعلم الآلة باستخدام Google Cloud ، برنامجًا تعليميًا خطوة بخطوة حول كيفية تنفيذ مسار tf.Transform .

مقدمة

يساعدك ML في العثور تلقائيًا على الأنماط المعقدة والمفيدة في البيانات. يتم تكثيف هذه الأنماط في نموذج تعلم الآلة الذي يمكن استخدامه بعد ذلك في نقاط بيانات جديدة - وهي عملية تسمى عمل التنبؤات أو إجراء الاستدلال .

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

يمكن أن يكون حجم مجموعات البيانات التدريبية لنماذج تعلم الآلة في العالم الحقيقي مساويًا أو أكبر من تيرابايت واحد (TB) بسهولة. لذلك، تحتاج إلى أطر معالجة بيانات واسعة النطاق من أجل معالجة مجموعات البيانات هذه بكفاءة وتوزيعها. عند استخدام نموذج ML لإجراء التنبؤات، يتعين عليك تطبيق نفس التحويلات التي استخدمتها لبيانات التدريب على نقاط البيانات الجديدة. من خلال تطبيق نفس التحويلات، فإنك تقدم مجموعة البيانات المباشرة إلى نموذج تعلم الآلة بالطريقة التي يتوقعها النموذج.

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

يوفر هذا المستند أيضًا نظرة عامة على TensorFlow Transform ( tf.Transform )، وهي مكتبة لـ TensorFlow تتيح لك تحديد تحويل البيانات على مستوى المثيل والتمرير الكامل من خلال خطوط أنابيب المعالجة المسبقة للبيانات. يتم تنفيذ خطوط الأنابيب هذه باستخدام Apache Beam ، وتقوم بإنشاء عناصر تتيح لك تطبيق نفس التحويلات أثناء التنبؤ كما هو الحال عند تقديم النموذج.

المعالجة المسبقة للبيانات لـ ML

يقدم هذا القسم عمليات المعالجة المسبقة للبيانات ومراحل جاهزية البيانات. ويناقش أيضًا أنواع عمليات المعالجة المسبقة وتفاصيلها.

هندسة البيانات مقارنة بهندسة الميزات

تتضمن المعالجة المسبقة للبيانات لتعلم الآلة كلاً من هندسة البيانات وهندسة الميزات. هندسة البيانات هي عملية تحويل البيانات الأولية إلى بيانات معدة . تقوم هندسة الميزات بعد ذلك بضبط البيانات المعدة لإنشاء الميزات التي يتوقعها نموذج ML. هذه المصطلحات لها المعاني التالية:

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

ويوضح الرسم البياني التالي، الشكل 1، الخطوات المتضمنة في إعداد البيانات المعالجة مسبقًا:

مخطط التدفق يوضح نقل البيانات الأولية إلى البيانات المعدة التي تنتقل إلى الميزات الهندسية.
الشكل 1. تدفق البيانات من البيانات الأولية إلى البيانات المعدة إلى الميزات الهندسية للتعلم الآلي.

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

عمليات المعالجة المسبقة

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

بالنسبة للبيانات المنظمة، تتضمن عمليات المعالجة المسبقة للبيانات ما يلي:

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

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

  • بالنسبة للمستندات النصية: الاشتقاق والتجسيد ، وحساب TF-IDF ، واستخراج n-gram ، وتضمين البحث.
  • بالنسبة للصور: القطع، وتغيير الحجم، والاقتصاص، والتمويه الضبابي، والمرشحات الكناري.
  • بالنسبة لجميع أنواع البيانات (بما في ذلك النصوص والصور): نقل التعلم ، الذي يتعامل مع جميع الطبقات باستثناء الأخيرة من النموذج المدرب بالكامل كخطوة هندسية مميزة.

دقة المعالجة المسبقة

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

يمكن تصنيف عمليات المعالجة المسبقة والتحويل على النحو التالي، بناءً على تفاصيل العملية:

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

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

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

    على سبيل المثال، لتطبيع ميزة رقمية للتدريب، يمكنك حساب متوسطها (μ) وانحرافها المعياري (σ) عبر بيانات التدريب بأكملها. يُطلق على هذا الحساب اسم عملية التمرير الكامل (أو التحليل ). عند تقديم نموذج للتنبؤ، تتم تسوية قيمة نقطة البيانات الجديدة لتجنب انحراف خدمة التدريب. لذلك، يتم استخدام القيم μ وσ التي يتم حسابها أثناء التدريب لضبط قيمة الميزة، وهي العملية البسيطة التالية على مستوى المثيل :

    $$ value_{scaled} = (value_{raw} - \mu) \div \sigma $$

    تتضمن تحويلات التمرير الكامل ما يلي:

    • يقوم MinMax بتحجيم الميزات الرقمية باستخدام الحد الأدنى والحد الأقصى المحسوب من مجموعة بيانات التدريب.
    • الميزات الرقمية للتحجيم القياسي (تطبيع z-score) باستخدام μ وσ المحسوبة على مجموعة بيانات التدريب.
    • دلو الميزات العددية باستخدام الكميات.
    • احتساب القيم المفقودة باستخدام الوسيط (الميزات العددية) أو الوضع (الميزات الفئوية).
    • تحويل السلاسل (القيم الاسمية) إلى أعداد صحيحة (الفهارس) عن طريق استخراج جميع القيم المميزة (المفردات) لميزة فئوية الإدخال.
    • حساب حدوث مصطلح (قيمة الميزة) في جميع المستندات (المثيلات) لحساب TF-IDF.
    • حساب PCA لميزات الإدخال لعرض البيانات في مساحة ذات أبعاد أقل (مع ميزات تعتمد خطيًا).

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

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

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

    وبشكل أكثر دقة، عند إعداد بيانات التدريب، إذا لم تكن القيمة المجمعة موجودة في البيانات الأولية، فسيتم إنشاء القيمة أثناء مرحلة هندسة البيانات. عادةً ما يتم تخزين البيانات الأولية في قاعدة بيانات بتنسيق (entity, timestamp, value) . في الأمثلة السابقة، entity هو معرف مقطع المسار لمسارات سيارات الأجرة ومعرف جزء المحرك لعطل المحرك. يمكنك استخدام عمليات النوافذ لحساب (entity, time_index, aggregated_value_over_time_window) واستخدام ميزات التجميع كمدخل للتدريب على النموذج الخاص بك.

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

خط أنابيب ML على Google Cloud

يناقش هذا القسم المكونات الأساسية لخط أنابيب نموذجي شامل لتدريب نماذج TensorFlow ML وخدمتها على Google Cloud باستخدام الخدمات المُدارة. ويناقش أيضًا أين يمكنك تنفيذ فئات مختلفة من عمليات المعالجة المسبقة للبيانات، والتحديات الشائعة التي قد تواجهها عند تنفيذ مثل هذه التحويلات. يوضح قسم كيفية عمل tf.Transform كيف تساعد مكتبة TensorFlow Transform في مواجهة هذه التحديات.

هندسة معمارية رفيعة المستوى

يوضح الرسم البياني التالي، الشكل 2، بنية عالية المستوى لخط أنابيب ML نموذجي للتدريب وخدمة نماذج TensorFlow. تشير التسميات A وB وC في الرسم التخطيطي إلى أماكن مختلفة في المسار حيث يمكن إجراء المعالجة المسبقة للبيانات. يتم توفير تفاصيل حول هذه الخطوات في القسم التالي.

مخطط معماري يوضح مراحل معالجة البيانات.
الشكل 2. بنية عالية المستوى للتدريب على تعلم الآلة وتقديم الخدمة على Google Cloud.

يتكون خط الأنابيب من الخطوات التالية:

  1. بعد استيراد البيانات الأولية، يتم تخزين البيانات الجدولية في BigQuery، ويتم تخزين البيانات الأخرى مثل الصور والصوت والفيديو في Cloud Storage. يستخدم الجزء الثاني من هذه السلسلة البيانات الجدولية المخزنة في BigQuery كمثال.
  2. يتم تنفيذ هندسة البيانات (الإعداد) وهندسة الميزات على نطاق واسع باستخدام Dataflow. ينتج عن هذا التنفيذ مجموعات تدريب وتقييم واختبار جاهزة للتعلم الآلي يتم تخزينها في Cloud Storage. من الناحية المثالية، يتم تخزين مجموعات البيانات هذه كملفات TFRecord ، وهو التنسيق الأمثل لحسابات TensorFlow.
  3. يتم إرسال حزمة تدريب نموذج TensorFlow إلى Vertex AI Training، الذي يستخدم البيانات المعالجة مسبقًا من الخطوات السابقة لتدريب النموذج. ناتج هذه الخطوة هو نموذج TensorFlow SavedModel المُدرب الذي يتم تصديره إلى Cloud Storage.
  4. يتم نشر نموذج TensorFlow المدرب في Vertex AI Prediction كخدمة تحتوي على REST API بحيث يمكن استخدامه للتنبؤات عبر الإنترنت. يمكن أيضًا استخدام نفس النموذج لوظائف التنبؤ الدفعي.
  5. بعد نشر النموذج كواجهة برمجة تطبيقات REST، يمكن لتطبيقات العميل والأنظمة الداخلية استدعاء واجهة برمجة التطبيقات عن طريق إرسال الطلبات مع بعض نقاط البيانات، وتلقي الاستجابات من النموذج مع التنبؤات.
  6. لتنسيق مسار التدفق هذا وأتمتته، يمكنك استخدام Vertex AI Pipelines كمجدول لاستدعاء خطوات إعداد البيانات والتدريب النموذجي ونشر النموذج.

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

أين تتم المعالجة المسبقة

في الشكل 2، توضح التسميات A وB وC أن عمليات المعالجة المسبقة للبيانات يمكن أن تتم في BigQuery أو Dataflow أو TensorFlow. تصف الأقسام التالية كيفية عمل كل خيار من هذه الخيارات.

الخيار أ: BigQuery

عادةً، يتم تنفيذ المنطق في BigQuery للعمليات التالية:

  • أخذ العينات: اختيار مجموعة فرعية من البيانات بشكل عشوائي.
  • التصفية: إزالة الحالات غير ذات الصلة أو غير الصالحة.
  • التقسيم: تقسيم البيانات لإنتاج مجموعات التدريب والتقييم والاختبار.

يمكن استخدام البرامج النصية لـ BigQuery SQL كاستعلام مصدر لخط أنابيب المعالجة المسبقة لـ Dataflow، وهي خطوة معالجة البيانات في الشكل 2. على سبيل المثال، إذا تم استخدام نظام في كندا، وكان مستودع البيانات يحتوي على معاملات من جميع أنحاء العالم، فستتم التصفية إلى من الأفضل الحصول على بيانات التدريب في كندا فقط من خلال BigQuery. تعتبر هندسة الميزات في BigQuery بسيطة وقابلة للتطوير، وتدعم تنفيذ تحويلات ميزات التجميعات التاريخية على مستوى المثيل.

ومع ذلك، نوصي باستخدام BigQuery لهندسة الميزات فقط إذا كنت تستخدم النموذج الخاص بك للتنبؤ الدفعي (تسجيل النقاط)، أو إذا كانت الميزات محسوبة مسبقًا في BigQuery، ولكنها مخزنة في Vertex AI Features Store لاستخدامها أثناء التنبؤ عبر الإنترنت. إذا كنت تخطط لنشر النموذج للتنبؤات عبر الإنترنت، وإذا لم تكن لديك الميزة الهندسية في مخزن الميزات عبر الإنترنت، فيجب عليك نسخ عمليات المعالجة المسبقة لـ SQL لتحويل نقاط البيانات الأولية التي تنشئها الأنظمة الأخرى. بمعنى آخر، تحتاج إلى تنفيذ المنطق مرتين: مرة واحدة في SQL لمعالجة بيانات التدريب مسبقًا في BigQuery، ومرة ​​ثانية في منطق التطبيق الذي يستهلك النموذج لمعالجة نقاط البيانات عبر الإنترنت مسبقًا للتنبؤ.

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

إذا كنت تستخدم النموذج الخاص بك فقط للتنبؤ بالدُفعات (على سبيل المثال، استخدام Vertex AI للتنبؤ بالدُفعات )، وإذا تم الحصول على بيانات تسجيل النقاط الخاصة بك من BigQuery، فيمكنك تنفيذ عمليات المعالجة المسبقة هذه كجزء من البرنامج النصي BigQuery SQL. في هذه الحالة، يمكنك استخدام نفس البرنامج النصي SQL للمعالجة المسبقة لإعداد بيانات التدريب والتسجيل.

التحويلات ذات الحالة ذات التمرير الكامل ليست مناسبة للتنفيذ في BigQuery. إذا كنت تستخدم BigQuery لتحويلات التمرير الكامل، فستحتاج إلى جداول مساعدة لتخزين الكميات التي تحتاجها التحويلات ذات الحالة، مثل الوسائل والتباينات لقياس الميزات الرقمية. علاوة على ذلك، يؤدي تنفيذ تحويلات التمرير الكامل باستخدام SQL على BigQuery إلى زيادة التعقيد في نصوص SQL النصية، ويخلق تبعية معقدة بين التدريب ونصوص SQL النصية للتسجيل.

الخيار ب: تدفق البيانات

كما هو موضح في الشكل 2، يمكنك تنفيذ عمليات المعالجة المسبقة المكلفة حسابيًا في Apache Beam، وتشغيلها على نطاق واسع باستخدام Dataflow. Dataflow عبارة عن خدمة ضبط تلقائي مُدارة بالكامل لمعالجة البيانات المجمعة والدفقية. عند استخدام Dataflow، يمكنك أيضًا استخدام مكتبات خارجية متخصصة لمعالجة البيانات، على عكس BigQuery.

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

يوضح الرسم البياني التالي، الشكل 3، دور Dataflow في معالجة بيانات الدفق للتنبؤات في الوقت الفعلي تقريبًا.

بنية لاستخدام بيانات الدفق للتنبؤ.
الشكل 3. بنية عالية المستوى تستخدم بيانات الدفق للتنبؤ في تدفق البيانات.

كما هو موضح في الشكل 3، أثناء المعالجة، يتم استيعاب الأحداث التي تسمى نقاط البيانات في Pub/Sub . يستهلك Dataflow نقاط البيانات هذه، ويحسب الميزات بناءً على التجميعات بمرور الوقت، ثم يستدعي واجهة برمجة تطبيقات نموذج ML المنشورة للتنبؤات. يتم بعد ذلك إرسال التنبؤات إلى قائمة انتظار Pub/Sub الصادرة. من Pub/Sub، يمكن استهلاك التنبؤات بواسطة الأنظمة النهائية مثل المراقبة أو التحكم، أو يمكن إعادتها مرة أخرى (على سبيل المثال، كإشعارات) إلى العميل الطالب الأصلي. يمكن أيضًا تخزين التنبؤات في مخزن بيانات منخفض زمن الوصول مثل Cloud Bigtable للجلب في الوقت الفعلي. يمكن أيضًا استخدام Cloud Bigtable لتجميع هذه التجمعات في الوقت الفعلي وتخزينها حتى يمكن البحث عنها عند الحاجة للتنبؤ.

يمكن استخدام نفس تطبيق Apache Beam لمعالجة بيانات التدريب المجمعة التي تأتي من مخزن بيانات غير متصل بالإنترنت مثل BigQuery ومعالجة البيانات في الوقت الفعلي لخدمة التنبؤات عبر الإنترنت.

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

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

الخيار ج: TensorFlow

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

  • تنفيذ كل منطق التحويل على مستوى المثيل في وظيفة input_fn وفي وظيفة serving_fn . تقوم الدالة input_fn بإعداد مجموعة بيانات باستخدام tf.data.Dataset API لتدريب النموذج. تقوم وظيفة serving_fn باستقبال البيانات وإعدادها للتنبؤات.
  • وضع كود التحويل مباشرة في نموذج TensorFlow الخاص بك باستخدام طبقات المعالجة المسبقة لـ Keras أو إنشاء طبقات مخصصة .

يحدد رمز منطق التحويل في وظيفة serving_fn واجهة العرض الخاصة بـ SavedModel الخاص بك للتنبؤ عبر الإنترنت. إذا قمت بتنفيذ نفس التحويلات التي تم استخدامها لإعداد بيانات التدريب في كود منطق التحويل الخاص بوظيفة serving_fn ، فهذا يضمن تطبيق نفس التحويلات على نقاط بيانات التنبؤ الجديدة عند تقديمها.

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

تحديات المعالجة المسبقة

فيما يلي التحديات الأساسية لتنفيذ المعالجة المسبقة للبيانات:

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

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

  • تحويلات التمرير الكامل . لا يمكنك تنفيذ تحويلات كاملة التمرير مثل تحويلات القياس والتطبيع في نموذج TensorFlow الخاص بك. في تحويلات التمرير الكامل، يجب حساب بعض الإحصائيات (على سبيل المثال، القيم max min لقياس الميزات الرقمية) على بيانات التدريب مسبقًا، كما هو موضح في الخيار ب: تدفق البيانات . يجب بعد ذلك تخزين القيم في مكان ما لاستخدامها أثناء تقديم النموذج للتنبؤ لتحويل نقاط البيانات الأولية الجديدة كتحويلات على مستوى المثيل، مما يتجنب انحراف خدمة التدريب. يمكنك استخدام مكتبة TensorFlow Transform ( tf.Transform ) لتضمين الإحصائيات مباشرة في نموذج TensorFlow الخاص بك. سيتم شرح هذا الأسلوب لاحقًا في كيفية عمل tf.Transform .

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

    من الناحية المثالية، يتم تحويل بيانات التدريب قبل التدريب، باستخدام التقنية الموضحة ضمن الخيار ب: تدفق البيانات ، حيث يتم تطبيق عمليات التحويل البالغ عددها 10000 مرة واحدة فقط في كل مثيل تدريب. ثم يتم تقديم بيانات التدريب المحولة إلى النموذج. لم يتم تطبيق أي تحويلات أخرى، والمسرعات مشغولة طوال الوقت. بالإضافة إلى ذلك، يساعدك استخدام Dataflow على المعالجة المسبقة لكميات كبيرة من البيانات على نطاق واسع، باستخدام خدمة مُدارة بالكامل.

    يمكن أن يؤدي إعداد بيانات التدريب مقدمًا إلى تحسين كفاءة التدريب. ومع ذلك، فإن تنفيذ منطق التحويل خارج النموذج (الطرق الموضحة في الخيار أ: BigQuery أو الخيار ب: تدفق البيانات ) لا يحل مشكلة انحراف تقديم التدريب. ما لم تقم بتخزين الميزة الهندسية في مخزن الميزات لاستخدامها في كل من التدريب والتنبؤ، يجب تنفيذ منطق التحويل في مكان ما ليتم تطبيقه على نقاط البيانات الجديدة القادمة للتنبؤ، لأن واجهة النموذج تتوقع البيانات المحولة. يمكن أن تساعدك مكتبة TensorFlow Transform ( tf.Transform ) في معالجة هذه المشكلة، كما هو موضح في القسم التالي.

كيف يعمل tf.Transform

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

يوضح الرسم البياني التالي، الشكل 4، كيف تقوم مكتبة tf.Transform بالمعالجة المسبقة وتحويل البيانات للتدريب والتنبؤ. يتم وصف العملية في الأقسام التالية.

رسم تخطيطي يوضح التدفق من البيانات الأولية عبر tf.التحويل إلى التنبؤات.
الشكل 4. سلوك tf.Transform للمعالجة المسبقة وتحويل البيانات.

تحويل بيانات التدريب والتقييم

يمكنك معالجة بيانات التدريب الأولية مسبقًا باستخدام التحويل المطبق في tf.Transform Apache Beam APIs، وتشغيلها على نطاق واسع على Dataflow. تتم المعالجة المسبقة في المراحل التالية:

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

يعالج نهج من مرحلتين مثل هذا تحدي المعالجة المسبقة المتمثل في إجراء تحويلات كاملة التمرير.

عندما تتم معالجة بيانات التقييم مسبقًا، يتم تطبيق العمليات على مستوى المثيل فقط، باستخدام المنطق الموجود في الرسم البياني transform_fn والإحصائيات المحسوبة من مرحلة التحليل في بيانات التدريب. بمعنى آخر، لا يمكنك تحليل بيانات التقييم بطريقة شاملة لحساب الإحصائيات الجديدة، مثل μ وσ، لتطبيع الميزات الرقمية في بيانات التقييم. بدلاً من ذلك، يمكنك استخدام الإحصائيات المحسوبة من بيانات التدريب لتحويل بيانات التقييم بطريقة على مستوى المثيل.

يتم إعداد بيانات التدريب والتقييم المحولة على نطاق واسع باستخدام Dataflow، قبل استخدامها لتدريب النموذج. تعالج عملية تقديم البيانات الدُفعات هذه التحدي المسبق للمعالجة المتمثلة في إعداد البيانات مقدما لتحسين كفاءة التدريب. كما هو مبين في الشكل 4 ، تتوقع الواجهة الداخلية النموذجية الميزات المحولة.

إرفاق التحولات بالنموذج المصدر

كما هو مذكور ، يتم تخزين الرسم البياني transform_fn الذي ينتجه خط أنابيب tf.Transform كرسوم بيانية مصدرة لـ TensorFlow. يتكون الرسم البياني المصدر من منطق التحول كعمليات على مستوى المثيل ، وجميع الإحصائيات المحسوبة في التحولات الكاملة تمريرات كثوابت الرسم البياني. عندما يتم تصدير النموذج المدرب للخدمة ، يتم إرفاق الرسم البياني transform_fn بـ sadeDModel كجزء من وظيفة serving_fn الخاصة به.

على الرغم من أنها تخدم النموذج للتنبؤ ، فإن واجهة خدمة النموذج تتوقع نقاط بيانات في التنسيق الخام (أي قبل أي تحولات). ومع ذلك ، تتوقع الواجهة الداخلية النموذجية البيانات في التنسيق المحول.

يطبق الرسم البياني transform_fn ، الذي أصبح الآن جزءًا من النموذج ، جميع منطق المعالجة المسبقة على نقطة البيانات الواردة. يستخدم الثوابت المخزنة (مثل μ و σ لتطبيع الميزات الرقمية) في التشغيل على مستوى المثيل أثناء التنبؤ. لذلك ، يحول الرسم البياني transform_fn نقطة بيانات RAW إلى التنسيق المحول. التنسيق المحول هو ما يتوقعه الواجهة الداخلية النموذجية من أجل إنتاج التنبؤ ، كما هو مبين في الشكل 4.

تحل هذه الآلية التحدي المسبق للمعالجة المتمثلة في انحراف خدمة التدريب ، لأن نفس المنطق (التنفيذ) الذي يتم استخدامه لتحويل بيانات التدريب والتقييم يتم تطبيقه لتحويل نقاط البيانات الجديدة أثناء خدمة التنبؤ.

ملخص خيارات المعالجة المسبقة

يلخص الجدول التالي خيارات المعالجة المسبقة للبيانات التي ناقشتها هذا المستند. في الجدول ، "N/A" يرمز إلى "غير قابل للتطبيق".

خيار المعالجة المسبقة للبيانات مستوى مثيل
(التحولات عديمة الجنسية)

تمرير كامل أثناء التدريب ومستوى المثيل أثناء التقديم (التحولات الالتفافية)

التجميعات في الوقت الفعلي (نافذة) أثناء التدريب والخدمة (تحولات البث)

BigQuery (SQL)

تسجيل الدفعة: حسنًا - يتم تطبيق نفس تطبيق التحول على البيانات أثناء التدريب وتسجيل الدفعة.

التنبؤ عبر الإنترنت: غير موصى به -يمكنك معالجة بيانات التدريب ، ولكنه ينتج عنه انحراف يخدم التدريب لأنك تقوم بمعالجة البيانات باستخدام أدوات مختلفة.

تسجيل الدفعة: غير موصى به .

التنبؤ عبر الإنترنت: غير موصى به .

على الرغم من أنه يمكنك استخدام الإحصائيات المحسوبة باستخدام BigQuery على مستوى التحولات/التحولات عبر الإنترنت ، إلا أنه ليس من السهل لأنه يجب عليك الحفاظ على متجر Stats ليتم ملؤه أثناء التدريب واستخدامه أثناء التنبؤ.

تسجيل الدفعة: N/A- يتم حساب مجموعات مثل هذه بناءً على الأحداث في الوقت الفعلي.

التنبؤ عبر الإنترنت: غير موصى به -يمكنك معالجة بيانات التدريب ، ولكنه ينتج عنه انحراف يخدم التدريب لأنك تقوم بمعالجة البيانات باستخدام أدوات مختلفة.

Dataflow (Apache Beam)

تسجيل الدفعة: حسنًا - يتم تطبيق نفس تطبيق التحول على البيانات أثناء التدريب وتسجيل الدفعة.

التنبؤ عبر الإنترنت: موافق - إذا كانت البيانات في وقت التقديم تأتي من Pub/Sub لتستهلكها DataFlow. خلاف ذلك ، يؤدي إلى انحراف يخدم التدريب.

تسجيل الدفعة: غير موصى به .

التنبؤات عبر الإنترنت: غير موصى بها .

على الرغم من أنه يمكنك استخدام الإحصائيات المحسوبة باستخدام تدفقات البيانات على سبيل المثال التحولات/التحولات عبر الإنترنت ، إلا أنه ليس من السهل لأنه يجب عليك الحفاظ على متجر Stats ليتم ملؤه أثناء التدريب واستخدامه أثناء التنبؤ.

تسجيل الدفعة: N/A- يتم حساب مجموعات مثل هذه بناءً على الأحداث في الوقت الفعلي.

التنبؤ عبر الإنترنت: حسنًا - يتم تطبيق نفس تحويل شعاع Apache على البيانات أثناء التدريب (الدفعة) والخدمة (دفق).

Dataflow (Apache Beam + TFT)

تسجيل الدفعة: حسنًا - يتم تطبيق نفس تطبيق التحول على البيانات أثناء التدريب وتسجيل الدفعة.

التنبؤ عبر الإنترنت: موصى به -يتجنب انحراف الخدمات التدريبية ويعد بيانات التدريب في المقدمة.

تسجيل الدفعة: موصى به .

التنبؤ عبر الإنترنت: موصى به .

ينصح كلا الاستخدامين لأن منطق التحول والإحصاءات المحسوبة أثناء التدريب يتم تخزينه كرسوم بيانية TensorFlow متصلة بالنموذج الذي تم تصديره للخدمة.

تسجيل الدفعة: N/A- يتم حساب مجموعات مثل هذه بناءً على الأحداث في الوقت الفعلي.

التنبؤ عبر الإنترنت: حسنًا - يتم تطبيق نفس تحويل شعاع Apache على البيانات أثناء التدريب (الدفعة) والخدمة (دفق).

Tensorflow *
( input_fn & serving_fn )

تسجيل الدفعة: غير موصى به .

التنبؤ عبر الإنترنت: غير موصى به .

لكفاءة التدريب في كلتا الحالتين ، من الأفضل إعداد بيانات التدريب في المقدمة.

تسجيل الدفعة: غير ممكن .

التنبؤ عبر الإنترنت: غير ممكن .

تسجيل الدفعة: N/A- يتم حساب مجموعات مثل هذه بناءً على الأحداث في الوقت الفعلي.

التنبؤ عبر الإنترنت: غير ممكن .

* مع TensorFlow ، يجب إجراء التحولات مثل العبور والتضمين والترميز المتفرّب بشكل تعريفي كأعمدة feature_columns .

ماذا بعد