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

1. قبل البدء

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

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

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

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

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

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

الأشياء التي تحتاج إليها

  • الوصول إلى Colab

2. تثبيت TensorFlow Lite Maker Maker

  • افتح Colab. ستتولى الخلية الأولى في دفتر الملاحظات تثبيت TensorFLOW Lite Maker 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، وهو أحد متطلبات استخدام أداة إنشاء النماذج.

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)

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

5. تضمينات تم تعلّمها مسبقًا

بوجه عام، عند استخدام مصمم النماذج، لا تصمم نماذج من البداية. ويمكنك استخدام النماذج الحالية التي تُخصصها حسب احتياجاتك.

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

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

يوفّر"أداة إنشاء النماذج"العديد من التضمينات التي تم تعلّمها مسبقًا والتي يمكنك استخدامها، ولكن الخيار الأسهل والأسرع هو البدء باستخدام 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)

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

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

c42755151d511ce.png

وحينئذٍ سيقيس نتائج هذه الفترة من التدريب لتنفيذ رمز التحسين لتعديل توقعه، ثم إعادة المحاولة. هذه فترة. لذلك، من خلال تحديد epochs=50، سيتم اجتياز ذلك "loop" 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 لإنشاء نموذج خاص بك وتصديره. والآن لديك نموذج محفوظ بالإضافة إلى التصنيفات والمفردات في نهايةه. وفي الدرس التطبيقي التالي، ستتعرّف على كيفية استخدام هذا النموذج حتى تتمكّن من البدء في تصنيف التعليقات غير المرغوب فيها.

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