TensorFlow.js: یک مدل تشخیص هرزنامه نظرات را مجدداً آموزش دهید تا موارد لبه را مدیریت کند

1. قبل از شروع

این Codelab به گونه ای طراحی شده است که بر اساس نتیجه نهایی کدهای قبلی در این سری برای تشخیص هرزنامه نظرات با استفاده از TensorFlow.js ساخته شود.

در آخرین نسخه کد، یک صفحه وب کاملاً کارآمد برای یک وبلاگ ویدیویی تخیلی ایجاد کردید. با استفاده از یک مدل تشخیص هرزنامه از قبل آموزش دیده که توسط TensorFlow.js در مرورگر ارائه شده است، می‌توانید نظرات را برای هرزنامه فیلتر کنید.

نتیجه نهایی آن Codelab در زیر نشان داده شده است:

a4511e5d445706b1.gif

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

این کد لبه روی استفاده از پردازش زبان طبیعی (هنر درک زبان انسان با کامپیوتر) تمرکز دارد و به شما نشان می‌دهد که چگونه یک برنامه وب موجود را که ایجاد کرده‌اید تغییر دهید (به شما توصیه می‌شود که کدها را به ترتیب انتخاب کنید )، تا با این مشکل مقابله کنید. مشکل واقعی کامنت های هرزنامه، که بسیاری از توسعه دهندگان وب مطمئناً هنگام کار بر روی یکی از تعداد روزافزون برنامه های وب محبوبی که امروزه وجود دارند، با آن مواجه خواهند شد.

در این نرم افزار کدنویسی، با آموزش مجدد مدل ML خود یک گام فراتر خواهید رفت تا تغییراتی را در محتوای پیام های هرزنامه که ممکن است در طول زمان تغییر کند، بر اساس روندهای فعلی یا موضوعات رایج بحث که به شما امکان می دهد مدل را به روز نگه دارید و به آن توجه کنید. چنین تغییراتی

پیش نیازها

  • اولین کد لبه از این سری را تکمیل کرد.
  • دانش اولیه فناوری های وب از جمله HTML، CSS و جاوا اسکریپت.

چیزی که خواهی ساخت

شما از وب‌سایتی که قبلاً ساخته شده بود برای یک وبلاگ ویدیویی ساختگی با بخش نظرات بلادرنگ استفاده می‌کنید و آن را ارتقا می‌دهید تا یک نسخه آموزش‌دیده سفارشی از مدل تشخیص هرزنامه را با استفاده از TensorFlow.js بارگیری کنید، بنابراین در موارد لبه‌ای که قبلاً در آن شکست می‌خورد بهتر عمل می‌کند. . البته به عنوان توسعه‌دهندگان و مهندسان وب، می‌توانید این UX فرضی را برای استفاده مجدد در هر وب‌سایتی که ممکن است در نقش‌های روزمره خود روی آن کار می‌کنید تغییر دهید و راه‌حل را متناسب با هر مورد استفاده از مشتری تطبیق دهید - شاید این یک وبلاگ، انجمن یا برخی موارد دیگر باشد. فرمی از CMS، مانند دروپال برای مثال.

بیا هک کنیم...

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

شما:

  • موارد لبه‌ای را که مدل از پیش آموزش‌دیده در آن شکست می‌خورد، شناسایی کنید
  • مدل طبقه‌بندی هرزنامه را که با استفاده از Model Maker ایجاد شده است، دوباره آموزش دهید.
  • این مدل مبتنی بر پایتون را برای استفاده در مرورگرها به قالب TensorFlow.js صادر کنید.
  • مدل هاست و دیکشنری آن را با نمونه تازه آموزش دیده آپدیت کنید و نتایج را بررسی کنید

آشنایی با HTML5، CSS و JavaScript برای این آزمایشگاه فرض شده است. همچنین برای آموزش مجدد مدلی که با استفاده از Model Maker ایجاد شده است، مقداری کد پایتون را از طریق یک نوت بوک "co lab" اجرا خواهید کرد، اما برای انجام این کار نیازی به آشنایی با Python نیست.

2. برای کدگذاری تنظیم شوید

