خانه / هوش مصنوعی (AI) / راهنمای عملی کار با Hugging Face Transformers: رایج‌ترین تسک‌ها از Pipeline تا استفاده مستقیم از مدل

راهنمای عملی کار با Hugging Face Transformers: رایج‌ترین تسک‌ها از Pipeline تا استفاده مستقیم از مدل

راهنمای عملی کار با Hugging Face Transformers: رایج‌ترین تسک‌ها از Pipeline تا استفاده مستقیم از مدل

نویسنده:

انتشار:

به‌روزرسانی:

تعداد نظرات: 0

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

این مقاله رایج‌ترین سناریوهایی را که هنگام کار با کتابخانه‌ Transformers از Hugging Face با آن‌ها سروکار دارید، نشان می‌دهد. مدل‌های موجود انواع تنظیمات را پوشش می‌دهند و برای طیف وسیعی از کاربردها قابل استفاده‌اند. در اینجا ساده‌ترین نمونه‌ها را می‌بینید؛ از جمله پرسش‌وپاسخ، طبقه‌بندی دنباله‌ها، شناسایی موجودیت‌های نام‌دار و موارد دیگر.

این مثال‌ها از auto-modelها استفاده می‌کنند؛ کلاس‌هایی که براساس یک چک‌پوینت مشخص، معماری درست مدل را به‌طور خودکار انتخاب و نمونه‌سازی می‌کنند. برای اطلاعات بیشتر می‌توانید مستندات AutoModel را بررسی کنید. همچنین می‌توانید کدها را مطابق نیاز خود تغییر دهید تا دقیق‌تر با مسئله‌تان هماهنگ شوند.

برای اینکه یک مدل در یک وظیفه عملکرد خوبی داشته باشد، باید از چک‌پوینتی بارگذاری شود که مخصوص همان وظیفه آموزش دیده باشد. معمولا این چک‌پوینت‌ها ابتدا روی یک دیتاست بزرگ پیش‌آموزش داده می‌شوند و سپس روی وظیفه‌ای خاص فاین‌تیون می‌شوند. بنابراین:

  • همه مدل‌ها برای همه وظایف فاین‌تیون نشده‌اند. اگر می‌خواهید مدلی را برای یک وظیفه خاص فاین‌تیون کنید، می‌توانید از اسکریپت‌های run_$TASK.py در دایرکتوری examples استفاده کنید.
  • مدل‌های فاین‌تیون‌شده روی یک دیتاست مشخص آموزش دیده‌اند. این دیتاست ممکن است با نیازهای شما هم‌پوشانی داشته باشد یا نداشته باشد. همان‌طور که گفته شد، می‌توانید از اسکریپت‌های نمونه برای فاین‌تیون استفاده کنید یا اسکریپت آموزشی اختصاصی خودتان را بنویسید.

برای انجام استنتاج (Inference) در یک وظیفه، کتابخانه دو سازوکار اصلی در اختیار شما قرار می‌دهد:

  • Pipeline‌ها: ساده‌ترین روش با حداقل دو خط کد.
  • استفاده مستقیم از مدل: سطح انتزاع کمتر، اما انعطاف و کنترل بیشتر؛ شامل کار با tokenizer و دسترسی کامل به فرایند استنتاج (در PyTorch یا TensorFlow).

طبقه‌بندی دنباله (Sequence Classification)

طبقه‌بندی دنباله

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

  • run_glue.py
  • run_tf_glue.py
  • run_tf_text_classification.py
  • run_xnli.py

در ادامه یک نمونه ساده از استفاده pipeline‌ها برای تحلیل احساسات آورده شده است؛ یعنی تشخیص اینکه یک جمله مثبت است یا منفی. در این مثال از مدلی استفاده می‌شود که روی sst2 (یکی از وظایف GLUE) فاین‌تیون شده است. خروجی این پردازش شامل یک label (مثلا «POSITIVE» یا «NEGATIVE») همراه با یک امتیاز است، مشابه نمونه زیر:

