ساخت سریع برنامه‌های کاربردی وب ML با Streamlit

شکل ۱: ساخت برنامه‌های کاربردی وب ML
شکل ۱: ساخت برنامه‌های کاربردی وب ML


منتشر‌شده در: towardsdatascience به تاریخ ۱۰ مارس ۲۰۲۱
لینک منبع: How you can quickly build ML web apps with Streamlit.

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

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

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

نصب Streamlit

شما به راحتی می‌توانید با استفاده از دستور زیر، Streamlit را با pip نصب کنید.

pip install streamlit

آموزش یک مدل طبقه‌بندی متن

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

کد بالا مراحل زیر را اجرا می‌کند:

  1. مجموعه داده اسپم را بازخوانی می‌کند.
  2. مجموعه داده‌های اسپم را به مجموعه‌های آموزشی و آزمایشی تقسیم می‌کند.
  3. یک پیش‌پردازش متنی و خط یادگیری عمیق برای طبقه‌بندی اسپم ایجاد می‌کند.
  4. خط مدل را در مجموعه آموزشی ردیابی می‌کند.
  5. خط مدل در مجموعه آزمایش را ارزیابی می‌کند.
  6. خط مدل آموزش‌دیده را حفظ می‌کند.
ممکن است مطالعه مقاله چگونه با استفاده از موتور Tesseract OCR و پایتون، متن را از تصاویر استخراج کنیم؟ برای شما مفید باشد.

ساخت یک برنامه Streamlit

در همان فولدری که خط مدل ذخیره ‌شده قرار دارد، من فایلی به نام مسیر stream_app.py ایجاد کردم و کد را به صورت تدریجی همانطور که در بخش‌های زیر نشان داده شد، اضافه کردم. اگر می‌خواهید کد کامل این برنامه آموزشی را ببینید، به این مخزن Github مراجعه کنید.

ایمپورت کردن کتابخانه‌ها

من کتابخانه‌ها و ماژول‌های لازم، از جمله Streamlit را وارد کردم، که برای اجرای این برنامه مورد نیاز بود، همانطور که در زیر نشان‌داده شده‌ است.

import joblib

import re

from sklearn.neural_network import MLPClassifier

from sklearn.feature_extraction.text import TfidfVectorizer

import streamlit as st

ایجاد یک هدر

اکنون که ما Streamlit را وارد کرده‌ایم، می‌توانیم با استفاده از پشتیبانی Markdown ، Streamlit، به سرعت یک عنوان ایجاد کنیم.