یک بار دیگر از Glitch.com برای میزبانی و تغییر برنامه وب استفاده خواهید کرد. اگر قبلاً نرم افزار کد پیش نیاز را تکمیل نکرده اید، می توانید نتیجه نهایی را در اینجا به عنوان نقطه شروع خود شبیه سازی کنید . اگر در مورد نحوه عملکرد کد سؤالی دارید، توصیه می شود قبل از ادامه ، کدهای قبلی را که نحوه ساخت این برنامه وب کارآمد را توضیح داده بود، تکمیل کنید.

در Glitch، به سادگی روی دکمه remix this کلیک کنید تا آن را فورک کنید و مجموعه جدیدی از فایل‌ها را بسازید که می‌توانید ویرایش کنید.

3. موارد لبه را در راه حل قبلی کشف کنید

اگر وب‌سایت تکمیل‌شده‌ای را که به‌تازگی شبیه‌سازی کرده‌اید باز کنید و سعی کنید برخی از نظرات را تایپ کنید، متوجه خواهید شد که در بیشتر مواقع طبق برنامه کار می‌کند، نظراتی را که مانند هرزنامه به نظر می‌رسند مسدود می‌کند، و اجازه می‌دهد پاسخ‌های مشروع ارائه شود.

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

نظرات قانونی ارسال شده بدون مشکل (منفی واقعی):

  1. "وای، من آن ویدیو را دوست دارم، کار شگفت انگیزی." احتمال هرزنامه: 47.91854%
  2. "کاملاً این دموها را دوست داشتم! جزئیات بیشتری دارید؟" احتمال هرزنامه: 47.15898%
  3. "برای کسب اطلاعات بیشتر به چه وب سایتی می توانم مراجعه کنم؟" احتمال هرزنامه: 15.32495%

این فوق‌العاده است، احتمال همه موارد فوق بسیار کم است و با موفقیت از طریق SPAM_THRESHOLD پیش‌فرض با حداقل احتمال 75% قبل از اقدام (تعریف شده در کد script.js از codelab قبلی) عبور می‌کند.

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

نظرات قانونی که به‌عنوان هرزنامه علامت‌گذاری شده‌اند (مطالب نادرست):

  1. "آیا کسی می تواند وب سایت را برای ماسکی که دارد پیوند دهد؟" احتمال هرزنامه: 98.46466%
  2. "آیا می توانم این آهنگ را در Spotify بخرم؟ لطفاً کسی به من اطلاع دهد!" احتمال هرزنامه: 94.40953%
  3. "آیا کسی می تواند با من تماس بگیرد و جزئیاتی در مورد نحوه دانلود TensorFlow.js داشته باشد؟" احتمال هرزنامه: 83.20084%

اوه نه! به نظر می رسد این نظرات قانونی در زمانی که باید مجاز باشند به عنوان هرزنامه علامت گذاری می شوند. چگونه می توانید آن را برطرف کنید؟

یک گزینه ساده این است که SPAM_THRESHOLD را افزایش دهید تا بیش از 98.5٪ اطمینان داشته باشید. در آن صورت این نظرات طبقه بندی شده اشتباه ارسال می شود. با در نظر گرفتن این موضوع، اجازه دهید به سایر نتایج احتمالی در زیر ادامه دهیم...

نظرات هرزنامه که به عنوان هرزنامه علامت‌گذاری شده‌اند (مورد مثبت واقعی):

  1. "این جالب است، اما لینک های دانلود را در وب سایت من که بهتر هستند، بررسی کنید!" احتمال هرزنامه: 99.77873%
  2. "من افرادی را می شناسم که می توانند برای شما دارو تهیه کنند، فقط برای جزئیات به فایل pr0 من مراجعه کنید" احتمال هرزنامه: 98.46955%
  3. "نمایه من را ببینید تا ویدیوهای شگفت انگیزتری را دانلود کنید که حتی بهتر هستند! http://example.com" احتمال هرزنامه: 96.26383%

بسیار خوب، بنابراین با آستانه 75٪ اصلی ما مطابق انتظار عمل می کند، اما با توجه به اینکه در مرحله قبل شما SPAM_THRESHOLD به بیش از 98.5٪ مطمئن تغییر دادید، به این معنی است که 2 مثال در اینجا اجازه داده می شود، بنابراین ممکن است آستانه خیلی بالا باشد. . شاید 96 درصد بهتر باشد؟ اما اگر این کار را انجام دهید، یکی از نظرات در بخش قبلی (مثبت نادرست) زمانی که مشروع بود به عنوان هرزنامه علامت‌گذاری می‌شود زیرا 98.46466 درصد رتبه‌بندی شده بود.

