مقدمه
روشهای خودنظارتی بسیاری از وظایف مختلف پردازش زبان طبیعی (NLP) را تکمیل کردهاند.
خودرمزگذارهای نویززدایی که برای بازیابی متن در شرایطی که مجموعهای تصادفی از کلمات حذف شدهاند آموزش دیدهاند، بهعنوان مؤثرترین روش شناخته شدهاند.
تحقیقات اخیر نشان دادهاند که با بهبود توزیع ماسک، ترتیب پیشبینی ماسک و زمینهی جایگزینی توکنهای ماسکشده میتوان عملکرد را افزایش داد.
با این حال، با وجود نتایج امیدوارکننده، این روشها اغلب محدود به چند وظیفهی مشخص مانند پیشبینی بازهها و ایجاد بازهها هستند.
پیشنیازها
برای دنبال کردن این مقاله، نیاز به تجربهی کدنویسی با پایتون و درک ابتدایی از یادگیری عمیق دارید.
ما فرض میکنیم که همهی خوانندگان به ماشینهایی با قدرت پردازش کافی دسترسی دارند تا بتوانند کدهای ارائهشده را اجرا کنند.
اگر به GPU دسترسی ندارید، پیشنهاد میکنیم از DigitalOcean GPU Droplets استفاده کنید.
برای راهنمایی در مورد شروع کار با کدنویسی پایتون، توصیه میکنیم این راهنمای مبتدیان را بررسی کنید تا سیستم خود را تنظیم کرده و آمادهی اجرای آموزشهای ابتدایی شوید.
مدل ترانسفورمر BART در NLP چیست؟
این مقاله BART را معرفی میکند، یک روش پیشآموزشی که ترانسفورمرهای دوسویه (Bidirectional) و خودبازگشتی (Auto-Regressive) را ترکیب میکند.
BART یک خودرمزگذار نویززدایی است که از الگوی توالی به توالی (sequence-to-sequence) استفاده میکند و برای کاربردهای مختلف مفید است.
فرآیند پیشآموزش شامل دو مرحله است:
1. متن با استفاده از یک تابع نویزدهی دلخواه تغییر داده میشود.
2. یک مدل توالی به توالی برای بازسازی متن اصلی آموزش داده میشود.
معماری ترجمه ماشینی مبتنی بر ترانسفورمر در BART را میتوان تعمیمی از مدلهای BERT (به دلیل وجود رمزگذار دوسویه) و GPT (با استفاده از رمزگشای چپ به راست) و بسیاری از روشهای پیشآموزشی معاصر دیگر در نظر گرفت.