st.write(&quot# Spam Detection Engine&quot)

برای دیدن نتایج این کد، می‌توانیم دستور زیر را اجرا کنیم.

streamlit run streamlit_app.py

اجرای کد و هدایت به محل یابی: ۸۵۰۱ نتیجه زیر را به ما می‌دهد.

شکل ۲: برنامه Streamlit تنها با یک هدر.
شکل ۲: برنامه Streamlit تنها با یک هدر.


تنها با یک خط کد (بدون احتساب عبارات وارد کردن)، شما اکنون یک برنامه Streamlit در حال اجرا دارید! سپس، می‌توانیم چند تعامل را با یک زمینه ورودی متنی به برنامه اضافه کنیم.

اضافه کردن ورودی متن

message_text = st.text_input(&quotEnter a message for spam evaluation&quot)

بازیابی صفحه برنامه در محل میزبان: ۸۵۰۱ یک فیلد ورودی متن تمیز زیر عنوان را به ما می‌دهد.

شکل ۳: اضافه کردن یک فیلد ورودی متنی به برنامهStreamlit.
شکل ۳: اضافه کردن یک فیلد ورودی متنی به برنامهStreamlit.


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

بارگذاری مدل

قبل از بارگذاری مدل، من تابع پیش‌پردازش متن از پیش تعریف‌شده را در نظر گرفتم زیرا این بخشی از مدل ذخیره‌شده است.

def preprocessor(text):

    text = re.sub('<[^>]*>', '', text) 

    emoticons = re.findall('(?::|;|=)(?:-)?(?:\)|\(|D|P)', text)

    text = re.sub('[\W]+', ' ', text.lower()) + ' '.join(emoticons).replace('-', '')

    return textmodel = joblib.load('spam_classifier.joblib')

پیش‌بینی تولید و نمایش

ما می‌توانیم یک تابع خاص برای بازگرداندن برچسب پیش‌بینی‌شده توسط مدل (اسپم یا ham) و احتمال اسپم بودن پیام را همان طور که در زیر نشان داده شده است تعریف کنیم.

def classify_message(model, message):  label = model.predict([message])[0]

  spam_prob = model.predict_proba([message])  return {'label': label, 'spam_probability': spam_prob[0][1]}

با استفاده از این تابع می‌توانیم پیش‌بینی‌های مدل را به عنوان یک فرهنگ لغت ارائه دهیم.

if message_text != '':  result = classify_message(model, message_text)  st.write(result)

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

شکل ۴: نمایش خروجی مدل را در Streamlit
شکل ۴: نمایش خروجی مدل را در Streamlit


از تصویر بالا، می‌توانیم ببینیم که مدل پیش‌بینی می‌کند که این پیام شانس بسیار بالایی (۹۸ / ۹۹درصد) اسپم بودن دارد.

حال، بیایید یک پیام در مورد قرار پزشک بنویسیم و ببینیم آیا مدل آن را به عنوان اسپم یا ham طبقه‌بندی می‌کند.

شکل ۵: نمایش خروجی مدل را در Streamlit
شکل ۵: نمایش خروجی مدل را در Streamlit


همانطور که در بالا می‌بینیم، این پیام احتمال بسیار کمی برای اسپم بودن بر اساس پیش‌بینی‌های ایجاد شده توسط مدل دارد.

توضیح پیش‌بینی‌های LIME

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

برای استفاده از LIME و قرار دادن توضیح LIME در برنامه کاربردی وب، عبارات وارد کردن زیر را به بالای کد اضافه کنید.

from lime.lime_text import LimeTextExplainer

import streamlit.components.v1 as components

ماژول اجزا از Streamlit به ما اجازه می‌دهد تا مولفه‌های HTML سفارشی را در برنامه تعبیه کنیم. ما می‌توانیم یک تصویرسازی با LIME ایجاد کنیم و آن را بر روی یک برنامه Streamlit به عنوان یک مولفه HTML نمایش دهیم.

سپس، می‌توانیم کد زیر را در انتهای آخرین if-block به منظور ایجاد یک دکمه برای توضیح پیش‌بینی‌های مدل اضافه کنیم.

explain_pred = st.button('Explain Predictions')

مقدار متغیر explain_pred زمانی که روی دکمه یک‌بار کلیک شود، روی درست تنظیم خواهد شد. اکنون می‌توانیم یک توضیح متنی را با LIME همان طور که در کد زیر نشان داده شده است، ایجاد کنیم.

if explain_pred:

  with st.spinner('Generating explanations'):

   class_names = ['ham', 'spam']

   explainer = LimeTextExplainer(class_names=class_names)

   exp = explainer.explain_instance(message_text, 

   model.predict_proba, num_features=10)

   components.html(exp.as_html(), height=800)

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

شکل ۶: توضیح پیش‌بینی‌ها با LIME در استریم.
شکل ۶: توضیح پیش‌بینی‌ها با LIME در استریم.


در این نقطه، برنامه کاملا کاربردی است و می‌تواند برای نمایش و توضیح پیش‌بینی‌های ایجاد شده توسط مدل طبقه‌بندی اسپم استفاده شود.

قابلیت‌های اضافی Stramlit

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

  • این Stramlit از فرمان‌های markdown و Latex پشتیبانی می‌کند، که به شما اجازه می‌دهد تا معادلاتی را در یک برنامه کاربردی وب بگنجانید.
  • نرم‌افزار Streamlit به شما این امکان را می‌دهد تا جداول و pandas را با یک خط کد نمایش دهید.
  • «استریم لایت» به شما این امکان را می‌دهد تا نمودارها و تصویرسازی‌ها را از طیف وسیعی از کتابخانه‌ها از جمله «Matplotlib»، «Bokeh»، «Pyplot»، «Pydeck» و حتی «Graphviz» به نمایش بگذارید.
  • برنامه Streamlit به شما این امکان را می‌دهد که به راحتی نقاط روی نقشه را نمایش دهید.
  • «استریم‌لایت» همچنین از تعبیه فایل‌های تصویر، صوتی و تصویری در برنامه‌های شما پشتیبانی می‌کند.
  • برنامه استریم‌لایت، استقرار برنامه‌های متن باز با به اشتراک گذاری streamlit را آسان می‌سازد.

برای فهمیدن بیشتر در مورد کاری که Streamlit می‌تواند انجام دهد، مستندات Streamlit را بررسی کنید.

خلاصه

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

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