در این مورد احتمالاً بهترین کار این است که همه این نظرات هرزنامه واقعی را ضبط کنید و به سادگی برای شکست های بالا آموزش مجدد دهید. با تنظیم آستانه روی 96٪، همه موارد مثبت واقعی همچنان ثبت می شوند و 2 مورد از مثبت های کاذب بالا را حذف می کنید. برای تغییر یک عدد خیلی بد نیست.

ادامه بدیم...

نظرات هرزنامه ای که مجاز به ارسال بودند (منفی های نادرست):

  1. "برای دانلود ویدیوی شگفت انگیزتر که حتی بهتر است نمایه من را ببینید!" احتمال هرزنامه: 7.54926%
  2. " در کلاس های آموزش بدنسازی ما تخفیف بگیرید. pr0file را ببینید! " احتمال هرزنامه: 17.49849%
  3. "امگ سهام GOOG به سرعت بالا رفت! تا دیر نشده!" احتمال هرزنامه: 20.42894%

برای این نظرات، با تغییر بیشتر مقدار SPAM_THRESHOLD کاری نمی توانید انجام دهید. کاهش آستانه برای هرزنامه از 96٪ به ~ 9٪ منجر به علامت گذاری کامنت های واقعی به عنوان هرزنامه می شود - یکی از آنها با وجود اینکه قانونی است دارای رتبه 58٪ است. تنها راه مقابله با نظراتی از این دست، آموزش مجدد مدل با چنین موارد لبه‌ای که در داده‌های آموزشی گنجانده شده‌اند، خواهد بود تا بیاموزد که دیدگاه خود را نسبت به جهان برای اینکه چه چیزی هرزنامه است یا نه تنظیم کند.

در حالی که تنها گزینه باقی مانده در حال حاضر آموزش مجدد مدل است، شما همچنین دیدید که چگونه می توانید آستانه زمانی که تصمیم به فراخوانی چیزی هرزنامه دارید را برای بهبود عملکرد نیز اصلاح کنید. به عنوان یک انسان، 75٪ کاملاً مطمئن به نظر می رسند، اما برای این مدل باید نزدیکتر به 81.5٪ افزایش دهید تا با ورودی های مثال موثرتر باشد.

هیچ مقدار جادویی وجود ندارد که در مدل‌های مختلف به خوبی کار کند، و این مقدار آستانه باید بر اساس هر مدل پس از آزمایش با داده‌های دنیای واقعی برای آنچه به خوبی کار می‌کند، تنظیم شود.

ممکن است شرایطی وجود داشته باشد که داشتن یک مثبت (یا منفی) کاذب می‌تواند عواقب جدی داشته باشد (مثلاً در صنعت پزشکی)، بنابراین می‌توانید آستانه خود را بسیار بالا تنظیم کنید و برای کسانی که آستانه را برآورده نمی‌کنند، درخواست بررسی دستی بیشتری کنید. این انتخاب شما به عنوان یک توسعه دهنده است و نیاز به آزمایش دارد.

4. مدل تشخیص هرزنامه نظرات را مجددا آموزش دهید

در بخش قبل تعدادی از موارد لبه را شناسایی کردید که برای مدل ناموفق بودند که تنها گزینه آموزش مجدد مدل برای توضیح این موقعیت‌ها بود. در یک سیستم تولیدی، می‌توانید این موارد را در طول زمان پیدا کنید، زیرا افراد نظری را به‌صورت دستی به عنوان هرزنامه پرچم‌گذاری می‌کنند که اجازه داده شده است یا ناظرانی که نظرات پرچم‌گذاری شده را بررسی می‌کنند متوجه می‌شوند که برخی از آنها در واقع هرزنامه نیستند و می‌توانند چنین نظراتی را برای آموزش مجدد علامت‌گذاری کنند. با فرض اینکه شما مجموعه ای از داده های جدید را برای این موارد لبه جمع آوری کرده اید (برای بهترین نتیجه، در صورت امکان، باید تغییراتی از این جملات جدید داشته باشید)، اکنون به شما نشان می دهیم که چگونه مدل را با در نظر گرفتن آن موارد لبه آموزش دهید.

