Filter by دسته‌ها
chatGTP
ابزارهای هوش مصنوعی
اخبار
گزارش
تیتر یک
چندرسانه ای
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
دانش روز
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
رویدادها
جیتکس
کاربردهای هوش مصنوعی
کتابخانه
اشخاص
شرکت‌های هوش مصنوعی
محصولات و مدل‌های هوش مصنوعی
مفاهیم
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
مقاله
 آموزش پردازش زبان طبیعی با اکوسیستم هاگینگ فیس ؛ مدل ها (قسمت سوم فصل دوم)

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

زمان مطالعه: 3 دقیقه

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

ایجاد ترنسفورمر

اولین اقدام برای راه‌اندازی مد‌‌‌‌‌ل برت این است که یک شیء از کانفیگ configuration object بارگذاری کنیم:

from transformers import BertConfig, TFBertModel

# Building the config
config = BertConfig()

# Building the model from the config
model = TFBertModel(config)

این کانفیگ حاوی ویژگی‌های بسیاری است که برای ساخت مد‌‌‌‌‌‌‌ل استفاده می‌شوند:

print(config)

.

BertConfig {
  [...]
  "hidden_size": 768,
  "intermediate_size": 3072,
  "max_position_embeddings": 512,
  "num_attention_heads": 12,
  "num_hidden_layers": 12,
  [...]
}

چون تا بدین‌جای کار نمی‌دانید که این ویژگی‌ها چه کارکردی دارند، باید برخی از آنها را بشناسید. ویژگی «hidden_size» اندازه بردار «hidden_states» را تعریف می‌کند، اما «num_hidden_layers» تعداد لایه‌های مد‌‌‌‌‌‌‌ل ترنسفورمر را تعریف می‌کند.

[irp posts=”20237″]

روش‌های بارگذاری مختلف

ساخت مد‌‌‌‌‌‌‌ل از پیکربندی پیش‌فرض آن را با مقادیر تصادفی راه می‌اندازد:

from transformers import BertConfig, TFBertModel

config = BertConfig()
model = TFBertModel(config)

# Model is randomly initialized!

مد‌‌‌‌‌‌‌‌ل می‌تواند در این حالت استفاده شود، اما خروجی مناسبی نخواهد داشت. در ابتدا باید آموزش‌های لازم را ببیند. امکان آموزش مدل از همان نقطه‌ی اول نیز وجود دارد. اما آن‌طور که در فصل اول ملاحظه کردید (لینک دسترسی به همه قسمت‌های این دوره آموزشی در انتهای مطلب قرار دارد)، این کار به زمان و داده‌های بسیاری نیاز دارد. برای اینکه از کارهای تکراری و غیرضروری پرهیز کنیم، باید مدل‌های آموزش دیده را به اشتراک گذاشته و مجدداً از آنها استفاده کنیم. بارگذاری مدل ترنسفورمری که از پیش آموزش دیده، کار آسانی است. این کار با روش from_pretrained  قابل انجام است:

from transformers import TFBertModel
model = TFBertModel.from_pretrained("bert-base-cased")

همان‌طور که پیشتر مشاهده کردید، امکان جایگزین‌سازی TFBertModel با کلاس TFAutoModel وجود دارد. از این به بعد باید این اقدام را در دستور کارمان قرار دهیم. اگر کدتان برای یک چک‌پوینت در نظر گرفته شده است، باید با چک‌پوینت دیگر نیز بدون مشکل عمل کند. حتی در صورتی که معماری متفاوت باشد، این عمل موثر واقع می‌شود (البته در صورتی که چک‌پوینت برای کار مشابهی آموزش دیده باشد؛ مثلاً عمل تحلیل احساسات).