در این مثال، یک مدل برای طبقه‌بندی دنباله استفاده می‌شود تا مشخص کند آیا دو متن، بازنویسی (Paraphrase) یکدیگر هستند یا خیر. روند کار به این صورت است:

  • ابتدا یک tokenizer و یک model با استفاده از نام چک‌پوینت نمونه‌سازی می‌شوند. در اینجا مدل از نوع BERT تشخیص داده می‌شود و وزن‌های ذخیره‌شده در چک‌پوینت مربوطه بارگذاری می‌شود.
  • سپس دو جمله ورودی با در نظر گرفتن جداکننده‌های مخصوص مدل، ‌token type id‌ها و attention mask‌ها به یک دنباله واحد تبدیل می‌شوند (این موارد به‌صورت خودکار توسط tokenizer ساخته می‌شوند).
  • این دنباله به مدل داده می‌شود تا در یکی از دو کلاس موجود دسته‌بندی شود:
    • ۰: این دو متن بازنویسی یکدیگر نیستند
    • ۱: این دو متن بازنویسی یکدیگر هستند
  • در ادامه، روی خروجی مدل تابع softmax اعمال می‌شود تا احتمال هر کلاس به دست آید.
  • در نهایت، نتایج چاپ می‌شوند.

پرسش‌وپاسخ استخراجی (Extractive Question Answering)

پرسش‌وپاسخ استخراجی

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

در ادامه، نمونه‌ای از استفاده pipeline‌ها برای انجام پرسش‌وپاسخ آورده شده است؛ فرایندی که در آن، با دریافت یک سوال و یک متن، پاسخ از دل متن استخراج می‌شود. این مثال از مدلی استفاده می‌کند که روی دیتاست SQuAD فاین‌تیون شده است.

خروجی این پردازش شامل پاسخی استخراج‌شده از متن، یک امتیاز اطمینان (confidence score) و همچنین مقادیر start و end است که موقعیت شروع و پایان پاسخ استخراج‌شده را در متن نشان می‌دهند.

در این مثال، از یک model و یک tokenizer برای انجام پرسش‌وپاسخ استفاده می‌شود. روند کار به این صورت است:

  • ابتدا یک tokenizer و یک model با استفاده از نام چک‌پوینت نمونه‌سازی می‌شوند. در اینجا مدل به‌عنوان یک مدل BERT شناسایی شده و وزن‌های ذخیره‌شده در چک‌پوینت مربوطه بارگذاری می‌شوند.
  • سپس یک متن و چند سوال تعریف می‌شوند.
  • در ادامه، روی سوال‌ها پیمایش می‌شود و برای هر سوال، یک دنباله شامل متن و سوال ساخته می‌شود؛ با در نظر گرفتن جداکننده‌های مخصوص مدل، token type id‌ها و attention mask‌ها.
  • این دنباله به مدل داده می‌شود. خروجی مدل شامل یک بازه از امتیازها برای تمام توکن‌های دنباله (هم متن و هم سوال) است؛ به‌صورت جداگانه برای موقعیت شروع (start) و پایان (end) پاسخ.
  • سپس روی خروجی مدل تابع softmax اعمال می‌شود تا احتمال هر توکن محاسبه شود.
  • بر اساس مقادیر start و end تشخیص‌داده‌شده، توکن‌های متناظر استخراج و به رشته متنی تبدیل می‌شوند.
  • در نهایت، نتایج چاپ می‌شوند.

مدل‌سازی زبان (Language Modeling)

مدل‌سازی زبان

مدل‌سازی زبان وظیفه‌ای است که در آن، یک مدل روی یک پیکره متنی (Corpus) آموزش داده می‌شود؛ پیکره‌ای که می‌تواند عمومی یا مختص یک دامنه خاص باشد. تمام مدل‌های محبوب مبتنی بر ترنسفورمر با یکی از گونه‌های مدل‌سازی زبان آموزش می‌بینند؛ برای مثال، BERT از masked language modeling استفاده می‌کند و GPT-2 بر پایه causal language modeling آموزش داده شده است.

مدل‌سازی زبان فقط به مرحله پیش‌آموزش محدود نمی‌شود و در مراحل بعدی هم کاربرد دارد. یکی از کاربردهای رایج آن، دامنه‌محور کردن مدل است؛ به این معنا که یک مدل زبانی آموزش‌دیده روی یک پیکره بسیار بزرگ را روی داده‌های تخصصی‌تر مثلا اخبار یا مقالات علمی، فاین‌تیون کنیم. به‌عنوان نمونه می‌توان به مدل‌هایی اشاره کرد که روی مقالات arXiv آموزش دیده‌اند، مانند LysandreJik/arxiv-nlp.

