طبقه‌بندی متن با یادگیری عمیق

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

طبقه‌بندی متن با TensorFlow

تو این بخش اپلیکیشن یادگیری انتقال رو با TensorFlow Hub و Keras ارائه میدیم. دیتاست IMDB که برای این کار استفاده شده حاوی ۵۰ هزار نقد و نظر در مورد فیلم‌های سینماییه که از دیتابیس فیلم‌های اینترنتی جمع آوری شده. ۵۰ درصد از این دیتاست برای آموزش و ۵۰ درصد بقیه برای تست مدل استفاده میشه. دیتاست مربوط به آموزش و تست طوری متعادل‌اند که هر کدوم تعداد برابری از نظرات مثبت و منفی رو شامل میشن.

حالا بیاید کارمون رو با ایمپورت کتابخونه های ضروری شروع کنیم:

import numpy as np

import tensorflow as tf

!pip install tensorflow-hub
!pip install tensorflow-datasets
import tensorflow_hub as hub
import tensorflow_datasets as tfds

print("Version: ", tf.__version__)
print("Eager mode: ", tf.executing_eagerly())
print("Hub version: ", hub.__version__)
print("GPU is", "available" if tf.config.experimental.list_physical_devices("GPU") else "NOT AVAILABLE")

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

# Split the training set into 60% and 40%, so we'll end up with 15,000 examples
# for training, 10,000 examples for validation and 25,000 examples for testing.
train_data, validation_data, test_data = tfds.load(
    name="imdb_reviews", 
    split=('train[:60%]', 'train[60%:]', 'test'),
    as_supervised=True)

همونطوری که قبلاً هم اشاره کردیم ۵۰ درصد داده‌ها برای آموزش و ۵۰ درصد بقیه برای تست استفاده میشن. حالا از این ۵۰ درصد مربوط به دیتاست آموزش، ۴۰ درصدش برای validation و ۶۰ درصدش برای تست استفاده میشه.

داده‌های آموزشی: ۱۵۰۰۰

داده‌های اعتبارسنجی: ۱۰۰۰۰

داده‌های آزمایشی: ۲۵۰۰۰

شناسایی و کشف داده

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

train_examples_batch, train_labels_batch = next(iter(train_data.batch(10)))
train_examples_batch

حالا ۱۰ برچسب اول دیتاست رو چاپ می‌کنیم:

train_labels_batch

ساخت مدل طبقه‌بندی متن

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

embedding = "https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1"
hub_layer = hub.KerasLayer(embedding, input_shape=[], 
                           dtype=tf.string, trainable=True)
hub_layer(train_examples_batch[:3])

حالا دیگه نوبت اینه که مدل رو روی دیتاست کامل ایجاد کنیم:

model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(1))

model.summary()

کامپایل مدل

تو این بخش مدل رو با استفاده از تابع خطا  loss functionو بهینه‌ساز (optimizer) adam کامپایل می‌کنیم:

model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])

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

مدل رو برای ۲۰ دور (epoch) در یه مجموعه کوچک با ۵۱۲ نمونه آموزش میدیم. این ۲۰ بار تکرار برای همه نمونه‌های آموزشی (x_train و y_train) هست. در طول آموزش، میزان خطا و دقت ۱۰۰۰۰ نمونه مربوط به داده‌های validation رو مشاهده کنید:

history = model.fit(train_data.shuffle(10000).batch(512),
                    epochs=20,
                    validation_data=validation_data.batch(512),
                    verbose=1)

ارزیابی مدل

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

results = model.evaluate(test_data.batch(512), verbose=2)

for name, value in zip(model.metrics_names, results):
  print("%s: %.3f" % (name, value))

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

برای هرگونه سوال در زمینه آموزش ها فقط کافیه روی لینک واتساپ یا تلگرام (در زیر همین پست) کلیک کنید. یا با شماره تماس بالای صفحه سایت تماس بگیرید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...