# ترجمه و تحلیل احساسات با یادگیری ماشین در درس‌های قبلی یاد گرفتید که چگونه یک ربات ساده با استفاده از `TextBlob` بسازید، کتابخانه‌ای که یادگیری ماشین را پشت صحنه برای انجام وظایف پایه‌ای پردازش زبان طبیعی مانند استخراج عبارت‌های اسمی به کار می‌گیرد. یکی از چالش‌های مهم در زبان‌شناسی محاسباتی، ترجمه دقیق یک جمله از یک زبان گفتاری یا نوشتاری به زبان دیگر است. ## [پیش‌آزمون](https://ff-quizzes.netlify.app/en/ml/) ترجمه یکی از مشکلات بسیار دشوار است که با وجود هزاران زبان و قواعد گرامری متفاوت هر زبان پیچیده‌تر می‌شود. یک رویکرد این است که قواعد گرامری رسمی یک زبان، مانند انگلیسی، را به یک ساختار مستقل از زبان تبدیل کنید و سپس آن را با تبدیل به زبان دیگر ترجمه کنید. این رویکرد شامل مراحل زیر است: 1. **شناسایی**. کلمات زبان ورودی را به اسم، فعل و غیره شناسایی یا برچسب‌گذاری کنید. 2. **ایجاد ترجمه**. ترجمه مستقیم هر کلمه را در قالب زبان مقصد تولید کنید. ### مثال جمله، انگلیسی به ایرلندی در زبان 'انگلیسی' جمله _I feel happy_ شامل سه کلمه به ترتیب زیر است: - **فاعل** (I) - **فعل** (feel) - **صفت** (happy) اما در زبان 'ایرلندی' همین جمله ساختار گرامری کاملاً متفاوتی دارد - احساساتی مانند "*خوشحال*" یا "*ناراحت*" به صورت *بر شما بودن* بیان می‌شوند. عبارت انگلیسی `I feel happy` در ایرلندی به صورت `Tá athas orm` ترجمه می‌شود. ترجمه *لفظی* آن می‌شود `خوشحالی بر من است`. یک گوینده ایرلندی که به انگلیسی ترجمه می‌کند، می‌گوید `I feel happy` نه `Happy is upon me`، زیرا او معنای جمله را درک می‌کند، حتی اگر کلمات و ساختار جمله متفاوت باشند. ترتیب رسمی جمله در ایرلندی به صورت زیر است: - **فعل** (Tá یا is) - **صفت** (athas یا happy) - **فاعل** (orm یا upon me) ## ترجمه یک برنامه ترجمه ساده ممکن است فقط کلمات را ترجمه کند و ساختار جمله را نادیده بگیرد. ✅ اگر به عنوان یک بزرگسال زبان دوم (یا سوم یا بیشتر) یاد گرفته باشید، ممکن است ابتدا با فکر کردن به زبان مادری خود شروع کرده باشید، یک مفهوم را کلمه به کلمه در ذهن خود به زبان دوم ترجمه کرده و سپس ترجمه خود را بیان کنید. این مشابه کاری است که برنامه‌های ترجمه ساده کامپیوتری انجام می‌دهند. مهم است که از این مرحله عبور کنید تا به تسلط برسید! ترجمه ساده منجر به ترجمه‌های بد (و گاهی خنده‌دار) می‌شود: `I feel happy` به صورت لفظی به `Mise bhraitheann athas` در ایرلندی ترجمه می‌شود. این به معنای (لفظی) `من احساس خوشحالی می‌کنم` است و یک جمله معتبر ایرلندی نیست. حتی با وجود اینکه انگلیسی و ایرلندی زبان‌هایی هستند که در دو جزیره نزدیک به هم صحبت می‌شوند، آن‌ها زبان‌های بسیار متفاوتی با ساختارهای گرامری مختلف هستند. > می‌توانید برخی ویدیوها درباره سنت‌های زبان‌شناسی ایرلندی مانند [این ویدیو](https://www.youtube.com/watch?v=mRIaLSdRMMs) را مشاهده کنید. ### رویکردهای یادگیری ماشین تا اینجا درباره رویکرد قواعد رسمی در پردازش زبان طبیعی یاد گرفته‌اید. یک رویکرد دیگر این است که معنای کلمات را نادیده بگیرید و _به جای آن از یادگیری ماشین برای شناسایی الگوها استفاده کنید_. این روش می‌تواند در ترجمه مؤثر باشد اگر متن‌های زیادی (یک *corpus*) یا متن‌هایی (*corpora*) در هر دو زبان مبدا و مقصد داشته باشید. برای مثال، به مورد *غرور و تعصب*، یک رمان معروف انگلیسی نوشته شده توسط جین آستن در سال 1813، توجه کنید. اگر کتاب را به زبان انگلیسی و ترجمه انسانی آن به زبان *فرانسوی* بررسی کنید، می‌توانید عباراتی را شناسایی کنید که به صورت _اصطلاحی_ به زبان دیگر ترجمه شده‌اند. شما این کار را به زودی انجام خواهید داد. برای مثال، وقتی یک عبارت انگلیسی مانند `I have no money` به صورت لفظی به فرانسوی ترجمه می‌شود، ممکن است به `Je n'ai pas de monnaie` تبدیل شود. "Monnaie" یک 'هم‌ریشه کاذب' فرانسوی است، زیرا 'money' و 'monnaie' مترادف نیستند. یک ترجمه بهتر که یک انسان ممکن است انجام دهد، `Je n'ai pas d'argent` است، زیرا بهتر معنای این را منتقل می‌کند که شما پول ندارید (نه 'پول خرد' که معنای 'monnaie' است). ![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) > تصویر توسط [Jen Looper](https://twitter.com/jenlooper) اگر یک مدل یادگیری ماشین ترجمه‌های انسانی کافی برای ساخت یک مدل داشته باشد، می‌تواند دقت ترجمه‌ها را با شناسایی الگوهای رایج در متن‌هایی که قبلاً توسط سخنوران انسانی متخصص هر دو زبان ترجمه شده‌اند، بهبود بخشد. ### تمرین - ترجمه می‌توانید از `TextBlob` برای ترجمه جملات استفاده کنید. جمله معروف اول **غرور و تعصب** را امتحان کنید: ```python from textblob import TextBlob blob = TextBlob( "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" ) print(blob.translate(to="fr")) ``` `TextBlob` ترجمه خوبی ارائه می‌دهد: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". می‌توان گفت که ترجمه TextBlob در واقع بسیار دقیق‌تر از ترجمه فرانسوی کتاب در سال 1932 توسط V. Leconte و Ch. Pressoir است: "C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." در این مورد، ترجمه‌ای که توسط یادگیری ماشین انجام شده است، بهتر از مترجم انسانی عمل کرده که به طور غیرضروری کلمات اضافی برای 'وضوح' به متن اصلی اضافه کرده است. > چه اتفاقی در اینجا رخ داده است؟ و چرا TextBlob در ترجمه اینقدر خوب عمل می‌کند؟ خب، پشت صحنه، از Google Translate استفاده می‌کند، یک هوش مصنوعی پیچیده که قادر است میلیون‌ها عبارت را تحلیل کند تا بهترین رشته‌ها را برای وظیفه مورد نظر پیش‌بینی کند. هیچ چیز دستی در اینجا انجام نمی‌شود و برای استفاده از `blob.translate` به اتصال اینترنت نیاز دارید. ✅ جملات بیشتری را امتحان کنید. کدام بهتر است، ترجمه توسط یادگیری ماشین یا ترجمه انسانی؟ در چه مواردی؟ ## تحلیل احساسات یکی دیگر از حوزه‌هایی که یادگیری ماشین می‌تواند بسیار خوب عمل کند، تحلیل احساسات است. یک رویکرد غیر یادگیری ماشین برای تحلیل احساسات این است که کلمات و عباراتی را که 'مثبت' و 'منفی' هستند شناسایی کنید. سپس، با توجه به یک متن جدید، ارزش کل کلمات مثبت، منفی و خنثی را محاسبه کنید تا احساس کلی را شناسایی کنید. این رویکرد به راحتی فریب می‌خورد، همانطور که ممکن است در وظیفه ماروین دیده باشید - جمله `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` یک جمله با احساس منفی و طنزآمیز است، اما الگوریتم ساده کلمات 'great'، 'wonderful'، 'glad' را به عنوان مثبت و 'waste'، 'lost' و 'dark' را به عنوان منفی شناسایی می‌کند. احساس کلی تحت تأثیر این کلمات متناقض قرار می‌گیرد. ✅ یک لحظه توقف کنید و به این فکر کنید که چگونه به عنوان سخنوران انسانی طنز را منتقل می‌کنیم. لحن صدا نقش بزرگی ایفا می‌کند. سعی کنید عبارت "Well, that film was awesome" را به روش‌های مختلف بیان کنید تا کشف کنید که چگونه صدای شما معنا را منتقل می‌کند. ### رویکردهای یادگیری ماشین رویکرد یادگیری ماشین این است که به صورت دستی متن‌های منفی و مثبت - توییت‌ها، یا نقدهای فیلم، یا هر چیزی که انسان به آن امتیاز داده و نظر نوشته است - جمع‌آوری کنید. سپس تکنیک‌های پردازش زبان طبیعی را بر نظرات و امتیازات اعمال کنید، به طوری که الگوها ظاهر شوند (مثلاً نقدهای مثبت فیلم بیشتر عبارت 'Oscar worthy' را نسبت به نقدهای منفی فیلم دارند، یا نقدهای مثبت رستوران بیشتر 'gourmet' را نسبت به 'disgusting' بیان می‌کنند). > ⚖️ **مثال**: اگر در دفتر یک سیاستمدار کار می‌کردید و قانونی جدید در حال بحث بود، ممکن است شهروندان با ایمیل‌هایی که از قانون جدید حمایت می‌کنند یا مخالف آن هستند به دفتر نامه بنویسند. فرض کنید وظیفه شما خواندن ایمیل‌ها و دسته‌بندی آن‌ها به دو دسته *حمایت* و *مخالفت* است. اگر تعداد زیادی ایمیل وجود داشت، ممکن است از تلاش برای خواندن همه آن‌ها خسته شوید. آیا خوب نبود اگر یک ربات می‌توانست همه آن‌ها را برای شما بخواند، آن‌ها را درک کند و به شما بگوید هر ایمیل در کدام دسته قرار می‌گیرد؟ > > یک راه برای دستیابی به این هدف استفاده از یادگیری ماشین است. شما مدل را با بخشی از ایمیل‌های *مخالفت* و بخشی از ایمیل‌های *حمایت* آموزش می‌دهید. مدل تمایل دارد عبارات و کلمات را با طرف مخالفت و طرف حمایت مرتبط کند، *اما هیچ یک از محتوا را درک نمی‌کند*، فقط اینکه کلمات و الگوهای خاصی بیشتر احتمال دارد در ایمیل‌های *مخالفت* یا *حمایت* ظاهر شوند. شما می‌توانید آن را با برخی ایمیل‌هایی که برای آموزش مدل استفاده نکرده‌اید آزمایش کنید و ببینید آیا به همان نتیجه‌ای که شما رسیدید می‌رسد یا خیر. سپس، وقتی از دقت مدل راضی بودید، می‌توانید ایمیل‌های آینده را بدون نیاز به خواندن هر یک پردازش کنید. ✅ آیا این فرآیند شبیه فرآیندهایی است که در درس‌های قبلی استفاده کرده‌اید؟ ## تمرین - جملات احساسی احساسات با *قطبیت* از -1 تا 1 اندازه‌گیری می‌شود، به این معنا که -1 منفی‌ترین احساس و 1 مثبت‌ترین احساس است. احساسات همچنین با امتیاز 0 - 1 برای عینیت (0) و ذهنیت (1) اندازه‌گیری می‌شود. نگاهی دوباره به *غرور و تعصب* جین آستن بیندازید. متن این کتاب در اینجا در دسترس است: [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). نمونه زیر یک برنامه کوتاه را نشان می‌دهد که احساسات اولین و آخرین جملات کتاب را تحلیل می‌کند و قطبیت احساسات و امتیاز عینیت/ذهنیت آن را نمایش می‌دهد. شما باید از کتابخانه `TextBlob` (که در بالا توضیح داده شد) برای تعیین `sentiment` استفاده کنید (لازم نیست ماشین حساب احساسات خود را بنویسید) در وظیفه زیر. ```python from textblob import TextBlob quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" sentiment1 = TextBlob(quote1).sentiment sentiment2 = TextBlob(quote2).sentiment print(quote1 + " has a sentiment of " + str(sentiment1)) print(quote2 + " has a sentiment of " + str(sentiment2)) ``` شما خروجی زیر را مشاهده می‌کنید: ```output It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) ``` ## چالش - بررسی قطبیت احساسات وظیفه شما این است که با استفاده از قطبیت احساسات تعیین کنید که آیا *غرور و تعصب* جملات کاملاً مثبت بیشتری نسبت به جملات کاملاً منفی دارد یا خیر. برای این وظیفه، می‌توانید فرض کنید که امتیاز قطبیت 1 یا -1 به ترتیب کاملاً مثبت یا منفی است. **مراحل:** 1. یک [نسخه از غرور و تعصب](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) را از Project Gutenberg به عنوان فایل .txt دانلود کنید. متاداده‌های ابتدای و انتهای فایل را حذف کنید و فقط متن اصلی را باقی بگذارید. 2. فایل را در پایتون باز کنید و محتویات آن را به عنوان یک رشته استخراج کنید. 3. یک TextBlob با استفاده از رشته کتاب ایجاد کنید. 4. هر جمله در کتاب را در یک حلقه تحلیل کنید. 1. اگر قطبیت 1 یا -1 باشد، جمله را در یک آرایه یا لیست از پیام‌های مثبت یا منفی ذخیره کنید. 5. در پایان، تمام جملات مثبت و منفی (به صورت جداگانه) و تعداد هر کدام را چاپ کنید. در اینجا یک [راه‌حل نمونه](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb) آورده شده است. ✅ بررسی دانش 1. احساسات بر اساس کلمات استفاده شده در جمله است، اما آیا کد *کلمات* را درک می‌کند؟ 2. آیا فکر می‌کنید قطبیت احساسات دقیق است، یا به عبارت دیگر، آیا با امتیازات *موافق* هستید؟ 1. به طور خاص، آیا با قطبیت **کاملاً مثبت** جملات زیر موافق یا مخالف هستید؟ * “چه پدر فوق‌العاده‌ای دارید، دختران!” او گفت، وقتی در بسته شد. * “بررسی شما از آقای دارسی تمام شده است، فرض می‌کنم،” خانم بینگلی گفت؛ “و دعا کنید نتیجه چیست؟” “من کاملاً متقاعد شده‌ام که آقای دارسی هیچ نقصی ندارد. * چقدر این نوع چیزها به طرز شگفت‌انگیزی رخ می‌دهند! * من بیشترین نفرت در دنیا را از این نوع چیزها دارم. * شارلوت یک مدیر عالی است، من می‌گویم. * “این واقعاً لذت‌بخش است! * من خیلی خوشحالم! * ایده شما درباره اسب‌ها لذت‌بخش است. 2. سه جمله بعدی با قطبیت کاملاً مثبت امتیاز داده شده‌اند، اما با خواندن دقیق، آن‌ها جملات مثبت نیستند. چرا تحلیل احساسات فکر می‌کرد آن‌ها جملات مثبت هستند؟ * خوشحال خواهم بود، وقتی اقامت او در نترفیلد تمام شود!” “ای کاش می‌توانستم چیزی بگویم که شما را تسلی دهد،” الیزابت پاسخ داد؛ “اما کاملاً خارج از قدرت من است. * اگر فقط می‌توانستم شما را خوشحال ببینم! * ناراحتی ما، عزیزم لیزی، بسیار زیاد است. 3. آیا با قطبیت **کاملاً منفی** جملات زیر موافق یا مخالف هستید؟ - همه از غرور او متنفر هستند. - “دوست دارم بدانم او در میان غریبه‌ها چگونه رفتار می‌کند.” “پس خواهید شنید—اما خود را برای چیزی بسیار وحشتناک آماده کنید. - مکث برای احساسات الیزابت وحشتناک بود. - این وحشتناک خواهد بود! ✅ هر علاقه‌مند به جین آستن درک می‌کند که او اغلب از کتاب‌هایش برای نقد جنبه‌های مضحک جامعه انگلستان در دوران رجنتی استفاده می‌کند. الیزابت بنت، شخصیت اصلی در *غرور و تعصب*، یک ناظر اجتماعی تیزبین (مانند نویسنده) است و زبان او اغلب بسیار ظریف است. حتی آقای دارسی (علاقه عاشقانه در داستان) به استفاده بازیگوشانه و طعنه‌آمیز الیزابت از زبان اشاره می‌کند: "من به اندازه کافی از آشنایی شما لذت برده‌ام تا بدانم که شما از اظهار نظرهایی که در واقع نظر شما نیستند، لذت زیادی می‌برید." --- ## 🚀چالش آیا می‌توانید ماروین را با استخراج ویژگی‌های دیگر از ورودی کاربر بهتر کنید؟ ## [پس‌آزمون](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه خود راه‌های زیادی برای استخراج احساسات از متن وجود دارد. به کاربردهای تجاری فکر کنید که ممکن است از این تکنیک استفاده کنند. به این فکر کنید که چگونه ممکن است اشتباه پیش برود. درباره سیستم‌های پیشرفته و آماده برای استفاده در سازمان‌ها که احساسات را تحلیل می‌کنند، مانند [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott) بیشتر بخوانید. برخی از جملات کتاب غرور و تعصب را که در بالا آمده‌اند آزمایش کنید و ببینید آیا می‌تواند ظرافت‌ها را تشخیص دهد. ## تکلیف [مجوز شاعرانه](assignment.md) --- **سلب مسئولیت**: این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.