مدل‌سازی زبان با ماسک (Masked Language Modeling)

مدل‌سازی زبان با ماسک

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

چنین شیوه‌ای از آموزش، پایه‌ای قدرتمند برای وظایف پایین‌دستی‌ای فراهم می‌کند که به کانتکست دوطرفه نیاز دارند؛ مانند SQuAD در مسئله پرسش‌وپاسخ. اگر قصد دارید مدلی را برای یک وظیفه masked language modeling فاین‌تیون کنید، می‌توانید از اسکریپت run_mlm.py استفاده کنید.

در ادامه، نمونه‌ای از استفاده pipeline‌ها برای جایگزینی یک ماسک در یک دنباله متنی آورده شده است:

خروجی این پردازش شامل دنباله‌هایی است که توکن ماسک‌شده در آن‌ها جایگزین شده، به‌همراه امتیاز اطمینان (confidence score) و شناسه توکن (token id) در واژگان tokenizer.

در این مثال، از یک model و یک tokenizer برای انجام masked language modeling استفاده می‌شود. روند کار به این صورت است:

۱. ابتدا یک tokenizer و یک model با استفاده از نام چک‌پوینت نمونه‌سازی می‌شوند. در اینجا مدل به‌عنوان یک مدل DistilBERT شناسایی شده و وزن‌های ذخیره‌شده در چک‌پوینت مربوطه بارگذاری می‌شوند.

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

۳. این دنباله به یک لیست از شناسه‌ها (token IDs) کدگذاری می‌شود و موقعیت توکن ماسک‌شده در این لیست مشخص می‌گردد.

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

۵. سپس با استفاده از متدهای topk در PyTorch یا top_k در TensorFlow، پنج توکن با بالاترین امتیاز استخراج می‌شوند.

۶. در نهایت، توکن ماسک‌شده با این توکن‌ها جایگزین شده و نتایج چاپ می‌شوند.

در این مثال، پنج دنباله متنی چاپ می‌شود که هرکدام شامل یکی از ۵ توکن برتر پیش‌بینی‌شده توسط مدل هستند.

مدل‌سازی زبان علّی (Causal Language Modeling)

مدل‌سازی زبان علّی

مدل‌سازی زبان علّی وظیفه‌ای است که در آن، توکن بعدی بر اساس یک دنباله از توکن‌های قبلی پیش‌بینی می‌شود. در این حالت، مدل فقط به کانتکست سمت چپ توجه می‌کند؛ یعنی توکن‌هایی که قبل از موقعیت فعلی قرار دارند. این شیوه آموزش به‌طور خاص برای وظایف تولید متن (Generation) بسیار مناسب است. اگر قصد دارید مدلی را برای یک وظیفه causal language modeling فاین‌تیون کنید، می‌توانید از اسکریپت run_clm.py استفاده کنید.

معمولا پیش‌بینی توکن بعدی با نمونه‌برداری (sampling) از روی logit‌های آخرین لایه پنهان (last hidden state) که مدل برای دنباله ورودی تولید می‌کند، انجام می‌شود.

در ادامه، نمونه‌ای از استفاده هم‌زمان از tokenizer و model آورده شده است که در آن، با کمک متد PreTrainedModel.top_k_top_p_filtering توکن بعدیِ یک دنباله ورودی نمونه‌برداری می‌شود.

خروجی این فرایند، یک توکن بعدی (امیدوارانه) منسجم است که ادامه‌ای از دنباله اولیه محسوب می‌شود؛ که در مثال ما کلماتی مانند is یا features هستند.

در بخش بعدی نشان داده می‌شود که چگونه می‌توان به‌جای تولید یک توکن در هر مرحله، از متد generation_utils.GenerationMixin.generate() برای تولید چندین توکن تا طول مشخص استفاده کرد.

تولید متن (Text Generation)

تولید متن

