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

1. قبل البدء

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

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

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

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

ما ستتعرَّف عليه

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

المتطلبات

2. تثبيت أداة إنشاء النماذج TensorFlow Lite

افتح ميزة التعاون. ستثبِّت الخلية الأولى في ورقة الملاحظات مصمم النماذج TensorFLow Lite نيابة عنك:

!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، وهو أحد متطلبات استخدام "مصمم النماذج".

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

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

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

5- المحتوى التعليمي مسبقًا

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

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

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

يوفر مصمم النماذج العديد من التضمينات التي تم تعلمها مسبقًا والتي يمكنك استخدامها، ولكن أبسطها وأسرعها هي 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 هي عدد الأبعاد التي تريد استخدامها للخط المتجه لكل كلمة. القاعدة الأساسية التي تم تحديدها من خلال البحث هي أنه الجذر الرابع لعدد الكلمات. فعلى سبيل المثال، إذا كنت تستخدم 2000 كلمة، فإن نقطة البداية الجيدة هي 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، سوف نمر عبر تلك "loop" 50 مرة.

85f1d21c0b64d654.png

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

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

5be7967ec70e4302.png

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

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

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

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

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 لاستخدام هذا النموذج كي تتمكّن من البدء في تصنيف التعليقات غير المرغوب فيها.