پردازش زبان طبیعی (NLP) و جای LLM در آن
جواب کوتاه
پردازش زبان طبیعی، یا NLP، رشتهایه که سعی میکنه کامپیوتر زبان آدمها رو بفهمه و بسازه: گفتار رو به متن تبدیل کنه، متن رو دستهبندی کنه، ترجمه کنه، جواب بده. سخته، چون یه کلمه چند معنی داره و معنیش رو بقیهی جمله میگه. NLP سه دوره داشته: از دههی ۱۹۵۰ قانونهای دستنوشته، از اواخر دههی ۱۹۸۰ آمار و شمردن روی متن، و از دههی ۲۰۱۰ شبکههای عصبی عمیق. تا چند سال پیش برای هر کار یه مدل جدا میساختن؛ مدل زبانی بزرگ اولین چیزی بود که خیلی از این کارها رو با یه مدل، فقط با دستور متنی، انجام داد. پس LLM یکی از ابزارهای NLPه؛ امروز قویترینش برای کارهای متنی.
NLP یعنی چی
وقتی به گوشیتون یه چیزی میگید و تایپش میکنه، یا یه متن رو توی مترجم میذارید، یا ایمیل ناخواسته خودش میره پوشهی دیگه، یه رشتهی قدیمی داره کار میکنه.
اسم این رشته پردازش زبان طبیعی هست، یا کوتاهش NLP. «زبان طبیعی» یعنی زبانی که آدمها باهاش حرف میزنن، مثل فارسی و انگلیسی؛ در برابر زبانهای برنامهنویسی که برای کامپیوتر ساخته شدن. NLP یه شاخه از علوم کامپیوتره که خیلی به هوش مصنوعی و زبانشناسی نزدیکه.
کارهای اصلیش چهار دستهان: تشخیص گفتار، یعنی تبدیل صدا به متن؛ دستهبندی متن، مثلا این نظر مثبته یا منفی؛ فهم زبان، یعنی بیرون کشیدن معنی؛ و ساختن زبان، یعنی نوشتن متن تازه. مدل زبانی بزرگ، که این مسیر دربارهشه، توی همین رشته به دنیا اومده.
چرا سخته
برای ما زبان راحته؛ از بچگی بلدیم. ولی ببینید یه کلمهی ساده چقدر کار دست کامپیوتر میده:
«شیر» توی هر کدوم از این سه جمله یه چیز کاملا متفاوته، و شما بی هیچ فکری میفهمید کدوم. چطور؟ از بقیهی جمله: «لیوان» و «خوردم»، «باغوحش»، «آب» و «چکه». یعنی معنی یه کلمه توی خودش نیست، توی همسایههاشه. کامپیوتر باید همین رو یاد بگیره.
گفتار از این هم سختتره. وقتی حرف میزنیم، بین کلمهها تقریبا مکثی نیست؛ صداها توی هم میرن؛ و هر کس با یه لهجه حرف میزنه. حتی شکستن متن به کلمه، که برای انگلیسی با فاصلهها سادهست، توی زبانهایی که بین کلمهها فاصله نمیذارن خودش یه مسئلهی جدیه. فارسی هم با نیمفاصله و پیشوندها و پسوندهاش، چالشهای خودش رو داره.
لایههای زبان
فهمیدن یه جمله یه کار نیست؛ چند تا کاره که روی هم سوار شدن. یه جملهی ساده رو در نظر بگیرید: «علی کتابهاش رو خوند».
پایینترین پله خود حرفها یا صداهاست؛ اگه ورودی صدا یا عکس یه کاغذ باشه، اول باید به حرف تبدیل بشه. پلهی بعد کلمهست: «کتابهاش» در واقع «کتاب» بهاضافهی «ها» بهاضافهی «ش» هست؛ به این کار تحلیل ساختواژه (Morphology) میگن. بعد جملهست: کی کار رو کرده، کار روی چی انجام شده؛ این دستور زبان یا نحو (Syntax) هست. بعد معنیه (Semantics): «خوند» اینجا یعنی مطالعه کرد، نه آواز خوند. و بالاترین پله کل متنه (Discourse): اگه جملهی قبل دربارهی علی و برادرش بوده، «ش» به کدوم برمیگرده؟
ویکیپدیا کارهای NLP رو دقیقا با همین پلهها دستهبندی میکنه. هر چی بالاتر برید، کار سختتره، چون باید پلههای پایین درست انجام شده باشن و دانش بیشتری از دنیا لازمه.
سه دوره
هفتاد ساله آدمها سعی میکنن این مشکل رو حل کنن. اگه بخوایم کل این داستان رو توی یه خط بکشیم:
اول قانونها رو دستی مینوشتن. بعد فهمیدن بهتره کامپیوتر خودش از روی متنهای زیاد بشمره. بعد شبکههای عصبی اومدن که به جای شمردن، شباهتها رو یاد میگیرن. و آخر، یه مدل خیلی بزرگ که همهی این کارها رو یهجا انجام میده. هر دوره مشکل دورهی قبل رو حل کرد؛ بیاید یکییکی ببینیم.
دورهی قانون
ریشهی NLP به دههی ۱۹۵۰ برمیگرده. همون سال ۱۹۵۰ یه دانشمند پیشنهاد کرد برای سنجیدن هوش ماشین، ببینیم میتونه مثل آدم حرف بزنه یا نه؛ یعنی از همون اول، زبان معیار هوش بود.
ایدهی اول ساده بود: قانونهای زبان رو بنویسیم و یه فرهنگ لغت بدیم دست کامپیوتر. سال ۱۹۵۴ یه آزمایش معروف بیش از شصت جملهی روسی رو خودکار به انگلیسی ترجمه کرد، و سازندههاش گفتن تا سه پنج سال دیگه ترجمهی ماشینی یه مسئلهی حلشدهست. نشد. پیشرفت خیلی کندتر از این حرفها بود، و دوازده سال بعد یه گزارش رسمی گفت ده سال پژوهش به انتظارها نرسیده، و بودجهی ترجمهی ماشینی خیلی کم شد.
توی همون سالها یه برنامهی دیگه ساختن که خودش رو جای یه رواندرمانگر جا میزد. تقریبا هیچ چیز از آدمها نمیدونست، فقط چند تا الگو داشت؛ مثلا به «سرم درد میکنه» جواب میداد «چرا میگید سرتون درد میکنه؟». ولی همین، به خیلیها حس گفتگو با یه آدم رو میداد. یه درس قدیمی که هنوز درسته: حرف روون زدن با فهمیدن یکی نیست.
مشکل دورهی قانون این بود که زبان استثنا داره، و استثناها استثنا دارن. هیچوقت نمیشد همهی قانونها رو نوشت.
دورهی آمار
تا دههی ۱۹۸۰ بیشتر سیستمها قانون دستنوشته بودن. از اواخر همون دهه، یه انقلاب شد: به جای نوشتن قانون، بذاریم یادگیری ماشین خودش از روی متنهای واقعی یاد بگیره. کامپیوترها هم قویتر شده بودن و این کار شدنی شده بود.
یکی از اولین موفقیتها باز هم ترجمه بود. سال ۱۹۹۰ یه گروه یه روش آماری برای ترجمه ساخت که از روی متنهای موازی یاد میگرفت: مذاکرات پارلمان کانادا، که هم به انگلیسی ثبت میشد و هم به فرانسوی. کامپیوتر میشمرد کدوم کلمهها معمولا با هم میان. همون شمردنی که توی درس پیشبینی تکهی بعد با دوازده جمله انجام دادیم، فقط روی میلیونها جمله.
مشکل این دوره داده بود: برای هر کار، یه عالمه دادهی مخصوص همون کار لازم بود. برای ترجمه، متن موازی؛ برای تشخیص نظر مثبت و منفی، هزاران نظر برچسبخورده. از نیمهی دههی ۱۹۹۰ با رشد وب، متن خام خیلی زیاد شد، ولی بیشترش برچسب نداشت.
خط تولید قدیمی
توی دورهی آمار، برای فهمیدن یه جمله، اون رو از یه خط تولید رد میکردن. هر ایستگاه یه کار کوچیک انجام میداد و نتیجه رو به بعدی میداد.
اول متن به جملهها شکسته میشد، بعد هر جمله به کلمهها. بعد ریشهیابی (Stemming یا Lemmatization)، که «رفت» و «میره» رو به یه ریشه برمیگردوند. بعد هر کلمه نقش دستوریش رو میگرفت (Part-of-Speech Tagging)، اسم، فعل، قید. بعد تجزیهی جمله (Parsing) معلوم میکرد کی چی کار کرده. و آخر، شناختن اسمهای خاص (Named Entity Recognition) میگفت «علی» اسم آدمه و «تهران» اسم جا.
گیر این خط تولید این بود که خطای هر ایستگاه به بعدیها هم میرسید؛ اگه ریشهیابی اشتباه میکرد، همهی بعدیها روی همون اشتباه کار میکردن. ویکیپدیا میگه با اومدن شبکههای عصبی عمیق، نیاز به خیلی از این ایستگاههای وسطی، مثل نقش دستوری، کم شد؛ شبکه خودش از متن خام یاد میگیره. ولی این کارها هنوز جاهایی به کار میرن، مثلا برای جستجو یا وقتی دقت و توضیحپذیری مهمه.
دورهی شبکه
سال ۲۰۰۳ یه اتفاق کوچیک ولی مهم افتاد: یه شبکهی عصبی ساده، با فقط یه لایهی پنهان، که روی حدود ۱۴ میلیون کلمه آموزش دیده بود، از بهترین مدل شمارشی اون زمان بهتر شد. دلیلش همون چیزیه که توی درس قبل دیدیم: شبکه به جای شمردن دنبالههای دقیق، شباهتها رو یاد میگیره.
از ۲۰۱۰ به بعد این راه تند شد. اول شبکههای بازگشتی برای مدل زبانی، بعد بردار کلمه، که معنی کلمهها رو به عدد تبدیل میکرد. توی دههی ۲۰۱۰ یادگیری عمیق توی خیلی از کارهای زبانی بهترین شد، و سال ۲۰۱۷ ساختمانی به اسم ترنسفورمر اومد که پایهی مدلهای امروزی شد.
یه مدل، چند کار
تا چند سال پیش، حتی توی دورهی شبکه، یه چیز عوض نشده بود: برای هر کار، یه مدل جدا.
میخواستید ترجمه کنید؟ یه مدل ترجمه. نظر مثبت و منفی؟ یه مدل دیگه، با دادهی خودش. پیدا کردن اسم آدمها و شهرها توی متن؟ یکی دیگه. هر کدوم ساختن و آموزش و نگهداری خودش رو داشت.
مدل زبانی بزرگ این رو عوض کرد. پژوهشی که سال ۲۰۲۰ یکی از مدلهای مشهور رو معرفی کرد، نشون داد یه مدل که فقط برای حدس تکهی بعد آموزش دیده، ترجمه و جواب سوال و کارهای دیگه رو انجام میده؛ فقط با اینکه کار رو با متن توضیح بدی و چند نمونه بذاری، بی آموزش جدا برای هر کار. یعنی به جای ده تا ماشین، یه ماشین که با دستور، کار رو عوض میکنه.
این به این معنی نیست که NLP یعنی LLM. تشخیص گفتار، خوندن نوشته از روی عکس، یا ابزارهای کوچیک و سریعی که روی گوشی کار میکنن، میتونن مدلهای جدای خودشون رو داشته باشن. LLM یکی از ابزارهای NLPه؛ امروز قویترینش برای کارهای متنی.
فارسی چه سختیهایی داره
هر زبانی گیرهای خودش رو داره، و فارسی چند تا گیر مخصوص داره که هر کسی بخواد برای فارسی چیزی بسازه، اول باید حلشون کنه.
اولیش نیمفاصلهست (Zero-Width Non-Joiner)، یه نویسهی نامرئی که ویکیپدیا میگه فارسی برای پیشوندها، پسوندها و کلمههای مرکب خیلی ازش استفاده میکنه؛ مثل «میخواهم». ولی خیلیها مینویسن «میخواهم» یا «می خواهم»، و برای ماشین این سه تا سه کلمهی جدان، مگه اینکه یکیشون کنه. دومی «ی» و «ک» عربیه: ویکیپدیا میگه «ي» و «ك» عربی با «ی» و «ک» فارسی دو نویسهی جدا با دو کد جدان؛ ظاهرشون شبیهه ولی برای ماشین فرق دارن، و اگه یکیشون نکنید، جستجو گاهی چیزی پیدا نمیکنه.
سومی اینه که فارسی معمولا بی حرکت نوشته میشه؛ پس «کرم» میتونه کِرم باشه، کَرَم یا کرِم، و فقط جمله معلوم میکنه کدوم. چهارمی کسرهی اضافهست: ویکیپدیا میگه معمولا نوشته نمیشه، پس «زبان پارسی» در اصل «زبانِ پارسی» خونده میشه و ماشین باید خودش بفهمه این دو تا کلمه به هم چسبیدن. و پنجمی فاصلهی زبان رسمی و خودمونیه: «میخواهم» و «میخوام» یه معنی دارن، ولی شکلشون فرق داره. درس مدل زبانی و زبان فارسی نشون میده مدلهای امروز با اینها چی کار میکنن.
چطور میسنجن
از کجا بفهمیم یه سیستم NLP خوب کار میکنه؟ برای هر کار یه جور سنجش هست.
برای دستهبندی، سادهست: چند تا از جوابها درست بوده؛ همون دقت و صحت و بازخوانیکه توی مسیر یادگیری ماشین دیدیم. برای ترجمه سختتره، چون یه جمله چند ترجمهی درست داره. ویکیپدیا میگه یه روش ۲۰۰۲ به اسم BLEU، کوتاهشدهی Bilingual Evaluation Understudy، ترجمهی ماشین رو با ترجمهی آدم مقایسه میکنه و میشمره چند تا کلمه و چند تا تیکهی چندکلمهای مشترک دارن؛ امتیازش بین صفر و یکه.
ولی ببینید چه گیری داره: اگه آدم نوشته باشه «فرش» و ماشین «قالی»، ترجمهی ماشین درسته ولی امتیاز کمتری میگیره. ویکیپدیا هم صاف میگه امتیاز BLEU بالاتر لزوما یعنی ترجمهی بهتر نیست، و درستی دستوری یا قابل فهم بودن رو نمیسنجه. برای همین امروز برای سنجیدن مدلهای زبانی بیشتر از آزمونهای استاندارد و داوری آدمها استفاده میشه؛ درس سنجش مدل زبانی.
کارهای NLP
برای اینکه نقشه کامل بشه، بیاید کارهای معروف NLP رو با همون پلهها مرور کنیم. پایینترین پله، تبدیل صدا و عکس به متنه: تشخیص گفتار، مثل تایپ صوتی گوشی؛ برعکسش، متن به گفتار، که مثلا صفحه رو برای کسی که نمیتونه ببینه بلند میخونه؛ و خوندن نوشته از عکس (OCR)، که یه کاغذ اسکنشده رو تایپشده تحویل میده. بعد شکستن متن به تکهها، همون توکن.
پلههای وسط دربارهی کلمه و معنیه. تشخیص احساس (Sentiment Analysis) میگه یه نظر مثبته یا منفی؛ دستهبندی متن، مثلا ایمیل ناخواسته یا سالم؛ شناختن اسمهای خاص؛ و فهمیدن اینکه یه کلمهی چندمعنایی اینجا کدوم معنیش رو داره. پلههای بالا کارهای بزرگن: ترجمه، خلاصه، درست کردن غلطهای نوشتاری، جواب دادن به سوال و گفتگو؛ کارهایی که امروز بیشترش با مدلهای زبانی بزرگ انجام میشه.
درس بعد این تاریخچه رو، از شمردن تا چتباتها، با جزئیات بیشتر میگه: تاریخچهی مدلهای زبانی.
جمعبندی. آنچه از این درس با خودتان میبرید.
- NLP: کامپیوتر و زبان آدمها.
- سخته، چون معنی رو جمله میگه.
- قانون، آمار، شبکه؛ سه دوره.
- قبلا هر کار یه مدل؛ حالا یه مدل، با دستور.
- LLM یکی از ابزارهای NLPه، نه همهش.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.