روکش مدل از پیش ساخته شده

مدل از پیش ساخته‌شده‌ای که استفاده کردید، مدلی بود که توسط شخص ثالثی از طریق Model Maker ایجاد شد که از یک مدل «متوسط ​​جاسازی کلمه» برای عملکرد استفاده می‌کند.

از آنجایی که مدل با Model Maker ساخته شده است، برای آموزش مجدد مدل باید به طور خلاصه به پایتون تغییر دهید و سپس مدل ایجاد شده را به فرمت TensorFlow.js صادر کنید تا بتوانید از آن در مرورگر استفاده کنید. خوشبختانه Model Maker استفاده از مدل‌های خود را بسیار ساده می‌کند، بنابراین دنبال کردن آن باید بسیار آسان باشد و ما شما را در این فرآیند راهنمایی می‌کنیم، بنابراین اگر قبلاً از پایتون استفاده نکرده‌اید نگران نباشید!

کولب ها

از آنجایی که در این کد لبه خیلی نگران نیستید که بخواهید یک سرور لینوکس با تمام ابزارهای مختلف پایتون نصب شده راه اندازی کنید، می توانید به سادگی کد را از طریق مرورگر وب با استفاده از "Colab Notebook" اجرا کنید. این نوت‌بوک‌ها می‌توانند به یک «بک‌اند» متصل شوند - که به سادگی یک سرور با برخی موارد از پیش نصب شده است، که می‌توانید کد دلخواه را در مرورگر وب اجرا کنید و نتایج را ببینید. این برای نمونه سازی سریع یا برای استفاده در آموزش هایی مانند این بسیار مفید است.

به سادگی به colab.research.google.com بروید و مانند تصویر با صفحه خوش آمدگویی روبرو خواهید شد:

6b82258445885c50.png

حالا روی دکمه New Notebook در سمت راست پایین پنجره پاپ آپ کلیک کنید و باید یک colab خالی مانند این را ببینید:

2d52c8f7afa88564.png

عالیه گام بعدی این است که frontend colab را به سرور باطنی متصل کنید تا بتوانید کد پایتونی را که می‌نویسید اجرا کنید. این کار را با کلیک روی Connect در بالا سمت راست و انتخاب Connect to hosted runtime انجام دهید.

fa5f578a1a3d352b.png

پس از اتصال، باید آیکون های RAM و Disk را در جای خود مشاهده کنید، مانند این:

541c9894fb39d4cb.png

کار خوب! اکنون می توانید برای آموزش مجدد مدل Model Maker کدنویسی را در پایتون شروع کنید. به سادگی مراحل زیر را دنبال کنید.

مرحله 1

در اولین سلولی که در حال حاضر خالی است، کد زیر را کپی کنید. TensorFlow Lite Model Maker را با استفاده از مدیریت بسته پایتون به نام "pip" برای شما نصب می کند (مشابه npm است که اکثر خوانندگان این آزمایشگاه کد ممکن است از اکوسیستم JS با آن آشناتر باشند):

!apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
!pip install -q tflite-model-maker

با این حال، چسباندن کد در سلول، آن را اجرا نمی کند. سپس، ماوس خود را روی سلول خاکستری که کد بالا را در آن جای‌گذاری کرده‌اید، ببرید و یک نماد کوچک «play» در سمت چپ سلول ظاهر می‌شود که در زیر مشخص شده است:

7ac5e3516bed6335.png برای اجرای کدی که در سلول تایپ کرده اید، روی دکمه پخش کلیک کنید.

اکنون مدل ساز را در حال نصب خواهید دید:

651f21b04fb648cc.png

هنگامی که اجرای این سلول مطابق شکل کامل شد، به مرحله بعدی زیر بروید.

مرحله 2

در مرحله بعد، یک سلول کد جدید مانند شکل اضافه کنید تا بتوانید چند کد دیگر را بعد از سلول اول قرار دهید و آن را جداگانه اجرا کنید:

869904a9d774c455.png