علاوه بر توانایی بالای BART در وظایف درک متن، این مدل با فاینتیونینگ برای تولید متن عملکرد بهتری پیدا میکند.
BART در گفتوگوهای انتزاعی، پاسخ به پرسشها و خلاصهسازی متن به نتایج پیشرفتهای دست یافته است.
همچنین، با منابع آموزشی مشابه، عملکردی همتراز با مدل RoBERTa در مجموعه دادههای GLUE و SQuAD دارد.
معماری
بهجز تغییر توابع فعالسازی ReLU به GeLU و مقداردهی اولیه پارامترها از بازهی (0, 0.02)،
BART از طراحی کلی ترانسفورمر توالی به توالی (Vaswani et al., 2017) پیروی میکند.
مدل پایهی BART دارای ۶ لایه در رمزگذار (Encoder) و رمزگشا (Decoder) است، درحالیکه مدل بزرگ (Large) دارای ۱۲ لایه در هر بخش است.
مشابه معماری BERT، دو تفاوت اصلی وجود دارد:
1. در BERT، هر لایه از رمزگشا علاوه بر عملیات خود، توجه متقابل (Cross-Attention) را روی لایهی پنهان نهایی رمزگذار انجام میدهد (مانند مدلهای ترانسفورمر توالی به توالی).
2. در BERT، یک شبکهی تغذیه پیشرو (Feed-Forward Network) قبل از پیشبینی کلمات وجود دارد، اما در BART این بخش حذف شده است.
پیشآموزش BART
برای آموزش BART، ابتدا اسناد ورودی دچار نویز و خرابی میشوند و سپس مدل با استفاده از تابع هزینهی بازسازی آموزش داده میشود.
این تابع هزینه برابر است با آنتروپی متقاطع (Cross-Entropy) بین خروجی رمزگشا و سند اصلی.
برخلاف خودرمزگذارهای نویززدای معمولی، BART میتواند با هر نوع خرابی در اسناد ورودی سازگار شود.
در بدترین حالت ممکن، تمام اطلاعات منبع از بین میروند و مدل تبدیل به یک مدل زبان ساده میشود.
محققان انواع تحولات جدید و قدیمی را بررسی کردند و معتقدند که هنوز راههای نوآورانهی بیشتری برای تغییر دادهها وجود دارد.
در ادامه، تحولات اعمالشده در پیشآموزش BART را مرور میکنیم.
انواع تغییرات اعمالشده در دادههای ورودی:
• ماسککردن توکنها (Token Masking): مشابه BERT، برخی از توکنها بهصورت تصادفی انتخاب و با MASK جایگزین میشوند.
• حذف توکنها (Token Deletion): برخی از توکنها کاملاً از ورودی حذف میشوند. برخلاف روش ماسککردن، مدل باید تشخیص دهد کدام بخش از ورودی حذف شده است.
• پر کردن متن (Text Infilling): بازههایی از متن بهصورت تصادفی حذف میشوند و هر بازه با یک توکن MASK جایگزین میشود. طول بازهها از یک توزیع پواسون (λ = 3) نمونهبرداری میشود. این روش مدل را وادار به پیشبینی تعداد توکنهای حذفشده در هر بازه میکند.
• جابجایی جملات (Sentence Permutation): متن ورودی بر اساس نقطههای پایانی به جملات تقسیم شده و سپس به ترتیب تصادفی مرتب میشود.
• چرخش سند (Document Rotation): یک توکن تصادفی بهعنوان نقطهی شروع انتخاب میشود و سند بهگونهای چرخانده میشود که از آن توکن آغاز شود. این روش به مدل کمک میکند تا نقطهی شروع متن را تشخیص دهد.

• وظایف طبقهبندی دنباله (Sequence Classification Tasks): در مسائل طبقهبندی دنباله، همان ورودی به رمزگذار (encoder) و رمزگشا (decoder) داده میشود و آخرین حالت پنهان (hidden state) توکن نهایی رمزگشا به یک شبکهی خطی چندکلاسه (multi-class linear classifier) جدید منتقل میشود.

• وظایف طبقهبندی توکن (Token Classification Tasks): در این وظایف، هم رمزگذار (Encoder) و هم رمزگشا (Decoder) کل سند را بهعنوان ورودی دریافت میکنند.
سپس از لایهی پنهان بالایی رمزگشا، یک نمایش عددی برای هر کلمه استخراج میشود. طبقهبندی هر توکن بر اساس این نمایش انجام میشود.
• وظایف تولید توالی (Sequence Generation Tasks):
برای وظایفی مانند پاسخدهی به سؤالات انتزاعی و خلاصهسازی متن، رمزگشای خودبازگشتی (Autoregressive) BART امکان فاینتیونینگ مستقیم را فراهم میکند.
این وظایف با هدف پیشآموزش نویززدایی مرتبط هستند، زیرا شامل کپیکردن و سپس پردازش دادههای ورودی میشوند.
در اینجا، توالی ورودی به رمزگذار داده میشود، درحالیکه رمزگشا خروجی را بهصورت خودبازگشتی تولید میکند.
• ترجمه ماشینی (Machine Translation):
پژوهشگران امکان بهبود رمزگشاهای ترجمهی ماشینی برای ترجمه به زبان انگلیسی را با BART بررسی کردهاند.
استفاده از رمزگذارهای پیشآموزشدیده (Pretrained Encoders) باعث بهبود مدلهای ترجمه شده است، اما افزودن مدلهای زبانی پیشآموزشدیده به رمزگشاها کمتر مورد بررسی قرار گرفته است.
آنها نشان دادهاند که میتوان از کل مدل BART بهعنوان یک رمزگشای پیشآموزشدیده برای ترجمهی ماشینی استفاده کرد.
برای این کار، لایهی تعبیه (Embedding Layer) رمزگذار BART با یک رمزگذار جدید که بهطور تصادفی مقداردهی اولیه شده است جایگزین میشود.
سپس، مدل از ابتدا آموزش داده میشود و رمزگذار جدید یاد میگیرد که کلمات زبان مبدأ را به ورودیای تبدیل کند که BART بتواند آن را به انگلیسی ترجمه کند.
در هر دو مرحلهی آموزش، تابع هزینهی آنتروپی متقاطع (Cross-Entropy Loss) از خروجی مدل بهسمت رمزگذار منبع بازپسانتشار (Backpropagate) داده میشود.
مرحلهی اول:
• بیشتر پارامترهای BART ثابت نگه داشته میشوند.
• تنها رمزگذار منبع (Source Encoder) جدید، تعبیههای موقعیتی BART، و ماتریس ورودی خودتوجهی لایهی اول رمزگذار BART بهروزرسانی میشوند.
مرحلهی دوم:
• تعداد محدودی از تکرارهای آموزشی روی تمام پارامترهای مدل انجام میشود.

