با 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 تعداد ابعادی است که می خواهید برای بردار هر کلمه استفاده کنید. قاعده کلی که از تحقیقات مشخص می شود این است که ریشه چهارم تعداد کلمات است. به عنوان مثال، اگر از 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)

این کد یک مدل طبقه‌بندی‌کننده متن با Model Maker ایجاد می‌کند و داده‌های آموزشی را که می‌خواهید به‌عنوان راه‌اندازی در مرحله چهارم استفاده کنید، مشخصات مدل را که در مرحله چهارم تنظیم شده است، و تعدادی دوره که 50 است را مشخص می‌کنید. در این مورد.

اصل اساسی ML این است که نوعی تطبیق الگو است. در ابتدا، وزن های از پیش آموزش داده شده را برای کلمات بارگیری می کند و سعی می کند آنها را با هم گروه بندی کند و با پیش بینی اینکه کدام یک از آنها با هم گروه بندی می شوند، نشان دهنده هرزنامه و کدام یک نیستند. اولین بار، احتمالاً به طور مساوی تقسیم می شود زیرا مدل تازه شروع شده است.

c42755151d511ce.png

سپس نتایج این دوره آموزشی را اندازه گیری می کند و کد بهینه سازی را اجرا می کند تا پیش بینی آن را تغییر دهد، سپس دوباره امتحان می کند. این یک دوره است. بنابراین، با مشخص کردن epochs=50، 50 بار از آن "حلقه" عبور می کند.

7d0ee06a5246b58d.png

با رسیدن به دوره 50، مدل دقت بسیار بالاتری را گزارش می کند. در این حالت 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 ایجاد شده را که در Codelab بعدی به آن نیاز دارید، پایین بیاورید.
# 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. تبریک می گویم

این کد لبه شما را از طریق کد پایتون برای ساخت و صادرات مدل خود هدایت می کند. اکنون یک SavedModel به اضافه برچسب ها و واژگان در انتهای آن دارید. در بخش کد بعدی، نحوه استفاده از این مدل را مشاهده می کنید تا بتوانید دسته بندی نظرات اسپم را شروع کنید.

بیشتر بدانید