مریم محمدی
مریم محمدی
خواندن ۴ دقیقه·۵ ماه پیش

تکنیک لیبل زدن به داده ها- بخش دوم: روش Active Learning

در بخش قبل، روش لیبل زنی به داده ها با استفاده از روش Semi-supervised learning رو بررسی کردیم. در این بخش، نحوه ی لیبل گذاری با استفاده از Active لرنینگ بیان میشه.

در تکنیک لیبل زنی با کمک active learning، سعی بر این است که به نحوی داده ها را برای لیبل خوردن جداسازی کرده به نحوی که در فرآیند train بیشترین اطلاعات را داشته باشیم.

در صورتی که تنها تعداد کمی داده ی لیبل شده داریم و یا مثلا expert ای داریم که با بودجه ی پروژه تعداد کمی داده ی انتخاب شده ی ما را بررسی و لیبل گذاری میکند، این روش کمک میکند که به صورت متعادلتری sample برای لیبل زنی و استفاده در آموزش انتخاب کنیم.

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

نحوه انجام active learning به طور کلی به صورت زیر است:

1-      ابتدا از میان داده های بدون لیبل با کمک active learning sampler داده های خاصی را انتخاب میکنیم.

2-      در مرحله دوم یک annotator مانند انسان یا روش های دیگر این سمپل های خاص لیبل گذاری میشوند.

3-      در مرحله سوم با این داده های جدید، یک دیتاست از داده های لیبل خورده تشکیل میدهد و در مرحله train مدل نهایی مورد استفاده میشود.

4-      چرخه ی بالا از مرحله ی 1 تا 3 دائم تکرار میگردد. تا به تعداد داده های مورد نیاز یا دقت مورد نظر برسیم.

فرآیند تکنیک Active Learning
فرآیند تکنیک Active Learning

بخش اصلی فرآیند active learning نحوه sampling داده هاست که روش های متقاوتی دارد:

1-      Margin Sampling: در این روش لیبل گذاری در داده هایی که بالاترین عدم قطعیت دارند هر بار جدا میشوند.

2-      Cluster-based sampling: در این روش، یک دسته از داده های مختلف/گوناگون انتخاب میشود! این داده ها از طریق cluster شدن داده ها در فضای feature space انتخاب میشوند.

3-      Query by committee: در این روش، مدلهای متفاوتی با کمک داد های لیبل خورده آموزش داده میشود. سپس داده های بدون لیبل با کمک این مدلها تست شده و داده ای که بیشترین disagreement و اختلاف در بین لرنر ها برای لیبل گذاری آن وجود دارد، انتخاب میشود.

4-      Region-based sampling: این روش، جدیدترین روش است. داده ها براساس فیچرها به region های مختلف تقسیم میشوند، سپس با یکی از روش های انتخاب داده ی گفته شده در قبل، لیبل گذاری میشوند.

در ادامه تنها به روش  Margin sampling با جزییات میپردازیم و جزییات روش Margin Sampling برای بقیه روش ها هم صادقه.

Margin sampling: این روش با استفاده از یک classifier بر روی داده هایی که از ابتدا لیبل دارند، یک مدل ساده آموزش میدهد. سپس با استفاده از آن، کم محتمل ترین نمونه بدون لیبل، داده با  score نزدیک به 0.5، که نزدیک به فضای جدا کننده ی داده هاست، برای لیبل گذاری به annotator داده میشود.

انتخاب داده با کمترین مقدار قطعیت
انتخاب داده با کمترین مقدار قطعیت

دوباره با کمک داده های جدید مدل مجدد لرن شده و فرآیند margine sampling و active learning تکرار میگردد.

آموزش مجدد مدل و انتخاب دومین داده بعد از لیبل زنی داده اولیه با annotator
آموزش مجدد مدل و انتخاب دومین داده بعد از لیبل زنی داده اولیه با annotator

وقتی داده ها با استفاده از روش active learning انتخاب میشود، accuracy سیستم خیلی بالاتر میرود. در نمودار زیر accuracy سیستمی که داده های آن با active learning برای لیبل گذاری انتخاب شده است در مقایسه با انتخاب رندم داده ها آمده است.

میزان دقت مدل در حین learning با کمک داده های انتخاب شده در روش active learning
میزان دقت مدل در حین learning با کمک داده های انتخاب شده در روش active learning

نمودار بالا نشان میده که با تکنیک active learning میتوان با لیبل گذاری تعداد کمتری از داده به accuracy بالاتری رسید.

در روش های sampling همیشه داده ای برای لیبل زنی توسط annotator انتخاب میشه که از فضای لیبل خورده در حقیقت دورتره! این به این معنیه که داده ی انتخاب شده، در feature space توسط سایرین پوشش داده نشده که در موردش بیشترین ابهامه، بنابراین با انتخابش و لیبل زنی بر روی اونها میتونیم بیشترین فضای فیچرها رو پوشش داده باشیم و با همین حربه دقت مدل مون بالا میره.

نمونه کد active learning با کمک margin sampling در ادامه آمده است.

from sklearn.svm import SVC from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split import numpy as np iris = datasets.load_iris() # Load a dataset (e.g., the Iris dataset) X = iris.data y = iris.target # Split the data into initial labeled and unlabeled sets X_labeled, X_unlabeled, y_labeled, y_unlabeled = train_test_split(X, y, test_size=0.9, random_state=42) clf = SVC(probability=True) # Initialize the SVM classifier clf.fit(X_labeled, y_labeled) # Train the classifier on initial data # Active learning loop for _ in range(10): # Repeat 10 times # Predict probabilities on the unlabeled data y_prob = clf.predict_proba(X_unlabeled) # Calculate the margin for each instance margins = np.abs(y_prob[:, 0] - y_prob[:, 1]) query_idx = np.argmin(margins) # Select the smallest margin # Label the selected instance: X_labeled = np.vstack([X_labeled, X_unlabeled[query_idx]]) y_labeled = np.hstack([y_labeled, y_unlabeled[query_idx]]) X_unlabeled = np.delete(X_unlabeled, query_idx, axis=0)     y_unlabeled = np.delete(y_unlabeled, query_idx) clf.fit(X_labeled, y_labeled) # Retrain the classifier accuracy = clf.score(X, y) # Evaluate the final classifier print(&quotFinal classifier accuracy:&quot, accuracy)

در این مطلب روش active learning برای لیبل زنی به داده های بدون لیبل رو دیدم. در بخش سوم نحوه لیبل زنی روش Weak supervision رو هم با هم میبینیم. از اینکه وقت خود را در اختیار من قرار دادین بسیار سپاس گزارم. امیدوارم این مطلب برای شما موثر و مفید باشد.

active learninglabelingmachine learning
شاید از این پست‌ها خوشتان بیاید