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

1. قبل از شروع

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

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

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

ee0f13398ea4e91e.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 پیش‌فرض با حداقل احتمال ۷۵٪ قبل از انجام اقدام (تعریف شده در کد 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 استفاده از مدل‌های خود را بسیار ساده می‌کند، بنابراین دنبال کردن آن باید بسیار آسان باشد و ما شما را در این فرآیند راهنمایی می‌کنیم، بنابراین اگر قبلاً از پایتون استفاده نکرده‌اید نگران نباشید!

کولب ها

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

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

b2df89c1f7b38cc9.png

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

94a875f67d6e34f6.png

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

f4fcd56ae53527bd.png

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

d979e93ba595d1de.png

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

مرحله 1

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

!pip install -q tflite-model-maker

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

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

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

376bc0fbde89a60d.png

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

گام 2

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

7ec405d0d82b2143.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/laurencemoroney-blog.appspot.com/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 است، زیرا مدل فقط همانطور که در زیر نشان داده شده شروع می شود:

d6c8116f8e7e781b.png

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

fc7bf6a948b7aa26.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 موجود است.

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

a9d8595a3e2564dc.png

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

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

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

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

5634d536ef8be9ca.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 نقطه برای هر فایل کلیک کنید و حذف را مطابق شکل انتخاب کنید:

7412b0b795d3b84f.png

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

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

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

25a2251c7f165184.png

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

51a6dbd5d3097ffc.png

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

92ded8d46442c404.png

  1. اکنون در پایین سمت چپ صفحه، روی Tools > Terminal کلیک کنید. صبر کنید تا پنجره ترمینال بارگیری شود.
  2. پس از بارگذاری عبارت زیر را تایپ کنید و سپس enter را فشار دهید تا دایرکتوری را به پوشه 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 را فشار دهید چیزی شبیه به این خواهید دید:

9cc90f1d053f517f.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 رابط کاربری مشاهده کنید:

50dd98c0a8f3e629.png

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

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

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

3ece5dbd0a673987.gif

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

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

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

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

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

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

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

6. تبریک می گویم!

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

خلاصه

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

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

بعدش چی؟

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

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

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

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

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

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