مدل BART برای خلاصهسازی متن
برای یک محقق یا روزنامهنگار، وقتگیر است که همه اطلاعات طولانی موجود در اینترنت را بررسی کند و آنچه را که نیاز دارد بیابد.
با مرور نکات برجستهی متون طولانی از طریق یک خلاصه یا پارافریز، میتوانید در زمان و انرژی خود صرفهجویی کنید.
وظیفهی خلاصهسازی متن در پردازش زبان طبیعی (NLP) را میتوان با کمک مدلهای ترنسفورمری خودکار کرد.
دو روش برای این کار وجود دارد: استخراجی (Extractive) و انتزاعی (Abstractive).
• خلاصهسازی استخراجی شامل یافتن مهمترین جملات متن و ثبت آنها است.
این روش را میتوان نوعی بازیابی اطلاعات در نظر گرفت.
• خلاصهسازی انتزاعی چالشبرانگیزتر از خلاصهسازی استخراجی است، زیرا تلاش میکند کل محتوا را درک کرده و یک متن بازنویسیشده ارائه دهد که نکات کلیدی را خلاصه میکند.
این نوع خلاصهسازی توسط مدلهای ترنسفورمری مانند BART انجام میشود.
HuggingFace دسترسی سریع و آسان به هزاران مدل پیشآموزشدیده (Pre-trained) و فاینتیونشده (Fine-tuned) را برای مدلهای ترنسفورمری، از جمله BART فراهم میکند.
شما میتوانید یک مدل BART مناسب برای خلاصهسازی متن را از وبسایت مدلهای HuggingFace انتخاب کنید.
هر مدل ارائهشده شامل توضیحی دقیق از پیکربندی و فرآیند آموزش آن است.
مدل bart-large-cnn که برای مبتدیان مناسب است، ارزش بررسی دارد.
برای شروع، میتوانید از صفحهی نصب HuggingFace استفاده کنید یا دستور زیر را اجرا کنید:
pip install transformers
سه مرحلهی ساده برای ایجاد خلاصه:
from transformers import pipeline
summarizer = pipeline(“summarization”, model=”facebook/bart-large-cnn”)
ابتدا باید پایپلاین مدل ترنسفورمرها را بارگذاری کنیم.
ماژول داخل پایپلاین با نامگذاری وظیفه و مدل مشخص میشود.
در اینجا، از “summarization” برای وظیفهی خلاصهسازی و از “facebook/bart-large-cnn” بهعنوان مدل استفاده شده است.
اگر بخواهیم بهجای مجموعهدادهی استاندارد اخبار، یک روش متفاوت را امتحان کنیم، میتوانیم از مجموعهدادهی Extreme Summary (XSum) استفاده کنیم.
این مدل فقط خلاصههایی شامل یک جمله تولید میکند.
آخرین مرحله، ایجاد یک توالی ورودی و اجرای آن از طریق پایپلاین summarizer() است.
همچنین میتوان حداکثر و حداقل طول خلاصه را از طریق پارامترهای اختیاری max_length و min_length تنظیم کرد.
نمونهی کد برای خلاصهسازی متن:
from transformers import pipeline
summarizer = pipeline(“summarization”, model=”facebook/bart-large-cnn”)
ARTICLE = “”” New York (CNN)When Liana Barrientos was 23 years old, she got married in Westchester County, New York.
A year later, she got married again in Westchester County, but to a different man and without divorcing her first husband.
Only 18 days after that marriage, she got hitched yet again. Then, Barrientos declared “I do” five more times, sometimes only within two weeks of each other.
In 2010, she married once more, this time in the Bronx. In an application for a marriage license, she stated it was her “first and only” marriage.
Barrientos, now 39, is facing two criminal counts of “offering a false instrument for filing in the first degree,” referring to her false statements on the
2010 marriage license application, according to court documents.
Prosecutors said the marriages were part of an immigration scam.
On Friday, she pleaded not guilty at State Supreme Court in the Bronx, according to her attorney, Christopher Wright, who declined to comment further.
After leaving court, Barrientos was arrested and charged with theft of service and criminal trespass for allegedly sneaking into the New York subway through an emergency exit, said Detective
Annette Markowski, a police spokeswoman. In total, Barrientos has been married 10 times, with nine of her marriages occurring between 1999 and 2002.
All occurred either in Westchester County, Long Island, New Jersey or the Bronx. She is believed to still be married to four men, and at one time, she was married to eight men at once, prosecutors say.
Prosecutors said the immigration scam involved some of her husbands, who filed for permanent residence status shortly after the marriages.
Any divorces happened only after such filings were approved. It was unclear whether any of the men will be prosecuted.
The case was referred to the Bronx District Attorney’s Office by Immigration and Customs Enforcement and the Department of Homeland Security’s
Investigation Division. Seven of the men are from so-called “red-flagged” countries, including Egypt, Turkey, Georgia, Pakistan and Mali.
Her eighth husband, Rashid Rajput, was deported in 2006 to his native Pakistan after an investigation by the Joint Terrorism Task Force.
If convicted, Barrientos faces up to four years in prison. Her next court appearance is scheduled for May 18.
“””
print(summarizer(ARTICLE, max_length=130, min_length=30, do_sample=False))
خروجی:
[{‘summary_text’: ‘Liana Barrientos, 39, is charged with two counts of “offering a false instrument for filing in the first degree” In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. She is believed to still be married to four men.’}]
روش دیگر: استفاده از BartTokenizer و BartForConditionalGeneration
بهجای پایپلاین HuggingFace، میتوان از BartTokenizer برای تولید توکنها و BartForConditionalGeneration برای خلاصهسازی استفاده کرد.
وارد کردن مدل:
from transformers import BartForConditionalGeneration, BartTokenizer, BartConfig
مدل “bart-large-cnn” بهعنوان یک مدل پیشآموزشدیده (Pre-trained Model) برای وظیفهی خلاصهسازی بهینه شده است.
از تابع from_pretrained() برای بارگذاری مدل استفاده میکنیم:
# بارگذاری توکنایزر و مدل برای bart-large-cnn
tokenizer = BartTokenizer.from_pretrained(‘facebook/bart-large-cnn’)
model = BartForConditionalGeneration.from_pretrained(‘facebook/bart-large-cnn’)
فرض کنید که باید همان متنی را که در مثال بالا آورده شده، خلاصه کنید. برای این منظور، میتوانید از قابلیت batch_encode_plus() در توکنایزر استفاده کنید. این متد هنگام فراخوانی، یک دیکشنری تولید میکند که شامل دنبالهی کدگذاریشده یا جفت دنبالهها و هر اطلاعات دیگری است که ارائه شده باشد.
چگونه میتوانیم کوتاهترین دنبالهی ممکن را که میتواند برگردانده شود، محدود کنیم؟
در متد batch_encode_plus() مقدار پارامتر max_length را تنظیم کنید. برای دریافت شناسههای خروجی خلاصه، input_ids را به تابع model.generate() تغذیه میکنیم.
# ارسال ورودیهای کدگذاریشده به تابع model.generate()
inputs = tokenizer.batch_encode_plus([ARTICLE], return_tensors=’pt’)
summary_ids = model.generate(inputs[‘input_ids’], num_beams=4, max_length=150, early_stopping=True)
خلاصهی متن اصلی توسط تابع model.generate() بهصورت یک دنباله از شناسهها تولید شده است. این تابع دارای پارامترهای مختلفی است که برخی از مهمترین آنها عبارتاند از:
• input_ids: دنبالهای که بهعنوان ورودی برای تولید محتوا استفاده میشود.
• max_length: حداکثر طول دنبالهای که باید تولید شود. مقدار آن باید بین min_length و بینهایت باشد. مقدار پیشفرض: 20.
• min_length: حداقل طول دنبالهای که باید تولید شود. مقدار آن باید بین 0 و بینهایت باشد. مقدار پیشفرض: 0.
• num_beams: تعداد بیمها برای جستجوی بیم. مقدار آن باید بین 1 و بینهایت باشد. مقدار 1 یعنی بدون استفاده از جستجوی بیم. مقدار پیشفرض: 1.
• early_stopping: اگر مقدار آن True باشد، جستجوی بیم زمانی متوقف میشود که حداقل num_beams جمله به ازای هر دسته کامل شوند.
تبدیل دنبالهی شناسهها به متن معمولی
میتوان از تابع decode() برای تبدیل دنبالهی شناسهها به متن معمولی استفاده کرد.
# رمزگشایی و چاپ خلاصه
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print(summary)
تابع decode() یک لیست از لیستهای شناسههای توکنیشده را به یک لیست از رشتهها تبدیل میکند. این تابع چندین پارامتر دارد که در اینجا به دو مورد از آنها اشاره میکنیم:
• token_ids: لیستی از شناسههای توکنیشدهی ورودی.
• skip_special_tokens: مشخص میکند که آیا توکنهای خاص در حین رمزگشایی حذف شوند یا خیر.
خروجی نهایی:
Liana Barrientos, 39, is charged with two counts of offering a false instrument for filing in the first degree. In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. At one time, she was married to eight men at once, prosecutors say.
خلاصهسازی اسناد با BART و ktrain
ktrain یک پکیج پایتونی است که پیادهسازی یادگیری ماشین را با کاهش مقدار کد مورد نیاز ساده میکند. این ابزار با استفاده از TensorFlow و سایر کتابخانهها، مدلهای پیشرفته ML را هم برای افراد غیرمتخصص قابلدسترس کرده و هم نیازهای متخصصان این حوزه را برآورده میسازد. رابط سادهی ktrain به شما امکان میدهد با تنها ۳ تا ۴ خط کد انواع مسائل شامل دادههای متنی، تصویری، گرافیکی یا جدولی را مدیریت کنید.
یکی از قابلیتهای این پکیج، خلاصهسازی متن با مدل از پیشآموزشدیدهی BART از کتابخانه transformers است. برای انجام این کار، ابتدا یک TransformerSummarizer ایجاد میکنیم. (توجه داشته باشید که نصب PyTorch برای استفاده از این قابلیت ضروری است.)
from ktrain.text.summarization import TransformerSummarizer
ts = TransformerSummarizer()
نوشتن یک مقاله برای آزمایش خلاصهسازی
article = “”” Saturn orbiter and Titan atmosphere probe. Cassini is a joint
NASA/ESA project designed to accomplish an exploration of the Saturnian
system with its Cassini Saturn Orbiter and Huygens Titan Probe. Cassini
is scheduled for launch aboard a Titan IV/Centaur in October of 1997.
After gravity assists of Venus, Earth and Jupiter in a VVEJGA
trajectory, the spacecraft will arrive at Saturn in June of 2004. Upon
arrival, the Cassini spacecraft performs several maneuvers to achieve an
orbit around Saturn. Near the end of this initial orbit, the Huygens
Probe separates from the Orbiter and descends through the atmosphere of
Titan. The Orbiter relays the Probe data to Earth for about 3 hours
while the Probe enters and traverses the cloudy atmosphere to the
surface. After the completion of the Probe mission, the Orbiter
continues touring the Saturnian system for three and a half years. Titan
synchronous orbit trajectories will allow about 35 flybys of Titan and
targeted flybys of Iapetus, Dione and Enceladus. The objectives of the
mission are threefold: conduct detailed studies of Saturn’s atmosphere,
rings and magnetosphere; conduct close-up studies of Saturn’s
satellites, and characterize Titan’s atmosphere and surface.”””
خلاصهسازی مقاله با استفاده از TransformerSummarizer
ts.summarize(article)
نتیجهگیری
پیش از ورود به معماری BART و دادههای آموزشی آن، این مقاله چالشی را که BART قصد حل آن را دارد و متدولوژی منجر به عملکرد برتر آن را بررسی کرد. همچنین، یک مثال دمو از استنتاج با HuggingFace، ktrain و پیادهسازی پایتونی BART را بررسی کردیم. این ترکیب از تئوری و کدنویسی، یک نقطه شروع عالی برای شما خواهد بود تا بتوانید یک مدل seq2seq مبتنی بر Transformer را در Python بسازید.
برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]
نظرات کاربران