# مقدمه
در تحقیقات بسیاری در گذشته، از semantic vector space یا فضاهای برداری معنایی برای نمایش تک کلمات استفاده می شد و به عنوان ویژگی در نظر گرفته می شد. از اشکالات این نحوه ی نمایش این است که قابل بسط به ترکیب چندین semantic (معنا) نبودند. در بسیاری از سیستم ها تنها به تک تک کلمات و مثبت یا منفی بودن هر کلمه توجه می شود و نهایتا با برآیند گیری، بار کلی عبارت یا جمله مشخص می گردد. در این موارد، به ترتیب بیان شدن کلمات اهمیت داده نمی شود و از دقت تشخیص بار عبارت می کاهد. با توجه به این موضوع، مدل های ترکیبی از فضای بردار معنی کلمات، برای کاربردهای جملات و عبارات بزرگتر مورد توجه قرار گرفت. از مشکلاتی که امروزه در بررسی این مدل ها وجود دارد، محدودیت در داشتن منابع بزرگ و برچسب دار داده های ترکیبی در این حوزه میباشد. در راستای رفع این مشکل، در این مقاله منابع داده ی Stanford Sentiment Treebanks و شبکه ی Recursive Neural Tensor Network یا (RNTN) معرفی شده است که موفق به تشخیص معنای یک مجموعه ی متن با دقت بالایی شده است.
# داده
در این مقاله از داده های Stanford Sentiment Treebaks استفاده شده است که مجموعه ای از ۱۱۸۵۵ تک جمله میباشد که از نظرات کاربران برای فیلم ها برداشته شده است و توسط Stanford parser تجزیه شده است. این مجموعه داده شامل ۲۱۵۱۵۴ عبارت یکتا از درخت های پارس اشاره شده میباشد که هر کدام توسط سه نیروی انسانی تفسیر و تایید شده است. Stanford Sentiment Treebank اولین مجموعه داده ایست که شامل درخت های پارس به طور کامل برچسب زده شده میباشد و می توان از آن ها برای تحلیل ترکیبات معنی استفاده کرد. داده های آموزش هم که بانک درخت می باشند در ا[ین آدرس](https://raw.githubusercontent.com/pondruska/DeepSentiment/master/train.txt) آمده است.
# شبکه
در این مقاله مدل یادگیری عمیق نمایش کل جمله را بر اساس ساختار جمله ایجاد می کند و احساس و بار جمله را بر اساس اینکه چگونه کلمات در کنار هم معنی ساختار بزرگتر جمله را تشکیل می دهند تشخیص می دهد.
برای تشخیص بار معنایی ترکیبی یک عبارت، مدل RNTN معرفی شده است. ورودی این شبکه عبارات با طول های متفاوت است که هر عبارت بوسیله ی بردارهای کلمات تشکیل دهنده ی آن و یک درخت پارس ارائه می شود و بردار گره های بالاتر درخت از روی گره های برگ و به صورت سلسله مراتبی با استفاده از همان تابع ترکیبی tensor-based بدست میاید. نتایج حاصل از این شبکه را با نتایج بسیاری از مدل های ترکیبی با ناظر مانند شبکه ی عصبی استاندارد (RNN)، شبکه ی عصبی مبتنی بر ماتریکس و مدل هایی که ترتیب کلمات را در نظر نمیگیرند، مانند Naive Bayse و SVM، مقایسه کردیم و شبکه ی RNTN زمانیکه fined-grained sentiment (تشخیص احساس و بار معنایی جمله در یک سیستم پنج کلاسه شامل خیلی منفی، منفی، تا حدودی منفی، خنثی، تا حدودی مثبت، مثبت، خیلی مثبت که در تصویر ۱ نشان داده شده است.) را برای تمامی گره ها محاسبه میکرد، از تمام مدل های دیگر با دقت بالاتری به اندازه ی 80.7% عمل کرد. با همین سیستم روی داده های آزمون، کلاس بندی دو کلاس مثبت و منفی انجام شد و بر خلاف مدل های bag of words با دقت خوبی مثبت و منفی بودن جملات را تشخیص می دهد. این سیستم هم چنین این قابلیت را دارد که بار احساسی و معنایی جملاتی که در آن ها لغت but به کار برده شده است را تشخیص دهد.
اطلاعات مربوط به پروژه و داده های آن در [این آدرس](https://nlp.stanford.edu/sentiment/) قرار دارد.
# کارهای مرتبط
از کارهای مرتبط با این مقاله می توان به پنج حوزه ی تحقیقاتی NLP اشاره کرد که در ادامه به آن ها میپردازیم:
# semantic vector spaces
روش غالب در این روش استفاده از شباهت های توزیع شده بین تک تک کلمات است که با استفاده از آمار ظهور هم زمان هر کلمه و حوزه ی متن، معنی کلمه و بار معنایی آن مشخص میگردد. در این روش در خیلی از مواقع بردارهای توزیعی کلمات نمی توانند به خوبی تفاوت های کلمات متناقض را تشخیص دهد و این به این دلیل است که این دسته از کلمات معمولا در متون با مفاهیم یکسانی ظاهر می شوند. از روش های حل این محدودیت ها استفاده از بردارهای عصبی کلمات است که می توانند به صورت غیر ناظر آموزش داده شوند و شباهت های توزیعی را تشخیص دهند. از این مدل ها برای تشخیص sentiment یا بار احساسی عبارات نیز می توان استفاده کرد.
# compositionality in vector space
اکثریت الگوریتم های ترکیبیاتی و داده های مربوطه با استفاده از ترکیب دوتایی کلمات، شباهت و معنای آن ها را بررسی میکنند و این کار را از طریق عملیات ضرب و جمع بین بردارهای کلمات انجام میدهند. از نمونه روش های دیگر می توان به محاسبه ی نمایش برداری عبارات بلندتر و تعریف ترکیب با ضرب ماتریس ها اشاره کرد. هم چنین در روشی دیگر سه تایی فاعل، فعل و مفعول را تعریف کرده اند و با یک مدل مبتنی بر ماتریس آن ها را با تفسیرهای انسانی تطبیق داده اند. در این مقاله به طور خاص شبکه ی RNTN را با مدل های ترکیبی با ناظر شامل شبکه ی عصبی بازگشتی (RNN) و شبکه ی عصبی بازگشتی مبتنی بر ماتریس که هر دو روی داده های bag of words اعمال شده اند مقایسه کرده است.
# Logical Form
این روش یکی از روش هایی است که متفاوت از سایرین عمل میکند و با تطبیق دادن جملات با گزاره های منطقی سعی در تشخیص کلمات و بار معنایی آن ها دارد. از مشکلات این روش این است که در عین حال که در حوزه های گسسته و بسته به خوبی عمل می کند ، این است که تنها قادر به دریافت توزیع احساسات با استفاده از روش هایی فرای گزاره های منطقی مورد استفاده در حال حاضر است.
# Deep Learning
مستقل از روش هایی که تا به الان اشاره شد، روش های ترکیبی بسیار زیادی مرتبط با شبکه های عصبی در این حوزه کاربرد دارند که این مقاله یکی از نمونه های این حوزه میباشد.
# Semantic Analysis
در کناز تمام مواردی که برای تشخیص و تحلیل احساس و بار معنایی جملات و عبارات استفاده شد، بسیاری از روش ها از نمایش bag of words استفاده می کنند.
# Stanford Sentiment Treebank
بکارگیری روش bag of words در متون و مستندات بلند، با تاکید بر تعداد کمی کلمات با بار معنایی قوی (مثبت یا منفی) می تواند به خوبی عمل کند، در حالی که تشخیص بار معنایی تک جملات، حتی در دسته بندی دو کلاسه ی مثبت و منفی، تاکنون نتوانسته دقتی بیش از ۸۰ درصد داشته باشد. در حالتی که تعداد کلاس ها بیشتر هم باشد، برای نمونه شامل برچسب خنثی، این روش با دقتی حداکثر زیر ۶۰ درصد عمل کرده است. برای تشخیص و تحلیل جملات و نمونه های سخت تر نمی توان ترتیب ظهور کلمات را در نظر نگرفت، این در حالی است که در بعضی از روش ها مانند استفاده از bag of words این معیار مهم دخیل نیست. در این مقاله روی داده ی Semantic Treebank تحلیل و بررسی انجام شده است و برای تمام عبارات در مجموعه ی جملات پایگاه داده برچسب وجود دارد و به آموزش و ارزیابی کمک کرده است.
پایگاه داده ی مورد استفاده در این مقاله از نظرات کاربران در مورد فیلم ها از سایت rottentomatoes.com توسط متخصصان برداشته شده است و شامل ۱۰۶۶۲ جمله، نیمی مثبت و نیمی منفی، میباشد. این جملات از متون بزرگتر و پس از پیش پردازش به صورت مرتب استخراج شده اند و بار احساسی و معنایی آن ها با توجه به بار معنایی متن کلی در نظر گرفته شده است. تمام جملات توسط Stanford Parser تجزیه شده است و برچسب گذاری عبارات استخراج شده از جملات از دسته بندی شامل ۲۵ درجه بندی مانند شکل ۱ استفاده شده است که ۵ مقدار اصلی خیلی منفی، منفی، تا حدودی منفی، خنثی، تا حدودی مثبت، مثبت و خیلی مثبت را شامل می شود. در شکل زیر توزیع نرمال سازی شده ی برچسب جملات بر حسب طول آن ها (n-gram) مشاهده می شود.
![](https://boute.s3.amazonaws.com/301-52.JPG)
مواردی که در تحلیل جملات پایگاه داده مشاهده شده است شامل اطلاعات زیر است: بسیاری از جملات می توانkد خنثی در نظر گرفته شوند. هم چنین جملاتی که بار معنایی قوی تر و جهت دهی شده تری دارند، معمولا از متون بلند تری استخراج شده اند و بیشتر جملات کوتاه خنثی هستند. برچسب بیشتر جملات از موارد منفی، تا حدودی منفی، خنثی، تا حدودی مثبت و مثبت است و جملات با بار معنایی شدید (خیلی منفی و خیلی مثبت) به ندرت استفاده شده اند. بنابراین کلاس بندی جملات را به همین ۵ کلاس محدود کردند که بار معنایی جملات را به خوبی می تواند منتقل کند. به این دسته بندی ۵ کلاسه fine-grained sentiment classification گفته شده است. در این مقاله بررسی ها روی این ۵ برچسب روی جملات با طول های متفاوت انجام و تعریف شده است.
# Recursive Neural Models
در این مدل، برای عبارات با طول ها و بار معنایی و احساسی متفاوت، نمایش برداری ترکیبی محاسبه می گردد و سپس به عنوان ویژگی برای کلاس بندی هر عبارت مورد استفاده قرار می گیرد. هر عبارت با طول n، یا n-gram، به یک مدل ترکیبی درخت باینری داده میشود که هر برگ یک کلمه میباشد و با نمایش برداری ارائه می گردد. سپس به صورت buttom-up یا از پایین به بالا، گره های پدر که بالاتر قرار دارند با توابع ترکیبی متفاوت محاسبه میگردند و ویژگی های این گره ها نیز برای کلاس بندی به classifier داده میشود. نمایشی از مدل ترکیبی درخت باینری برای یک عبارت به طول ۳ در تصویر زیر مشاهده می شود.
![](https://boute.s3.amazonaws.com/301-53.JPG)
عملیات هایی که در این مدل ترکیبیاتی مشترک میباشد شامل نمایش برداری کلمات و کلاس بندی می باشد. هر کلمه یک بردار d تایی است که مقدار اولیه ی آن به صورت تصادفی از توزیع یکنواخت
U(-r, r) , r = 0.0001
انتخاب می شود. بردارهای تمام کلمات به صورت پشته مانند، در یک ماتریس L به طوریکه
![](https://boute.s3.amazonaws.com/301-12.JPG)
قرار می گیرند که |V| تعداد کل کلمات میباشد. مقداردهی ابتدایی رندم است، اما ماتریس L را به عنوان پارامتر با مدل ترکیبی موجود می توان آموزش داد. همینطور می توان از بردارهای لغت به عنوان پارامتری برای بهینه سازی و به عنوان ویژگی های ورودی به رده بند softmax استفاده کرد.
برای رده بندی به ۵ کلاس، احتمال شرطی بر حسب برچسب ها را از روی بردار کلمه با رابطه ی زیر بدست آورده است:
![](https://boute.s3.amazonaws.com/301-13.JPG)
که Ws برداری به ابعاد sXd است که ماتریس رده بندی معانی میباشد. این احتمال برای تمام کلمات یا برگ ها در ابتدا محاسبه می شود. برای مثال در نمونه ای که آورده شده است برای a,b و c. تفاوت اصلی بین مدل ها، محاسبه ی بردار زیر به صورت پایین به بالا میباشد.
![](https://boute.s3.amazonaws.com/301-14.JPG)
# RNN: Recursive Neural Network
ساده ترین مدل از شبکه های عصبی، شبکه ی عصبی استاندارد است. در ابتدا بردار نمایشی تمام کلمات (که در برگ قرار دارند) را داریم. از پایین به بالا گره های پدری که تمام فرزندانشان به صورت بردار وجود دارند را در نظر میگیریم و با استفاده از فرمول زیر که برای مثال آورده شده در تصویر است، بردار پدر را محاسبه میکنیم:
![](https://boute.s3.amazonaws.com/301-15.JPG)
تابع fرا برابر tanh که یک تابع عنصر به عنصر غیر خطی است در نظر گرفته و W
![](https://boute.s3.amazonaws.com/301-16.JPG)
پارامتر آموزشی اصلی میباشد. بردار گره ی پدر باید در ابعاد بردار فرزند باشد تا این روند پایین به بالا با همان توابع و عملیات ها قابل اجرا باشد. پس از اینکه بردار هر گره به دست آمد، آن را به تابع softmax تصویر x داده تا احتمال تعلق به هر کلاس را محاسبه کند.
# MV-RNN: Matrix-Vector RNN
ایده ای این روش این است که کلمات و عبارات با طول بلندتر را در درخت پارس با هر دو ساختار بردار و ناتریس نمایش دهیم.. زمانی که این دو ساختار نمایشی با هم ترکیب می شوند، ماتریس یکی در بردار دیگری ضرب می گردد و بر عکس، و به این ترتیب تابع ترکیبی با استفاده از کلمات تشکیل دهنده ی هر عبارت ایجاد می شود.
ماتریس اولیه ی هر کلمه، یک ماتریس واحد به اندازه ی dXd است که هر عضو آن با مقدار کوچکی از توزیع گوسی جمع شده است. همانند بردار تصادفی کلمات، پارامترهای این ماتریس ها نیز آموزش داده می شود تا خطای رده بندی را برای هر گره کاهش دهد. در این مدل هر عبارت با طول n یا n-gram به صورت لیستی از جفت های (ماتریس، بردار) همراه با درخت پارس نمایش داده میشود. براب درختی با ساختار زیر:
![](https://boute.s3.amazonaws.com/301-17.JPG)
شبکه یعصبی بازگشتی ماتریس-بردار، برای گره ی پدر هر گره یک بردار و یک ماتریس را با استفاده از دو عملیات زیر بدست می آورد.
![](https://boute.s3.amazonaws.com/301-18.JPG)
به طوریکه ![](https://boute.s3.amazonaws.com/301-19.JPG) ، و حاصل یک ماتریس d X d است. این روند تا گره ی ریشه ادامه دارد و برای هر گره توسط فرزندانش محاسبه می گردد. نهایتا از بردار هر گره برای رده بندی عبارتی که آن گره ریشه ی آن است استفاده می شود.
مدل ماتریس-بردار مشکلاتی دارد که از جمله آن ها تعداد پارامترهای بسیاز زیادش است که به تعداد کل کلمات یا همان |V| بستگی دارد. وجود یک تابع ترکیبی که تعداد ثابتی پارامتر داشته باشد می تواند بسیار کمک کننده باشد. شبکه یعصبی بازگشتی استاندارد گزینه ی خوبی برای این انتخاب است. اما در این مدل بردارهای ورودی با یکدیگر از طریق توابع غیرخطی تعاملات ضمنی برقرار میکنند و وجود روابط مستقیم تر، به مدل این امکان را میدهد که بردارهای ورودی تعاملات بیشتری با یکدیگر داشته باشند.
به دنبال چنین تابعی که انتظارات مورد نظر را برآورده کند و معنی ادغام شده از ترکیب اجزای کوچکتر را به طور دقیق تری نسبت به تک تک ورودی ها درک کند، مدل جدید Recursive Neural Tensor Network یا RNTN را در این مقاله پیشنهاد دادند. ایده ی اصلی استفاده از تابع ترکیبی مبتنی بر tensor مشابه برای تمام گره هاست. تصویر زیر یک لایه ی tensor رانشان میدهد:
![](https://boute.s3.amazonaws.com/301-20.JPG)
خروجی ضرب tensor را به صورت زیر h تعریف میکنیم انجام شده، از semantic vector space یا فضاهای برداری معنایی برای نمایش تک کلمات استفاده و به عنوان ویژگی در نظر گرفته میشده است. از اشکالات این نحوهی نمایش این است که قابل بسط به ترکیبی از چند semantic (معنا) نبودند. در بسیاری از سیستمها، تنها به تک تک کلمات و مثبت یا منفی بودن هر کلمه توجه میشود و نهایتا با برآیندگیری، بار کلی عبارت یا جمله مشخص میگردد. در این موارد، به ترتیب بیان شدن کلمات اهمیت داده نمیشود که از دقت تشخیص بار عبارت میکاهد. با توجه به این موضوع، مدلهای ترکیبی از فضای بردار معنی کلمات، برای کاربردهای جملات و عبارات بزرگتر مورد توجه قرار گرفت. از مشکلاتی که امروزه در بررسی این مدلها وجود دارد، محدودیت در داشتن منابع بزرگ و برچسبدار دادههای ترکیبی در این حوزه میباشد. در راستای رفع این مشکل، در این مقاله منابع دادهی Stanford Sentiment Treebanks و شبکهی Recursive Neural Tensor Network یا (RNTN) معرفی شده است که موفق به تشخیص معنای یک مجموعهی متن با دقت بالایی شده است.
# داده
در این مقاله از دادههای Stanford Sentiment Treebaks استفاده شده است که مجموعهای از ۱۱۸۵۵ تک جمله میباشد که از نظرات کاربران برای فیلمها برداشته شده است و توسط Stanford parser تجزیه شده است. این مجموعه داده شامل ۲۱۵۱۵۴ عبارت یکتا از درختهای پارس اشاره شده میباشد که هر کدام توسط سه نیروی انسانی تفسیر و تایید شده است. Stanford Sentiment Treebank اولین مجموعه دادهایست که شامل درختهای پارس به طور کامل برچسبزده شده میباشد و میتوان از آنها برای تحلیل ترکیبات معانی استفاده کرد. دادههای آموزش هم که بانک درخت میباشند در [این آدرس](https://raw.githubusercontent.com/pondruska/DeepSentiment/master/train.txt) آمده است.
# شبکه
در این مقاله مدل یادگیری عمیق نمایش کل جمله را بر اساس ساختار جمله ایجاد میکند و احساس و بار جمله را بر اساس اینکه چگونه کلمات در کنار هم معنی ساختار بزرگتر جمله را تشکیل میدهند تشخیص میدهد.
برای تشخیص بار معنایی ترکیبی یک عبارت، مدل RNTN معرفی شده است. ورودی این شبکه عبارات با طولهای متفاوت است که هر عبارت بوسیلهی بردارهای کلمات تشکیلدهندهی آن و یک درخت پارس ارائه میشود و بردار گرههای بالاتر درخت از روی گرههای برگ و به صورت سلسله مراتبی با استفاده از همان تابع ترکیبی tensor-based بدست میآید. نتایج حاصل از این شبکه را با نتایج بسیاری از مدلهای ترکیبی با ناظر مانند شبکهی عصبی استاندارد (RNN)، شبکهی عصبی مبتنی بر ماتریکس و مدلهایی که ترتیب کلمات را در نظر نمیگیرند، مانند Naive Bayse و SVM، مقایسه کردیم و شبکهی RNTN زمانیکه fined-grained sentiment (تشخیص احساس و بار معنایی جمله در یک سیستم پنج کلاسه شامل خیلی منفی، منفی، تا حدودی منفی، خنثی، تا حدودی مثبت، مثبت، خیلی مثبت که در تصویر ۱ نشان داده شده است.) را برای تمامی گرهها محاسبه میکرد، از تمام مدلهای دیگر با دقت بالاتری به اندازهی 80.7% عمل کرد. با همین سیستم روی دادههای آزمون، کلاسبندی دو کلاس مثبت و منفی انجام شد و بر خلاف مدلهای bag of words با دقت خوبی مثبت و منفی بودن جملات را تشخیص میدهد. این سیستم همچنین این قابلیت را دارد که بار احساسی و معنایی جملاتی که در آنها لغت but به کار برده شده است را تشخیص دهد.
اطلاعات مربوط به پروژه و دادههای آن در [این آدرس](https://nlp.stanford.edu/sentiment/) قرار دارد.
# کارهای مرتبط
از کارهای مرتبط با این مقاله میتوان به پنج حوزهی تحقیقاتی NLP اشاره کرد که در ادامه به آنها میپردازیم:
**فضاهای بردار معنایی (semantic vector spaces)**
روش غالب در این روش استفاده از شباهتهای توزیع شده بین تکتک کلمات است که با استفاده از آمار ظهور همزمان هر کلمه و حوزهی متن، معنی کلمه و بار معنایی آن مشخص میگردد. در این روش در خیلی از مواقع بردارهای توزیعی کلمات نمیتوانند به خوبی تفاوتهای کلمات متناقض را تشخیص دهد و این به این دلیل است که این دسته از کلمات معمولا در متون با مفاهیم یکسانی ظاهر میشوند. از روشهای حل این محدودیتها استفاده از بردارهای عصبی کلمات است که میتوانند به صورت غیر ناظر آموزش داده شوند و شباهتهای توزیعی را تشخیص دهند. از این مدلها برای تشخیص sentiment یا بار احساسی عبارات نیز میتوان استفاده کرد.
**ترکیب در فضای برداری (compositionality in vector space)**
اکثریت الگوریتمهای ترکیبیاتی و دادههای مربوطه با استفاده از ترکیب دوتایی کلمات، شباهت و معنای آنها را بررسی میکنند و این کار را از طریق عملیات ضرب و جمع بین بردارهای کلمات انجام میدهند. از نمونه روشهای دیگر میتوان به محاسبهی نمایش برداری عبارات بلندتر و تعریف ترکیب با ضرب ماتریسها اشاره کرد. همچنین در روشی دیگر سه تایی فاعل، فعل و مفعول را تعریف کردهاند و با یک مدل مبتنی بر ماتریس آنها را با تفسیرهای انسانی تطبیق دادهاند. در این مقاله به طور خاص شبکه ی RNTN را با مدل های ترکیبی با ناظر شامل شبکه ی عصبی بازگشتی (RNN) و شبکهی عصبی بازگشتی مبتنی بر ماتریس که هر دو روی دادههای bag of words اعمال شدهاند مقایسه کرده است.
**فرم منطقی (Logical Form)**
این روش یکی از روشهایی است که متفاوت از سایرین عمل میکند و با تطبیق دادن جملات با گزارههای منطقی سعی در تشخیص کلمات و بار معنایی آنها دارد. از مشکلات این روش این است که در عین حال که در حوزههای گسسته و بسته به خوبی عمل میکند، تنها قادر به دریافت توزیع احساسات با استفاده از روشهایی فرای گزارههای منطقی مورد استفاده در حال حاضر است.
**یادگیری عمیق (Deep Learning)**
مستقل از روشهایی که تا به الان اشاره شد، روشهای ترکیبی بسیار زیادی مرتبط با شبکههای عصبی در این حوزه کاربرد دارند که این مقاله یکی از نمونههای این حوزه میباشد.
**تحلیل معنایی (Semantic Analysis)**
در کنار تمام مواردی که برای تشخیص و تحلیل احساس و بار معنایی جملات و عبارات استفاده شد، بسیاری از روشها از نمایش bag of words استفاده میکنند.
# بانک معنایی احساسی دانشگاه استنفورد (Stanford Sentiment Treebank)
بکارگیری روش bag of words در متون و مستندات بلند، با تاکید بر تعداد کمی کلمات با بار معنایی قوی (مثبت یا منفی) میتواند به خوبی عمل کند، در حالی که تشخیص بار معنایی تکجملات، حتی در دستهبندی دو کلاسهی مثبت و منفی، تاکنون نتوانسته دقتی بیش از ۸۰ درصد داشته باشد. در حالتی که تعداد کلاسها بیشتر هم باشد (برای نمونه شامل برچسب خنثی)، این روش با دقتی حداکثر زیر ۶۰ درصد عمل کرده است. برای تشخیص و تحلیل جملات و نمونههای سختتر نمیتوان ترتیب ظهور کلمات را در نظر نگرفت، این در حالی است که در بعضی از روشها مانند استفاده از bag of words این معیار مهم دخیل نیست. در این مقاله روی دادهی Semantic Treebank تحلیل و بررسی انجام شده است و برای تمام عبارات در مجموعهی جملات پایگاه داده برچسب وجود دارد و به آموزش و ارزیابی کمک کرده است.
پایگاه دادهی مورد استفاده در این مقاله از نظرات کاربران در مورد فیلمها از سایت rottentomatoes.com توسط متخصصان برداشته شده است و شامل ۱۰۶۶۲ جمله، نیمی مثبت و نیمی منفی، میباشد. این جملات از متون بزرگتر و پس از پیشپردازش به صورت مرتب استخراج شدهاند و بار احساسی و معنایی آنها با توجه به بار معنایی متن کلی در نظر گرفته شده است. تمام جملات توسط Stanford Parser تجزیه شده است و برچسبگذاری عبارات استخراج شده از جملات از دستهبندی شامل ۲۵ درجهبندی مانند شکل ۱ استفاده شده است که ۵ مقدار اصلی خیلی منفی، منفی، تا حدودی منفی، خنثی، تا حدودی مثبت، مثبت و خیلی مثبت را شامل میشود. در شکل زیر توزیع نرمالسازی شدهی برچسب جملات بر حسب طول آنها (n-gram) مشاهده میشود.
![](https://boute.s3.amazonaws.com/301-52.JPG)
مواردی که در تحلیل جملات پایگاه داده مشاهده شده است شامل اطلاعات زیر میباشد: بسیاری از جملات می تواند خنثی در نظر گرفته شوند. همچنین جملاتی که بار معنایی قویتر و جهتدهی شدهتری دارند، معمولا از متون تری استخراج شدهاند و بیشتر جملات کوتاه خنثی هستند. برچسب بیشتر جملات از موارد منفی، تا حدودی منفی، خنثی، تا حدودی مثبت و مثبت میباشند و جملات با بار معنایی شدید (خیلی منفی و خیلی مثبت) به ندرت استفاده شدهاند. بنابراین کلاسبندی جملات را به همین ۵ کلاس محدود کردند که میتواند بار معنایی جملات را به خوبی میتواند منتقل کند. به این دستهبندی ۵ کلاسه fine-grained sentiment classification گفته شده است. در این مقاله بررسیها بر اساس این ۵ برچسب روی جملات با طولهای متفاوت انجام و تعریف شده است.
# مدلهای عصبی بازگشتی (Recursive Neural Models)
در این مدل، برای عبارات با طولها و بار معنایی و احساسی متفاوت، نمایش برداری ترکیبی محاسبه میگردد و سپس به عنوان ویژگی برای کلاسبندی هر عبارت مورد استفاده قرار میگیرد. هر عبارت با طول n، یا n-gram، به یک مدل ترکیبی درخت باینری داده میشود که هر برگ یک کلمه میباشد، و با نمایش برداری ارائه میگردد. سپس به صورت buttom-up یا از پایین به بالا، گرههای پدر که بالاتر قرار دارند با توابع ترکیبی متفاوت محاسبه میگردند و ویژگیهای این گرهها نیز برای کلاسبندی به classifier داده میشود. نمایشی از مدل ترکیبی درخت باینری برای یک عبارت به طول ۳ در تصویر زیر مشاهده میشود.
![](https://boute.s3.amazonaws.com/301-53.JPG)
عملیاتهایی که در این مدل ترکیبیاتی مشترک میباشند شامل نمایش برداری کلمات و کلاسبندی هستند. هر کلمه یک بردار d تایی است که مقدار اولیهی آن به صورت تصادفی از توزیع یکنواخت
U(-r, r) , r = 0.0001
انتخاب میشود. بردارهای تمام کلمات به صورت پشته مانند، در یک ماتریس L بهطوریکه
![](https://boute.s3.amazonaws.com/301-12.JPG)
قرار میگیرند که |V| تعداد کل کلمات میباشد. مقداردهی ابتدایی رندم است، اما ماتریس L را به عنوان پارامتر با مدل ترکیبی موجود میتوان آموزش داد. همینطور میتوان از بردارهای لغت به عنوان پارامتری برای بهینه سازی و به عنوان ویژگیهای ورودی به ردهبند softmax استفاده کرد.
برای ردهبندی به ۵ کلاس، احتمال شرطی بر حسب برچسبها را از روی بردار کلمه با رابطهی زیر بدست آورده است:
![](https://boute.s3.amazonaws.com/301-13.JPG)
که Ws برداری به ابعاد s X d است که ماتریس ردهبندی معانی میباشد. این احتمال برای تمام کلمات یا برگها در ابتدا محاسبه میشود. برای مثال در نمونهای که برای a,b و c آورده شده است. تفاوت اصلی بین مدلها، محاسبهی بردار زیر به صورت پایین به بالا میباشد.
![](https://boute.s3.amazonaws.com/301-14.JPG)
# شبکههای عصبی بازگشتی (RNN: Recursive Neural Network)
سادهترین مدل از شبکههای عصبی، شبکهی عصبی استاندارد است. در ابتدا بردار نمایشی تمام کلمات (که در برگ قرار دارند) را داریم. از پایین به بالا گرههای پدری که تمام فرزندانشان به صورت بردار وجود دارند را در نظر میگیریم و با استفاده از فرمول زیر که برای مثال آورده شده در تصویر میباشد، بردار پدر را محاسبه میکنیم:
![](https://boute.s3.amazonaws.com/301-15.JPG)
تابع f را برابر tanh که یک تابع عنصر به عنصر غیر خطی است در نظر گرفته و W
![](https://boute.s3.amazonaws.com/301-16.JPG)
پارامتر آموزشی اصلی میباشد. بردار گرهی پدر باید در ابعاد بردار فرزند باشد تا این روند پایین به بالا با همان توابع و عملیاتها قابل اجرا باشد. پس از اینکه بردار هر گره به دست آمد، آن را به تابع softmax تصویر x داده تا احتمال تعلق به هر کلاس را محاسبه کند.
# شبکههای عصبی بازگشتی مبتنی بر بردار و ماتریس (MV-RNN: Matrix-Vector RNN)
ایدهی این روش این است که کلمات و عبارات با طول بلندتر را در درخت پارس با دو ساختار بردار و ماتریس نمایش دهیم. زمانی که این دو ساختار نمایشی با هم ترکیب میشوند، ماتریس یکی در بردار دیگری ضرب میگردد و بر عکس. به این ترتیب تابع ترکیبی با استفاده از کلمات تشکیل دهندهی هر عبارت ایجاد میشود.
ماتریس اولیهی هر کلمه، یک ماتریس واحد به اندازه ی d X d است که هر عضو آن با مقدار کوچکی از توزیع گوسی جمع شده است. همانند بردار تصادفی کلمات، پارامترهای این ماتریسها نیز آموزش داده میشود تا خطای ردهبندی را برای هر گره کاهش دهد. در این مدل هر عبارت با طول n یا n-gram به صورت لیستی از جفتهای (ماتریس، بردار) همراه با درخت پارس نمایش داده میشود. برای درختی با ساختار زیر:
![](https://boute.s3.amazonaws.com/301-17.JPG)
در شبکهی عصبی بازگشتی ماتریس-بردار، برای گرهی پدر هر گره، یک بردار و یک ماتریس را با استفاده از دو عملیات زیر بدست می آورد.
![](https://boute.s3.amazonaws.com/301-18.JPG)
به طوریکه ![](https://boute.s3.amazonaws.com/301-19.JPG) ، و حاصل یک ماتریس d X d است. این روند تا گرهی ریشه ادامه دارد و برای هر گره توسط فرزندانش محاسبه میگردد. نهایتا از بردار هر گره برای ردهبندی عبارتی که آن گره ریشهی آن است استفاده میشود.
مدل ماتریس-بردار مشکلاتی دارد که از جمله آنها تعداد پارامترهای بسیار زیادش را میتوان نام برد که به تعداد کل کلمات یا همان |V| بستگی دارد. وجود یک تابع ترکیبی که تعداد ثابتی پارامتر داشته باشد میتواند بسیار کمک کننده باشد. شبکهی عصبی بازگشتی استاندارد گزینهی خوبی برای این انتخاب است. اما در این مدل، بردارهای ورودی از طریق توابع غیرخطی با یکدیگر تعاملات ضمنی برقرار میکنند و وجود روابط مستقیمتر، به مدل این امکان را میدهد که بردارهای ورودی تعاملات بیشتری با یکدیگر داشته باشند.
به دنبال چنین تابعی که انتظارات مورد نظر را برآورده کند و معنی ادغام شده از ترکیب اجزای کوچکتر را به طور دقیق تری نسبت به تک تک ورودی ها درک کند، مدل جدید Recursive Neural Tensor Network یا RNTN را در این مقاله پیشنهاد دادهاند. ایدهی اصلی استفاده از تابع ترکیبی مبتنی بر tensor مشابه برای تمام گرههاست. تصویر زیر یک لایهی tensor رانشان میدهد:
![](https://boute.s3.amazonaws.com/301-20.JPG)
خروجی ضرب tensor را به صورت زیر h تعریف میکنیم:
![](https://boute.s3.amazonaws.com/301-21.JPG)
![](https://boute.s3.amazonaws.com/301-22.JPG)
![](https://boute.s3.amazonaws.com/301-23.JPG)
همچنین V در رابطه ی زیر یک tensor است:
![](https://boute.s3.amazonaws.com/301-24.JPG)
در مدل RNTN برای محاسبه ی بردار گره ی پدر p1 از رابطه ی زیر استفاده شده است:
![](https://boute.s3.amazonaws.com/301-25.JPG)
که W همانند مدل قبل تعریف می گردد. همینطور گره ی پدر بعدی در مثال آورده شده با استفاده از رابطه ی زیر و طبق تعریف بدست میاید:
![](https://boute.s3.amazonaws.com/301-26.JPG)
مزیت اصلی این مدل نسبت به مدل قبلی شبکه ی عصبی بازگشتی که حالت خاصی از مدل RNTN با V برابر ۰ این است که tensor میتواند ورودی ها را به صورت مستقیم به یکدیگر ارتباط دهد. به صورت شهودی هر slice از tensor را میتوانیم به عنوان دریافت نوع مشخصی از ترکیب تفسیر کنیم.
می توان یک لایه شبکه ی عصبی دوم را به مدل RNTN اضافه کنیم تا تابع ترکیبی را قدرتمند تر کنیم. با این حال آزمایش ها و تحلیل ها نشان داده است که بهینه کردن این مدل و تعاملات بینشان هنوز نسبت به RNTN ضمنی تر است.
# Tensor Backprop through Structure
در این بخش نحوهی آموزش شبکه ی RNTN توضیح داده می شود. همانطور که قبلا هم اشاره شد، هر گره یک رده بند softmax دارد که روی نمایش برداری آن گره آموزش داده می شود تا پاسخ درست یا بردار هدف عبارت مربوط به ان گره را پیش بینی کند. فرض می کنیم توضیع بردار هدف هر گره به صورت یک بردار کد شده ی 0 و 1 است به طول C، که C تعداد کل کلاس ها میباشد و مقدار متناظر کلاس هدف برابر 1 و سایر مقادیر 0 است. هدف نهایی بیشینه کردن احتمال درست بودن پیش بینی یا کمینه کردن خطای پیش بینی است که در این مقاله از خطای cross-entropy استفاده شده است و بین توزیع پیش بینی شده ی ![](https://boute.s3.amazonaws.com/301-27.JPG) و توزیع هدف ![](https://boute.s3.amazonaws.com/301-28.JPG) در گره ی i میباشد. این به معنی کمینه کردن KL_fivergence بین دو توزیع ذکرشده است. خطای پارامترهای شبکه ی RNTN شامل ![](https://boute.s3.amazonaws.com/301-29.JPG) از رابطه ی زیر بدست میاید:
![](https://boute.s3.amazonaws.com/301-30.JPG)
مشتق وزن های رده بند softmax استاندارد میباشند. xi را بردار گره ی i در نظر میگیریم (برای مثال در نمونه ی ۳تایی آورده شده ![](https://boute.s3.amazonaws.com/301-31.JPG) برابر ![](https://boute.s3.amazonaws.com/301-32.JPG) میباشد).
خطای هر گره به صورت بازگشتی به عقب توزیع می گردد. اگر ![](https://boute.s3.amazonaws.com/301-33.JPG) بردار خطای softmax در گره ی i باشد خواهیم داشت:
![](https://boute.s3.amazonaws.com/301-34.JPG)
که در آن ![](https://boute.s3.amazonaws.com/301-35.JPG) عملیات ضرب Hadamard بین دو بردار و f' مشتق f میباشد. سایر مشتق ها فقط به صورت از بالا به پایین از ریشه به گره های برگ قابل محاسبه هستند. مشتق کامل V و W از جمع مشتق های هر گره بدست میاید. خطای هر گره i را به صورت ![](https://boute.s3.amazonaws.com/301-37.JPG) تعریف می کنیم. بالاترین گره ی p2 فقط خطای گره ی softmax را دارد. پس
![](https://boute.s3.amazonaws.com/301-38.JPG) و ما می توانیم از ان برای بدست آوردن مشتق استاندارد W استفاده کنیم. برای مشتق هر بخش k = 1, ..., d داریم :
![](https://boute.s3.amazonaws.com/301-39.JPG)
به طوریکه ![](https://boute.s3.amazonaws.com/301-40.JPG) عنصر k ام این بردار است. حال می توانیم خطای دو فرزند p2 را با روابط زیر بدست آوریم:
![](https://boute.s3.amazonaws.com/301-41.JPG)
هر کدام از فرزنددان p2 نیمی از بردار را به خود اختصاص می دهند و خطای softmax خودشان را برای سیگمای کامل اضافه می کنند. داریم :
![](https://boute.s3.amazonaws.com/301-42.JPG)
که ![](https://boute.s3.amazonaws.com/301-44.JPG) نشان میدهد p1 فرزند راست p2 است و نیم دوم خطا را می گیرد و برای بردار نهایی کلمه ی مشتق a، برابر
![](https://boute.s3.amazonaws.com/301-45.JPG)
خواهد شد. مشتق کامل برای ![](https://boute.s3.amazonaws.com/301-46.JPG) برای درخت عبارت ۳ تایی برابر با جمع همه ی گره هاست:
![](https://boute.s3.amazonaws.com/301-47.JPG) که به صورت مشابه برای W تعریف می شود.
# Experiment
در این مقاله دو نوع تحلیل انجام شده است. نوع اول شامل تعداد زیاد و حجیمی ارزیابی کمی روی داده های آزمون است. نوع دوم روی دو پدیده ی زبانی تمرکز میکند که در بار معنایی و احساسی بسیار مهم هستند. بهترین کارایی مدل ها برای ابعاد ۲۵ تا ۳۵ بردار کلمات و batch size بین ۲۰ و ۳۰ بدست آمده است. این بدین معناست که RNTN از نظر داتشن پارامترهای بیشتر، خیلی بهتر از RNN استاندار عمل نمیکند. مدل MV-RNN از هر مدل ماتریس کلمات دیگر بیشتر پارامتر دارد.
مدل های ابتدایی حاکی از آن بود که مدل های بازگشتی زمانی که از توابع غیر خطی استفاده نکنند به طرز مشهودی بدتر عمل می کنند و به همین دلیل از تابع f = tanhاستفاده شده است. نتایج حاصل از کلاس بندی این مدل ها را با مدل هایی از روش bag of words در Naive Bayes و SVM، و همینطور مدلی که میانگین بردار کلکه را در نظر میگیرد و ترتیب کلمات را مد نظر قرار نمی دهد ، مقایسه کرده است.
![جدول ۱](https://boute.s3.amazonaws.com/301-48.JPG)
جملات داخل بانک درخت به ۳ بخش آموزشی شامل ۸۵۴۴ جمله، بخش dev شامل ۱۱۰۱ جمله و بخش آزمون شامل ۲۲۱۰ جمله تقسیم شده است. همینطور، کلاس بندی فقط روی دو کلاس مثبت و منفی بدون در نظر گرفتن کلاس خنثی را نیز انجام داده اند که بخشی از داده ها را فیلتر می کند.
# موارد دیگر
بررسی ها و نتایج نشان داده است که رده بندی ۵ کلاسه ی fine-grained، بهترین حالت رده بندی بار معنایی جمله است. تصویر زیر مقایسه ی بین کارایی RNTN و MV-RNN و RNN را نشان می دهد:
![](https://boute.s3.amazonaws.com/301-49.JPG)
مدل بازگشتی روی عبارات کوتاه تر خیلی خوب عمل می کند. روش RNTN در اکثر موارد از سایر مدل ها بهتر عمل می کند. جدول ۱ دقت کلی برای پیش بینی fine-grained برای تمام طول ها و جملات کامل را نشان می دهد.
هم چنین این مدل قابلیت آموزش روی داده ها و عبارات با فرمت X but Y را نیز دارد که نمونه ای از آن در شکل زیر نسان داده شده است:
![](https://boute.s3.amazonaws.com/301-50.JPG)
که مدل RNTNموفق به کسب دقت 41% شده است، در حالی که مدل های (MV-RNN(37), RNN(36 و مدل (biNB(27 کسب کرده اند.
از دیگر قابلیت های برتر این مدل نسبت به سایر مدل ها این است که تغییر بار (منفی کردن) جمله را چه در جملات منفی و چه در جملات مثبت با دقت خوبی تشخیص می دهد. تصویر زیر منفی کردن نمونه جملات را نشان میدهد.
![](https://boute.s3.amazonaws.com/301-51.JPG)
هم چنین مدل RNTN نسبت به سایر مدل ها جملات با برچسب خیلی منفی و خیلی مثبت را در جملات به نسبت شدید تری تشخیص می دهد.
# نتیجه
در این مقاله مدل RNTN را روی داده های بانک درخت Stanford sentimentمعرفی کردیم. ترکیب مدل و داده های جدید باعثت افزایش دقت تشخیص احساس و بار جمله به اندازه ی 5.4% برای رده بندی دو کلاهس مثبت و نمنفی شده است. همین طور بر حسب پایگاه داده که ما با چالش های جدیدی روبرو کرد، مدل RNTN دقت کلاس بندی ۵ کلاسه ی fine-grained را به دقت 80.7% رساند و قدرت تشخیص منفی سازی جمله را نیز دارد.ی بردار گرهی پدر p1 از رابطهی زیر استفاده شده است:
![](https://boute.s3.amazonaws.com/301-25.JPG)
که W همانند مدل قبل تعریف میگردد. همینطور بردار گرهی پدر بعدی در مثال آورده شده، با استفاده از رابطهی زیر و طبق تعریف بدست میآید:
![](https://boute.s3.amazonaws.com/301-26.JPG)
مزیت اصلی این مدل نسبت به مدل قبلی شبکهی عصبی بازگشتی که حالت خاصی از مدل RNTN با V برابر ۰ این است که tensor میتواند ورودیها را به صورت مستقیم به یکدیگر ارتباط دهد. به صورت شهودی هر slice از tensor را میتوانیم به عنوان دریافت نوع مشخصی از ترکیب تفسیر کنیم.
میتوان یک لایه شبکهی عصبی دوم را به مدل RNTN اضافه کنیم تا تابع ترکیبی را قدرتمندتر کنیم. با این حال آزمایشها و تحلیلها نشان داده است که بهینه کردن این مدل و تعاملات بینشان هنوز نسبت به RNTN ضمنیتر است.
# Tensor Backprop through Structure
در این بخش نحوهی آموزش شبکهی RNTN توضیح داده میشود. همانطور که قبلا هم اشاره شد، هر گره، یک ردهبند softmax دارد که روی نمایش برداری آن گره آموزش داده میشود تا پاسخ درست یا بردار هدف عبارت مربوط به آن گره را پیشبینی کند. فرض میکنیم توزیع بردار هدف هر گره به صورت یک بردار کد شدهی 0 و1 میباشد به طول C، که C تعداد کل کلاس ها و مقدار متناظر کلاس هدف برابر1 و سایر مقادیر 0 است. هدف نهایی بیشینه کردن احتمال درست بودن پیشبینی یا کمینه کردن خطای پیشبینی است که در این مقاله از خطای cross-entropy استفاده شده است و بین توزیع پیشبینی شده ی ![](https://boute.s3.amazonaws.com/301-27.JPG) و توزیع هدف ![](https://boute.s3.amazonaws.com/301-28.JPG) در گرهی i میباشد. این به معنی کمینه کردن KL_fivergence بین دو توزیع ذکر شده است. خطای پارامترهای شبکهی RNTN شامل ![](https://boute.s3.amazonaws.com/301-29.JPG) از رابطهی زیر بدست میآید:
![](https://boute.s3.amazonaws.com/301-30.JPG)
مشتق وزنهای ردهبند softmax استاندارد میباشند. xi را بردار گرهی i در نظر میگیریم (برای مثال در نمونهی ۳ تایی آورده شده ![](https://boute.s3.amazonaws.com/301-31.JPG) برابر ![](https://boute.s3.amazonaws.com/301-32.JPG) میباشد).
خطای هر گره به صورت بازگشتی به عقب توزیع میگردد. اگر ![](https://boute.s3.amazonaws.com/301-33.JPG) بردار خطای softmax در گرهی i باشد خواهیم داشت:
![](https://boute.s3.amazonaws.com/301-34.JPG)
که در آن ![](https://boute.s3.amazonaws.com/301-35.JPG) عملیات ضرب Hadamard بین دو بردار و f' مشتق f میباشد. سایر مشتقها فقط به صورت از بالا به پایین از ریشه به گرههای برگ قابل محاسبه هستند. مشتق کامل V و W از جمع مشتقهای هر گره بدست میآید. خطای هر گره i را به صورت ![](https://boute.s3.amazonaws.com/301-37.JPG) تعریف میکنیم. بالاترین گرهی p2 فقط خطای گرهی softmax را دارد. پس
![](https://boute.s3.amazonaws.com/301-38.JPG) و ما میتوانیم از آن برای بدست آوردن مشتق استاندارد W استفاده کنیم. برای مشتق هر بخش k = 1, ..., d داریم :
![](https://boute.s3.amazonaws.com/301-39.JPG)
به طوریکه ![](https://boute.s3.amazonaws.com/301-40.JPG) عنصر k ام این بردار است. حال میتوانیم خطای دو فرزند p2 را با روابط زیر بدست آوریم:
![](https://boute.s3.amazonaws.com/301-41.JPG)
هر کدام از فرزندان p2 نیمی از بردار را به خود اختصاص میدهند و خطای softmax خودشان را برای سیگمای کامل اضافه میکنند. داریم :
![](https://boute.s3.amazonaws.com/301-42.JPG)
که ![](https://boute.s3.amazonaws.com/301-44.JPG) نشان میدهد p1 فرزند راست p2 است و نیم دوم خطا را میگیرد و برای بردار نهایی کلمهی مشتق a، برابر
![](https://boute.s3.amazonaws.com/301-45.JPG)
خواهد شد. مشتق کامل برای ![](https://boute.s3.amazonaws.com/301-46.JPG) برای درخت عبارت ۳ تایی برابر با جمع همهی گرههاست:
![](https://boute.s3.amazonaws.com/301-47.JPG) که به صورت مشابه برای W تعریف میشود.
# آزمایشهای انجام شده
در این مقاله دو نوع تحلیل انجام شده است. نوع اول شامل تعداد زیاد و حجیمی ارزیابی کمی روی دادههای آزمون میباشد. نوع دوم روی دو پدیدهی زبانی تمرکز میکند که در بار معنایی و احساسی بسیار مهم هستند. بهترین کارایی مدلها برای ابعاد ۲۵ تا ۳۵ بردار کلمات و batch size بین ۲۰ و ۳۰ بدست آمده است. این بدین معناست که RNTN از نظر داشتن پارامترهای بیشتر، خیلی بهتر از RNN استاندار عمل نمیکند. مدل MV-RNN از هر مدل ماتریس کلمات دیگر بیشتر پارامتر دارد.
مدلهای ابتدایی حاکی از آن بود که مدلهای بازگشتی زمانی که از توابع غیرخطی استفاده نکنند به طرز مشهودی بدتر عمل میکنند و به همین دلیل از تابع f = tanh استفاده شده است. نتایج حاصل از کلاسبندی این مدلها را با مدلهایی از روش bag of words در Naive Bayes و SVM، و همینطور مدلی که میانگین بردار کل را در نظر میگیرد و ترتیب کلمات را مد نظر قرار نمیدهد ، مقایسه کرده است.
![جدول ۱](https://boute.s3.amazonaws.com/301-48.JPG)
جملات داخل بانک درخت به ۳ بخش آموزشی شامل ۸۵۴۴ جمله، بخش dev شامل ۱۱۰۱ جمله و بخش آزمون شامل ۲۲۱۰ جمله تقسیم شده است. همینطور، کلاسبندی فقط روی دو کلاس مثبت و منفی بدون در نظر گرفتن کلاس خنثی را نیز انجام دادهاند که بخشی از دادهها را فیلتر میکند.
# موارد دیگر
بررسیها و نتایج نشان داده است که ردهبندی ۵ کلاسهی fine-grained، بهترین حالت ردهبندی بار معنایی جمله است. تصویر زیر مقایسهی بین کارایی RNTN و MV-RNN و RNN را نشان میدهد:
![](https://boute.s3.amazonaws.com/301-49.JPG)
مدل بازگشتی روی عبارات کوتاهتر خیلی خوب عمل میکند. روش RNTN در اکثر موارد از سایر مدلها بهتر عمل میکند. جدول ۱ دقت کلی برای پیشبینی fine-grained برای تمام طولها و جملات کامل را نشان میدهد.
همچنین این مدل قابلیت آموزش روی دادهها و عبارات با فرمت X but Y را نیز دارد که نمونهای از آن در شکل زیر نشان داده شده است:
![](https://boute.s3.amazonaws.com/301-50.JPG)
که مدل RNTN موفق به کسب دقت 41% شده است، در حالی که مدلهای (MV-RNN(37), RNN(36 و مدل (biNB(27 کسب کردهاند.
از دیگر قابلیتهای برتر این مدل نسبت به سایر مدلها این است که تغییر بار (منفی کردن) جمله را چه در جملات منفی و چه در جملات مثبت با دقت خوبی تشخیص میدهد. تصویر زیر منفی کردن نمونه جملات را نشان میدهد.
![](https://boute.s3.amazonaws.com/301-51.JPG)
همچنین مدل RNTN نسبت به سایر مدلها جملات با برچسب خیلی منفی و خیلی مثبت را در جملات به نسبت شدیدتری تشخیص میدهد.
# نتیجه
در این مقاله مدل RNTN را روی دادههای بانک درخت Stanford sentiment معرفی کردیم. ترکیب مدل و دادههای جدید باعث افزایش دقت تشخیص احساس و بار جمله به اندازهی 5.4% برای ردهبندی دو کلاسه مثبت و منفی شده است. همینطور بر حسب پایگاه داده که ما را با چالشهای جدیدی روبرو کرد، مدل RNTN دقت کلاسبندی ۵ کلاسهی fine-grained را به 80.7% رساند و قدرت تشخیص منفی سازی جمله را نیز دارد.
# بررسی کد
کد مدل ارائه شده در این مقاله به زبان متلب و جاوا نوشته شده است و توسط من اجرا و به زبان متلب در تحویل حضوری ارائه داده شد. دادهها شامل سه فایل train.txt، test.txt و dev.txt میباشد و فایل اصلی اجرایی برنامه کد evaluate.m است که در ادامه توضیح داده میشود.
در هر خط از فایل جملهای با نمونه فرمت زیر آورده شده است:
(2 (3 (3 Effective) (2 but)) (1 (1 too-tepid) (2 biopic)))
که هر عبارت شامل یک یا چند کلمه، با یک پرانتز شروع میشود و در ابتدا و بعد از باز شدن پرانتز، برچسب مربوط به عبارت زیردرخت مربوط به آن عبارت نیز قرار داده شده است.
D = unique([ ExtractVocabulary('train.txt')
ExtractVocabulary('dev.txt')
ExtractVocabulary('test.txt') ]);
در بخش ابتدایی که در بالا آمده، کل کلمات موجود در دیکشنری شامل دادههای هر سه فایل به صورت یکتا استخراج میشوند و در متغیر D ریخته شده است.
X_train = LoadDataset(D, 'train.txt');
X_dev = LoadDataset(D, 'dev.txt');
X_test = LoadDataset(D, 'test.txt');
در این بخش از کد نیز دادههای هر کدام از فایلها که برای مراحل آموزش، اعتبارسنجی، و آزمون طراحی شده است در متغیر جدایی ریخته میشود.
d = 30; % dimension of the word-vector
V = InitArray([2*d,2*d,d], 0.0001);
W = InitArray([d,2*d], 0.0001);
Ws = InitArray([5,d], 0.0001);
L = InitArray([d, length(D)], 0.0001);
%% train networklearningRate = 0.001;
lambda = 0.001;
% regularisation strength
K = 500; % number of epochs
M = 32; % minibatch size
error = [];
% training set log-loss error%
accuracy = [];
% validation set accuracy
% AdaGrad: gradient mean-squareMS_V = 0;
MS_W = 0;
MS_Ws = 0;
MS_L = 0;
در بخش بعدی این کد مقادیر پارامترهای مختلف یادگیری و آزمون شبکهی عصبی مورد استفاده، مقداردهی اولیه میشود که توسط کامنتها و نام متغیرها مشخص شده است.
for k=1:K
for i=1:M:8544
idx = i:(i+M-1); % sentences in the batch
[A, E, GV, GW, GWs, GL] = EvaluateBatch(X_train(idx), V, W, Ws, L);
% regularize
E = E + lambda / 2 * (V(:)' * V(:) + W(:)' * W(:) + Ws(:)' * Ws(:) + L(:)' * L(:));
GV = GV + lambda * V;
GW = GW + lambda * W;
GWs = GWs + lambda * Ws;
GL = GL + lambda * L;
% compute running gradient mean-square
MS_V = 0.9 * MS_V + 0.1 * GV .* GV;
MS_W = 0.9 * MS_W + 0.1 * GW .* GW;
MS_Ws = 0.9 * MS_Ws + 0.1 * GWs .* GWs;
MS_L = 0.9 * MS_L + 0.1 * GL .* GL;
% update weights
V = V - learningRate * (GV ./ sqrt(MS_V + 1e-5));
W = W - learningRate * (GW ./ sqrt(MS_W + 1e-5));
Ws = Ws - learningRate * (GWs ./ sqrt(MS_Ws + 1e-5));
L = L - learningRate * (GL ./ sqrt(MS_L + 1e-5));
% draw progress
error(end+1) = E;
plot(error); drawnow;
end
در بخش بعدی کد، به تعداد epoch های در نظر گرفته شده که ۵۰۰ حلقه میباشد، حلقهی دیگری در نظر گرفته شده است که به صورت دستهای دادههای آموزش را train میکند و در تابع EvaluateBatch که پیاده سازی آن را در ادامه مشاهده میکنید الگوریتمهای feedforward و backpropagation را روی گرههای درخت پارس ایجاد شده اجرا میکند.
function [accuracy, error, GV, GW, GWs, GL] = EvaluateBatch(X, V, W, Ws, L)
N = length(X);
function [accuracy, error, GV, GW, GWs, GL] = EvaluateTree(x)
A = FeedForward(x, V, W, Ws, L);
error = Error(A, x);
[~, i] = max(A.y);
accuracy = x.t(i);
[GV, GW, GWs, GL] = BackPropagate(x, A, 0, V, W, Ws, L);
end
function A = SumCell(C)
A = 0;
for i=1:N
A = A + C{i};
end
end
[accuracy, error, GV, GW, GWs, GL] = cellfun(@EvaluateTree, X, 'UniformOutput', false);
accuracy = SumCell(accuracy) / N;
error = SumCell(error) / N;
GV = SumCell(GV) / N;
GW = SumCell(GW) / N;
GWs = SumCell(GWs) / N;
GL = SumCell(GL) / N;
همانطور که مشاهده میکنید در تابع EvaluateTree با در نظر گرفتن پارامترهایی که به آن به عنوان ورودی داده شده است، ابتدا الگوریتم feedforward با دریافت ورودیها اجرا میشود و خروجی الگوریتم بدست میآید. سپس با استفاده از خروجی بدست آمده و پارامترهای شبکه خطای شبکه را با الگوریتم backpropagation در کل شبکه انتشار میدهد و میانگین گرادیان پارامترها و وزنها را نیز محاسبه میکند.
تابع feedforward همانند کد زیر الگوریتم feedforward را برای هر دو فرزند چپ و راست اجرا میکند و در صورتی که گرهی برگ باشد، خود بردار کلمه را برمیگرداند.
function A = FeedForward(x, V, W, Ws, L)
if isfield(x, 'i')
A = struct('p', L(:,x.i));
else
AL = FeedForward(x.L, V, W, Ws, L);
AR = FeedForward(x.R, V, W, Ws, L);
p = tanh(TensorProduct(V, [AL.p; AR.p]) + W * [AL.p; AR.p]);
A = struct('p', p, 'L', AL, 'R', AR);
end
A.y = Softmax(Ws * A.p);
سپس تابع غیرخطی tanh را که مطابق با مدل ارائه شده در مقاله است روی پارامترها و بردارهای شبکه صدا میزند. تابع backpropagation نیز به صورت زیر پیاده سازی شده است:
function [GV, GW, GWs, GL] = BackPropagate(x, a, dEdp, V, W, Ws, L)
[d, n] = size(L);
GWs = (a.y - x.t) * a.p';
dEdp = dEdp + Ws' * (a.y - x.t);
if isfield(x, 'i')
GL = sparse(d, n);
GL(:, x.i) = dEdp;
GV = 0;
GW = 0;
else
delta = dEdp .* (1 - a.p .* a.p);
[GV, GX] = TensorProductDerivative(V, [a.L.p; a.R.p], delta);
DD = W' * delta + GX;
DL = DD((0+1):(0+d));
DR = DD((d+1):(d+d));
GW = delta * [a.L.p; a.R.p]';
[GV_L, GW_L, GWs_L, GL_L] = BackPropagate(x.L, a.L, DL, V, W, Ws, L);
[GV_R, GW_R, GWs_R, GL_R] = BackPropagate(x.R, a.R, DR, V, W, Ws, L);
GV = GV + GV_L + GV_R;
GW = GW + GW_L + GW_R;
GWs = GWs + GWs_L + GWs_R;
GL = GL_L + GL_R;
end
کد و الگوریتم اصلی توضیح داده شده است. سایر توابع که در توابع توضیح داده شده تعریف شده اند در [این آدرس](https://github.com/pondruska/DeepSentiment) آورده شده است . برای اجرا و آموزش مدل و شبکهی ارائه شده کافی است تابع evaluate.m را اجرا کنید.
# ایدههای جدید
با توجه به بررسی ابعاد و بخشهای متفاوت مدل ارائه شده، می توان در معماری شبکهی مورد استفاده برای آموزش دادهها تجدید نظر کرد. به نظر میرسد پایگاه دادهی مورد استفاده برای آموزش و آزمون شبکه بسیار جامع و کارشناسانه میباشد و از این نظر بهترین است. به دلیل پیچیده بودن روابط و شبکهی استفاده شده پس از تلاشهای انجام شده هنوز درک دقیقی از مدل و روابط به صورت کاملا واضح و با توجیح بدست نیامده و به همین دلیل علی رغم صرف زمان و در نظر گرفتن کاندیدهای متفاوت برای تغییر مدل به مدلی نو و پیشنهاد ایدههای جدید، موفق به ارائهی ایدهای نوین که قابل بیان باشد نشدم.
با تشکر