یک مدل یادگیری ماشین هرزنامه نظرات بسازید

1. قبل از شروع

در این لبه کد، کد ایجاد شده با استفاده از TensorFlow و TensorFlow Lite Model Maker را برای ایجاد یک مدل با استفاده از مجموعه داده بر اساس هرزنامه نظرات، بررسی می‌کنید. داده های اصلی در Kaggle موجود است. در یک CSV جمع آوری شده است و با حذف متن شکسته، نشانه گذاری، کلمات تکرار شده و موارد دیگر پاکسازی شده است. این کار تمرکز روی مدل را به جای متن آسان تر می کند.

کدی که بررسی می‌کنید در اینجا ارائه شده است، اما به شدت توصیه می‌شود که کد را در Google Colab دنبال کنید.

پیش نیازها

  • این کد لبه برای توسعه دهندگان باتجربه که در یادگیری ماشینی تازه کار هستند نوشته شده است.
  • این آزمایشگاه کد بخشی از مسیر شروع با طبقه‌بندی متن برای موبایل است. اگر هنوز فعالیت های قبلی را انجام نداده اید، لطفاً متوقف شده و همین الان این کار را انجام دهید.

چیزی که یاد خواهید گرفت

  • نحوه نصب TensorFlow Lite Model Maker با استفاده از Google Colab
  • چگونه داده ها را از سرور Cloud به دستگاه خود بارگیری کنید
  • نحوه استفاده از دیتا لودر
  • نحوه ساخت مدل

آنچه شما نیاز دارید

2. TensorFlow Lite Model Maker را نصب کنید

کولب را باز کن اولین سلول در نوت بوک 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. داده ها را دانلود کنید

سپس داده‌ها را از سرور 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)

Model Maker می تواند مدل ها را از فایل های CSV ساده مانند این آموزش دهد. فقط باید مشخص کنید کدام ستون ها متن را نگه می دارند و در کدام ستون ها برچسب ها را نگه می دارند. نحوه انجام این کار را بعداً در Codelab خواهید دید.

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 ایجاد می‌کند و داده‌های آموزشی را که می‌خواهید استفاده کنید (همانطور که در مرحله 4 تنظیم شده است)، مشخصات مدل (همانطور که در مرحله 4 تنظیم شده است) و تعدادی دوره را در این مورد مشخص می‌کنید. 50.

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

b94b00f0b155db3d.png

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

85f1d21c0b64d654.png

تا زمانی که به دوره 50 برسید، مدل دقت بسیار بالاتری را گزارش خواهد کرد. در این مورد نشان دادن 99٪!

در سمت راست، ارقام صحت اعتبارسنجی را خواهید دید. اینها معمولاً کمی پایین‌تر از دقت آموزشی هستند، زیرا نشان‌دهنده نحوه طبقه‌بندی مدل داده‌هایی هستند که قبلاً «دیده نشده‌اند». از داده های آزمایشی 10 درصدی استفاده می کند که قبلاً کنار گذاشته بودیم.

5be7967ec70e4302.png

8. مدل را صادر کنید

پس از اتمام آموزش، می توانید مدل را صادر کنید.

TensorFlow یک مدل را در قالب خود آموزش می دهد، و این باید به فرمت TFLITE تبدیل شود تا در یک برنامه تلفن همراه استفاده شود. Model Maker این پیچیدگی را برای شما مدیریت می کند.

به سادگی مدل را صادر کنید، یک فهرست را مشخص کنید:

model.export(export_dir='/mm_spam')

در آن دایرکتوری، یک فایل model.tflite خواهید دید. آن را دانلود کنید. شما به آن در لبه کد بعدی نیاز دارید، جایی که آن را به برنامه اندروید خود اضافه می کنید!

ملاحظات iOS

مدل tflite. که اخیراً صادر کردید برای Android به خوبی کار می‌کند، زیرا ابرداده‌های مربوط به مدل درون آن تعبیه شده است و Android Studio می‌تواند آن متادیتا را بخواند.

این ابرداده بسیار مهم است زیرا شامل فرهنگ لغت نشانه هایی است که کلمات را به عنوان مدل شناسایی می کند. به یاد داشته باشید که قبلاً یاد گرفتید که کلمات تبدیل به نشانه می شوند و سپس به این نشانه ها بردارهایی برای احساس آنها داده می شود؟ برنامه موبایل شما باید این نشانه ها را بشناسد. به عنوان مثال، اگر "سگ" به 42 توکن شد و کاربران شما "سگ" را در یک جمله تایپ کردند، برنامه شما باید "سگ" را به 42 تبدیل کند تا مدل آن را بفهمد. به‌عنوان یک توسعه‌دهنده اندروید، «TensorFlow Lite Task Library» دارید که استفاده از آن را آسان‌تر می‌کند، اما در iOS باید واژگان را پردازش کنید، بنابراین باید آن را در دسترس داشته باشید. Model Maker می تواند این مورد را با تعیین پارامتر export_format برای شما صادر کند. بنابراین، برای به دست آوردن برچسب ها و لغات مدل خود، می توانید از این استفاده کنید:

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

9. تبریک می گویم

این کد لبه شما را از طریق کد پایتون برای ساخت و صادرات مدل خود هدایت کرد. شما یک فایل tflite. در انتهای آن خواهید داشت.

در نوار کد بعدی نحوه ویرایش برنامه اندروید خود را برای استفاده از این مدل خواهید دید تا بتوانید دسته بندی نظرات هرزنامه را شروع کنید.