MLOps / أسس التنبؤ والأدلة / الدرس 6
حزم النماذج وعقود الاستدلال
احزم دالة التنبؤ الكاملة وتحقق من توافق المدخلات قبل تفسير مخرجاتها.
في هذه الصفحة
أهداف الدرس
- تضمين المعالجة المسبقة والمخطط ودلالات الوسوم أو الدرجات وافتراضات بيئة التشغيل.
- فحص أسماء المدخلات وأنواعها ووحداتها والحالات غير المدعومة.
- فصل هوية المحتوى وموثوقية التحميل وتكافؤ السلوك.
ملف الأوزان ليس الدالة الكاملة
قد تعتمد التنبؤات على ترتيب السمات ووحداتها، وتعويض القيم المفقودة المتعلَّم من بيانات التدريب، والتحجيم، ومفردات الفئات، وخرائط تسميات الفئات، والعتبات، ووضع الاستدلال. احزم هذه الاعتمادات أو أشر إليها بعقد صريح ذي إصدار. لا يستطيع متجه معاملات بلا تفسير لمدخلاته إخبار المستهلك هل تمثل القيمة سنتيمترات أو ثواني أو فئة. حدد شكل الخرج ووحداته أو معنى الفئة وتفسير الثقة وأي عتبة لاتخاذ القرار. لا يثبت غلاف خدمة يعيد رقماً بنجاح أن الرقم متوافق مع المهمة. يجب أن تصف حزمة النموذج دالة المدخل إلى الخرج التي فحصها التقييم فعلاً.
احفظ حالة التحويل المتعلمة
يسلسل المثال الأول حزمة JSON أنشأها بنفسه داخل الذاكرة، ويطبق متوسطاتها ومقاييسها وترتيب السمات والأوزان والانحياز المحفوظة. يتحول الصف الخام نفسه إلى قيمتين مطبعتين تساوي كل منهما واحداً ودرجة تساوي واحداً. المتوسطات والمقاييس حالة ثابتة للحزمة؛ وإعادة حسابها من كل طلب أو دفعة استخدام يغير الدالة. تحقق في محمل فعلي من أن المقاييس غير صفرية والأطوال متحاذية، وحدد سلوك الحقول المفقودة أو المجهولة. هذه الحزمة الصغيرة صيغة تعليمية قابلة للفحص لحساب خطي، وليست تنفيذاً لمعيار حفظ أي إطار.
import json
package = {"features":["length", "width"], "units":["cm", "cm"],
"mean":[10.0,20.0], "scale":[2.0,4.0], "weights":[2.0,-1.0], "bias":0.0}
restored = json.loads(json.dumps(package, allow_nan=False))
row = {"length":12.0, "width":24.0}
values = [row[name] for name in restored["features"]]
z = [(value-mean)/scale for value,mean,scale in zip(values,restored["mean"],restored["scale"])]
score = sum(w*x for w,x in zip(restored["weights"],z)) + restored["bias"]
print("transformed", z)
print("score", score)
transformed [1.0, 1.0]
score 1.0
تحمل حزمة JSON الذاتية المعالجة المسبقة ودلالات ترتيب السمات مع درجة خطية ثابتة؛ وليست صيغة نموذج لإطار معين.
افحص الطلب عند حده الدلالي
يقبل المثال الثاني خريطة بأسماء مطلوبة وقيم عددية منتهية، ويرفض القيم المنطقية صراحة لأن Python يعاملها كأعداد صحيحة في بعض الفحوص. قد يختلف ترتيب الخريطة المسماة عندما يتبع الاستخراج ترتيب السمات المعلن في الحزمة. تظل الوحدات محتاجة عقداً خارجياً أو صريحاً في الطلب؛ فلا يستنتجها التحقق العددي وحده. اختر سياسة واضحة للمدخل غير المدعوم: الرفض أو التأجيل أو بديل محدد. لا تستبدل القياسات غير الصالحة بأصفار تبدو معقولة بصمت. احفظ رمز سبب أو رسالة مستقرة كي يميز المستدعي المدخل غير المدعوم من التنبؤ.
from math import isfinite
def validate(row):
if set(row) != {"length", "width"}:
raise ValueError("expected length and width")
if any(isinstance(x,bool) or not isinstance(x,(int,float)) or not isfinite(x) for x in row.values()):
raise ValueError("expected finite numeric measurements")
return True
print("valid", validate({"width":24.0,"length":12.0}))
try:
validate({"length":True,"width":24.0})
except ValueError as error:
print(str(error))
valid True
expected finite numeric measurements
قد يختلف ترتيب المدخلات المسماة لأن استخراج السمات يتبع عقد الحزمة؛ وترفض القيم المنطقية صراحة رغم وراثتها العددية في Python.
يحتاج التحميل والهوية أدلة منفصلة
قد تعرف بصمة المحتوى حزمة دون إثبات أنها جاءت من مصدر موثوق أو تحتوي الدالة الصحيحة. قد تنفذ بعض صيغ تحميل الكائنات شيفرة، ويختلف توافق البيئة حسب الإطار والصيغة. استخدم سياسة تحميل مراجعة وحد الاعتمادات الموثق بدلاً من اختبار آثار مجهولة في عملية إنتاج. لا يحمل هذا المساق إلا JSON أنشأه بنفسه. تشرح مساقات الأطر واجهات حفظها الخاصة؛ ويحفظ MLOps العقد والمصدر وأدلة التوافق والفرق بين إصدار حزمة ثابت واسم اختيار بديل متغير.
تحقق من سلوك الحزمة قبل إيصالها
قارن مدخلات خاماً معلومة تمر بالدالة المحزمة الكاملة بالمرجع الذي جرى تقييمه، بما فيه المعالجة المسبقة والدرجات النهائية وتسميات الفئات والقرارات القريبة من العتبة. اختبر سلوك المثال المفرد والدفعة والفقد والأنواع غير الصالحة وتبادل السمات وحدود الفئات المدعومة. قد تغير درجة متقاربة عددياً الفعل قرب عتبة؛ فاختر السماحيات من عقد القرار الفعلي. سجل افتراضات البيئة والاختبارات المنفذة فعلاً. تنفذ الأمثلة JSON محلياً وحساباً عددياً مفرداً فقط؛ ولا تنشئ أو تختبر خدمة أو سجل نماذج أو محمل إطار أو أثراً خارجياً أو مورداً سحابياً أو عملية نشر.
الأخطاء الشائعة وإصلاحها
أعاد الاستدلال حساب تحجيم التدريب من قيم الطلب
- لماذا يحدث؟
- لم تحفظ المعالجة المسبقة المتعلمة كحالة للنموذج.
- كيف تصلحه؟
- استخدم معلمات التحويل الملائمة من الحزمة التي جرى تقييمها.
- كيف تتجنب تكراره؟
- قارن أمثلة مدخلات خام عبر مساري التدريب والاستدلال.
قُبلت قيمة منطقية كقياس مادي
- لماذا يحدث؟
- أهمل فحص نوع عددي واسع قواعد الوراثة الخاصة باللغة.
- كيف تصلحه؟
- ارفض الأنواع غير المدعومة صراحة وفق عقد المدخل.
- كيف تتجنب تكراره؟
- اختبر القيم المنطقية وغير المنتهية والحقول الناقصة والزائدة.
عُدت بصمة حزمة صحيحة استدلالاً صحيحاً موثوقاً
- لماذا يحدث؟
- اختلطت الهوية بالمصدر والتوافق والسلوك.
- كيف تصلحه؟
- تحقق من كل خاصية بأدلتها الخاصة.
- كيف تتجنب تكراره؟
- احفظ دليل المصدر واختبارات المدخل المعلوم إلى جانب هوية المحتوى.
اختبر فهمك
1. ما الدرجة التي تنتجها الحزمة الأولى لطول عشرة وعرض عشرين؟
اعرض الحل المشروح
تساوي كلتا السمتين متوسطها المحفوظ من بيانات التدريب: الطول عشرة يساوي متوسط الطول التدريبي، والعرض عشرون يساوي متوسط العرض التدريبي. لذلك يعطي تطبيع كل سمة صفراً، فتكون القيمتان صفراً وصفراً. ينتج المجموع الموزون لهما مضافاً إليه الانحياز الصفري الدرجة صفر. يفحص ذلك حد التحويل المحفوظ؛ ولا يثبت معنى واقعياً للصفر دون عقد الخرج.
2. لماذا ينبغي ألا نتجاهل حقل مدخل مجهولاً تلقائياً؟
اعرض الحل المشروح
قد يشير إلى اختلاف مخطط أو تغير وحدة أو سوء فهم لدى المستدعي. قد يسمح عقد بحقول زائدة عمداً، لكن يجب التصريح بهذا الاختيار واختباره. يطلب عقد المثال الضيق أسماء حقول دقيقة، فيرفض الطلب غير المتوقع قبل أن تخفي درجة معقولة عدم التوافق.
أهم ما تعلمته
- احفظ المعالجة المسبقة والمعنى مع معاملات النموذج.
- تحقق من المدخل غير المدعوم قبل إعادة درجة.
- الهوية وموثوقية التحميل والتوافق والسلوك فحوص مستقلة.