در تولید متن (که با نام open-ended text generation هم شناخته می‌شود)، هدف تولید یک بخش متنی منسجم است که ادامه‌ای طبیعی از کانتکست ورودی باشد. مثال زیر نشان می‌دهد که چگونه می‌توان از GPT-2 در قالب pipeline‌ها برای تولید متن استفاده کرد.

به‌صورت پیش‌فرض، تمام مدل‌ها هنگام استفاده در pipelineها از Top-K sampling بهره می‌برند؛ این رفتار در تنظیمات (configuration) هر مدل مشخص شده است (برای نمونه می‌توانید تنظیمات GPT-2 را بررسی کنید).

در این مثال، مدل با استفاده از کانتکست «As far as I am concerned, I will» یک متن تصادفی با حداکثر طول ۵۰ توکن تولید می‌کند. در پشت صحنه، شیء pipeline متد PreTrainedModel.generate() را برای تولید متن فراخوانی می‌کند.

آرگومان‌های پیش‌فرض این متد را می‌توان هنگام استفاده از pipeline بازنویسی کرد؛ همان‌طور که در مثال بالا، مقادیر مربوط به max_length و do_sample تغییر داده شده‌اند.

در ادامه، نمونه‌ای از تولید متن با استفاده از XLNet و tokenizer مربوط به آن آورده شده است که در آن، متد generate() به‌صورت مستقیم فراخوانی می‌شود:

در حال حاضر، تولید متن در PyTorch با مدل‌های GPT-2، OpenAI-GPT، CTRL، XLNet، Transfo-XL و Reformer امکان‌پذیر است و در TensorFlow نیز برای اغلب مدل‌ها پشتیبانی می‌شود. همان‌طور که در مثال بالا دیده می‌شود، مدل‌هایی مانند XLNet و Transfo-XL معمولا برای عملکرد بهتر نیاز به padding دارند. در مقابل، GPT-2 اغلب گزینه‌ مناسبی برای تولید متن باز (open-ended) به شمار می‌رود؛ چرا که روی میلیون‌ها صفحه وب و با هدف causal language modeling آموزش دیده است.

شناسایی موجودیت‌های نام‌دار (Named Entity Recognition)

شناسایی موجودیت‌های نام‌دار

شناسایی موجودیت‌های نام‌دار یا NER وظیفه‌ای است که در آن، هر توکن بر اساس یک کلاس مشخص دسته‌بندی می‌شود؛ برای مثال تشخیص اینکه یک توکن نام شخص، سازمان یا مکان است. یکی از دیتاست‌های شناخته‌شده در این حوزه، CoNLL-2003 است که به‌طور کامل برای همین وظیفه طراحی شده است. اگر قصد دارید مدلی را برای یک وظیفه NER فاین‌تیون کنید، می‌توانید از اسکریپت run_ner.py استفاده کنید.

در ادامه، نمونه‌ای از استفاده pipeline‌ها برای انجام شناسایی موجودیت‌های نام‌دار آورده شده است؛ به‌طور مشخص، تلاش می‌شود توکن‌ها در یکی از ۹ کلاس زیر دسته‌بندی شوند:

  • O: خارج از هر موجودیت نام‌دار
  • B-MIS: آغاز یک موجودیت متفرقه (Miscellaneous) بلافاصله پس از یک موجودیت متفرقه دیگر
  • I-MIS: موجودیت متفرقه
  • B-PER: آغاز نام یک شخص بلافاصله پس از نام شخص دیگر
  • I-PER: نام شخص
  • B-ORG: آغاز نام یک سازمان بلافاصله پس از یک سازمان دیگر
  • I-ORG: سازمان
  • B-LOC: آغاز نام یک مکان بلافاصله پس از یک مکان دیگر
  • I-LOC: مکان

در این مثال از مدلی استفاده شده است که روی دیتاست CoNLL-2003 فاین‌تیون شده و توسط @stefan-it از مجموعه dbmdz آموزش داده شده است.

خروجی این پردازش شامل فهرستی از تمام کلماتی است که به‌عنوان یکی از موجودیت‌ها در میان ۹ کلاس تعریف‌شده‌ی بالا شناسایی شده‌اند. نتایج مورد انتظار به‌صورت زیر است:

