تدريب نموذج لرصد التعليقات غير المرغوب فيها باستخدام أداة TensorFlow Lite Model Maker

1. قبل البدء

في هذا الدرس التطبيقي حول الترميز، ستراجع الرمز الذي تم إنشاؤه باستخدام TensorFlow وTensorFlow Lite Model Maker لإنشاء نموذج باستخدام مجموعة بيانات تستند إلى التعليقات غير المرغوب فيها. تتوفّر البيانات الأصلية على Kaggle. تم جمعها في ملف CSV واحد وتنظيفها من خلال إزالة النصوص المعطّلة وعلامات الترميز والكلمات المكرّرة وغير ذلك. سيؤدي ذلك إلى تسهيل التركيز على النموذج بدلاً من النص.

يتم توفير الرمز الذي تراجعه هنا، ولكن يُنصح بشدة بمتابعة الرمز في Colaboratory.

المتطلبات الأساسية

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

أهداف الدورة التعليمية

  • كيفية تثبيت أداة TensorFlow Lite Model Maker باستخدام Colab
  • كيفية تنزيل البيانات من خادم Colab إلى جهازك
  • كيفية استخدام أداة تحميل البيانات
  • كيفية إنشاء النموذج

المتطلبات

  • إذن الوصول إلى Colab

2. تثبيت أداة TensorFlow Lite Model Maker

  • افتح مستند Colab. ستعمل الخلية الأولى في دفتر الملاحظات على تثبيت أداة TensorFlow Lite Model Maker لك:
!pip install -q tflite-model-maker

بعد اكتمالها، انتقِل إلى الخلية التالية.

3- استيراد الرمز

تحتوي الخلية التالية على عدد من عمليات الاستيراد التي سيحتاج الرمز في دفتر الملاحظات إلى استخدامها:

import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

سيتحقّق هذا الأمر أيضًا مما إذا كنت قد شغّلت TensorFlow 2.x، وهو شرط لاستخدام Model Maker.

4. تنزيل البيانات

بعد ذلك، ستنزّل البيانات من خادم Colab إلى جهازك، وتضبط المتغيّر data_file للإشارة إلى الملف المحلي:

data_file = tf.keras.utils.get_file(fname='comment-spam.csv', 
  origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/lmblog_comments.csv', 
  extract=False)

يمكن لـ Model Maker تدريب النماذج من ملفات CSV بسيطة مثل هذا الملف. ما عليك سوى تحديد الأعمدة التي تحتوي على النص والأعمدة التي تحتوي على التصنيفات، وسنتعرّف على كيفية إجراء ذلك لاحقًا في هذا الدرس العملي.

5- التضمينات التي تم التدرّب عليها مسبقًا

بشكل عام، عند استخدام Model Maker، لن تحتاج إلى إنشاء نماذج من البداية. يمكنك استخدام نماذج حالية وتخصيصها لتلبية احتياجاتك.

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

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

توفّر أداة Model Maker العديد من التضمينات التي تمّ تعلّمها مسبقًا والتي يمكنك استخدامها، ولكن الخيار الأبسط والأسرع للبدء هو average_word_vec.

إليك الرمز الخاص بها:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

المَعلمة num_words

يمكنك أيضًا تحديد عدد الكلمات التي تريد أن يستخدمها النموذج.

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

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

المَعلمة wordvec_dim

المَعلمة wordved_dim هي عدد السمات التي تريد استخدامها للمتّجه الخاص بكل كلمة. القاعدة العامة التي تم تحديدها من خلال البحث هي أنّها الجذر الرابع لعدد الكلمات. على سبيل المثال، إذا كنت تستخدم 2,000 كلمة، يكون الرقم 7 نقطة بداية جيدة. إذا غيّرت عدد الكلمات التي تستخدمها، يمكنك أيضًا تغيير هذا الإعداد.

المَعلمة seq_len

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

عند تحويل الكلمات إلى أرقام أو رموز مميزة، تصبح الجملة تسلسلاً من هذه الرموز المميزة. في هذه الحالة، يتم تدريب النموذج على تصنيف الجمل التي تحتوي على 20 رمزًا مميزًا والتعرّف عليها. إذا كانت الجملة أطول من ذلك، يتم اقتطاعها. إذا كان أقصر، يتم ملؤه. يمكنك الاطّلاع على رمز مميّز مخصّص <PAD> في مجموعة النصوص المستخدَمة لهذا الغرض.

6. استخدام أداة تحميل البيانات

سبق لك تنزيل ملف CSV. حان الوقت الآن لاستخدام أداة تحميل البيانات لتحويل هذا إلى بيانات تدريب يمكن للنموذج التعرّف عليها:

