فهرست مطالب
هدف از نوشتن این مطلب، کمک به افرادی است که بهتازگی به حوزه پردازش زبان طبیعی علاقهمند شده و دوست دارند بدانند مسیر یادگیری پردازش زبان طبیعی چیست.
هدف از بخشهای مختلف و متنوع این نوشته، ارائه شناخت اولیه نسبت به این حوزه، سپس معرفی منابع مختلف آموزشی است. البته در لابهلای صحبتها، سعی شده از تجربیات نویسنده استفاده شود و نکاتی که ممکن است در آینده به کار آید، بیان شود.
ازآنجاییکه غلطهای نگارشی یا فنی اجتنابناپذیر است پس در بهبود این نوشته همراه بوده و نکات اصلاحی خود را به این آدرس ایمیل کنید. همچنین اگر منبع مفید دیگری خوانده که در این نوشتار نیست لطفا اطلاع داده تا در نسخه های بعدی قرار گیرد. در آخر اگر مطلب مناسبی نوشته اید که برای مخاطب این نوشتار مناسب است حتماً از طریق ایمیل اطلاع رسانی کنید.
مسیر یادگیری پردازش زبان طبیعی
پردازش زبان طبیعی حوزهای جذاب در بازارهای خارجی و (تا حدودی) داخلی است. با یادگیری مباحث مربوطه میتوانیم هم روی متون فارسی و هم متون انگلیسی کار کنیم.
اگر بازار داخل را انتخاب کنیم؛ چون در این بخش صنعت ابتدای کار است پس درآمد نسبتاً خوبی منتظرمان است؛ ولی توصیه بهتر این است که رویکردمان را گسترش بدهیم و به پروژههای خارجی فکر کنیم و با دورکاری (ریموت) درآمد دلاری داشته باشیم. تعداد پروژههای انگلیسی چندین برابر است و همچنین کار روی متون انگلیسی به دلیل وجود کتابخانههای قوی، بسیار آسانتر است.
- اگر دید داخلی داشته باشید باید حقوق بین 7 تا 15 میلیون ماهانه در نظر بگیرید.
- البته با توجه به جدید بودن این حوزه، امکان ایجاد سرویس یا محصول مبتنی بر پردازش زبان طبیعی و فروش آن هست.
- طبیعتاً گزینه تأسیس شرکت یا استارتآپ مبتنی بر پردازش زبان طبیعی هم هست.
- در نهایت باتوجهبه شرایط اقتصادی فعلی، توصیه اکید ما، توجه به بازارهای خارجی هست.
- همکاری دورکار یا ریموت
- فعالیت فریلنسرینگ در سایتهایی مثل upwork یا Fiverr
- تولید محصول یا سرویس و فروش آن به شرکتهای خارجی
Natural Language Processing یا NLP یکی از محبوبترین حوزههای فعلی هوش مصنوعی است. هدف اصلی NLP درک زبان انسان توسط ماشین است. ابتدای کار و برای درک اهمیت موضوع، کافی است عبارت”NLP jobs” سرچ کنیم.
تعداد نتایج جستجو بالاست و این نشانهٔ خوبی است، برای اینکه کارشناس پردازش زبان طبیعی در انواع کسبوکارهای جهانی جای خود را بازکرده و این تقاضا بهمرور در حال گسترش است. همچنین با جستجوی عباراتی مثل “کارشناس پردازش متن” میتوان یک دید نسبتاً جامعی در مورد میزان تقاضای این فیلد کاری در ایران پیدا کرد.
هدف از این نوشتار دستهبندی و جمعبندی برخی از بهترین آموزشهای حوزه پردازش زبان طبیعی است.
قبل از شروع معرفی منابع، بهتر است برخی مقدمات گفته شود تا افرادی که بهتازگی وارد این حوزه شدهاند بتوانند ارتباط مناسب با متن برقرار کنند.
پردازش زبان طبیعی چیست؟
منظور از پردازش زبان طبیعی (NLP)، همان زبانی است که ما انسانها به کمک آن صحبت میکنیم و یا در نوشتههایمان از آن استفاده میکنیم. هدف اصلی NLP تلاش برای درک و فهم زبان انسانی است.
NLP شامل دو مد active و passive است:
- natural language understanding (NLU): با هدف توانایی درک عبارات و همچنین نیت و هدف هر کلمه
- natural language generation (NLG): تولید عبارات و جملات معنیدار
کاربردهای NLP
برخی از کاربردهای پردازش زبان طبیعی در صنعت بهصورت زیر است:
- پزشکی: خلاصهسازی کلیه سوابق بیمار
- حقوق: پیداکردن پروندههای مشابه
- اقتصادی: بررسی اخبار مربوط به بورس و کمک به خریدوفروش بهتر سهم
- بیمه: پاسخگوی خودکار و هوشمند برای راهنمایی خرید انواع بیمه
- بازاریابی: بررسی دیدگاه کلی مشتریان نسبت به برند یک شرکت
مثالهای کاربردی NLP
از جمله مهمترین دستاوردهای NLP در زندگی روزانهمان:
- سرویسهای متن محور مثل Grammarly و wordtune که باهدف ویراست و اصلاح نگارشی و گرامری متون انگلیسی (ویراستمن یا پاکنویس نمونههای مخصوص زبان فارسی است)
- ترجمه خودکار مثل ماشین ترجمه گوگل (google translate)، مترجم Microsoft
البته کاربردهای پردازش زبان طبیعی در زندگی روزمره ما فراتر از مثالهای ذکر شده است و هرروزه گستردهتر میشود. برای مثال هنگام جستجو در گوگل، با نوشتن اولین کلمه، برخی عبارات به شما پیشنهاد داده میشود، یا در تلفن هوشمند هنگام ارسال پیامک با نوشتن اولین کلمه، کلمات بعدی پیشنهاد میشود. میزان نفوذ NLP در زندگی روزانه همینقدر زیاد و فراگیر است و این نویدبخش رونق این حوزه در آینده نزدیک است.
چرا NLP یک فعالیت سخت است؟
زبان بهصورت ذاتی ابهام زیادی دارد و برای درک درست معنی کلمات و جملات باید به محتوا (context) دقت کرد. مثلاً “بخشش لازم نیست اعدامش کنید”، درک چنین جملهای حتی برای انسانها هم سخت بوده؛ چون دو برداشت متفاوت وجود دارد. برداشت اول که درخواست بخشش کرده و میگوید اعدامش نکنید و برداشت دوم که درخواست اعدام وی را دارد. پس یک جمله میتواند معانی متفاوتی داشته باشد. پس یکی از دلایل سختی NLP، ابهام و پیچیدگی عبارات است. البته مواردی مثل وجود طعنه و کنایه نیز تحلیل را سختتر میکند.
از طرفی باگذشت سالیان دراز، جملات بهمرور کوتاهتر شده که درک جملات کوتاه نسبت به جملات طولانی نیز دردسرساز است. امروزه هدف ایجاد ارتباط و انتقال مفاهیم با کمترین تعداد کلمه است. چنین چیزی شاید برای انسانها خوشایند باشد؛ ولی کار ماشین را سخت میکند. هرچقدر متن طولانیتر باشد، درک ماشین از متن بهتر میشود.
چرا الان یادگیری پردازش زبان طبیعی را شروع کنیم؟
یکی از دلایل مهم رشد NLP در دو دهه اخیر، رشد و توسعه وب است. در بستر وب، حجم زیادی داده متنی تولید شده است. دلیل دوم، رشد و توسعه CPUs/GPUs چندهستهای هستند که این امکان را فراهم میکنند روی دادههای حجیم الگوریتمهای یادگیری ماشین اجرا شوند.
برخلاف گذشته که با کمبود سختافزار و ابزار روبرو بودیم امروزه سختافزارهای زیادی در دسترس هستند. فریمورکها و ابزارهای توسعه وب رشد زیادی داشته و باعث شده تعداد زیادی وبسایت وجود داشته باشد. هرچقدر تعداد وبسایتها بیشتر باشد حجم دادهها نیز افزایش پیدا میکند.
یکی از دلایل دیگر رشد سریع پردازش زبان طبیعی اعتماد صنعت به هوش مصنوعی و ابزارهاست. در دهههای قبل، این نگرانی وجود داشت که اگر یک ابزار به کمک داده، وظایفی را بدون نظارت انسان انجام دهد، فاجعه رخ خواهد داد. ولی بهمرور این اعتماد بیشتر شده و راحتتر میتوانیم به یک ابزار خودکار اعتماد کنیم.
همهٔ این دلایل باعث شده که پردازش زبان طبیعی یکی از موضوعات داغ صنعت و دانشگاه شود و میتوان از این فرصت طلایی برای رشد و کسب درآمد استفاده کرد.
قبل از معرفی هرگونه منبعی توضیح یک نکته بهشدت ضروری است. پردازش زبان طبیعی از آن دست فیلدهایی است که بهجرئت میتوان گفت در آن به صورت ماهانه تکنولوژی جدید معرفی میشود. برای یقین از صحت این ادعا کافی است به 2018 و زمانی که bert معرفی شد و باعث بهبود چشمگیر نتایج taskهای مطرح پردازش زبان طبیعی شد رجوع کنیم. ولی به آنجا ختم نشد و به فاصله کمی تکنولوژیهای جدید معرفی شدند و بهصورت ماهانه (حتی هفتگی) شاهد نوآوریهایی هستیم.
با توضیح بالا، ممکن است نگران شده و از خودتان بپرسید آیا توانایی بهروز ماندن را دارم یا خیر. نکته قابلتوجه این است که این نگرانی مختص به پردازش زبان طبیعی نیست و کسانی که در دنیای برنامهنویسی هستند، کموبیش درگیر این موضوع هستند. حال چه باید کرد؟
بهعنوان یک جواب تجربی، ابزارها و تکنولوژیهای جدید را ابتدا، بهصورت کلی بررسی کنیم؛ یعنی لازم نیست بلافاصله چند دوره پیدا کرده و ساعتها برای آموزش نحوه کار تکنولوژی جدید وقت صرف کنیم. بهتر است بهمحض معرفی یک تکنولوژی جدید، سؤالات زیر را بررسی کنیم:
- این تکنولوژی برای چه هدفی ارائه شده؟
- روشهای قبلی چه عیبی داشته که این روش جدید معرفی شده است؟
- و این روش جدید چگونه معایب روشهای قبلی را برطرف میکنند؟
- آیا واقعاً معایب قبلی را برطرف میکنند؟ یا صرفاً ادعایی بدون پشتوانه است.
اگر جواب سؤالهای بالا را بدانیم بخش مهمی از مسیر را طی کرده و در صورت نیاز بعداً به سراغ جزئیات هر روش رفته و با چند متن یا ویدئو آموزشی نحوه کار با آن را یاد میگیریم.
البته در محیطهای شرکتی معمولاً در 80 درصد مواقع از معرفی تکنولوژی جدید تا استفاده از آن چند ماهی طول میکشد تا آن تکنولوژی در محیطهای آزمایشی جواب خود را پس بدهد.
معرفی منابع یادگیری پردازش زبان طبیعی
در ادامه منابع مختلفی معرفی میشود که برخی برای افراد مبتدی و برخی برای افراد حرفه است که به دنبال یادگیری مباحث پیشرفتهتر هستند.
منابع به سه دسته اصلی تقسیم میشود:
- کورس (دوره) آموزشی آنلاین و کتاب
- وبلاگها
- ابزارها
کتابهای حوزهٔ پردازش زبان طبیعی
برخلاف توصیههایی که ممکن است در جاهای دیگر مشاهده کنید که میگویند تا tutorial و ویدئوهای یوتیوب وجود دارد به سراغ کتاب نرویم میخواهم توصیه کنم که اگر دنبال کسب مهارت حداکثری و درک عمیق نسبت به پردازش زبان طبیعی هستیم بهتر است از کتاب شروع کنیم. طبیعتاً مطالعه کتاب زمانبرتر است و حوصله زیادی میخواهد؛ ولی ارزشش را دارد. مزیت اصلی کتاب، تجمیع مطالب در یکجا است برخلاف ویدئو و آموزشهای متنی وبلاگ ها. از طرفی در بسیاری از اوقات tutorialها نگاهی نسبتاً سطحی به مطالب داشته و خیلی به مفاهیم پایه نمیپردازند؛ ولی کتابها معمولاً ریشهایتر هستند و عمق یادگیریمان بیشتر میشود.
کتاب “Natural Language processing with python“ یکی از انتخابهای مناسبی است که کمک میکند با مفاهیم پایه پردازش زبان طبیعی مثل tokenization، text normalization و pos آشنا شویم. در مرحله بعدی نحوه پیادهسازی این مفاهیم در پایتون بهتفصیل بررسی میشود. تمرکز کتاب استفاده از کتابخانه nltk است. در این کتاب خبری از مفاهیم یادگیری عمیق نبوده و تمرکز بیشتر، بر روشهای کلاسیک NLP است. اگر ابتدای راه باشیم و بخواهیم مباحث مقدماتی در زمینه پردازش زبان طبیعی فرا گیریم این کتاب، شروع خوبی خواهد بود.
کتاب “Natural Language Processing in Action” تمرکز جدی تر روی مسائل واقعی و مثالهای کاربردی مثل chat bot دارد. این کتاب همچنین برای پیادهسازی پروژهها به سراغ تکنولوژیهای جدیدتر مثل deep learning و word embedding میرود و سعی کرده بهروز باشد. در این کتاب با word2vec، CNN و RNN آشنا شده و از آنها در پیادهسازی پروژهها استفاده میشود. بهطورکلی برای کسانی که میخواهند در سطح پیشرفته پردازش زبان طبیعی فعالیت کنند این کتاب، گزینه مناسبی است.
کتاب بعدی “Speech and Language Processing” است. این کتاب بیشتر جنبه مرجع دارد و انتظار مطالب به روز نداشته باشید. اگر به دنبال مباحث تئوری مربوط به پردازش زبان طبیعی باشیم این کتاب گزینه خوبی است زیرا هر مبحث خیلی ریز بررسی شده است. در نگارش این کتاب سعی شده از مقالات زیادی بهره گیری شود و با خواندن این کتاب چکیده ای از مقالات (قدیمی) در زمینه پردازش زبان طبیعی را مطالعه خواهیم کرد. در این کتاب خبری از کد و پیادهسازی پروژه نیست. این کتاب بیشتر برای دانشجویانی که قصد نوشتن مقاله یا پایاننامه دارند توصیه میشود.
کتاب یادگیری عمیق (Deep Learning book) یکی از بهترین کتابهایی است که سعی کرده به زبان ساده مفاهیم یادگیری عمیق را بیان کند. اگر آشنایی چندانی با مباحث یادگیری عمیق ندارید قطعا این کتاب پیشنهاد میشود. همچنین این کتاب بیشتر برای کسانی پیشنهاد میشود که میخواهند بهصورت پیشرفته روی متون کار کنند؛ ولی دانش خوبی نسبت به شبکههای عصبی ندارند.
قطعاً "machine learning for absolute beginners" یکی از بهترین کتابهایی است که برای شروع یادگیری ماشین وجود دارد. ترجمه ساده و شیوای این کتاب یادگیری ماشین را در سایت دیتاهاب دانلود کنید.
دورههای پردازش زبان طبیعی
- دوره یادگیری ماشین (Machine Learning)
- مدرس: Andrew Ng
- هزینه: رایگان
- سطح: متوسط
این دوره یکی از بهترین دورههای موجود در پرداختن به موضوعات مقدماتی یادگیری ماشین است. کلیه محتوا زیر نظر مستقیم اندرو انگ (Andrew Ng) تهیه شده است. با مشاهده ویدئوها و انجام تکالیف بهصورت هفتگی، سطح مهارت فرد رشد کرده و دید خوبی نسبت به مباحث یادگیری ماشین پیدا میکند. مباحثی که بعداً برای کار با متون بهشدت مفید هستند.
پس از مشاهده و اتمام این دوره، پیشنهاد میشود حتماً دوره Deep Learning از اندرو انگ نیز مشاهده شود.
دلیل اصلی این پیشنهاد، تقویت دانش و مهارتهای فرد برای انجام پروژههای پیشرفته است؛ زیرا برای انجام پروژههایی مثل ماشین ترجمه و چتبات بهتر است به سراغ یادگیری عمیق برویم.
- دوره Sequence Models
- مدرس: Andrew Ng
- هزینه: رایگان
- سطح: پیشرفته
یک دوره خوب که مباحث پایهای مربوط به sequence را مطرح میکند. در این دوره یاد میگیریم چگونه به کمک یادگیری عمیق پروژههای پردازش زبان طبیعی را انجام دهیم. هدف اولیه دوره معرفی sequence هاست. در ادامه جملات را بهعنوان sequence در نظر گرفته و سپس ساخت و پیادهسازی شبکههای عصبی بازگشتی آموزش داده میشود. در این دوره معماری LSTM و GRU معرفی و نحوه استفاده از آنها در پروژهها بررسی میشوند. این دوره توسط اندرو انگ ارائه میشود.
البته این دوره سنگین و کمی ریاضیاتی هست و برای افراد مبتدی توصیه نمیشود.
- دوره Natural Language Processing
- مدرس: Anna Potapenko
- هزینه: رایگان
- سطح: پیشرفته
یکی از دورههای جامع و کامل ولی سخت است. این دوره مناسب کسانی است که میخواهند پسزمینه علمی روشها و الگوریتمها را بدانند. زمان زیادی از دوره صرف توضیح مباحث تئوری شده؛ ولی تکالیف بیشتر جنبه پروژهای و عملیاتی دارند. در این دوره طیف وسیعی از مباحث پردازش زبان طبیعی مثل sentiment analysis و summarization بررسی میشوند. پروژه نهایی این دوره پیادهسازی یک chat bot برای دادههای stackoverflow است.
- دوره natural language processing with deep learning دانشگاه استنفورد
- مدرس: جمعی از اساتید
- هزینه: رایگان
- سطح: پیشرفته
یکی از دورههای مطرح که مناسب افرادی است که دانش اولیه نسبت به یادگیری ماشین و یادگیری عمیق دارند. این دوره از آنجایی که در دانشگاه استنفورد برگزار شده، مباحث تئوری زیادی دارد و برای کسانی مناسب است که میخواهند جزئیات علمی و تئوری هر مبحثی را بدانند. در ضمن تکالیف این دوره به زبان پایتون است. تمرکز اصلی این دوره روی مباحث یادگیری عمیق و شبکههای عصبی است.
پس مشاهده این دوره به افرادی توصیه میشود که دید پژوهشی و نگارش مقاله یا پایاننامه دارند.
اگر اول راه پردازش زبان طبیعی هستید و میخواهید کار بر روی پروژههای واقعی NLP را یاد بگیرید، دوره آموزش پردازش زبان طبیعی مقدماتی را از دست ندهید.
میخواهید با کتابخانههای یادگیری عمیق آشنا شوید و پروژههایی کاربردی برای پردازش متن یاد بگیرید که در کارهای دنیای واقعی استفاده میشوند؟ صفحه آموزش متن کاوی فارسی با شبکههای عصبی را ببینید.
وبلاگهای یادگیری پردازش زبان طبیعی
این وبلاگ بهصورت تخصصی در زمینه NLP فعالیت میکند. از ویژگیهای این وبلاگ مطالب باکیفیتی است که به زبانی ساده و با شکلهای فراوان ارائه میشود که قطعاً باعث فهمیدن مطلب میشود. البته نقطهضعف آن تعداد کم محتوا است.
یک دورهٔ آموزشی جذاب و عملی که در قالب مقالات نوشتاری و به زبان انگلیسی که دید جامعی نسبت به پردازش زبان طبیعی فراهم میکند. استفاده از شکلها و نمودارهای از مزیت این دوره است. البته این یک دوره صرفاً تئوری نبوده و کاملاً عملی است پس خودتان را برای کدنویسی آماده کنید.
مطالب دوره openclassrooms در مجموعه دیتاهاب بهصورت کامل به زبان فارسی ترجمه شده است. این مقالات را در صفحه مقالات آموزشی هوش مصنوعی بخوانید.
ابزارهای پردازش زبان طبیعی
برای تسهیل فرایند انجام پروژههای پردازش زبان طبیعی، ابزارها و کتابخانههای زیادی معرفی شده است. این ابزارها برای بخشهای مختلف طراحی شده و taskهای متنوع را پوشش میدهند. لازم به یادآوری است که تعداد ابزارهای زبان فارسی نسبت به زبان انگلیسی بسیار کمتر است. در ادامه معروفترین ابزارهای زبان انگلیسی معرفی میشوند. دلیل این کار بازار خوب پروژههای خارجی است که با یادگیری ابزارهای مخصوص انگلیسی میتوانیم منبع درآمد خوبی داشته باشیم. سپس برخی ابزارهای مخصوص زبان فارسی نیز معرفی میشود.
NLTK
عبارت Natural Language Toolkit یا بهصورت مخفف NLTK یکی از معروفترین ابزارهایی است که برای تحلیل متون مختلف استفاده میشود. این ابزار متنباز توسط Steven Bird و Edward Loper در دانشگاه پنسیلوانیا ساخته شد. NLTK معمولاً برای کارهای پژوهشی و آموزشی استفاده میشود. از قابلیتهای NLTK میتوان موارد زیر را نام برد:
- ریشهیابی،
- تشخیص موجودیت نامدار،
- تشخیص زبان،
- تعیین نقش کلمات.
البته NLTK پشتیبانی خاصی از زبان فارسی ندارد.
SpaCy
ابزاری متنباز که نسبت به nltk جدیدتر بوده و مستندات آموزشی قوی دارد. SpaCy معمولاً برای کارهای عملی و شرکتی بیشتر استفاده میشود. از قابلیتهای مهم آن پشتیبانی از زبانهای مختلف مثل انگلیسی، فرانسوی و آلمانی است. SpaCy نسبت به nltk روانتر بوده و کار با آن پیچیدگی کمتری دارد. SpaCy هم پشتیبانی خاصی از زبان فارسی ندارد.
TextBlob
TextBlob یک کتابخانه پایتونی برای پردازش دادههای متنی است که از تسکهای زیادی از جمله pos, sentiment analysis, translation پشتیبانی میکند. مزیت این کتابخانه سادگی کار با آن و سرعت بالایش است.
CoreNLP
ابزاری متن بازی که توسط دانشگاه استنفورد ارائه شده است. این کتابخانه مخصوص زبان جاوا بوده و تقریباً از تمامی پیشپردازشهای رایج پردازش زبان طبیعی پشتیبانی میکند. البته عملکرد این ابزار روی زبان فارسی چندان مناسب نیست.
حالا به سراغ ابزارهای مخصوص زبان فارسی میرویم.
HAZM
هضم ابزاری متنباز مخصوص زبان فارسی است. این کتابخانه توسط تیم صبحه ارائه شد. از قابلیتهای آن میتوان به این موارد اشاره کرد:
- تمیز و مرتب کردن متن
- تقطیع جملهها و واژهها
- ریشهیابی واژهها
- تحلیل صرفی جمله
- تجزیه نحوی جمله
برای آشنایی کامل با کتابخانه هضم و پردازش متن فارسی، دیتاهاب سری مقالات تخصصی معرفی این کتابخانه را همراه با کدهای پایتون آن منتشر کرده است.
ParsiVar
پارسی ور توسط پژوهشکده فناوری اطلاعات جهاد دانشگاهی ارائه شده و کدهای مربوط به آن از این آدرس قابل دسترسی است. ویژگیهای ارائه شده تقریباً شبیه به هضم است ولی در برخی مواقع سرعت این کتابخانه بهتر از هضم است:
- تمیز و مرتب کردن متن
- تقطیع جملهها و واژهها
- ریشهیابی واژهها
- تحلیل صرفی جمله
- تجزیه نحوی جمله
سری مقالات تخصصی معرفی پارسی ور را در سایت دیتاهاب بخوانید:
- نصب Parivar
- پارسی ور چیست
- متن کاوی با پایتون به کمک پارسی ور
repositoryهای گیتهاب برای NLP
در ادامه بهتر است برخی از معروفترین repositoryهای گیتهاب که برای زبان انگلیسی و فارسی فعال هستند معرفی شوند. این repositoryها معمولاً ابزارهای متنبازی (open-source) که در زمینه پردازش زبان طبیعی وجود دارد را معرفی میکنند. میتوان کدها، دیتاستها و مقالات مرتبط را بررسی کرده و بهنوعی باعث میشوند بعضی از قسمتهای پروژه را خودمان کدنویسی نکنیم و از این منابع رایگان استفاده کنیم.
از معروفترین repositoryهای موجود awesome-nlp است. برای انجام هر پروژه بهتر است ابتدا سری به این repository زده و از کتابخانه ها و دیتاستها و منابع معرفی شده استفاده کنیم. این repository برای زبانهای مختلف، منابع مختلفی معرفی کرده ولی برای زبان فارسی منبعی معرفی نشده است.
نمونه مشابه repository بالا برای زبان فارسی awesome-persian-nlp-ir است. در اینجا برخی دیتاستها و کتابخانههای متنباز مخصوص زبان فارسی قابل مشاهده است.
همچنین awesome-persian در بعضی قسمت ها ابزارهای مخصوص پردازش زبان طبیعی را معرفی کرده است.
اگر احتیاج به دیتاست متنی فارسی برای پیشبرد پروژه داشته باشیم این repositoryها توصیه میشود.
- Persian_dataset
- ارائه دیتاستهای متنی و غیرمتنی فارسی
- Text-Mining
- دادهای مربوط به خبرگزاریها
یشنیازهای مسیر یادگیری پردازش زبان طبیعی
هدف این بخش، معرفی منابع جداگانه برای تکتک فعالیتهای NLP است. در ابتدا بد نیست پیشنیازهای لازم برای شروع مسیر یادگیری پردازش زبان طبیعی را تیتروار مرور کنیم:
- مبانی جبر خطی و احتمال (متغیر تصادفی، انواع توزیعها)
- دانش اولیه از زبانشناسی
- آشنایی با مفاهیم یادگیری ماشین
- آشنایی مقدماتی با یکی از زبانهای برنامهنویسی (ترجیحاً پایتون)
با دیدن دوره آموزش رایگان جبر خطی در کانال یوتیوب دیتاهاب خیالتان از مفاهیم جبر خطی راحت میشود.
برای ورود به دنیای پروژههای یادگیری ماشین، دوره آموزش رایگان یادگیری ماشین را در کانال یوتیوب دیتاهاب ببینید.
هنوز انجام پروژه یادگیری ماشین شروع نکردید، چون برنامهنویسی بلد نیستید؟ دوره آموزش رایگان پایتون را از دست ندهید.
مقالات یادگیری ماشین مفاهیم مهم و پایهای یادگیری ماشین را کامل به شما آموزش میدهد.
برنامه عملی یادگیری پردازش زبان طبیعی
برای انجام پروژهها، طبیعتاً لازم است به یکی از زبانهای برنامهنویسی مسلط باشید. زبانهای مختلفی وجود دارد مثل پایتون، R و جاوا. در ابتدای مسیر شاید انتخاب زبان کمی سخت به نظر برسد؛ ولی
- اگر نگاهی گذرا به دورههای موجود در سایتهایی مثل udemy و coursera بیندازیم متوجه میشویم که تعداد زیادی دوره در زمینه یادگیری ماشین با زبان پایتون وجود دارد.
- همچنین با بررسی libraryهای تخصصی یادگیری ماشین در هر زبان میتوان نتیجهگیری کرد که کدام زبان بهتر است. برای مثال زبان پایتون کتابخانههای قوی مثل keras، sklearn، pandas، numpy و tensorflow ارائه داده که انجام پروژهها را بهشدت آسانتر کرده است.
- در نهایت میتوان از آمارهای جهانی استفاده کرده و ببینیم در سالهای اخیر تحلیلگران داده از چه زبانی بیشتر استفاده کردهاند.
یادگیری پایتون برای پردازش زبان طبیعی
با توجه به توضیحات بالا، یادگیری و استفاده از زبان پایتون پیشنهاد میشود. البته لازم نیست نگران شویم که باید همه جزئیات زبان پایتون را آموزش دید. خیر، لازم نیست و بهتر است در ابتدا مباحث کلی و اولیه پایتون را یاد بگیریم و به همین مقدار بسنده کنیم. روش پیشنهادی این است که ابتدا یک تا دو هفته وقت گذاشته و به یک دانش اولیه و حداقلی از کلیات پایتون برسیم سپس با استفاده از دانش اولیهای که از پایتون یاد گرفتیم شروع به انجام پروژه کنیم و هرجا به مشکل خوردیم، جستجو کرده و به کمک فیلم و کتاب آن مطلب خاص را آموزش ببینیم. این روش کمک میکند که اولاً سریعتر وارد کدنویسی و انجام پروژه شویم. دوم این که فقط چیزهایی که به انجام پروژهها کمک میکند را یاد میگیریم. فردی را در نظر بگیرید که با دید کمالگرایانه 10 دوره مختلف از پایتون میبیند و با تمامی مباحث پایتون آشنا میشود درصورتیکه برای انجام پروژه فقط 30 درصد از آن مورداستفاده قرار میگیرد. پس تنها چیزهایی را یاد بگیریم که لازم است. نکته مهم این است که گاهی فقط باید بدانیم فلان قابلیت در فلان library هست (حتی اگر ریز جزئیات آن را ندانیم). این دانش کمک میکند که در آینده در وسط پیادهسازی یک پروژه ناگهان بهخاطر بیاورید “بهتر از است قابلیت X از کتابخانه Y استفاده کنم”. دیدن دوره با این دید بهشدت توصیه میشود.
از طرفی ازآنجاییکه زبان پایتون همهمنظوره بوده؛ مثلاً با آن میتوان back end سایت نوشت یا برنامههای سیستمی نوشت پس بهتر است پایتون با رویکرد تحلیل داده یاد گرفته شود. خوشبختانه دورههایی وجود دارد که پایتون را مشخصاً برای فعالین حوزه داده تدریس میکند. مثل دوره زیر
لازم به ذکر است بنا به تجربه فرد و دانش اولیه او از برنامهنویسی، مدتزمان تقریبی که طول میکشد یک نفر یک دید کلی و مناسب نسبت به پایتون برای پروژههای تحلیل داده پیدا کند حدود یک ماه است. البته مشاهده دوره بالا و انجام تکالیف آن کفایت میکند.
برای یادگیری پایتون، دوره آموزش رایگان پایتون را در کانال یوتیوب دیتاهاب مشاهده کنید.
یادگیری ماشین برای پردازش زبان طبیعی
ممکن است برایتان سؤال باشد که چرا باید یادگیری ماشین و الگوریتمهای آن را فرابگیریم. در جواب باید گفت هر زمانی که قرار باشد دادههایی (از هر جنس متن، تصویر، صوت) تحلیل شود بالاخره باید الگوریتمهایی را پیادهسازی کنیم و بهترین جواب را انتخاب کنیم. پس فارغ از جنس دادهها، روشهای تحلیل داده ثابت بوده و همگی زیرمجموعه یادگیری ماشین است. هرکدام از ما با مطالعه و یادگیری دقیق الگوریتمهای یادگیری ماشین به یک مهارت مهم دست پیدا کرده و از این مهارت در پروژههای مختلف میتوانیم استفاده کنیم. پس نتیجهگیری بدین صورت است که هرکسی که بخواهد یک مجموعهداده را تحلیل کند، فارغ از جنس دادهها، در ابتدا، باید از یکسری قواعد و روشهای ثابت استفاده کند؛ مثلاً ابتدا دادهها را تمیز کند، سپس پیشپردازشهایی را انجام دهد.
از طرفی برخی الگوریتمها مثل خوشهبندی kmeans هم روی دادههای جدولی و هم دادههای متنی قابلاجراست یا از تنسورفلو هم برای پردازش متن میتوان استفاده کرد و هم پردازش تصویر. البته لازم به یادآوری است که هر جنس داده همچنین روشهای مختص به خودش دارد؛ مثلاً الگوریتمی مثل LDA مخصوص تشخیص موضوع متون است. باتوجهبه صحبتهای بالا، در انجام پروژههای تحلیل داده برخی روشها، مراحل و الگوریتم مشترک بوده که باید آنها را بهخوبی فرابگیریم.
تذکر: معمولاً هر تکنولوژی جدید پس از معرفی بهمرور به زبان انگلیسی در جاهایی مثل medium آموزش داده میشوند. ولی چند ماهی طول میکشد که یک نفر زحمت ترجمه مطالب را بر عهده بگیرد. پس اگر بخواهیم از مطالب جدید جا نمانیم حتماً باید زبان انگلیسی خود را (حتی شده در حد خواندن) تقویت کنیم و همیشه منتظر مطالب فارسی و ترجمه شده نباشیم.
دلیل دیگر اینکه معمولاً افرادی که در یک حوزه مطالبی تألیف یا ترجمه میکنند، معمولاً در حد مقدمات را گفته و بحث رها میشود، بهخاطر همین است که در سطح اینترنت در مورد حوزهای مثل یادگیری عمیق مباحث موجود فارسی، مقدماتی و همه تقریباً در یک سطح هستند.
دیتاهاب جدیدترین و کاربردیترین مطالب را باکیفیت مناسبی تهیه و ترجمه کرده است. پیشنهاد میشود مقالات یادگیری ماشین برای شروع یادگیری ماشین به ترتیب مطالعه شوند.
ریاضیات پردازش زبان طبیعی
وقتی یک دید خوب نسبت به ساختار کلی یادگیری ماشین پیدا شد و توانستیم به زبان پایتون کدنویسی کنیم باید به مرحله بعدی برویم.
در مرحله بعدی به سراغ بحث شیرین ریاضی میرویم. معمولاً شما اگر به فردی بگویید قصد ورود به حوزه داده دارید در ابتدا برایتان مفصلاً داستانسرایی میکنند که باید استاد تمام ریاضی و آمار باشی تا بتوانی بهخوبی در این حوزه رشد کنی. تجربه شخصی من بدین صورت است که برای شروع کار باید ریاضیات دبیرستان را مسلط باشیم و همچنین جبر خطی را تا حد قابل قبولی بدانیم و با توزیعهای آماری آشنا باشیم. همهٔ این موارد کمتر از دوهفته زمان میبرند و برای شروع کافی هستند. در آینده و بنا به نیاز میتوان مباحث پیشرفتهتر را آموخت. زیرا در اکثر پروژهها، تنها دانستن توزیعهایی مثل توزیع نرمال، پوآسون و آشنایی با A/B کفایت میکند. در ادامه دوره مطرحی معرفی شده که لازم نیست همه جلسات آن دیده شود. فقط بخشهایی از آن که به نظرتان لازم هست را مشاهده کنید و احیاناً اگر در پروژه به مشکلی برخورد کردید میتوانید از این منبع استفاده کنید.
- Descriptive Statistics by Khan Academy
دوره آموزش رایگان جبر خطی را در کانال یوتیوب دیتاهاب مشاهده کنید تا هر آنچه از جبر خطی لازم دارید را یاد بگیرید.
همینطور “Math for Machine Learning: Open Doors to Data Science and Artificial Intelligence” کتابی کم حجم است که فقط ریاضیات مخصوص یادگیری ماشین را بیان میکند.
یادگیری مفاهیم پایه پردازش زبان طبیعی
در ادامه تمرکز اصلی بر آموزش مفاهیم پایه پردازش زبان طبیعی است. مباحثی که بیشتر در فرایند پیشپردازش متون کاربرد دارند. پیشپردازش معمولاً برای هر زبانی متفاوت خواهد بود. مثلاً در زبان فارسی کاراکترهای عربی را به کاراکترهای فارسی تبدیل میکنیم و این کار مختص کار با متون فارسی است. درعینحال برخی موارد بین زبانها مشترک است مثل ریشهیابی کلمات مثلاً “خورد” ریشه “میخورم” است. برای شروع بهتر است مقالههای زیر مطالعه شود. این مقالات با تمرکز روی زبان فارسی تألیف شده است.
برای آشنایی کامل با پردازش زبان طبیعی، مجموعه مقالات پردازش زبان طبیعی پیشرفته را بخوانید.
عبارات منظم در پردازش متون
یکی از مهمترین مباحث در زمینه پیشپردازش متون Regular Expression (عبارات منظم) هستند. به کمک عبارات منظم میتوان الگوهایی مثل الگوی مربوط به شمارهتلفن تعریف کرده و سپس تمامی شمارههای تلفنی که با الگویمان تطبیق دارد را حذف کنیم یا در جایی نگهداری کنیم. پس دو هدف اصلی یکی استخراج اطلاعات خاص از متون مثل کد ملی است و هدف دوم حذف برخی عبارات مثلاً کلماتی که با حرف “ب” شروع شده است. برای یادگیری بهتر عبارات منظم به سراغ لینک زیر میرویم. البته regexها مبحث مفصلی هستند که لازم نیست تمامی توابع و عملکردهای آن را یاد بگیریم.
کتابخانههای پردازش متن فارسی
برای زبان فارسی ابزارها و کتابخانههای کمی وجود دارد؛ مثلاً برای پیشپردازش دو کتابخانه معروف هضم و پارسی ور وجود دارد. البته کتابخانههای دیگری نیز هست که همگی مشکل عدم جامعیت دارند؛ یعنی فقط بر روی یک مورد خاص مثلاً ریشهیابی کار میکند. برخلاف فارسی، زبان انگلیسی کتابخانههای قوی از جمله spaCy و NLTK دارد که حتماً توصیه میکنم آشنایی اولیه با هر دوی این ابزارها داشته باشید چرا که ممکن است در پروژهای متون انگلیسی هم داشته باشید. از طرفی هضم و پارسی ور هر دو در برخی موارد از توابع NLTK استفاده میکنند چون NLTK قابلیتهای فراوانی دارد؛ مثلاً به کمک آن میتوان قواعدی طراحی کرده و عبارات اسمی (مثل اولین قهرمان وزنهبرداری) را استخراج کنیم (chunker).
بصریسازی در مسیر یادگیری پردازش زبان طبیعی
همیشه یکی از قسمتهای جذاب کار با دادهها، بصریسازی است. در این بخش لازم است کمی با نمودارها و نحوه بصریسازی متون آشنا شویم. یک مثال ساده نمودار توزیع روی طول جملات است که نشان میدهد طول جملات در چه وضعیتی است. یک نمودار به این سادگی در طراحی شبکههای عمیق کمککننده است.
روش Bag Of Words
در این قسمت به این موضوع باید بپردازیم که هر متن (که شامل کلماتی است) چگونه به ویژگی تبدیل شود بهنحویکه بتواند بهعنوان ورودی برای الگوریتمهای یادگیری ماشین مورداستفاده قرار گیرد (الگوریتمهای یادگیری ماشین تنها ورودی با فرمت عدد قبول میکنند پس اگر با دادههای تصویری یا متنی کار میکنیم باید به اعداد تبدیل شوند). رایجترین روش Bag Of Words است که هر کلمه را به یک عدد تبدیل میکند.
Word Embeddings در پردازش متن
با مطالعه مقالات بالا با یک روش جدید برای نمایش کلمات به نام Word Embeddings آشنا میشویم. این روش باعث تحولات چشمگیر در انجام پروژههای NLP شده است. پس ضرورت دارد اولاً ویژگیهای آن را کاملاً بررسی کنیم و سپس روشهای تولید آن را یاد بگیریم. یکی از معروفترین الگوریتمهای تولید Word Embeddings، روش word2vce گوگل است. یک متن دلخواه و ترجیحاً بزرگ به word2vec داده و خروجی بردارهای کلمات است؛ یعنی هر کلمه در قالب یک بردار عددی است که بردارهای کلمات معانی را حفظ میکنند. مثلاً بردار دوکلمه “پدر” و “مادر” نزدیک به هم هستند. در ادامه نحوه آموزش مدل word2vec روی دادههای دلخواه بررسی میکنیم.
- Tool: Gensim – Word2Vec
- Word2vec
- An Intuitive Understanding of Word Embeddings: From Count Vectors to Word2Vec
- Word2Vec Tutorial – The Skip-Gram Model
- word embedding چیست
تشخیص موضوع متون با LSA
در این بخش و به کمک مقالات زیر یک پروژه عملیاتی انجام میدهیم. هدف تشخیص موضوع متون است که از الگوریتم LSA استفاده میکند.
یادگیری عمیق در نقشه راه پردازش زبان طبیعی
باتوجهبه رشد روزافزون سرویسهای مبتنی بر متن، امروزه برای انجام پروژهها نمیتوان فقط به روشهای قدیمی یادگیری ماشین تکیه کرد؛ مثلاً برای انجام پروژههایی مثل ماشین ترجمه، خلاصهساز و تشخیص زبان متن باید به سراغ روشهای جدیدتر مثل یادگیری عمیق رفت. یادگیری عمیق قلب تپنده پردازش زبان طبیعی است که باعث تحولات جدی در این زمینه شده است. پس در ابتدای کار حتماً باید یک دید مقدماتی نسبت نوآوریهایی مثل BERT ،OpenAI’s GPT-3 داشته باشیم. برای فهم این نوآوریها حتماً باید با مفاهیم پایهای یادگیری عمیق آشنا شویم. ابتدا با مراجعه به لینک زیر به دنبال پاسخ به یک سؤال هستیم”یادگیری عمیق و شبکه عصبی چیست؟”.
در ادامه برخی از اجزا شبکه عصبی را مرور میکنیم.
- Optimization Algorithms for Deep Learning
- Loss and Loss Functions for Training Deep Learning Neural Networks
- How to Choose Loss Functions When Training Deep Learning Neural Networks
- Gentle Introduction to the Adam Optimization Algorithm for Deep Learning
شبکه عصبی بازگشتی و پردازش متون
در این قسمت به بحث مهم شبکه عصبی بازگشتی میپردازیم. این شبکهها مخصوص کار با دادههایی هستند که ترتیب و توالی در آنها برقرار است مثل فریمهای فیلم، موسیقی، دادههای بورس و جملات. با دانستن ساختار و ویژگیهای شبکه عصبی بازگشتی و مرور کاربردهای آن، توانایی انجام پروژههای مختلف را پیدا میکنید.
پیاده سازی با Keras
سپس برای پیادهسازی مدلهای شبکه عصبی با keras آشنا میشویم.
- Your First Deep Learning Project in Python with Keras Step-By-Step
- Difference Between a Batch and an Epoch in a Neural Network
مدلهای seq2seq در NLP
حال به سراغ یکی از مهمترین بخشهای پردازش زبان طبیعی یعنی مدلهای seq2seq میرویم. این سری مدلها در حل مسائلی مثل ماشین ترجمه بسیار مفید واقع شدند. درک مناسب از مطالب این بخش، سطح مهارتیمان را از مقدماتی به پیشرفته ارتقا میدهد.
Language Modeling:
Sequence-to-Sequence Modeling:
جایگاه Transfer Learning در مسیر یادگیری پردازش زبان طبیعی
مبحث Transfer Learning باعث رشد چشمگیر بیشتر تسکهای NLP شد. یادگیری انتقالی یعنی از دانش و اطلاعاتی که در یک زمینه کسب کردیم در پروژههای نسبتاً مشابه استفاده کنیم. کاربرد اصلی یادگیری انتقالی برای مواقعی است که حجم دادههایمان کم باشد. پس از یک مدلی که روی دادههای زیاد آموزشدیده شده برای حل مسئله خودمان استفاده میکنیم.
ULMFiT:
Transformers:
Pre-trained Large Language Models (BERT and GPT-2):
مقالات کاربردی پردازش زبان طبیعی
در این بخش و پس از آشنایی با مفاهیم کلی چند مقاله مربوط به پیادهسازی taskهای مختلف مطالعه میکنیم.
آموزش LSTM و CNN
آموزش ساخت Chatbots
- Learn how to Build and Deploy a Chatbot in Minutes using Rasa
- How to build a voice assistant with open source Rasa and Mozilla tools
آموزش پردازش صوت
تلاشمان در این نوشتار معرفی مقدمات پردازش زبان طبیعی و همچنین معرفی ابزارهای لازم برای انجام پروژهها بود. در این نوشتار هدف انتقال تجربه نویسنده در قالب یک نقشه راه پردازش زبان طبیعی بود.
برای هرچه بهتر کردن محتوا و معرفی منابع مناسبی که فکر میکنید بهتر است در این کتابچه اضافه شود، از طریق این آدرس ایمیل در ارتباط باشیم. با روی باز محتوای شما در این کتابچه اضافه میشوند و منبع مناسبی برای افراد مختلف میشود.
4 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
جامع و کامل
با لینکهای مفید
دست شما درد نکند
دم شما گرم و مرسی از همراهیتون
جناب دهقانی درباره توجه و ترانسفورمرها مطالبی خوانده ام. اما برایم روشن نیست که آنها دقیقا چه میکنند! درباره مفاهیم توجه و ترانسفورمر در سایت های مختلف چیزی گفته نشده و اگر هم اشاره ای به آنها شده ناقص و سطحی است.
نوشته های این سایت نیز مرا یاری نکرد
https://transformer-circuits.pub
درخواست میکنم در این زمینه های مطالبی را تهیه کرده و در اختیار خوانندگان خود بگذارید
سلام وقت بخیر
ممنون از پیشنهادتون، امیدوارم فرصتی پیش بیاد بتونیم محتوای خوبی در همین زمینه تولید کنیم.