سلول بعدی اجرا شده دارای تعدادی واردات خواهد بود که کد موجود در بقیه نوت بوک باید از آنها استفاده کند. موارد زیر را در سلول جدید ایجاد شده کپی و جایگذاری کنید:

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')

چیزهای بسیار استاندارد، حتی اگر با پایتون آشنا نباشید. شما فقط چند برنامه کاربردی و توابع Model Maker مورد نیاز برای طبقه‌بندی کننده هرزنامه را وارد می‌کنید. این همچنین بررسی می‌کند که آیا از TensorFlow 2.x استفاده می‌کنید که لازمه استفاده از Model Maker است.

در نهایت، مانند قبل، هنگامی که ماوس را بر روی سلول می‌برید، با فشار دادن نماد «play» سلول را اجرا کنید و سپس یک سلول کد جدید برای مرحله بعدی اضافه کنید.

مرحله 3

سپس داده‌ها را از یک سرور راه دور در دستگاه خود دانلود می‌کنید و متغیر training_data را به عنوان مسیر فایل محلی دریافت شده تنظیم می‌کنید:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/jmstore/TensorFlowJS/EdX/code/6.5/jm_blog_comments_extras.csv', extract=False)

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

با دقت در بین شما متوجه خواهید شد که نام این فایل jm_blog_comments _extras .csv است - این فایل صرفاً داده های آموزشی اصلی است که ما برای تولید اولین مدل هرزنامه نظر ترکیبی با داده های حاشیه ای جدید که کشف کردید استفاده کردیم، بنابراین همه در یک می باشد. فایل علاوه بر جملات جدیدی که می‌خواهید از آنها یاد بگیرید، به داده‌های آموزشی اصلی استفاده شده برای آموزش مدل نیز نیاز دارید.

اختیاری: اگر این فایل CSV را دانلود کنید و چند خط آخر را بررسی کنید، نمونه هایی از موارد لبه را مشاهده خواهید کرد که قبلا درست کار نمی کردند. آنها به تازگی به انتهای داده های آموزشی موجود اضافه شده اند که مدل از پیش ساخته شده برای آموزش خود استفاده می شود.

این سلول را اجرا کنید، سپس پس از اتمام اجرا، یک سلول جدید اضافه کنید و به مرحله 4 بروید.

مرحله 4

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

Model Maker چندین جاسازی مدل از قبل آموخته شده را ارائه می دهد که می توانید از آنها استفاده کنید، اما ساده ترین و سریع ترین آن برای شروع، average_word_vec است که همان چیزی است که در codelab قبلی برای ساخت وب سایت خود استفاده کردید. این هم کد:

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

پارامتر

پارامتر wordvec_dim تعداد ابعادی است که می خواهید برای بردار هر کلمه استفاده کنید. این ابعاد اساساً ویژگی‌های متفاوتی هستند (که توسط الگوریتم یادگیری ماشینی هنگام آموزش ایجاد می‌شوند) که هر کلمه داده‌ای را می‌توان اندازه‌گیری کرد و برنامه با استفاده از آن‌ها سعی می‌کند تا کلماتی را که به روشی معنادار مشابه هستند، به بهترین نحو مورد استفاده قرار دهد.

به عنوان مثال، اگر یک بعد برای "پزشکی" بودن یک کلمه داشته باشید، کلمه ای مانند "قرص" ممکن است در اینجا در این بعد امتیاز بالایی داشته باشد و با سایر کلمات با امتیاز بالا مانند "xray" همراه باشد، اما "cat" امتیاز خواهد گرفت. پایین در این بعد ممکن است معلوم شود که یک "بعد پزشکی" برای تعیین هرزنامه زمانی مفید است که با ابعاد بالقوه دیگری ترکیب شود که ممکن است تصمیم به استفاده از آنها مهم باشد.

در مورد کلماتی که در «بعد پزشکی» امتیاز بالایی دارند، ممکن است بعد دومی که کلمات را با بدن انسان مرتبط می‌کند مفید باشد. کلماتی مانند "پا"، "بازو"، "گردن" ممکن است در اینجا امتیاز بالایی داشته باشند و همچنین در بعد پزشکی نیز نسبتاً بالا هستند.

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

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

درک کردن

seq_len

پارامتر