data = DataLoader.from_csv(
    filename=data_file,
    text_column='commenttext',
    label_column='spam',
    model_spec=spec,
    delimiter=',',
    shuffle=True,
    is_training=True)

train_data, test_data = data.split(0.9)

إذا فتحت ملف CSV في محرر، ستلاحظ أنّ كل سطر يحتوي على قيمتَين فقط، ويتم وصف هاتين القيمتَين بنص في السطر الأول من الملف. وعادةً ما يتم اعتبار كل إدخال عمودًا.

سيظهر لك أنّ واصف العمود الأول هو commenttext، وأنّ الإدخال الأول في كل سطر هو نص التعليق. وبالمثل، فإنّ واصف العمود الثاني هو spam، وستلاحظ أنّ الإدخال الثاني في كل سطر هو True أو False, للإشارة إلى ما إذا كان هذا النص يُعدّ تعليقًا غير مرغوب فيه أم لا. تضبط الخصائص الأخرى المتغيّر model_spec الذي أنشأته سابقًا، بالإضافة إلى حرف فاصل، وهو في هذه الحالة فاصلة لأنّ الملف مفصول بفاصلة. ستستخدم هذه البيانات لتدريب النموذج، لذا يتم ضبط is_Training على True.

عليك الاحتفاظ بجزء من البيانات لاختبار النموذج. قسِّم البيانات إلى مجموعتين، خصِّص% 90 منها للتدريب و% 10 للاختبار والتقييم. ولأنّنا نُجري هذا الاختبار، نريد التأكّد من اختيار بيانات الاختبار بشكل عشوائي، وألا تكون هذه البيانات هي أدنى% 10 من مجموعة البيانات، لذا عليك استخدام shuffle=True عند تحميل البيانات لترتيبها بشكل عشوائي.

7. إنشاء النموذج

الخلية التالية مخصّصة لإنشاء النموذج، وهي تتضمّن سطرًا واحدًا من الرموز البرمجية:

# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50, 
                               validation_data=test_data)

ينشئ هذا الرمز نموذجًا لتصنيف النصوص باستخدام Model Maker، وتحدّد بيانات التدريب التي تريد استخدامها كما هو موضّح في الخطوة الرابعة)، ومواصفات النموذج كما هو موضّح في الخطوة الرابعة، وعدد الحقبات، وهو 50 في هذه الحالة.

المبدأ الأساسي لتعلُّم الآلة هو أنّه شكل من أشكال مطابقة الأنماط. في البداية، يتم تحميل الأوزان المُدرَّبة مسبقًا للكلمات ومحاولة تجميعها معًا مع توقّع الكلمات التي تشير إلى المحتوى غير المرغوب فيه عند تجميعها معًا والكلمات التي لا تشير إليه. في المرة الأولى، من المرجّح أن يتم تقسيمها بالتساوي لأنّ النموذج في مرحلة البداية فقط.

c42755151d511ce.png

سيقيس بعد ذلك نتائج هذه الفترة من التدريب ويشغّل رمز التحسين لتعديل توقّعه، ثم يحاول مرة أخرى. هذه حقبة. لذلك، من خلال تحديد epochs=50، سيتم تكرار هذه "الحلقة" 50 مرة.

7d0ee06a5246b58d.png

وبحلول الحقبة الخمسين، يسجّل النموذج مستوى دقة أعلى بكثير. في هذه الحالة، سيظهر 99%!

عادةً ما تكون أرقام دقة التحقّق أقل قليلاً من دقة التدريب لأنّها تشير إلى كيفية تصنيف النموذج للبيانات التي لم يسبق له رؤيتها. يستخدم هذا النموذج بيانات الاختبار التي تمّ تخصيصها سابقًا والتي تبلغ نسبتها% 10.

f063ff6e1d2add67.png

8. تصدير النموذج

  1. نفِّذ هذه الخلية لتحديد دليل وتصدير النموذج:
model.export(export_dire='/mm_spam_savedmodel', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB, ExportFormat.SAVED_MODEL])
  1. اضغط مجلد /mm_spam_savedmodel بالكامل ونزِّل ملف mm_spam_savedmodel.zip الذي تم إنشاؤه، والذي ستحتاج إليه في تجربة البرمجة التالية.
# Rename the SavedModel subfolder to a version number
!mv /mm_spam_savedmodel/saved_model /mm_spam_savedmodel/123
!zip -r mm_spam_savedmodel.zip /mm_spam_savedmodel/

9- تهانينا

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

مزيد من المعلومات