دقت کنید که توکن‌های دنباله «Hugging Face» به‌عنوان یک سازمان شناسایی شده‌اند و «New York City»، «DUMBO» و «Manhattan Bridge» به‌عنوان مکان تشخیص داده شده‌اند.

در ادامه، نمونه‌ای از انجام شناسایی موجودیت‌های نام‌دار با استفاده از یک model و یک tokenizer آورده شده است. روند کار به این صورت است:

۱. ابتدا یک tokenizer و یک model با استفاده از نام چک‌پوینت نمونه‌سازی می‌شوند. در اینجا مدل به‌عنوان یک مدل BERT شناسایی شده و وزن‌های ذخیره‌شده در چک‌پوینت مربوطه بارگذاری می‌شوند.

۲. سپس یک دنباله متنی با موجودیت‌های شناخته‌شده تعریف می‌شود؛ برای مثال «Hugging Face» به‌عنوان یک سازمان و «New York City» به‌عنوان یک مکان.

۳. برای اینکه کلمات بتوانند به پیش‌بینی‌های مدل نگاشت شوند، متن به توکن‌ها شکسته می‌شود. در این مثال، از یک راهکار ساده استفاده شده است: ابتدا دنباله به‌طور کامل encode و سپس decode می‌شود تا در نهایت یک رشته متنی شامل توکن‌های ویژه (special tokens) در اختیار داشته باشیم.

۴. این دنباله سپس به شناسه‌ها (token IDs) کدگذاری می‌شود (توکن‌های ویژه به‌صورت خودکار اضافه می‌شوند).

۵. با عبور دادن ورودی از مدل و دریافت اولین خروجی آن، پیش‌بینی‌ها استخراج می‌شوند. نتیجه، یک توزیع احتمال روی ۹ کلاس ممکن برای هر توکن است. با اعمال argmax، محتمل‌ترین کلاس برای هر توکن انتخاب می‌شود.

۶. در نهایت، هر توکن با برچسب پیش‌بینی‌شده‌ آن جفت شده و چاپ می‌شود.

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

در مثال بالا، مقدار predictions یک عدد صحیح است که به کلاس پیش‌بینی‌شده اشاره می‌کند. برای به‌دست آوردن نام کلاس متناظر با این عدد، می‌توان از ویژگی model.config.id2label استفاده کرد؛ همان‌طور که در مثال زیر نشان داده شده است:

خلاصه‌سازی (Summarization)

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

یکی از دیتاست‌های شناخته‌شده در این حوزه، CNN / Daily Mail است که شامل مقالات خبری طولانی بوده و مشخصا برای وظیفه خلاصه‌سازی طراحی شده است. اگر بخواهید مدلی را برای خلاصه‌سازی فاین‌تیون کنید، رویکردهای مختلفی در این مستند توضیح داده شده‌اند.

در ادامه، نمونه‌ای از استفاده pipeline‌ها برای انجام خلاصه‌سازی آورده شده است. در این مثال از یک مدل BART استفاده می‌شود که روی دیتاست CNN / Daily Mail فاین‌تیون شده است.

از آنجا که pipeline مربوط به خلاصه‌سازی بر متد PreTrainedModel.generate() متکی است، می‌توان آرگومان‌های پیش‌فرض این متد—از جمله max_length و min_length—را مستقیماً هنگام استفاده از pipeline بازنویسی کرد؛ همان‌طور که در مثال زیر نشان داده شده است. خروجی این فرایند، خلاصه‌ای به شکل زیر خواهد بود:

در این مثال، خلاصه‌سازی با استفاده از یک model و یک tokenizer انجام می‌شود. روند کار به این صورت است:

  • ابتدا یک tokenizer و یک model با استفاده از نام چک‌پوینت نمونه‌سازی می‌شوند. معمولا خلاصه‌سازی با مدل‌های encoder–decoder مانند BART یا T5 انجام می‌شود.
  • سپس متنی که قرار است خلاصه شود تعریف می‌گردد.
  • در صورت استفاده از T5، پیشوند مخصوص این مدل یعنی “summarize: ” به ابتدای متن اضافه می‌شود.
  • در ادامه، با استفاده از متد PreTrainedModel.generate() خلاصه متن تولید می‌شود.
  • در این مثال از مدل T5 گوگل استفاده شده است. با اینکه این مدل فقط روی یک دیتاست ترکیبی چندوظیفه‌ای (از جمله CNN / Daily Mail) پیش‌آموزش دیده، همچنان نتایج بسیار خوبی ارائه می‌دهد.