مدل‌ها معمولاً در مورد مقادیر ورودی بسیار سفت و سخت هستند. برای یک مدل زبان، این بدان معنی است که مدل زبان می تواند جملاتی با طول خاص، ایستا را طبقه بندی کند. این توسط پارامتر seq_len تعیین می شود، جایی که این مخفف 'sequence length' است. وقتی کلمات را به اعداد (یا نشانه ها) تبدیل می کنید، یک جمله به دنباله ای از این نشانه ها تبدیل می شود. بنابراین مدل شما (در این مورد) برای طبقه بندی و تشخیص جملاتی که دارای 20 نشانه هستند، آموزش می بیند. اگر جمله بیشتر از این باشد کوتاه می شود. اگر کوتاه‌تر باشد، بالشتک می‌شود - درست مانند اولین کدهای این سری.

مرحله 5 - بارگذاری داده های آموزشی

قبلا فایل 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 است، و خواهید دید که ورودی دوم در هر خط درست یا نادرست است تا مشخص کند آیا آن متن به عنوان هرزنامه نظر در نظر گرفته می شود یا خیر. خصوصیات دیگر مشخصات مدلی را که در مرحله 4 ایجاد کردید به همراه یک کاراکتر جداکننده تنظیم می کنند که در این مورد یک کاما است زیرا فایل از کاما جدا شده است. شما همچنین یک پارامتر shuffle را تنظیم می‌کنید تا به‌طور تصادفی داده‌های آموزشی را مجدداً مرتب کنید تا چیزهایی که ممکن است مشابه یا جمع‌آوری شده باشند به‌طور تصادفی در کل مجموعه داده پخش شوند.

سپس از data.split() برای تقسیم داده ها به داده های آموزشی و آزمایشی استفاده خواهید کرد. .9 نشان می دهد که 90٪ از مجموعه داده برای آموزش و بقیه برای آزمایش استفاده می شود.

مرحله 6 - مدل را بسازید

سلول دیگری را اضافه کنید که در آن کدی را برای ساخت مدل اضافه می کنیم:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

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

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

bbe4b896d8060bc4.png

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

4ed286d114960ca.png

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

مرحله 7 - مدل را صادر کنید

پس از اتمام آموزش، می توانید مدل را صادر کنید. TensorFlow یک مدل را در قالب خود آموزش می دهد، و این باید برای استفاده در یک صفحه وب به قالب TensorFlow.js تبدیل شود. به سادگی موارد زیر را در یک سلول جدید قرار داده و آن را اجرا کنید:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

پس از اجرای این کد، اگر روی نماد پوشه کوچک در سمت چپ Colab کلیک کنید، می‌توانید به پوشه‌ای که در بالا صادر کرده‌اید (در فهرست اصلی - ممکن است لازم باشد یک سطح بالا بروید) بروید و بسته فشرده را پیدا کنید. فایل های صادر شده موجود در ModelFiles.zip .

اکنون این فایل فشرده را در رایانه خود بارگیری کنید زیرا از آن فایل ها درست مانند اولین کد لبه استفاده خواهید کرد:

cda3c681ebf144b4.png

عالیه بخش پایتون به پایان رسیده است، اکنون می توانید به سرزمین جاوا اسکریپت که می شناسید و دوست دارید بازگردید. اوه!

5. ارائه مدل جدید یادگیری ماشین

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

ابتدا، اگر قبلاً این کار را نکرده‌اید، فایل‌های مربوط به مدلی را که به تازگی از نوت بوک Model Maker Colab دانلود کرده‌اید، از حالت فشرده خارج کنید. شما باید فایل های زیر را در پوشه های مختلف آن مشاهده کنید:

3ace87c57b98cfbc.png

