هوش مصنوعی

ده پروژه یادگیری ماشین که واقعاً چیزی یادتان می‌دهند

نویسنده: Hadi ZareZadeh۲۳ اردیبهشت ۱۴۰۵۶۲۱۱ بازدید
ده پروژه یادگیری ماشین که واقعاً چیزی یادتان می‌دهند

اگر «پروژه‌های یادگیری ماشین» را جست‌وجو کنید، صد فهرست به دستتان می‌رسد که در واقع آموزش‌هایی با لباس مبدل‌اند: یک دیتاست تمیز را بارگذاری کن، .fit() را صدا بزن، دقت را چاپ کن، تمام. این پروژه‌ها تقریباً هیچ‌چیز درباره یادگیری ماشین واقعی به شما یاد نمی‌دهند، چون یادگیری ماشین واقعی بیشتر درباره بخش‌های کثیفی است که این آموزش‌ها از آن‌ها می‌پرند.

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

چه چیزی یک پروژه را ارزشمند می‌کند

قبل از فهرست، یک فیلتر. یک پروژه وقتی ارزش وقتتان را دارد که حداقل سه ویژگی از این‌ها را داشته باشد:

  • داده تمیز دستتان داده نمی‌شود.
  • باید یک معیار ارزیابی را انتخاب و از آن دفاع کنید.
  • خطر واقعی نشت داده وجود دارد که باید جلویش را بگیرید.
  • به چیزی قابل‌استفاده ختم می‌شود — یک API، یک داشبورد، یا گزارشی که یک غیرمتخصص هم بفهمد.
یک مدل متوسطِ تمام‌شده و مستقرشده بیشتر از یک مدل درخشان که داخل یک نوت‌بوک زاده و دفن می‌شود به شما یاد می‌دهد.

ده پروژه

۱. پیش‌بینی ریزش مشتری از خروجی‌های خام

یک CSV کثیف بگیرید (یا یکی از یک ابزار واقعی خروجی بگیرید) و پیش‌بینی کنید چه کسی لغو خواهد کرد. درس اینجا دسته‌بند نیست — مدیریت مقادیر گمشده، کدگذاری ویژگی‌های دسته‌ای، و کشف این است که «روزهای گذشته از ثبت‌نام» اگر مراقب نباشید، پاسخ را لو می‌دهد. یاد می‌گیرید چرا یک مدل ریزش با دقت ۹۹٪ معمولاً یک مدل ۹۹٪ خراب است.

۲. یک دسته‌بند هرزنامه/سمیت بسازید و آستانه را مستقر کنید

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

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

pipe = Pipeline([
    ("tfidf", TfidfVectorizer(ngram_range=(1, 2), min_df=2)),
    ("clf", LogisticRegression(max_iter=1000, class_weight="balanced")),
])
pipe.fit(train_texts, train_labels)

۳. یک پیش‌بین سری زمانی که نتوانید در آن تقلب کنید

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

۴. دسته‌بند تصویر با یادگیری انتقالی

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

۵. یک پیشنهادگر که با مسئله شروع سرد روبه‌رو می‌شود

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

۶. دیتاست خودتان را اسکرپ، تمیز و تحلیل کنید

موضوعی را که برایتان مهم است انتخاب کنید، داده‌اش را خودتان اسکرپ کنید و به یک سوال واقعی پاسخ دهید. نود درصد این پروژه تمیزکاری است. همین نسبت دقیقاً درست است — بازتاب کار واقعی است.

۷. یک مدل سرتاسری پشت یک API واقعی

هر مدلی از بالا را بردارید و سرویس‌اش کنید. اینجا جایی است که برنامه‌نویس‌ها می‌درخشند و دانشمندان داده خالص دست‌وپا می‌زنند.

from fastapi import FastAPI
import joblib

app = FastAPI()
model = joblib.load("model.joblib")

@app.post("/predict")
def predict(features: dict):
    score = float(model.predict_proba([list(features.values())])[0][1])
    return {"probability": score}

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

۸. نتیجه اصلی یک مقاله کوچک را بازتولید کنید

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

۹. یک تشخیص‌دهنده ناهنجاری برای داده واقعی و خسته‌کننده

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

۱۰. یک ابزار کوچک مبتنی بر مدل زبانی با حفاظ

چیزی مفید روی یک مدل زبانی بسازید — یک ابزار پرسش‌وپاسخ سند، یک دسته‌بند، یک خلاصه‌ساز — اما بخش‌های بی‌زرق‌وبرق را اضافه کنید: نسخه‌بندی پرامپت، ارزیابی روی یک مجموعه آزمون ثابت، و مدیریت خروجی‌های بد یا خالی. تازگی‌اش زود می‌پرد؛ مهندسی‌اش درس است.

اشتباهات رایج

  • بهینه‌سازی دقت روی داده نامتوازن. اگر ۹۵٪ موارد منفی باشند، مدلی که همیشه می‌گوید «منفی» ۹۵٪ دقیق و ۱۰۰٪ بی‌فایده است. از precision، recall، F1 یا AUC استفاده کنید.
  • تنظیم روی مجموعه آزمون. لحظه‌ای که برای تصمیم‌گیری به عملکرد آزمون سرک می‌کشید، آن مجموعه آلوده می‌شود. یک نگه‌داشت واقعی داشته باشید که فقط یک‌بار به آن دست می‌زنید.
  • پریدن از روی پایه. همیشه با چیزی پیش‌پاافتاده مقایسه کنید. اگر مدل عمیق شما به‌زحمت از «میانگین را پیش‌بینی کن» بهتر است، چیز مهمی یاد گرفته‌اید.

بهترین شیوه‌ها

  • قبل از کدنویسی یک README یک‌پاراگرافی بنویسید که مسئله، معیار و نتیجه را بیان کند.
  • داده و مدل را نسخه‌بندی کنید، نه فقط کد را.
  • به خطاهایتان نگاه کنید. ده پیش‌بینی بدتر را چاپ کنید و بپرسید چرا شکست خوردند.
  • هر پروژه را به یک مخاطب تحویل دهید، حتی اگر یک اسکرین‌شات در یک پست وبلاگ باشد.

جمع‌بندی

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