ترجمه (Translation)

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

یکی از دیتاست‌های شناخته‌شده در این حوزه، WMT (ترجمه انگلیسی به آلمانی) است که در آن، جملات انگلیسی به‌عنوان ورودی و معادل آلمانی آن‌ها به‌عنوان خروجی (هدف) در نظر گرفته می‌شود. اگر بخواهید مدلی را برای ترجمه فاین‌تیون کنید، رویکردهای مختلفی در این مستند توضیح داده شده‌اند.

در ادامه، نمونه‌ای از استفاده pipeline‌ها برای انجام ترجمه آورده شده است. در این مثال از یک مدل T5 استفاده می‌شود که فقط روی یک دیتاست ترکیبی چندوظیفه‌ای (از جمله WMT) پیش‌آموزش دیده، اما با این حال نتایج ترجمه بسیار قابل‌توجهی ارائه می‌دهد.

از آنجا که pipeline مربوط به ترجمه بر متد PreTrainedModel.generate() متکی است، می‌توان آرگومان‌های پیش‌فرض این متد را مستقیما هنگام استفاده از pipeline بازنویسی کرد؛ همان‌طور که در مثال بالا برای max_length نشان داده شده است.

در ادامه، نمونه‌ای از انجام ترجمه با استفاده از یک model و یک tokenizer آورده شده است. روند کار به این صورت است:

۱. ابتدا یک tokenizer و یک model با استفاده از نام چک‌پوینت نمونه‌سازی می‌شوند. معمولاً ترجمه (مانند خلاصه‌سازی) با مدل‌های encoder–decoder نظیر BART یا T5 انجام می‌شود.

۲. سپس متنی که قرار است ترجمه شود تعریف می‌گردد.

۳. در صورت استفاده از T5، پیشوند مخصوص این مدل یعنی “translate English to German: ” به ابتدای متن اضافه می‌شود.

۴. در نهایت، با استفاده از متد PreTrainedModel.generate() فرایند ترجمه انجام می‌شود.

در این حالت، همان ترجمه‌ای به دست می‌آید که در مثال مبتنی بر pipeline مشاهده کردیم.

نتیجه‌گیری

Transformers عملا یک جعبه‌ابزار کامل برای اجرای تسک‌های متداول NLP است؛ از طبقه‌بندی دنباله و پرسش‌وپاسخ استخراجی گرفته تا NER، مدل‌سازی زبان و تسک‌های تولیدی مثل خلاصه‌سازی و ترجمه. اگر می‌خواهید سریع به نتیجه برسید، Pipelineها بهترین انتخاب‌اند؛ اما وقتی کنترل دقیق‌تر روی ورودی‌ها، خروجی‌ها، یا تنظیمات استنتاج لازم دارید، استفاده مستقیم از مدل و tokenizer انعطاف و قدرت بیشتری در اختیارتان می‌گذارد.

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

 

منابع

huggingface.co

سوالات متداول

Pipeline ساده‌ترین راه اجرای تسک‌های NLP است و وقتی سرعت توسعه و سادگی برایتان مهم است، بهترین انتخاب محسوب می‌شود.

وقتی به کنترل بیشتر روی ورودی‌ها، خروجی‌ها، یا تنظیمات استنتاج نیاز دارید، استفاده مستقیم از مدل و tokenizer گزینه مناسب‌تری است.

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

این کلاس‌ها نوع معماری مدل را به‌صورت خودکار از روی چک‌پوینت تشخیص می‌دهند و فرایند بارگذاری مدل را ساده‌تر و امن‌تر می‌کنند.

فرصت‌های شغلی

ایجاد محیطی با ارزش های انسانی، توسعه محصولات مالی کارامد برای میلیون ها کاربر و استفاده از فناوری های به روز از مواردی هستند که در آسا به آن ها می بالیم. اگر هم مسیرمان هستید، رزومه تان را برایمان ارسال کنید.

دیدگاه‌ها

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

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