اینجا چی داری؟

  • model.json - این یکی از فایل هایی است که مدل آموزش دیده TensorFlow.js را تشکیل می دهد. شما به این فایل خاص در کد JS ارجاع خواهید داد.
  • group1-shard1of1.bin - این یک فایل باینری است که حاوی بسیاری از داده های ذخیره شده برای مدل صادر شده TensorFlow.js است و باید در جایی روی سرور شما میزبانی شود تا در همان دایرکتوری model.json در بالا دانلود شود.
  • vocab - این فایل عجیب و غریب بدون پسوند چیزی از Model Maker است که به ما نشان می دهد چگونه کلمات را در جملات رمزگذاری کنیم تا مدل نحوه استفاده از آنها را بفهمد. در بخش بعدی بیشتر به این موضوع خواهید پرداخت.
  • labels.txt - این به سادگی شامل نام کلاس های به دست آمده است که مدل پیش بینی می کند. برای این مدل، اگر این فایل را در ویرایشگر متن خود باز کنید، به سادگی دارای "نادرست" و "درست" است که نشان دهنده "not spam" یا "spam" به عنوان خروجی پیش بینی آن است.

فایل های مدل TensorFlow.js را میزبانی کنید

ابتدا فایل های model.json و *.bin را که روی یک سرور وب تولید شده اند قرار دهید تا بتوانید از طریق صفحه وب خود به آنها دسترسی داشته باشید.

فایل های مدل موجود را حذف کنید

همانطور که در حال ساختن نتیجه نهایی اولین Codelab در این سری هستید، ابتدا باید فایل های مدل موجود آپلود شده را حذف کنید. اگر از Glitch.com استفاده می کنید، به سادگی پانل فایل ها را در سمت چپ برای model.json و group1-shard1of1.bin بررسی کنید، روی منوی کشویی 3 نقطه برای هر فایل کلیک کنید و حذف را مطابق شکل انتخاب کنید:

c72bfdc5a0db4d0d.png

آپلود فایل های جدید در Glitch

عالیه حالا موارد جدید را آپلود کنید:

  1. پوشه دارایی‌ها را در پانل سمت چپ پروژه Glitch خود باز کنید و اگر دارایی‌های قدیمی آپلود شده با نام‌های مشابه هستند، آن‌ها را حذف کنید.
  2. روی آپلود دارایی کلیک کنید و group1-shard1of1.bin را انتخاب کنید تا در این پوشه آپلود شود. اکنون باید پس از بارگذاری به این شکل باشد:

c6739dd30e6df977.png

  1. عالیه اکنون همین کار را برای فایل model.json نیز انجام دهید تا 2 فایل به این صورت در پوشه دارایی های شما باشد:

b7858eb08bea9ac3.png

  1. اگر روی فایل group1-shard1of1.bin که به تازگی آپلود کرده اید کلیک کنید، می توانید URL را در محل آن کپی کنید. اکنون این مسیر را مطابق شکل کپی کنید:

19999f6644f61153.png

  1. اکنون در پایین سمت چپ صفحه، روی Tools > Terminal کلیک کنید. صبر کنید تا پنجره ترمینال بارگیری شود.
  2. پس از بارگذاری موارد زیر را تایپ کرده و سپس اینتر را فشار دهید تا دایرکتوری را به پوشه www تغییر دهید:

ترمینال:

cd www
  1. در مرحله بعد، از wget برای دانلود 2 فایلی که به تازگی آپلود شده اند استفاده کنید، با جایگزین کردن URL های زیر با URL هایی که برای فایل های موجود در پوشه دارایی ها در Glitch ایجاد کرده اید (پوشه دارایی ها را برای URL سفارشی هر فایل بررسی کنید).

به فضای بین دو URL توجه داشته باشید و اینکه URL هایی که باید استفاده کنید با آدرس های نشان داده شده متفاوت هستند اما شبیه به هم خواهند بود:

ترمینال

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

فوق العاده! اکنون یک کپی از فایل های آپلود شده در پوشه www ساخته اید.

با این حال، در حال حاضر آنها با نام های عجیب و غریب دانلود می شوند. اگر ls در ترمینال تایپ کنید و enter را فشار دهید چیزی شبیه به این خواهید دید:

6c417fdfc64762f1.png

  1. با استفاده از دستور mv نام فایل ها را تغییر دهید. عبارت زیر را در کنسول تایپ کنید و بعد از هر خط اینتر را فشار دهید:

ترمینال:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. در نهایت پروژه Glitch را با تایپ refresh در ترمینال رفرش کنید و enter را فشار دهید:

ترمینال:

refresh

پس از رفرش کردن، اکنون باید model.json و group1-shard1of1.bin در پوشه www رابط کاربری مشاهده کنید:

