ترنسفورمرها
آموزش پردازش زبان طبیعیآموزش‌های پیشرفته هوش مصنوعیپردازش زبان طبیعی

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

    0

    در این قسمت از دوره نگاهی خواهیم داشت به مدل‌های ترنسفورمرها و کاربردهای آن‌ها و همچنین از یکی از ابزارهای کتابخانه Transformers هاگینگ فیس به نام pipeline استفاده خواهیم کرد.

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

    ترنسفورمرها همه جا هستند!

    مدل‌های ترنسفورمرها در حل انواع مسائل پردازش زبان طبیعی به کار گرفته می‌شوند. در زیر نام شماری از شرکت‌ها که از هاگینگ فیس و مدل‌های ترنسفورمرها استفاده می‌کنند و با به اشتراک گذاشتن مدل‌های خود در انجمن‌ها نیز فعالیت دارند را مشاهده می‌کنید:

    ترنسفورمرها

    کتابخانه ترنسفورمرها امکان ایجاد و استفاده از مدل‌هایی که این شرکت‌ها به اشتراک می‌گذارند را فراهم می‌کند. Model Hub نیز شامل هزاران مدل آموزش دیده است که همه می‌توانند آن‌ها را بارگیری و استفاده کند. همچنین می توانید مدل‌های خود را در این هاب بارگذاری کنید!

    Hugging Face Hub محدود به مدل‌های ترنسفورمرها نیست. همه می‌تواند هر نوع مدل یا دیتاستی که می‌خواهند را در آن به اشتراک بگذارند! با ثبت نام در huggingface.co از تمام ویژگی‌های موجود بهره‌مند خواهید شد!

    پیش از بررسی نحوه کارکرد مدل‌های ترانسفورمرها، بیایید چند مثال از روش استفاده از آن‌ها در حل برخی از مسائل جالب در حوزه NLP ببنیم.

    کار با Pipelineها

    pipeline اصلی‌ترین شی در کتابخانه ترنسفورمرها است. pipeline مدل را به مراحل پیش‌پردازش ها و پس‌پردازش های ضروری متصل می‌کند و به ما امکان می‌دهد هر متنی را به طور مستقیم وارد کنیم و پاسخی قابل قبول دریافت کنیم:

    می‌توان بیش از یک جمله به این تابع داد:

    pipeline  به صورت پیش‌فرض یک مدل خاص و آموزش‌دیده که برای تحلیل احساسات به زبان انگلیسی تنظیم شده است را انتخاب می‌کند. هنگامی که شی classifier را ایجاد می‌کنید، مدل بارگیری و ذخیره می‌شود. اگر دستور را دوباره اجرا کنید، به جای آن از مدل ذخیره‌شده استفاده می‌شود و نیازی به بارگیری مجدد مدل نیست.

    وقتی متنی به تابع pipeline می‌دهید سه مرحله اصلی اتفاق می‌افتد:

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

    برخی از روال‌های پردازشی Pipeline موجود عبارتند از:

    • feature-extraction (که بردار نگاشت متن را به عنوان ورودی می‌گیرد)
    • fill-mask
    • NER (named entity recognition)
    • question-answering
    • sentiment-analysis
    • summarization
    • text-generation
    • translation
    • zero-shot-classification

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

    Zero-shot classification

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

    دلیل نام‌گذاری این روال پردازشی این است که برای استفاده از آن نیازی به تنظیم دقیق مدل روی داده ها نیست. zero-shot-classification می تواند به طور مستقیم مقادیر احتمال را برای لیست برچسب‌های دلخواه شما به دست آورد!

    Text generation

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

    با اضافه کردن آرگومانی به نام num_return_sequences می‌توانید تعداد جملاتی که باید تولید شوند را مشخص کنید. همچنین با استفاده از آرگومان max_length نیز می‌توانید طول متن تولیدشده را تعیین نمایید.

    سعی کنید با استفاده از آرگومان‌های num_return_sequences و max_length کدی بنویسید که دو جمله ۱۵ کلمه‌ای تولید کند.

    استفاده از مدل‌های هاب در روال پردازشی

    در مثال‌های قبلی از مدل‌های پیش‌فرض برای حل مسئله استفاده کردیم، اما می‌توان به جای این مدل‌های پیش‌فرض، مدل خاصی را از هاب انتخاب کرد و در روال پردازشی یک مسئله مثل تولید متن به کار برد. به این منظور کافی است به Model Hub بروید و بر روی تگ مربوطه در سمت چپ کلیک کنید تا مدل‌های مربوط به هر مسئله برای شما نمایش داده شوند. ب

    بیایید مدل distilgpt2 را امتحان کنیم. در زیر نحوه بارگیری این مدل در همان روال پردازشی قبلی را مشاهده می‌کنید:

    می‌توانید با کلیک بر روی تگ‌های language ، مدلی را انتخاب کنید که متن را به زبان دلخواه شما تولید کند. Model Hub برای مدل‌های چند زبانه، نقاط کنترلی دارد که از چندین زبان پشتیبانی می‌کنند.

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

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

    The Inference API

    با استفاده از Inference API که در وب‌سایت هاگینگ فیس در درسترس است، می‌توان همه مدل‌ها را مستقیماً و در مرورگر آزمون کرد. در این صفحه می‌توانید با وارد کردن متن دلخواه خود، نحوه پردازش داده‌های ورودی توسط هر مدل را مشاهده کنید.

    اگر Inference API مورد استفاده در این ابزارک را برای جریان کار خود نیاز دارید، می‌توانید آن را از وب‌سایت هاگینگ فیس خریداری کنید.

    Mask filling

    روال پردازشی بعدی که به سراغ آن می‌رویم fill-mask است. مثال بعدی درباره پر کردن جاهای خالی درون متن است:

    آرگومان top_k تعداد حدس‌هایی که می‌خواهید نمایش داده شوند را تعیین می‌کنید. توجه داشته باشید که در اینجا مدل جای کلمه <mask> را پر می‌کند که اغلب به آن mask token گفته می‌شود. سایر مدل‌های mask-filling ممکن است توکن‌های دیگری برای جای خالی متن داشته باشند، بنابراین بهتر است همیشه هنگام بررسی مدل‌های دیگر، از کلمه‌ای که برای بخش ماسک یا همان جای خالی استفاده می‌شود، اطمینان حاصل کنید. یکی از راه‌های بررسی کلمه ماسک، پیدا کردن نام مدل و کد آن در Inference API است.

    مدل bert-base-cased را در هاب جستجو کرده و کلمه ماسک آن را در ابزارک Inference API پیدا کنید. این مدل چه کلمه‌ای را در جمله موجود در مثال بالا پیش‌بینی می‌کند؟

    Named entity recognition

    تشخیص نام موجودیت‌ها یا NER مسئله‌ای است که مدل در آن باید تشخیص دهد که هر قسمت از متن ورودی با کدام‌یک از موجودیت‌های مختلف مانند اشخاص، مکان‌ها یا سازمان‌ها مطابقت دارد. بیایید یک مثال از این مسئله ببینیم:

    در اینجا این مدل به درستی مشخص کرده است که کلمه Sylvain  نام یک شخص (PER)، Hugging Face نام یک سازمان (ORG) و Brooklyn  نام یک مکان (LOC) است.

    ما آرگومان grouped_entities = True در تابع ایجاد روال پردازشی تعریف کردیم تا به روال پردازشی بگوییم که بخش‌هایی از جمله را که مربوط به یک موجودیت خاص هستند، با هم در یک گروه قرار دهد. در اینجا مدل “Hugging” و “Face” را به عنوان یک سازمان واحد به درستی گروه‌بندی کرده است. در حقیقت ، همانطور که در فصل بعدی خواهیم دید، در مرحله پیش پردازش بعضی از کلمات در جمله به قطعات کوچک‌تری نیز تقسیم می‌شوند. به عنوان مثال، نام Sylvain  به چهار قطعه تقسیم می‌شود: S ، ##yl ، ##va ، و in##. اما همانطور که می‌بینید روال پردازشی در مرحله پساپردازش با موفقیت آن قطعات را دوباره گروه‌بندی کرده است.

    در Model Hub دنبال مدلی بگردید که بتواند اجزای جمله یا نقش دستوری کلمات در جملات انگلیسی را (که به اختصار POS نامیده می شود) شناسایی و برچسب‌گذاری کند. این مدل برای کلمات به کار رفته در جمله بالا چه نقش‌هایی را پیش‌بینی می‌کند؟

    پاسخ دادن به سوال

    روال پردازشی question-answering با استفاده از اطلاعاتی که به آن داده می‌شود به سوالات پرسیده‌شده پاسخ می‌دهد:

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

    خلاصه‌نویسی

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

    در این مسئله نیز همانند مسئله تولید متن، می‌توانید حداکثر و حداقل طول متن خلاصه‌شده را به کمک آرگومان‌های max_length و min_length تعیین کنید.

    ترجمه

    برای ترجمه یک متن می‌توانید با ذکر جفت زبان مدنظر خود در نام مدل (برای مثال، “translation_en_to_fr”)، از مدل پیش‌فرض استفاده کنید. روش دیگر این است که از Model Hub مدل مدنظر خود را انتخاب کنید. در مثال زیر می‌خواهیم متنی فرانسوی را به انگلیسی ترجمه کنیم:

    در این مسئله نیز همچون مسائل تولید متن و خلاصه‌نویسی می‌توانید حداکثر و حداقل طول متن خروجی را به کمک آرگومان‌های max_length و min_length تعیین کنید.

    مدل‌های ترجمه برای زبان‌های دیگر را نیز جستوجو کنید و سعی کنید جمله بالا را به چندین زبان دیگر نیز ترجمه کنید.

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

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

    آموزش پردازش زبان طبیعی

    منظور از کلان داده چیست؟

    مقاله قبلی

    بررسی تاثیر کنش‌های ساده در بروز رفتارهای پیچیده با شبکه بولی

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    نظرات

    پاسخ دهید

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