در نمونه کد بالا، از BertConfig استفاده نشد؛ بلکه یک مدلِ از پیش آموزش یافته با استفاده از bert-base-cased بارگذاری شد. این یک چک‌پوینت نمونه است که به دست نویسندگان برت آموزش یافته است. جزئیات بیشتر در کارت مدل قرار داده شده است. این مدل با تمامی وزن‌های چک‌پوینت به اجرا درمی‌آید و امکان استفاده مستقیم از آن برای نتیجه‌گیری وجود دارد. همچنین، در کارهای جدید نیز به طور دقیق تنظیم Fine-tune می‌شود. زمانی می‌توان به نتایج خوبی دست پیدا کرد که از وزن‌هایِ از پیش آموزش یافته برای پیاده‌سازی عمل آموزش استفاده کنیم.

وزن‌ها دانلود شده و در پوشه «cache» ذخیره شده‌اند. می‌توانید پوشه اختصاصی خودتان را با تنظیم متغیر محیط HF_HOME  ایجاد کنید. نام  استفاده شده برای بارگذاری مدل می‌تواند نام هر مدلی در Model Hub باشد؛ به شرطی که با معماری برت سازگار باشد. کل لیست چک‌پوینت‌های برت در این لینک قرار داده شده است.

روش‌های ذخیره‌سازی

ذخیره‌سازی مدل نیز مثل بارگذاری آن ساده است. باید از روش save_pretrained برای انجام این کار استفاده کرد که شباهت بسیاری به روش from_pretrained دارد:

model.save_pretrained("directory_on_my_computer")

این کار باعث ذخیره‌سازی دو فایل در دیسک می‌شود:

ls directory_on_my_computer
config.json tf_model.h5

اگر به فایل config.json نگاه کنید، با ویژگی‌های لازم برای ساخت معماری مدل آشنا خواهید شد. این فایل حاوی متاداده نیز می‌باشد؛ برای نمونه، منشاء چک‌پوینت و نسخه ترنسفورمر مورد استفاده در هنگام ذخیره چک‌پوینت آخر از جمله این داده‌ها هستند. فایل tf_model.h5 با عنوان state dictionary شناخته می‌شود و دربرگیرنده‌ی کلیه وزن‌های مدل است. این دو فایل بارها و بارها به کار برده می‌شوند. این نوع پیکربندی برای شناخت معماری مدل ضروری است، اما وزن‌های مدل پارامترهای مدل شما هستند.

استفاده از مدل ترنسفورمر برای استنباط

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

sequences = [
  "Hello!",
  "Cool.",
  "Nice!"
]

توکن‌کننده اینها را به شاخص‌های واژگانی تبدیل می‌کند که معمولاً input Ids نام دارند. هر توالی لیستی از اعداد است. خروجی نهایی به ترتیب زیر است:

encoded_sequences = [
  [ 101, 7592,  999,  102],
  [ 101, 4658, 1012,  102],
  [ 101, 3835,  999,  102]
]

لیستی از توالی‌های رمزگذاری شده در زیر آورده شده است. تنسورها فقط اَشکال مستطیلی (ماتریسی فکر کنید!) را می‌پذیرند.  آرایه بالا شکل مستطیلی دارد؛ بنابراین، تبدیل آن به تنسور کار آسانی است:

import tensorflow as tf
model_inputs = tf.constant(encoded_sequences)

استفاده از تنسورها به عنوان ورودی مدل

تنسورها به آسانی در مدل‌ها به کار برده می‌شوند. مدل با ورودی‌های آن فراخوانی می‌شود:

output = model(model_inputs)

مدل پذیرایِ آرگومان‌های بسیار متفاوتی است، اما فقط input IDها ضرورت دارند. در فصول بعد به توضیح کارکرد سایر آرگومان‌ها و زمان نیاز به آنها خواهیم پرداخت. اما در ابتدا باید نگاه دقیق‌تری به توکن‌کننده‌ها بیندازیم.

از طریق لینک زیر می‌توانید به قسمت‌های دیگر دوره آموزشی پردازش زبان طبیعی دسترسی داشته باشید:

[button href=”https://hooshio.com/%D8%B1%D8%B3%D8%A7%D9%86%D9%87-%D9%87%D8%A7/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B7%D8%A8%DB%8C%D8%B9%DB%8C/” type=”btn-default” size=”btn-lg”]آموزش پردازش زبان طبیعی[/button]

میانگین امتیاز / 5. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
[wpforms id="48325"]