انتشار «تنسورفلو 2.۰» (TensorFlow 2.0) برای فعالان حوزه «یادگیری ماشین» (Machine Learning) بسیار جالب توجه بود. برای آشنایی با این کتابخانه قدرتمند و آگاهی از تغییراتی که در نسخه 2.۰ داشته است، مطالعه مطلب «تنسورفلو (TensorFlow) — از صفر تا صد» توصیه می‌شود. در این مطلب، از کتابخانه تنسورفلو برای کار با نوع داده متنی و تولید متن استفاده شده است. متن استفاده شده در این مطلب از مخزن «پروژه گوتنبرگ» (Project Gutenberg) برداشته شده است و کلیه کدهای لازم برای پیاده‌سازی در مطلب آورده شده‌اند. با توجه به اینکه در ادامه از یک «شبکه عصبی بازگشتی» (Recurrent Neural Network) نیز استفاده شده، به علاقه‌مندان پیشنهاد می‌شود برای درک بهتر مفهوم این مطلب، به این منبع [+] مراجعه کنند و با این نوع از «شبکه‌های عصبی» (Neural Networks) بیشتر آشنا شوند. اما در ادامه، به روش تولید متن (Text Generating) با تنسورفلو پرداخته شده است.

راه‌اندازی

ابتدا باید موارد مورد نیاز برای انجام این پروژه را دانلود کرد؛ با توجه به اینکه از تنسورفلو GPU در ادامه استفاده خواهد شد، در کد زیر از دستور !pip install tensorflow-gpu==2.0.0-alpha0 استفاده شده است. بنابراین، طی فرایند نصب، نیاز است که GPU‌های موجود را تایید کرد (برای انجام این پروژه حقیقتا نیاز به GPU است، زیرا استفاده از آن منجر به صرفه‌جویی قابل توجهی در زمان می‌شود).

اگر همه چیز به ترتیب خوبی پیش رفته باشد، کاربر می تواند مشاهده کند که در حال استفاده از TensforFlow 2.0.0-alpha0 است و اگر کد بالا را روی Google’s Colab اجرا کند، بخش جذابی از دستگاه GPU که Tesla T4 نامیده می‌شود مورد استفاده قرار می‌گیرد. بهتر است کاربر لیست دستگاه‌ها را به ویژه در Colab بررسی کند، زیرا گاهی فراموش می‌کند تا نوع «سیستم زمان اجرا» ( Runtime System) را تغییر دهد؛ بنابراین، چک کردن لیست دستگاه‌ها به این کار کمک کرده و به نوعی یادآوری آن است.

در این مثال، Colab با توجه به اینکه tensorflow-gpu دانلود و نصب شده، از GPU برای انجام کارها استفاده می‌کند؛ در غیر این صورت، پیش‌فرض آن CPU است. برای اجرای کد در Google Colab [+]، یا باید نوت‌بوک را به طور مستقیم از طریق منو File > Upload Notebook روی سایت Colab آپلود و یا به سادگی روی آیکون مربوطه در سمت چپ بالای نوت‌بوک کلیک کرد. برای دانلود متن در Colab، می‌توان از قطعه کد زیر استفاده کرد:

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

طول متن باید ۸۸۶,۸۰۹ کاراکتر باشد، بنابراین نمونه بزرگی نیست. از روی کنجکاوی، می‌توان تعداد کلمات را نیز بررسی کرد:

باید 1۵32۶۰ کلمه در متن وجود داشته باشد؛ بنابراین آنقدرها هم که به نظر می‌رسید متن طولانی نیست. فقط برای حصول اطمینان  از اینکه متن آنچه را بدان داده شده می‌خواند، سرعت 1۰۰ کلمه ابتدایی متن بررسی می‌شود.

آماده‌سازی متن

برای آماده‌سازی متن، باید یک بردار از کاراکترهای یکتای مرتب ساخت. در این متن، 34 مورد از آن‌ها باید وجود داشته باشد.

در ادامه، نگاهی به نمونه نگاشت شده برای مشاهده ارائه‌های عددی از این متن انداخته می‌شود:

داده‌های آموزش و اعتبارسنجی از متن ساخته می‌شوند (باید اطمینان حاصل کردد که بخش آموزش قابل تقسیم به اندازه دسته باشد؛ که در اینجا ۶4 است) و سپس بررسی می‌شود که آیا شکل‌ها همانطور که انتظار می‌رفت هستند یا خیر.

ساخت مدل تولید متن (Text Generating) با تنسورفلو

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

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

در نهایت، مدل ساخته می‌شود. در اینجا، از دو لایه LSTM استفاده می‌شود.

اگر این مدل در «پلتفرم گوگل کلود» (Google Cloud Platform | GCP) تنظیم شود، امکان دارد که کاربر با پیغام خطای زیر مواجه شود.

<tensorflow.python.keras.layers.recurrent.UnifiedLSTM object …>: Note that this layer is not optimized for performance. Please use tf.keras.layers.CuDNNLSTM for better performance on GPU.

اگرچه، CuDNNLSTM موجود نیست، امکان دارد این خطا به خاطر استفاده از نسخه قبلی تنسورفلو باشد؛ زیرا LSTM در حال حاضر برای کارایی در نسخه 2.۰ بهینه شده است؛ دلیل دیگر وقوع این خطا ممکن است در دسترس قرار نگرفتن CuDNNLSTM باشد.

اجرای مدل

در ادامه، کد مربوط به بررسی شکل خروجی و مدل، و تعریف «زیان» (Loss) آمده است.

اکنون از بهینه‌ساز «آدام» (Adam Optimizer) استفاده می‌شود و آموزش پس از 1۰ دوره، هنگامی که خطای اعتبارسنجی بهبود پیدا نکرد، متوقف می‌شود.

اکنون، باید برای ذخیره‌سازی چک‌پوینت‌ها (Checkpoints) و اجرای برنامه، پوشه ساخت.

در این مثال، آموزش روی «دوره» (Epoch) بیست و پنج متوقف می‌شود. این یعنی آخرین باری که خطای اعتبارسنجی بهبود پیدا کرده، دوره 25 بوده است. نمودار زیر، آنچه به وقوع پیوسته را به تصویر می‌کشد؛ در واقع، در ابتدا خطای اعتبارسنجی حتی بهتر از خطای آموزش بوده است (زیان اعتبارسنجی برای یک دوره با استفاده از بهبود مدل آموزش محاسبه می‌شود، زیرا در پایان دوره و جایی که زیان آموزش با استفاده از میانگین زیان‌ها در همه دسته‌ها در دسترس است و در آغاز آن، ممکن است منجر به کمتر بودن خطای اعتبارسنجی شود). اما در طول زمان، خطای مجموعه‌های آموزش و اعتبارسنجی واگرا می‌شوند و خطای آموزش شروع به پایین رفتن می‌کند، در حالیکه خطای اعتبارسنجی ابتدا ثابت می‌ماند و پس از مدتی بیشتر می‌شود.

تولید متن (Text Generating) با تنسورفلو

تولید متن

اکنون، باید وزن‌ها را از آخرین چک‌پوینت‌ها به روز رسانی کرد (یا خط load.weights را در چک‌پوینت دیگری تنظیم کرد) و یک متن هزار کاراکتری تولید کرد.

خروجی دریافتی به صورت زیر است.

تولید متن (Text Generating) با تنسورفلو

این خروجی، برای 1۰ دقیقه پردازش با یک GPU تنها و با استفاده از متن نمونه کمتر از یک میلیون کاراکتر، نسبتا خوب محسوب می‌شود.

اگر مطلب بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

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