530bb651f4dbac64.png

عالیه آخرین مرحله به روز رسانی فایل dictionary.js است.

  1. فایل vocab دانلود شده جدید خود را به صورت دستی از طریق ویرایشگر متن یا با استفاده از این ابزار به فرمت JS صحیح تبدیل کنید و خروجی حاصل را به عنوان dictionary.js در پوشه www خود ذخیره کنید. اگر قبلاً یک فایل dictionary.js دارید، می‌توانید به سادگی محتوای جدید را کپی کرده و روی آن قرار دهید و فایل را ذخیره کنید.

وووووو شما با موفقیت تمام فایل های تغییر یافته را به روز کردید و اگر اکنون سعی کنید و از وب سایت استفاده کنید، متوجه خواهید شد که چگونه مدل بازآموزی شده باید بتواند موارد لبه کشف شده و آموخته شده از آنها را مطابق شکل نشان دهد:

64e5cf6f6e158d6c.gif

همانطور که می بینید، 6 مورد اول اکنون به درستی به عنوان غیر هرزنامه طبقه بندی می شوند، و دسته دوم 6 تایی همگی به عنوان هرزنامه شناسایی می شوند. کامل!

اجازه دهید برخی از تغییرات را نیز امتحان کنیم تا ببینیم آیا به خوبی تعمیم داده شده است یا خیر. در ابتدا یک جمله نادرست وجود داشت مانند:

" امگ سهام GOOG به سرعت بالا رفت! خیلی دیر شده! "

اکنون به درستی به عنوان هرزنامه طبقه‌بندی شده است، اما اگر آن را به موارد زیر تغییر دهید چه اتفاقی می‌افتد:

" پس ارزش سهام XYZ افزایش یافته است! قبل از اینکه خیلی دیر شود مقداری بخرید! "

در اینجا شما پیش‌بینی 98 درصدی به احتمال زیاد هرزنامه را دریافت می‌کنید که درست است حتی اگر نماد سهام و عبارت آن را کمی تغییر داده باشید.

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

6. تبریک!

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

خلاصه

در این کد لبه شما:

  1. موارد لبه ای کشف شد که هنگام استفاده از مدل هرزنامه نظرات از پیش ساخته شده کار نمی کردند
  2. مدل Model Maker را برای در نظر گرفتن لبه‌هایی که کشف کردید، دوباره آموزش دادید
  3. مدل آموزش‌دیده جدید به قالب TensorFlow.js صادر شد
  4. برنامه وب خود را برای استفاده از فایل های جدید به روز کرد

بعدش چی؟

بنابراین این به روز رسانی عالی کار می کند، اما مانند هر برنامه وب دیگری، تغییرات در طول زمان اتفاق می افتد. خیلی بهتر خواهد بود که به جای اینکه ما مجبور باشیم هر بار این کار را به صورت دستی انجام دهیم، در طول زمان به طور مداوم خود را بهبود می بخشد. آیا می توانید فکر کنید که چگونه ممکن است پس از اینکه مثلاً 100 نظر جدید به عنوان طبقه بندی نادرست علامت گذاری شده اند، این مراحل را به طور خودکار مجدداً آموزش دهید؟ کلاه مهندسی وب معمولی خود را بر سر بگذارید و احتمالاً می توانید نحوه ایجاد خط لوله برای انجام خودکار این کار را بیابید. اگر نه، نگران نباشید، به دنبال کد بعدی در این سری باشید که به شما نشان می دهد چگونه.

آنچه را که می سازید با ما به اشتراک بگذارید

شما به راحتی می توانید آنچه را که امروز ساخته اید برای سایر موارد استفاده خلاقانه نیز گسترش دهید و ما شما را تشویق می کنیم که خارج از چارچوب فکر کنید و به هک کردن ادامه دهید.

به خاطر داشته باشید که ما را در رسانه های اجتماعی با استفاده از هشتگ #MadeWithTFJS تگ کنید تا فرصتی برای نمایش پروژه خود در وبلاگ TensorFlow یا حتی رویدادهای آینده داشته باشید. ما دوست داریم ببینیم شما چه چیزی درست می کنید.

کدهای TensorFlow.js بیشتر برای عمیق تر شدن

وب سایت هایی برای بررسی