بعد غياب لفتره كنت شغال على مشروع
معظم الناس شاطرة تعمل موديل لبيانات معينه و خلاص.
مثلا لو هنتكلم dataset Titanic، فالموديل هيكون له:
Infeatures - outfeatures معينه.
فكذا الكود بتاع الموديل و تنضيف البيانات و reports كله Hardcoded.
ودا مش صح، مثلا انت لو شركة و عندك بيانات كتيرة يوميا، مش هتخلي المهندسين يقعدوا يبرمجوا كل دا لكل data.
هنا تيجي فكرة Pipeline.
فكرتها ان أكوادك تكون شغالة على كل أشكال البيانات الي هتكون بيها الموديل بتاعك.
أنا استخدمت:
- Airflow
- Docker
- YAML
عشان اقدر اعمل trigger يوميا.
بنبدأ ب Fetch Data:
لو عندك API، أو تعمل upload للبيانات بتاعتك.
هي اول خطوة فعليا، بنبدأ نشوف البيانات بتاعتنا extension بتاعها شغال على pipeline ولا لا.
مثلا لو أنا شغال على CSV فقط، بتتأكد ان البيانات مش JSON او TXT.
الخطوه دي هي الأهم بالنسبه لي.
ازاي تتاكد ان البيانات بتاعتك موجوده و ان لازم columns معينين يكونوا موجودين عشان نتمرن عليها.
Note:
الخطوه دي غريبة شوية، عشان انت متعرفش اسم columns، فمتقدرش تعمل:
df["column name"]🥀 مثلا لو Tabular.
طب هنعملها ازاي؟
هيكون عندنا schema.yaml لكل dataset عندنا.
بيكون شكلها مثلا لكل col:
Pclass:
type: categorical
required: true
allowed_values:
- 1
- 2
- 3
used_for_training: trueكدا أنا هعرف اتأكد من ان schema دي تنفع مع CSV بتاعي.
أي حاجه تانية مختلفه او زيادة او ممكن غلط في datatype، باستخدام Pydantic هيطلع error على طول!
الخطوه دي بتكون عن preprocessing.
لو اخدت بالك بيكون عندنا كذا نوع في CSV بالذات مثلا:
- categorical
- integer
- string
- numeric
كل واحده هيكون ليها preprocessing بطريقة مختلفه.
زي:
Male او Female
دا categorical ف هنعمل:
1-hot encoding
او زي:
Numeric
هنستخدم مثلا:
- Standard Scalar
- Robust Scalar
- حاجه زي كذا
مثلا:
Age:
type: numeric
required: false
min: 0
max: 120
used_for_training: trueو غيرهم بقى كتير.
بعد كدا بتجهز البيانات بتاعتك بتقسمهم، و تعملهم shuffle و تجهزهم في batches.
نوع الموديل الي هتختاره، أنا اختارت NN عادية.
و لكن خلي بالك من نوع Activation Function، و Loss اهم حاجه عشان البيانات بتاعتك.
مثلا أنا استخدمت:
- SiLU
- BCEWithLogits
عشان البيانات الي جاية كلها هتكون Binary Classification.
متنساش تسخدم MLflow او W&B عشان تقدر تشوف معلومات عن الموديل و هو بيتعلم.
هتقولي يا مشاري طيب…
كل موديل محتاج config معين، مثلا:
- LR
- عدد features مختلف
عشان كذا هنستخدم:
config.yaml
لكل ملف بردو.
اعمل eval ب test و كدا انت خلصت.
مممم لا لسه 🫠
انت هتعمل endpoint للـ model دا.
BentoML, FastAPI كله شغال على حسب شغلك.
هترفع على السيرفر، Airflow هيعمل trigger يوميا ببيانات جديدة ب موديلات جديدة بس.
ب كود واحد!
كدا انت هتعدل على:
ConfigSchema
و خلاص كدا!!
انت لازم تعمل حسابك بس ان ممكن الموديل بتاعك بيستقبل كذا نوع من البيانات، فبالتالي شكل preprocessing هيفرق.
زي TXT هتعمل Tokenization باستخدام BPE.
الـ pipeline rn هي فقط لـ binary classification tabular datasets.
but i would love to update this pipeline one for Transformers which handle:
- Tokenization
- Embedding
- etc.
