پردازش زبان طبیعی (NLP): از مقدمات تا RNNها و LSTMها
یکی از برجستهترین پیشرفتهای دنیای یادگیری ماشین، آموزش قابلیت درک ارتباطات انسانی به ماشینهاست. این بُعد از یادگیری ماشین را پردازش زبان طبیعی (NLP) میخوانند.
در این نوشتار با مقدمات پردازش زبان طبیعی (NLP) آشنا شده و در مورد نقش پیشرفتهای یادگیری عمیق و شبکههای عصبی روی این حوزه توضیح خواهیم داد.
زبان چیست؟
زبان را میتوان مجموعه لغات ثابتی دانست که میان گروه مشخصی از افراد به اشتراک گذاشته میشود تا امکان برقراری ارتباط و انتقال افکار را برای آنها فراهم آورد.
این مجموعه لغات، طی فرآیند رشد، به افراد آموخته میشود و به استثنای چندین کلمهای که سالانه به آن اضافه میشوند، در سراسر طول زندگی آنها تقریباً ثابت باقی میماند.
در صورت رویارویی با کلمات جدید، افراد میتوانند به منابع جامعی همچون فرهنگهای لغت مراجعه کنند تا معنای آن کلمه را بیاموزند. بعد از مشاهده و یادگیری معنای کلمهی جدید، این کلمه به دایره لغات فرد اضافه میشود و بعدها در ارتباطات او به کار میرود.
کامپیوترها چطور زبان را میفهمند؟
کامپیوتر ماشینی است که با پیروی از قوانین ریاضی کار میکند. بر خلاف انسانها، کامپیوترها قادر به تفسیر و ادراک پیچیده نیستند؛ با این حال، قابلیت این را دارند که طی تنها چند ثانیه، محاسباتی پیچیده انجام دهند.
کامپیوترها تنها درصورتی قادر به درک مفاهیمی هستند که قابلیت مدلسازی ریاضیاتی دارند.
این محدودیت میتواند مقیاس کاربرد زبان طبیعی را به شدت تحت تأثیر قرار دهد. تا کنون، بهترین عملکرد ماشینها در حوزهی NLP، مربوط به مسائل طبقهبندی و ترجمه بوده است.
طبقهبندی، دستهبندی یک قطعه متن به چندین دسته و ترجمه، برگردان آن متن به زبانی دیگر است.
پردازش زبان طبیعی (NLP) چیست؟
پردازش زبان طبیعی که به اختصار NLP خوانده میشود به دستکاری خودکار زبان طبیعی (گفتاری یا نوشتاری) از طریق نرمافزارها اشاره دارد.
حوزهی پردازش زبان طبیعی (NLP)، حدود 50 سال پیش، با ظهور کامپیوترها از دل علم زبانشناسی پدید آمد.
این لینک حاوی دورهی آموزشی دقیقی از مقدمات NLP است.
تبدیلات ساده
همانطور که پیشتر بیان شد، برای اینکه زبان طبیعی (زبان به کار رفته توسط انسانها) برای ماشینها قابل فهم باشد، باید آن را به شکل چارچوبی ریاضیاتی درآورد که قابلیت مدلسازی دارد. مواردی که در این قسمت ذکر میکنیم برخی از پرکاربردترین تکنیکهایی هستند که بدین منظور استفاده میشوند:
جداسازی واژگان، ریشهیابی، و بنواژهسازی
جداسازی واژگان یا توکنایز کردن به فرآیند تجزیهی متن به کلمات تشکیلدهندهی آن، اشاره دارد. توکنایز کردن میتواند روی انواع حروف اجرا شود؛ با این حال، پرکاربردترین راه برای توکنایز کردن، اجرای آن روی «فاصله» بین کلمات است.
ریشهیابی راهی ساده برای بریدن انتهای کلمات و استخراج ریشهی آنهاست. این تکنیک اغلب شامل حذف پسوندهای اشتقاقی میشود. پسوند اشتقاقی پسوندی است که به وسیلهی آن، کلمهای از کلمهی دیگر شکل میگیرد. کلاس کلمهی به دست آمده معمولاً با کلاس کلمهی اصلی تفاوت دارد. معروفترین الگوریتمی که از این تکنیک استفاده میکند، الگوریتم Porter است.
در تکنیک بنواژهسازی، کلمه از نظر واژهشناسی و ریختشناسی مورد تجزیه و تحلیل قرار میگیرد تا «وندهای عطفی» حذف شوند. وندهای عطفی حروفی هستند که به انتهای یک کلمه اضافه میشوند تا معنای آن را تغییر دهند. از جملهی این حروف میتوان به -s، bat یا bats اشاره کرد.
از آنجایی که ریشهیابی از مجموعه قوانین مشخصی پیروی میکند، ریشهی به دست آمده ممکن است به زبان انگلیسی نباشد. همچنین در بنواژهسازی، وندهای عطفی حذف میشوند و کلمهی به دست آمده همواره به زبان انگلیسی خواهد بود.
N-Gram
N-gram به ترکیب کلمات نزدیک به هم، به هدف بازنمایی، اشاره دارد. N موجود در نام این روش نشاندهندهی تعداد کلماتی است که با هم ترکیب شدهاند.
به عنوان مثال، این جمله را در نظر بگیرید: «پردازش زبان طبیعی برای علوم کامپیوتر ضروری است».
مدل 1-gram یا Unigram این جمله را به ترکیبات یک کلمهای تجزیه میکند؛ یعنی خروجی آن بدین شکل خواهد بود: «پردازش، زبان، طبیعی، برای، علوم، کامپیوتر، ضروری، است»
مدل Bigram آن را به ترکیبات دو کلمهای تجزیه میکند: «پردازش زبان، زبان طبیعی، طبیعی برای، برای علوم، علوم کامپیوتر، کامپیوتر ضروری، ضروری است». به همین ترتیب، مدل n-gram جملات را به ترکیبات n کلمهای تجزیه میکند.
تجزیهی زبان طبیعی به n-gram برای حفظ شمار کلمات موجود در جمله امری ضروری به شمار میرود؛ این فرآیند، ستون مهرهی عملیاتهای ریاضی است که در گذشته در حوزهی NLP به کار میرفتند.
روشهای تبدیل
از جمله پرکاربردترین روشهایی که برای بازنمایی دستهای کلمات استفاده میشود، روش tf-idf است.
TF-IDF
TF-IDF روشی برای تعیین نمرهی لغات است، به نحوی که هر کلمه، نسبت به تأثیری که در معنای جمله دارد، وزن مناسبی دریافت کند. این نمره محصول دو نمرهی مسقل است: فراوانی کلمه در متن (tf) و معکوس فراوانی در متون (idf).
- فراوانی کلمه (tf): یعنی فراوانی کلمهی مذکور در سند کنونی
- معکوس فراوانی در متون (idf): این معیار نشان میدهد کلمهی مذکور چقدر اطلاعات در بردارد. یعنی در میان همهی اسناد، پرکاربرد بوده است یا کمیاب. این معیار را به صورت log (N/d) محاسبه میکنند؛ در این معادله، N تعداد کل اسناد و d تعداد اسنادی است که کلمهی موردنظر در آنها به کار رفته است.
رمزگذاری وان-هات
یک روش دیگر برای بازنمایی کلمات به شکل عددی، رمزگذاری وان-هات است. طول بردار کلمه برابر با طول کلمه (تعداد حروف موجود در آن) است. مشاهدات در ماتریسی نمایش داده میشوند که تعداد ردیفهایش برابر با طول کلمه و تعداد ستونهایش برابر با طول مشاهده است. در این ماتریس، خانهای که کلمه (ردیف) در آن مشاهده (ستون) حضور داشته باشد، با 1 و در غیر این صورت، با صفر پر میشود.
کلمه | گربه | روی | تخت | نشست |
گربه | 1 | 0 | 0 | 0 |
روی | 0 | 1 | 0 | 0 |
تخت | 0 | 0 | 1 | 0 |
نشست | 0 | 0 | 0 | 1 |
تعبیه کلمات
تعبیه کلمات نام یک مجموعه تکنیک مدلسازی زبانی و یادگیری ویژگی است که کلمات یا عبارات را از به بردارهایی از اعداد حقیقی متصل میکنند. این تکنیک در اصل با مدلهای شبکهی عصبی استفاده میشود.
تعبیه کلمات را میتوان به تصویر کشیدن یک کلمه از فضایی چندبُعدی (تعداد ابعاد برابر با طول جمله) در فضایی با ابعاد کمتر دانست. در این فضای جدید، کلمات مشابه نزدیک به هم قرار میگیرند.
برای درک بهتر، تعبیهها را میتوانیم به تصویر درآوردن هرکدام از کلمات در فضایی از ویژگی در نظر بگیریم. به تصویر پایین دقت کنید:
مرد | زن | پادشاه | ملکه | سیب | پرتقال | |
جنسیت | 1- | 1 | 95/0- | 97/0 | 00/0 | 01/0 |
سلطنتی | 01/0 | 02/0 | 93/0 | 95/0 | 01/0- | 00/0 |
سن | 03/0 | 02/0 | 7/0 | 69/0 | 03/0 | 02/0- |
خوراکی | 04/0 | 01/0 | 02/0 | 01/0 | 95/0 | 97/0 |
در واقعیت، این ابعاد تا این حد واضح و قابل فهم نیستند؛ اما این مسئله مشکلزا نخواهد شد، چون الگوریتمها روی روابط ریاضیاتی بین ابعاد آموزش میبینند و آنچه توسط ابعاد نشان داده میشود برای آموزش و پیشبینی آنها معنایی ندارد.
در صورت تمایل به یادگیری مباحث جبر خطی، مصورسازی و تبدیلات (که اصول ریاضیاتی چند الگوریتم یادگیری ماشین هستند)، پیشنهاد میکنم ویدئوی «اساس جبر خطی» از 3Blue1Brown را تماشا کنید.
روشهای بازنمایی
سبد واژگان
برای اینکه الگوریتمها بتوانند روابط را از دل دادههای متنی بیرون بکشند، این دادهها باید در قالبی ساختاریافته به تصویر درآمده باشند.
سبد واژگان راهی برای بازنمایی دادهها در قالب جدول است. ستونهای این جدول همهی کلمات موجود در بدنه متن و ردیفها هم مشاهدات را نشان میدهند. سلولها (تقاطع ردیف و ستون) نمایشگر تعداد دفعات تکرار کلمهی مشخص شده در ستون در آن مشاهدهی خاص (ردیف) هستند.
درک و تفسیر جملاتی که به شکل ماتریس درآمدهاند برای ماشینها کار بسیار راحتی است. بدین طریق، میتوان انواع عملیاتهای جبر خطی و سایر الگوریتمها را روی دادهها اجرا کرده و مدلهای پیشبین ساخت.
در تصویر پایین، نمونهای از اجرای روش سبد واژگان را مشاهده میکنید که روی قسمتی از ژورنالهای پزشکی اجرا شده است:
شناسهی مقاله | زیستشناسی | نمونهبرداری | آزمایشگاه | بیوتین | اغلب | شکست سرطان | درجه پیشرفت سرطان | کلاس مقاله |
00001 | 12 | 1 | 2 | 10 | 0 | 1 | 4 | سرطان سینه |
00002 | 10 | 1 | 0 | 3 | 0 | 6 | 1 | سرطان سینه |
00014 | 4 | 1 | 1 | 1 | 0 | 28 | 0 | سرطان سینه |
00063 | 4 | 0 | 0 | 0 | 0 | 18 | 7 | سرطان سینه |
00319 | 0 | 1 | 0 | 9 | 0 | 20 | 1 | سرطان سینه |
00847 | 7 | 2 | 0 | 14 | 0 | 11 | 5 | سرطان سینه |
03042 | 3 | 1 | 3 | 1 | 0 | 19 | 8 | سرطان ریه |
05267 | 4 | 4 | 2 | 6 | 0 | 14 | 11 | سرطان ریه |
05970 | 8 | 0 | 4 | 9 | 0 | 9 | 17 | سرطان ریه |
30261 | 1 | 0 | 0 | 11 | 0 | 21 | 1 | سرطان پروستات |
41191 | 9 | 0 | 5 | 14 | 0 | 11 | 1 | سرطان پروستات |
52038 | 6 | 1 | 1 | 17 | 0 | 19 | 0 | سرطان پروستات |
73851 | 1 | 1 | 8 | 17 | 0 | 17 | 3 | سرطان پروستات |
این تکنیک عملکرد خوبی داشته و در تولید مدل برای انواع مسائل یادگیری ماشینی (همچون تشخیص ایمیلهای اسپم، طبقهبندی احساسات و …) به کار رفته است.
با این حال، این تکنیک دو عیب عمده دارد:
- ترتیب/ دستور زبان متن را در نظر نمیگیرد و بنابراین بافتی که کلمه در آن به کار رفته را از دست میدهد.
- ماتریس تولیدشده در این تکنیک به شدت تُنُک است و به سمت کلماتی که فراوانی بیشتری دارند، سوگیری دارد. الگوریتمها اساساً بر مبنای شمار کلمات عمل میکنند؛ در حالیکه در زبان طبیعی، اهمیت کلمه در واقع با فراوانی آن نسبت عکس دارد. کلماتی که بیشتر تکرار میشوند (مثل «است»، «برای» و …) عمومیتر هستند و تأثیر چندانی در معنای متن ندارند. پس وزن و ضریب اهمیت کلمات را باید به نحوی مشخص کنیم که به بهترین شکل ممکن، تأثیر آنها روی معنای جمله را نشان دهند.
ماتریس تعبیه
تکنیک ماتریس تعبیه راهی است برای بازنمایی تعبیهی (بردار) هر کدام از کلمات موجود در متن. در این ماتریس، ردیفها نشاندهندهی ابعاد فضای برداری و ستونها نمایندهی کلمات موجود در متن هستند.
برای بازنمایی متن در این ماتریس، ابتدا آن را به روش وان-هات رمزگذاری میکنند؛ سپس هر کدام از کلمات موجود در آن در ماتریس تعبیه ضرب میشوند تا فضای برداری آن متن به دست آید.
اسکرینشات از دورهی آموزشی اندرو انجی
نکتهای که باید به خاطر داشت این است که منظور از رمزگذاری وان-هات، برداری n بُعدی است که در محل حضور کلمه در متن مقدار 1 میگیرد. n هم به طول متن اشاره دارد. رمزگذاریهای وان-هات به جای مشاهدات، از خود متن استخراج میشوند.
شبکههای عصبی بازگشتی (RNN)
شبکههای عصبی بازگشتی یا RNNها گروه بسیار مهمی از شبکههای عصبی هستند که در حوزهی پردازش زبان طبیعی (NLP)، از اهمیت بالایی برخوردارند.
از نظر مفهومی، RNNها با شبکههای عصبی معمولی تفاوت دارند. ورودی شبکههای عصبی معمولی، یک نمونه (قطعهمتن) کامل است، اما ورودی RNNها یک کلمه است. به همین دلیل، RNNها مقداری انعطافپذیری به دست میآورند که به لطف آن میتوانند با جملاتی با طولهای متفاوت کار کنند، امری که در شبکههای عصبی معمولی، به خاطر ساختار ثابتشان، امکانپذیر نیست. این مزیت باعث میشود RNNها بتوانند ویژگیهای آموخته شده از موقعیتهای گوناگون متن (که شبکههای عصبی معمولی قادر به دریافتشان نیستند) را به اشتراک بگذارند.
یک شبکهی عصبی بازگشتی با هرکدام از کلمات موجود در جمله به عنوان ورودی مجزایی رفتار میکند که در زمان t اتفاق افتاده است و علاوه بر ورودی زمان t، از مقدار فعالسازی زمان t-1 نیز استفاده میکند. تصویر پایین ساختار دقیق معماری RNNها را نشان میدهد:
معماری ترسیمشده در تصویر بالا را با عنوان معماری «many to many» با (Tx=Ty)، نیز میشناسند؛ در این معماری، تعداد ورودیها برابر با تعداد خروجیهاست. این طراحی در مدلسازی توالیها بسیار مفید است.
به غیر از معماری بالا، سه نوع معماری پرکاربرد دیگر نیز در RNNها به چشم میخورد:
1. Many to One: RNNی که معماری many to one دارد، از تعداد زیادی ورودی (Tx) استفاده میکند تا یک خروجی (Ty) تولید کند. از جمله موارد کاربرد چنین معماریهایی، مسائل طبقهبندی است.
در تصویر بالا، H نشاندهندهی خروجی تابع فعالسازی است.
2. One to Many: در معماری One to Many، RNN بر اساس یک ورودی واحد، یک سری خروجی تولید میکند. به عنوان یکی از برجستهترین موارد کاربرد این معماری میتوان به مسائل تولید موسیقی اشاره کرد که ورودیشان تنها یک Jounre یا نت اول است.
3. Many to Many (Tx Ty): این معماری در شرایطی کاربرد دارد که برای تولید زیادی خروجی، از تعداد زیادی ورودی استفاده میشود. در این معماریها، طول ورودیها با طول خروجیها برابر نیست. از جمله کاربردهای این نوع معماری میتوان به ترجمهی ماشینی اشاره کرد.
رمزگذار قسمتی از شبکه است که جملهای که قرار است ترجمه شود را میخواند. رمزگشا بخش دیگری از شبکه است که آن جمله را به زبان موردنظر ترجمه میکند.
نقاط ضعف RNNها
RNNها با وجود مزایای فراوان، چند نقطهضعف عمده هم دارند:
- احتمالاً از مثالهای بالا متوجه شدهاید که RNNها تنها میتوانند وابستگیها را در یک جهت (زبانی) ثبت کنند. یکی از مفروضههای اساسی پردازش زبان طبیعی (NLP) این است که کلمهی بعدی هیچ تأثیری روی معنی کلمهی قبلش ندارد. اما میدانیم که این نکته در زبان طبیعی صدق نمیکند.
- RNNها در ثبت وابستگیهای بلندمدت عملکرد چندان خوبی ندارند. مشکل محوشدگی گرادیانها در این شبکهها به چشم میخورد.
این دو محدودیت منجر به ظهور نوع جدیدی از معماریهای RNN شدند که در این قسمت به تفصیل توضیح میدهیم:
واحد بازگشتی دریچهدار
تغییر و اصلاح واحد بازگشتی پایه میتواند به ثبت وابستگیهای بلند (طولانی) و رفع مشکل محوشدگی گرادیانها کمک کند.
واحد بازگشتی دریچهدار یا GRU از یک واحد حافظهی اضافی تشکیل میشود که تحت عنوان دریچهی به روزرسانی یا دریچهی بازراهاندازی شناخته میشود. GRUها به جز یک واحد عصبی معمولی که خروجیاش تابع سیگموئید و softmax است، یک واحد اضافی هم دارند که تابع فعالسازیاش، تانژانت هایپربولیک است. دلیل استفاده از تانژانت هایپربولیک این است که خروجی میتواند هم مثبت و هم منفی بوده و بنابراین برای کاهش و یا افزایش اندازه (مقیاس) به کار رود. با ترکیب خروجی این واحد با ورودی تابع فعالسازی، مقدار سلول حافظه به روزرسانی میشود.
بنابراین در هر گام، مقادیر واحدهای نهان و حافظه به روزرسانی میشوند. مقدار واحد حافظه در تعیین مقدار تابع فعالسازی (که به واحد بعدی منتقل خواهد شد) نقش مهمی دارد.
LSTM
در معماری شبکههای «حافظهی کوتاهمدت بلند» یا LSTM (برخلاف GRUها که فقط یک دریچهی به روزرسانی دارند)، یک دریچهی به روزرسانی و یک دریچهی فراموشی وجود دارد.
این طراحی به سلول حافظه اجازه میدهد مقدار مربوط به زمان t-1 را نگه داشته و مقدار زمان t را به آن اضافه کند.
RNN دوسویه
همانطور که در تصویر بخش قبلی از معماری RNN مشاهده کردیم، تنها اثر رویدادهای مربوط به گامهای زمانی قبل است که مدنظر قرار میگیرد. در نتیجهی استفاده از چنین معماری در مسائل NLP، فقط میتوان اثرات کلماتی را بررسی کرد که قبل از کلمهی موردنظر نوشته شدهاند. در حالیکه در زبان طبیعی چنین قانونی صدق نمیکند. برای رفع این مشکل از RNN دوسویه استفاده میشود.
RNN دوسویه شامل دو شبکهی عصبی بازگشتی میشود که یکی رو به جلو و دیگری رو به عقب است. پیشبینی نهایی این شبکه با ترکیب نتایج این دو جزء در هر گام زمانی t به دست میآید.
در این مقاله سعی کردیم همهی کاربردها و معماریهای شبکههای عصبی که در دنیای پردازش زبان طبیعی (NLP) به کار میروند را پوشش دهیم. در صورت تمایل به یادگیری عمیقتر شبکههای عصبی، پیشنهاد میکنم در دورهی آموزشی اندرو انجی در سامانهی Coursera شرکت کنید.
اگر این مبحث برای شما جذاب بود، بد نیست دوره آموزش پردازش زبان طبیعی با اکوسیستم هاگینگ فیس که در چند فصل در سایت هوشیو منتشر شده را بررسی کنید.