إنشاء نموذج تعلُّم الآلة المتعلّق بالتعليقات غير المرغوب فيها

1. قبل البدء

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

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

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

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

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

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

المتطلبات

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

افتح مستند 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. تنزيل البيانات

بعد ذلك، عليك تنزيل البيانات من خادم السحابة الإلكترونية إلى جهازك، وضبط 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)

يؤدي ذلك إلى إنشاء نموذج مصنّف للنصوص باستخدام "أداة إنشاء النماذج"، وتحديد بيانات التدريب التي تريد استخدامها (كما تم إعدادها في الخطوة 4)، ومواصفات النموذج (كما تم إعدادها في الخطوة 4)، وعدد الحقبات، وهو 50 في هذه الحالة.

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

b94b00f0b155db3d.png

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

85f1d21c0b64d654.png

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

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

5be7967ec70e4302.png

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

بعد الانتهاء من التدريب، يمكنك تصدير النموذج.

يدرّب TensorFlow نموذجًا بتنسيقه الخاص، ويجب تحويل هذا النموذج إلى تنسيق TFLITE لاستخدامه في تطبيق على الأجهزة الجوّالة، وتتولّى أداة Model Maker هذه العملية المعقّدة نيابةً عنك.

ما عليك سوى تصدير النموذج وتحديد دليل:

model.export(export_dir='/mm_spam')

في هذا الدليل، سيظهر لك ملف model.tflite. نزِّل التطبيق. ستحتاج إليه في الدرس التطبيقي حول الترميز التالي، حيث ستضيفه إلى تطبيق Android.

اعتبارات بشأن نظام التشغيل iOS

يعمل نموذج ‎ .tflite الذي تم تصديره بشكل جيد على Android، لأنّ البيانات الوصفية الخاصة بالنموذج مضمّنة فيه، ويمكن لبرنامج استوديو Android قراءة هذه البيانات الوصفية.

تُعدّ بيانات التعريف هذه مهمة جدًا لأنّها تتضمّن قاموسًا للرموز المميزة التي تمثّل الكلمات كما يتعرّف عليها النموذج. هل تذكر في وقت سابق عندما عرفت أنّ الكلمات تصبح رموزًا مميزة، ثم يتم منح هذه الرموز متجهات لمشاعرها؟ سيحتاج تطبيقك المتوافق مع الأجهزة الجوّالة إلى معرفة هذه الرموز المميزة. على سبيل المثال، إذا تم تحويل كلمة "كلب" إلى الرمز المميز 42، وكتب المستخدمون كلمة "كلب" في جملة، سيحتاج تطبيقك بعد ذلك إلى تحويل كلمة "كلب" إلى 42 لكي يفهم النموذج الجملة. بصفتك مطوّر تطبيقات Android، ستتوفّر لك "مكتبة مهام TensorFlow Lite" التي تسهّل استخدام هذه الميزة، ولكن على أجهزة iOS، عليك معالجة المفردات، لذا يجب أن تكون متاحة لك. يمكن أن يصدّر لك "صانع النماذج" ذلك من خلال تحديد المَعلمة export_format. للحصول على التصنيفات والمفردات الخاصة بنموذجك، يمكنك استخدام ما يلي:

model.export(export_dir='/mm_spam/', 
             export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])

9- تهانينا

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

في الدرس التطبيقي حول الترميز التالي، ستتعرّف على كيفية تعديل تطبيق Android لاستخدام هذا النموذج حتى تتمكّن من بدء تصنيف التعليقات غير المرغوب فيها.