Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks

تغییرات پروژه از تاریخ 1396/11/21 تا حالا
<br>

**به نام خدا**  

[ مقاله به زبان اصلی](http://www.aclweb.org/anthology/P15-1150)

[لینک پیاده سازی اصلی ](https://github.com/stanfordnlp/treelstm)

[لینک پیاده سازی پرداخته شده در این ارائه](https://github.com/dasguptar/treelstm.pytorch)


-----------------------------------------------------------------------------------------------------

**توسعه نمایش معنایی با استفاده از شبکه های حافظه ای کوتاه- بلند  با ساختار درختی (Tree-LSTM)**

# تعریف مسئله
در این مقاله به دنبال معرفی مدلی  برای بازنمایی عبارت و جمله هستیم که بتواند در مقایسه با مدلهای پیشین، مشکلاتی مانند وابستگی جملات طولانی و به خاطر سپردن اطلاعات قدیمی را برطرف کند و انواع این مدل را بررسی و با یکدیگر مقایسه خواهیم کرد.

# مقدمه

گاهی اوقات برای بازنمایی یک عبارت نیاز است که اطلاعات قدیمی تر را در اختیار داشته باشیم. این مورد مخصوصا در جملات طولانی اتفاق می افتد. در این مقاله به دنبال معرفی مدلی  برای بازنمایی عبارت و جمله هستیم که بتواند در مقایسه با مدلهای پیشین، مشکلاتی مانند تحلیل معنایی جملات طولانی و به خاطر سپردن اطلاعات قدیمی را برطرف کند. 
مدل هایی که به ترتیب کلمات حساس نیستند،  تفاوتهای معنایی و وابستگیهای زبان طبیعی را تشخیص نمی دهند پس برای بازنمایی[^Representation] جملات مناسب نیستند.  برای مثال این مدل ها، تفاوت بین دو جمله ی " گربه از درخت بالا می رود " و " درخت از گربه بالا می رود" را تشخیص نمی دهند.  به همین دلیل  به سراغ مدل های حساس به ترتیب[^Order-Sensitive] و یا مدل های درختی می رویم.
مدلهای زیادی  برای بازنمایی عبارات، ارائه شده که  سه مدل پر استفاده را بیان می کنیم: 
1. مدل سبد واژگان[^Bag-Of-Words] –  بازنمایی عبارت  در مدل سبد واژگان، وابسته به ترتیب کلمه نیست.

یک مثال از این مدل را بیان می کنیم: 
**جمله ی اول** : زهرا زنگ خانه را زد.
**جمله ی دوم** : مریم تا به خانه رسید زنگ در خانه را به صدا در آورد.
سبد واژگان را کلمات این دو جمله در نظر می گیریم و کلمات تکراری را یکبار می نویسیم: {زهرا، زنگ، خانه، را، زد، مریم، تا، به، رسید، در، صدا،  آورد}
 هر واژه یک مکان مشخصی در این سبد دارد و ترتیب کلمات نیز مهم است. برای تشکیل بردار نمایش هر جمله باید از اولین لغت سبد واژگان شروع کرده و تعداد تکرار آن لغت در هر جمله را مشخص کرد.
 بردار نمایش این دوجمله به این شکل است:
 جمله ی اول: {1،1،1،1،1،0،0،0،0،0،0،0}
 جمله ی دوم: {0،1،2،1،0،1،1،2،1،2،1،1}
 
2. مدل ترتیبی [^Sequence] - که  در مدل ترتیبی، نمایش جمله حساس به ترتیب نشانه هاست [1] [2] 
3. مدل ساختار درختی[^Tree-Structured]- در مدل با ساختار درختی نمایش هر عبارت و جمله توسط عبارات کوچکتر  مبتنی بر ساختار نحوی تشکیل می شود. [3] [4]  نمایش جمله با استفاده از ساختار درختی بهتر از دو مورد مذکور دیگر است.

مدل های بازگشتی[^Recursive] حساس به ترتیب، قادر نیستند که اطلاعات خیلی قدیمی را به یاد بیاورند بنا براین برای حل این مشکل مدل های درختی پیشنهاد شدند. مدل درختی ساختار نحوی جمله را نیز بررسی می کند پس برای بازنمایی عبارات مناسب تر است.
سوال مهمی که مطرح می شود این است که: بازنمایی جمله  با مدل های درختی در مقایسه با مدل های بازگشتی چقدر بهتر است؟ در این مقاله، برای جواب دادن به این سوال، یک نوع مدل بازگشتی را با مدل درختی آن مقایسه خواهیم کرد. 


# مروری بر ادبیات 

- شبکه های عصبی با حافظه‌ی بلند کوتاه- مدت [^ Long Short-Term Memory Networks] :   یک نوع شبکه عصبی بازگشتی  [^  (RNN)-Recursive Neural Networks] است که  از یک واحد محاسباتی پیچیده استفاده می کند و به اختصار به آن LSTM می گوییند.

- مدل LSTM درختی [^ Tree-Lstm] :  یک مدل توسعه یافته از شبکه های عصبی با حافظه‌ی بلند کوتاه- مدت با ساختار درختی است. LSTM درختی مدل قدرتمندی است که توانایی یادگیری وابستگی های بلند مدت و به خاطر سپردن اطلاعات قدیمی را دارد و از دیگر مدل های موجود بهتر عمل می کند  و  به منظور انجام دو کار طراحی شده است:
1-   پیش بینی ارتباط معنایی[^Semantic Relatedness]  بین دو جمله 
2-  دسته بندی احساسات [^Sentiment Classification] (با استفاده از دادگان تحلیل احساسی دانشگاه استفورد [^Stanford Sentiment Treebank] )
![شکل 1 - یکLSTM با ساختار درختی و فاکتور انشعاب دلخواه](https://boute.s3.amazonaws.com/294-2-1.PNG)

- درخت وابستگی[^Dependency Tree] : در ساخت درخت وابستگی هر جمله یک فعل اصلی دارد و اولین مرحله ی تجزیه ی جمله از فعل اصلی آغاز می شود. حال باید  وابستگی عناصر جمله به فعل مشخص شود. کلمات دیگر موجود در جمله، یا به صورت مستقیم با فعل در ارتباطند و یا وابستگی غیر مستقیم دارند. ابتدا وابسته های مستقیم فعل و سپس وابسته های غیر مستقیم را مشخص می کنیم. هر کدام از گره های داخلی درخت وابستگی، هسته هستند که یک یا چند وابسته دارند وهسته ی مرکزی جمله نیز فعل اصلی جمله است.

![شکل 2 - یک درخت وابستگی برای جمله ی The man driving the aircraft is speaking](https://boute.s3.amazonaws.com/294-dependency-tree.png)


- درخت تجزیه ی ساختاری [^Constituency Tree] : در تجزیه ی درخت ساختاری، گره های داخلی یک یا چند فرزند دارند و نقش کلمات در جمله را نشان می دهند. جمله به نهاد و گزار تقسیم می شود و ترتیب کلمات حفظ می شود.  اگر هر بردار ورودی را یک کلمه در نظر بگیریم، هر کدام از گره های برگ یک کلمه از جمله را نشان می دهد. 

![شکل 3 - درخت با تجزیه ی ساختاری برای جمله ی شکل 3 - یک درخت وابستگی برای جمله ی The man driving the aircraft is speaking](https://boute.s3.amazonaws.com/294-constituency-tree.png)

- تابع Softmx : یک تابع منطقی است که یک بردار k بعدی مثل z با مقادیر واقعی دلخواه را به یک بردار k بعدی $(z)δ$ با مقادیر واقعی در رنج [0,1] برآورد می کند. 
 $$ δ : R^k \rightarrow [0,1] ^ k$$
 
   $$for j =  1, ... , k     :   $$
   
$$ δ(z) _ j = e ^ {z_j} / { \sum_{k=1}^{K} e ^ {z_k} } $$ 

 برای مثال:
![](https://boute.s3.amazonaws.com/294-Screenshot_2017-12-21-05-45-55.png)
- اصطلاح َAdagrad  [^ Adapte Gradient] : یک الگوریتم بهینه سازی  تعداد داده و پارامتر است که بر اساس شیب کار می کند. فرض کنید تعداد داده ها کم است و پارامترهای کمی در اختیار داریم، با این الگوریتم می توان با به روزرسانی مکرر داده ها و پارامترها میزان یادگیری را بیشتر کرد. با تنظیم شیب، داده ها و پارامترهایی که در متن تعدادشان زیاد است، کمتر به روزرسانی می شوند، و داده ها و پارامترهای کمیاب به روز رسانی بیشتری دارند.
- اصطلاح dropout : به طور معمول، در  شبکه های عصبی، هر یک از نورون های هر لایه با تمام نورون های لایه بعد اتصال برقرار می کنند و چون برای این اتصالات محاسبات زیادی انجام می شود، ممکن است شبکه دچار بیش برازش [^overfitting] شود. برای جلوگیری از این اتفاق، در ساختار شبکه ی عصبی می توان از لایه ای به نام  dropout استفاده کرد تا بعضی اتصالات از بین رود و محاسبات این اتصالات صورت نگیرد.  در شکل های زیر شبکه ی عصبی قبل و بعد از اعمال  دور ریزی را مشاهده می کنید:
![شکل 4 - شبکه ی عصبی استاندارد](https://boute.s3.amazonaws.com/294-Untitled3.png)
![شکل 5- چند نمونه شبکه ی عصبی با اعمال  دور ریزی -  dropout ](https://boute.s3.amazonaws.com/294-Px.png)





# معماری شبکه

مشکل شبکه های RNN این بود که داده های خیلی قدیمی را به خاطر نمیسپارند. زیرا اجزای بردار گرادیان در طول یادگیری، می توانند رشد کنند یا حذف شوند. با منفجر شدن یا حذف گرادیانها، مدل RNN برای یادگیری وابستگی های قدیمی در یک جمله با مشکل مواجه می شود. اما شبکه های  LSTM به گونه ایست که داده های خیلی قدیمی را نیز به خاطر می سپارند.

**در این بخش انواع معماری شبکه های عصبی با حافظه‌ی بلند کوتاه-مدت شرح داده می شود. **

- مدل  LSTM استاندارد: اگر عبارت و یا جمله ای طولانی باشد و از نظر معنایی به کلمات خیلی قبل تر وابسته باشد تا بتوان مفهوم کلی جمله را دریافت، LSTM به این  وابستگی ها دسترسی خواهد داشت. ساختار LSTM دارای سلول حافظه است که این سلول حالتهای زمانهای خیلی قبل را در خود ذخیره می کند و با این کار مشکل دسترسی به وابستگیهای جملات طولانی حل می شود.
شکل زیر معماری یک LSTM استاندارد را نشان می دهد.

![شکل 6- معماری یک LSTM استاندارد -it : گیت ورودی - ct : سلول حافظه - ft : گیت فراموشی - ot : گیت خروجی - ht :حالت مخفی ](https://boute.s3.amazonaws.com/294-2.png)


اگر هدف بازنمایی یک یا چند جمله باشد، حالت مخفی $ h_t$ می تواند اطلاعات  ترتیب واژه ها یا نشانه های دیده شده  در آن جمله تا زمان t را در خود نگه دارد و فرمول آن به صورت زیر است:

$$ h_t = tanh (Wx_t  + Uh_{t-1} + b^ t )  $$


گیت it با توجه به داشتن فیلتر σ کنترل می کند  که چه مقادیری از هر واحد به روز شوند. خروجی لایه سیگمود[^Sigmond] عددی بین صفر و یک است که نشان می دهد چه مقدار از ورودی به خروجی ارسال می شود:
   
$$   i_t = σ( W^ i x_t  + U^ i h_{t-1} +b^ i ) $$

پاک کردن اطلاعات از سلول حافظه [^Memory Cell] از طریق گیت فراموشی[^Forfet Gate] $ f_t$ صورت می گیرد. گیت فراموشی محدوده ای که می خواهیم از سلول حافظه فراموش شود را کنترل می کند. این گیت با توجه به مقادیر $ x_t$ و $ h_{t-1}$ یعنی ورودی فعلی و حالت مخفی قبلی، مقدار 0 یا 1  سلول حالت $ c_{t-1}$ را به خروجی می برد و سلول حافظه فعلی را شکل می دهد. مقدار یک یعنی مقدار $ c_{t-1}$ به طور کامل به $ c_t$  می رود و مقدار صفر یعنی اطلاعات سلول حافظه را به طور کامل پاک کن و هیچ مقداری را به  $ c_t$ نبر.  در فرمول سوم اگر مقدار  $ f_t$ برابر یک باشد اطلاعات قبلی به سلول حافظه در زمان t اضافه می گردد و اگر$ f_t$ برابر صفر باشد اطلاعات قبلی فراموش می شوند.
$$ f_t = σ ( W^ f x_t  + U^ f h_{t-1}+b^f ) $$

$$ u_t = σ ( W^u x_t  + U^ u h_{t-1} +b^u ) $$

$$ c_t= it *  u_t + f_t * c_{t-1}$$
گیت خروجی ot کنترل می کند که چه بخشی از سلول حافظه داخلی به عنوان خروجی نمایش داده شود. در واقع لایه سیگمود فیلتری است که مشخص می کند چه بخشی از مقدار سلول حالت داخلی به خروجی برود.

$$ o_t = σ( W^o x_t + U^o h_{t-1} + b^o)$$

سپس مقدار سلول حالت داخلی پس از به روز شدن را به لایه تانژانت هایپربولیک می دهیم و مقدار آنرا در خروجی تایع سیگمود در مرحله قبل ضرب می کنیم تا مشخص کنیم که چه بخش هایی به خروجی برود: 


$$  h_t = o_t * tanh (c_t) $$


ساختار LSTM  میتواند اطلاعات جدیدی را به سلول حافظه اضافه کند و یا اطلاعات را از آن حذف کند. ورودی بردارهای it ,ft و ot بین [0,1]  است. 

دو ساختار معروف Lstm  که در آزمایشات از آن ها استفاده کرده ایم :
![شکل 7 - انواع LSTM](https://boute.s3.amazonaws.com/294-33333.png)

- مدل LSTM دو طرفه[^Bidirectional LSTM] :از دو لایه حافظه ی بلند کوتاه-مدت تشکیل شده که به صورت موازی اجرا می شوند.لایه ی اول جمله  و لایه ی دوم معکوس جمله را به عنوان ورودی دریافت می  کند.

![شکل 8 - حافظه ی بلند کوتاه  مدت دوطرفه -  لایه ی نزدیک به بردار ورودی، عبارت و  لایه ی دوم معکوس عبارت را به عنوان ورودی دریافت می  کند.](https://boute.s3.amazonaws.com/294-12911_2017_468_Fig1_HTML.gif)

- مدل LSTM چند لایه [^Multilayer LSTM] : در  LSTM چند لایه، برای اینکه لایه های بالاتر بتوانند به  وابستگی های طولانی مدت دسترسی داشته باشند، حالت مخفی لایه ی L، به عنوان ورودی در لایه ی L+1 دریافت می شود. [20][21]

![شکل 9 - حالت مخفی لایه ی قبل، به عنوان ورودی در لایه ی بعدی دریافت می شود](https://boute.s3.amazonaws.com/294-rnnlm.png)


ساختار درختی LSTM ها:  ساختار زنجیره ای LSTM تنها می تواند اطلاعات متوالی را منتشر کند. که این یک محدودیت برای این معماری است.  Child-Sum Tree-LSTM  و LSTM درختی مرتب N تایی  هر دو نوع قادرند که اطلاعات را از واحدهای چند فرزندی خود ترکیب کنند. 
مدل LSTM  درختی مانند LSTM استاندارد، دارای گیتهای ورودی و خروجی و سلول حافظه و حالت مخفی می باشد. تفاوتLSTM  استاندارد و LSTM درختی در این است که در مدل درختی، بردارهای گیت شده و به روزرسانی سلول حافظه وابسته به حالتهای  تعدادی فرزند است و همچنین برای اینکه بشود اطلاعات را از هر فرزند دلخواه ترکیب کرد، به جای یک گیت فراموشی واحد، گیتهای فراموشی برای k امین فرزند مورد نظر داریم. یعنی برای هر فرزند یک گیت فراموشی fjk داریم.

- مدل  Child-Sum Tree-LSTMs: مانند Lstm  است با این تفاوت که $\tilde {h_j}$ مجموع حالتهای مخفی فرزندان از اولین  فرزند  تا k امین فرزند می باشد و در بخش داخلی تعداد سلول حافظه و حالت مخفی و گیت فراموشی به تعداد فرزندان است.
 
 ![شکل 10- معماری مدل  Child-Sum Tree-LSTMs](https://boute.s3.amazonaws.com/294-1.png)
 ![شکل 11- معماری مدل Child-Sum Tree-LSTMs هنگام دریافت ورودی در گره ی j و با دو فرزند k1 و k2](https://boute.s3.amazonaws.com/294-child-sum-tree-lstm.png)
 
 $$\tilde {h_j} =  \sum_{ k\in{C_{(j)}} } h_k$$


$$  i_j= σ( W^{(i)} x_j + U^{(i)} \tilde {h_j} +b^{(i)} ) $$
 
 
$$ f_{jk} = σ ( W^{(f)} x_j  + U^{(f)} h_k +b^{(i)}) $$


$$ o_j = σ( W^{(o)} x_j + U^{(o)}  \tilde {h_j} + b^{(o)})$$


$$ u_j =tanh (  W^{(u)} x_j + U^{(u)}  \tilde {h_j} + b^{(u)}) $$


$$ c_j = i_j \otime u_j +  \sum_{ k\in{C_{(j)}} }  f_{jk} \otime c_k $$


$$ h_j = o_j \otime tanh (c_j)$$


<br> 

- مدل LSTM درختی مرتب N تایی [^N-ary Tree-LSTM] : اگر در یک LSTM  درختی، فاکتور انشعاب بیشتر ازN  باشد  و یا اینکه فرزندان مرتب شده باشند، یعنی بتوان فرزندان را از 1 تا n ایندکس کرد، می توانیم از  LSTM درختی مرتب N تایی استفاده کنیم. در این مدل ترتیب فرزندان مهم است.

![شکل 12- معماری مدل LSTM درختی مرتب دو تایی  هنگام دریافت ورودی در گره ی j و با دو فرزند k1 و k2](https://boute.s3.amazonaws.com/294-binary-tree-lstm-n-ary.png)

$$  i_j= σ( W^{(i)} x_j + \sum_{l=1}^{N}  U_l^{(i)}  h{j_l} +b^{(i)} ) $$


$$ f_{jk} = σ ( W^{(f)} x_j  +  \sum_{l=1}^{N}  U_l^{(f)}  h{j_l}+b^{(f)}) $$


$$ o_j= σ( W^{(o)} x_j + \sum_{l=1}^{N}  U_l^{(o)}  h{j_l} +b^{(o)} ) $$


$$ u_j=tanh( W^{(u)} x_j + \sum_{l=1}^{N}  U_l^{(u)}  h{j_l} +b^{(u)} ) $$


$$ c_j = i_j \otime u_j +  \sum_{ k\in{C_{(j)}} }  f_{jl} \otime c_{jl} $$


$$ h_j = o_j \otime tanh (c_j)$$


# کارهای مرتبط

- از طریق بازنمایی و شناخت توزیع شده ی کلمات  [5] [6] [7]  [8] [9] [10]  به کاربردهای مختلفی برای انواع وظایف NLP  دست یافته اند.
- علاقه مندی های قابل توجه ای در زمینه یادگیری بازنمایی و شناخت عبارات و جملات در کارهای [11] [12]  [13] [14]  وجود داشته است.
- بازنمایی و شناخت توزیع شده ی متون طولانی تر مانند پاراگراف ها و اسناد.   [15]  [16]
- رویکرد این مقاله بر روی شبکه های عصبی برگشتی ساخته شده است. [17] [18] 
- مدل Tree_RNNs که به منظور تحلیل تصاویر صحنه های طبیعی مورد استفاده قرار گرفته است ، [17] بازنمایی عبارت را از بردارهای کلمه می سازد. [18] و قطبیت معنایی و احساسی جملات را دسته بندی می کند. [19]


# آموزش شبکه

- نمایش کلمات  با استفاده از بردارهای Glove سیصد بعدی، مقدار دهی شده اند.
- همچنین مدلهای ما با استفاده از  Adagrad  با نسبت آموزش 0.05 و یک mini-batch [^ شماره سریال کوچک] به اندازه ی 25  آموزش داده شدند. 
- پارامترها با mini-batch  به طول 10−4 تنظیم شده اند.
-  در دسته بندی احساسات از روش dropout  با نرخ  0.5  استفاده شده. با اعمال dropout، دستاوردهای  خاصی را در مورد وابستگی معنایی مشاهده نکردیم. 

<br>

| | بردار نمایش کلمه ورودی| نرخ update نمایش کلمه   |  نرخ Adagrad   | نرخ dropout 
|:----------------:|:------:|:----------:||:------:||:---------------:||:------:|
|رابطه ی معنایی جملات   |  Glove [^Global vectors for word representation] سیصد بعدی |   بدون به روز رسانی  |    0.05  | بدون dropout | 
|دسته بندی احساسی | Glove |    0.1  |     0.05   |  0.5 |

> جدول 1 -  نحوه ی آموزش 

استفاده از softmax برای کلمات
تابع هزینه:log-likelihood
برای جمله ها: 
زاویه ی بین خروجی ها و فاصله ی بین آنها
![زاویه ی بین خروجی ها و فاصله ی بین آنها](https://boute.s3.amazonaws.com/294-degree.png)

<br>

# آزمایش های انجام شده و مجموعه ی داده ها

<br>
-  **ابر پارامترها [^Hyperparameters] ** 

-   با تغییر دادن  ابعاد حالتهای پنهان، تعداد پارامترهای شبکه تغییر می کند که در جدول 2 به مقایسه ی این تغییرات می پردازیم:

|  | معنا   |  احساس | 
|:--:|:--:|:--:|:--:|:--:|
|نوع LSTM|ابعاد حافظه  -  تعداد پارامترهای تابع ترکیب |ابعاد حافظه  -  تعداد پارامترهای تابع ترکیب |
|استاندارد|    150  -  203400 |   168   -  315840  |
|دو طرفه|    150  -  203400 |   168   -  315840  |
|دو لایه|    108  -  203472 |   120   -  318720  |
|دو طرفه ی دو لایه|   108  -  203472 |   120   -  318720  |
|درخت ساختاری|    142  -  205190 |   150   -  316800  |
|درخت وابستگی|    150  -  203400 |   168   -  315840  |

> جدول 2 - مقایسه ی  تعداد پارامترهای انواع LSTM  با تغییر دادن  ابعاد حالتهای پنهان - برای این کار از مجموعه داده ی   SemEval 2014, Task 1 استفاده شده است. 
 تابع ترکیب در هر گره، بردار نمایش آن گره است که از ترکیب بردارهای فرزندان آن گره ایجاد شده است. 
با توجه به تعداد پارامترهای تابع ترکیب هر یک از مدل های موجود در جدول، می توان به هر یک  از مدل ها حافظه ی مورد نیاز را اختصاص داد.
<br>


- **دسته بندی احساسات **

مجموعه داده، دسته بندی  و تعداد داده هایی که برای دسته بندی احساسات جملات مورد ارزیابی ما در این مقاله بکار رفته را در جدول زیر می بینیم:

| مجموعه داده| دسته بندی | کلاس های بکار رفته| تعداد داده های آموزش| تعداد داده های  مشتق شده | تعداد داده های تست|  
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|دادگان تحلیل احساسی دانشگاه استنفورد| دودویی | مثبت و منفی|  6920 |872 |1821| 
|دادگان تحلیل احساسی دانشگاه استنفورد|fine-grained |بسیار منفی، منفی، خنثی، مثبت و خیلی مثبت|8544 |1101 |2210| 

 > جدول 3 -  تحلیل احساسی جملات نمونه برداری شده از مرور و بازدید فیلم ها - برای دسته بندی احساسی از دادگان تحلیل احساسی دانشگاه استنفورد  استفاده کردیم. روی این مجموعه داده دو کار باید صورت گرفته:دسته بندی دودویی جملات و دسته بندی fine-grained .   ( از آنجا که جملات خنثی منسوخ شده اند، مثالهای کمی برای این مورد وجود دارد.) 
 
<br>

- **وابستگی معنایی (Semantic Relatedness)**


برای هر جفت جمله  ، وظیفه وابستگی معنایی اینست که پیش بینی کند دو جمله در معنا و از نظر مفهومی چه ارتباطی با هم دارند به گونه ای که سعی کند مثل یک انسان ارتباط بین دو جمله در معنا را متوجه شود. جدول زیر مجموعه داده  و تعداد داده های مورد استفاده برای تحلیلی وابستگی جملات را نشان می دهد:


| مجموعه داده|  تعداد داده های آموزش| تعداد داده های  توسعه یافته | تعداد داده های تست|  
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| [^Sentences Involving Compositional Knowledge ]SICK |  4500|500 | 4927| 

>  جدول 4 - تشکیل 9927 جفت جمله  برای ارزیابی وابستگی معنایی بین هر جفت جمله. هر جفت جمله با یک امتیاز و رتبه وابستگی [y ∈ [1, 5 علامت گذاری شده. عدد یک در این بازه نشان می دهد که دو جمله کاملا غیر مرتبط هستند و عدد پنج نشان می دهد که دو جمله بسیار با هم مرتبط هستند. هر برچسب میانگین ده رتبه بندی اختصاص داده شده به آگهی دهندگان مختلف انسان است.   برای شبکه پیش بینی مشابه ما از یک لایه مخفی با سایر 50 استفاده می کنیم. 

<br>


#نتایج
- دسته بندی احساسات
نتایج حاصل از این آزمایشات در جدول 5  گردآوری شده. 


 |روش |  fine-grained  | دودویی |
|:----:|:--:|:--:|:--:|:--:|
|RAE  | 43.2 |82.4 | 
|MV-RNN | 44.2 |82.9 | 
|RNTN |  45.7 |85.4 |
|DCNN | 48.5 |86.8 |
|Paragraph-Vec | 48.7 |87.8 |
|CNN-non-static |  48.0 |87.2 |
|CNN-multichannel | 47.4 |88.1 | 
|DRNN | 49.8 |86.6 | 
|  LSTM| (1.1)46.4|  (0.6)84.9  |  
|Bidirectional LSTM|  (1.0)49.1 | (0.5)87.5 |
|Two layer LSTM|  (1.3)46.0  | (0.6)86.3 |
|Two layer Bidirectional LSTM|  (1.0)48.5  | (1.0)87.2 |
|Dependency Tree-LSTM|  (0.4)48.4   | (0.4)85.7 |
| ** Constituency Tree-LSTM : ** |
|randomly initialized vectors|  (0.6)43.9   | (0.5)82.0 |
|Glove vectors, fixed|  (0.4)49.7  | (0.8)82.0 |
|Glove vectors, tuned |  (0.5)**51.0**  | (0.3)88.0 |


> جدول 5 -  دقت مجموعه ی ارزیابی بر روی دادگان تحلیل احساسی دانشگاه استفورد. دسته بندی fine-grained بر اساس پنج کلاس بسیار منفی، منفی، خنثی، مثبت و خیلی مثبت و دسته بندی دودویی بر اساس دو کلاس مثبت و منفی است.

با توجه به نتایجی که بدست آمده، تحلیل احساسات با دسته بندی دودویی دقت بیشتری از دسته بندی  fine-grained داشته  و همچنین  lstm درختی با تجزیه ی ساختاری زمانیکه برای نمایش کلمه ی ورودی  از بردارهای Glove   استفاده شود،دقت بیشتری نسبت به معماری های دیگر دارد. به ویژه اگر بردارهای Glove را تنظیم کرده باشیم.

علت تفاوت عملکرد  lstm درختی با تجزیه ی ساختاری و  lstm درختی با تجزیه ی وابستگی به دو دلیل است:
1-   مجموعه داده ای که جهت آموزش در درخت  lstm وابستگی  استفاده شده ( تعداد داده ها حدود 150k)  نسبت به مجموعه داده ی درخت lstm ساختاری  ( تعداد داده ها حدود 319k) کمتر بوده .
2 -  عدم توانایی در مطابقت دادن حدود 9% از گره های وابستگی با محدوده ای از مجموعه آموزش.

به روز رسانی بازنمایی کلمات در طول آموزش، بر روی عملکرد داده های دسته بندی شده با  fine-grained و داده های دسته بندی شده ی باینری تاثیر گذار است و موجب افزایش قابل ملاحظه ی عملکرد داده های   fine-grained و افزایش جزئی عملکرد داده های باینری شده می شود. 
<br>

-  روابط معنایی
در جدول 6  چند روش  Lstm  و  غیر Lstm از نظر وابستگی معنایی با هم مقایسه شده اند:


 |روش |  Pearson’s r | Spearman’s | MSE |
|:----:|:--:|:--:|:--:|:--:|:--:|
|Illinois-LH | 0.7993 |0.7538 |0.3692 |
|UNAL-NLP |0.8070 |0.7489 |0.3550 |
|Meaning Factory| 0.8268 |0.7721 |0.3224|
|ECNU | 0.8414 | - | - |
|Mean vectors |  (0.0013) 0.7577 | (0.0027) 0.6738 |(0.0090) 0.4557 |
|DT-RNN |  (0.0070) 0.7923 | (0.0071) 0.7319| (0.0137)0.3822|
|SDT-RNN | (0.0042) 0.7900  | (0.0076) 0.7304| (0.0074)0.3848| 
|  LSTM|(0.0031)  0.8528  |  (0.0059) 0.7911|  (0.0092)0.2831|
|Bidirectional LSTM | (0.0028) 0.8567 | (0.0053) 0.7966| (0.0063)0.2736 |
|Tow layer LSTM |  (0.0066)0.8515  |  (0.0088)0.7896| (0.0150) 0.2838  |
|Tow layer Bidirectional  LSTM| (0.0014)  0.8558 | (0.0018) 0.7965|  (0.0020)0.2762  |
|Constituency Tree-LSTM |  (0.0038)0.8582  | (0.0053) 0.7966| (0.0108)0.2734   |
|Dependency Tree-LSTM|  (0.0030) **0.8676** |  (0.0042) **0.8083** | (0.0052) **0.2532**  |

> جدول 6 - نتایج مجموعه ی ارزیابی روی روابط معنایی SICK - در اینجا از سه روش برای معیار ارزیابی استفاده شده، روش Pearson’s r ،  Spearman’s و خطای میانگین مربعات [^Mean Squared Error ]  (MSE) . 

  دو معیار Pearson’s r  و  Spearman’s، وابستگی کلمات در مقابل ارزیابی های انسان از روابط معنایی  را  اندازه گیری می کند و معیار سوم، خطای اندازه گیری را نشان می دهد.
 مدلهای  DT-RNN  و SDT-RNN مدلهایی از شبکه بازگشتی عصبی هستند که از درخت وابستگی برای نمایش عبارت استفاده می کنند و بر روی نهاد و گزاره جمله تمرکز دارند. SDT-RNN یک مدل توسعه یافته از DT-RNN است که برای هر رابطه ی وابستگی از یک بردار انتقال جداگانه استفاده می کند؛ مدلهای یک تا پنج جدول  در 2014  SemEval ارائه شده اند.
 در اینجا، هر دو نوع درخت وابستگی و ساختاری از ریشه ساخته می شوند و نظارت را در ریشه درخت دریافت می کنند. اما در دسته بندی معنایی نظارت از گره های داخلی نیز دریافت می شد.  از آنجایی که در درخت وابستگی هر گره، کلمه ی هد را نشان می دهد و در درخت ساختاری تنها برگ ها به عنوان کلمه ی ورودی دریافت می شوند، با مقایسه ی اعداد جدول، می بینیم که درخت Lstm وابستگی مفیدتر از درخت Lstm ساختاری است. زیرا مسیر کلمه های ورودی به ریشه برای انجام نظارت، در درخت وابستگی از مسیر کلمات ورودی درخت ساختاری که از برگ تا ریشه است کوتاهتر است.
 <br>
 <br/>
#  بحث و تجزیه و تحلیل کیفی

در جدول 7، دو ستون از جملات را داریم که ستون سمت چپ، بررسی جملات با درخت Lstm وابستگی و ستون سمت راست بررسی جملا ت بر اساس شباهت  بردار معنی کلمه است. این جمله ها،  از مجموعه آموزش SICK انتخاب شده اند. جمله ی انگلیسی a boy is waving at some young runners from the ocean را در نظر بگیرید. در تجزیه وابستگی این جمله، کلمه ی  ocean وابستگی غیر مستقیم از ریشه یعنی waving دارد و دومین دورترین از ریشه است. و این نشان می دهد که مدل Lstm  درختی قادر به حفظ اطلاعات قدیمی و دور می باشد. و همین طور مدل درختی این اجازه را می دهد که بتوانیم جملات طولانی را از نظر وابستگی بررسی کنیم. دو جمله ی "دو مرد گیتار می زنند"  و "دو مرد در مقابل جمعیت می رقصند و آواز می خوانند " را در نظر بگیرید. تجزیه ی وابستگی می تواندعبارت "گیتار زدن" را با عبارت "رقصیدن و آواز خواندن در جلوی جمعیت" مرتبط کند. در صورتی که این دو عبارت نشانه[^Token] ی مشترکی با هم ندارند.  


|Ranking by mean word vector cosine similarity| Score | Ranking by Dependency Tree-LSTM model  | Score|
|:----:|:--:|:--:|:--:|:--:||:--:|
|a **woman is slicing potatoes**| |**a woman is slicing potatoes**||
|a woman is cutting potatoes|0.96 | a woman is cutting potatoes |4.82 | 
|a woman is slicing herbs|0.92 |  potatoes are being sliced by a woman|4.70 |
|a woman is slicing tofu| 0.92| tofu is being sliced by a woman|4.39 |
|****a boy is waving at some young runners from the ocean** | |a boy is waving at some young runners from the ocean||
|a man and a boy are standing at the bottom of some stairs ,which are outdoors| 0.92 | a group of men is playing with a ball on the beach |3.79 |
|a group of children in uniforms is standing at a gate and one is kissing the mother| 0.90 | a young boy wearing a red swimsuit is jumping out of a blue kiddies pool |3.37 | 
|  a group of children in uniforms is standing at a gate and there is no one kissing the mother|0.90 | the man is tossing a kid into the swimming pool that is near the ocean |3.19 | 
|**two men are playing guitar**|  |**two men are playing guitar**|  | 
|some men are playing rugby|0.88 |the man is singing and playing the guitar |4.08 | 
|two men are talking|0.87| the man is opening the guitar for donations and plays with the case |4.01 | 
|two dogs are playing with each other| 0.87 |two men are dancing and singing in front of a crowd|4.00 | 

> جدول 7 - ستون سمت چپ، بررسی جملات با درخت Lstm وابستگی و ستون سمت راست بررسی جملات از نظر تشابه معنایی بردار کلمات در جمله می باشد.



#  تاثیر طول جمله

در شکل  13 و  14، دقت انواع Lstm زمانیکه طول کلمه را تغییر میدهیم با هم مقایسه شده است. خط افقی طول کلمه و خط عمودی دقت بر اساس معیار مرتبط با کار مورد نظر را نشان می دهد. به شکل 14 نگاه کنید، در جملات به طول 13 تا 15، Lstm درختی مبتنی بر وابستگی، ارتباط معنایی عبارات را با یک اختلاف خیلی خوب نسبت به مدل Lstm ترتیبی متوجه شده  و دقت بیشتری دارد؛ با توجه به شکل مشاهده می کنیم که چه در جملات کوتاه و چه در جملات طولانی تر، Lstm درختی دقت بیشتری در بازنمایی عبارات نسبت به Lstm استاندارد و Lstm دو طرفه  دارد.
![شکل 13 - محور عمودی دقت بر اساس دسته بندی fine-grained  احساسات و محور افقی طول کلمه را نشان می دهد.](https://boute.s3.amazonaws.com/294-length1.png)

![شکل 14 - محور عمودی دقت بر اساس معیار Pearson’s r ( معیاری برای اندازه گیری وابستگی کلمات است)  و محور افقی طول کلمه را نشان می دهد.](https://boute.s3.amazonaws.com/294-12.png)

# پیاده سازی
برای پیاده‌سازی این پروژه  از ابزار پای تورچ  [^Pytorch] استفاده می کنیم، کد پیاده‌سازی آن نیز از طریق  این  [پیوند](https://github.com/dasguptar/treelstm.pytorch) در دسترس همگان قرار دارد که در ادامه به طور مختصر به توضیح پیاده سازی آن خواهیم پرداخت. 

- فایل main.py که روند کلی پیاده سازی یکی از مدل های Lstm که توضیح دادیم است و کتابخانه ها و توابع مورد نیاز  فراخوانی می شوند. آموزش شبکه صورت می گیرد، مجموعه ی داده و داده های آموزش، داده های توسعه یافته و داده های تست برای تحلیل وابستگی جملات مشخص می شوند. جملات توسط معیارهای سنجش  وابستگی جملات مانند معیار Pearson’s r و خطای میانگین مربعات ارزیابی می شوند.  

- فایل model.py مدل Child-Sum Tree Lstm را معرفی می کند که افزونه ی nn را به عنوان ورودی می گیرد. در این فایل، گره های فرزند گره ی جاری مشخص می شوند و به تعداد فرزندان، حالت مخفی و سلول حافظه ایجاد می شود. بر روی گیت های ورودی و خروجی فیلتر سیگموید و بر روی گیت به روز رسانی فیلتر tanh اعمال می شود و ... . دو تابع مهم از این فایل که توضیحات گفته شده را شامل می شود در کد زیر می بینیم:
 
 
      def node_forward(self, inputs, child_c, child_h):
      child_h_sum = torch.sum(child_h, dim=0, keepdim=True)
      iou = self.ioux(inputs) + self.iouh(child_h_sum)
      i, o, u = torch.split(iou, iou.size(1) // 3, dim=1)
      i, o, u = F.sigmoid(i), F.sigmoid(o), F.tanh(u)
      f = F.sigmoid(
      self.fh(child_h) +
      self.fx(inputs).repeat(len(child_h), 1)
           )
      fc = torch.mul(f, child_c)
      c = torch.mul(i, u) + torch.sum(fc, dim=0, keepdim=True)
      h = torch.mul(o, F.tanh(c))
      return c, h

      def forward(self, tree, inputs):
     _ = [self.forward(tree.children[idx], inputs) for idx in    range(tree.num_children)]
    if tree.num_children == 0: 
      child_c = Var(inputs[0].data.new(1, self.mem_dim).fill_(0.))
      child_h = Var(inputs[0].data.new(1, self.mem_dim).fill_(0.))
    else:
      child_c, child_h = zip(* map(lambda x: x.state, tree.children))
      child_c, child_h = torch.cat(child_c, dim=0), torch.cat(child_h, dim=0)
      return tree.state

- در فایل trainer، توابع کمکی برای تست کردن و آموزش دادگان ایجاد می شود و این توابع در فایل main.py فراخوانی می شوند تا دادگان مورد نظر تست و یا آموزش داده شوند. تایع کمکی آموزش در کد زیر آمده است


    def train(self, dataset):
    self.model.train()
    self.optimizer.zero_grad()
    indices = torch.randperm(len(dataset))
    for idx in tqdm(range(len(dataset)),desc='Training epoch'+str(self.epoch + 1) + ''):
    ltree, lsent, rtree, rsent, label = dataset[indices[idx]]
    linput, rinput = Var(lsent), Var(rsent)
    target = Var(map_label_to_target(label, dataset.num_classes))
    if self.args.cuda:
    linput, rinput = linput.cuda(), rinput.cuda()
    target = target.cuda()
    output = self.model(ltree, linput, rtree, rinput)
    loss = self.criterion(output, target)
    total_loss += loss.data[0]
    loss.backward()
    if idx % self.args.batchsize == 0 and idx > 0:
    self.optimizer.step()
    self.optimizer.zero_grad()
    self.epoch += 1
    return total_loss / len(dataset)
  
  - فایل Constants.py به هر برچسب یک مقدار نسبت می دهد و نماد برچسب کلمات را تعریف می کند.  برای مثال  کلمات ناشناخته که در مجموعه ی آموزش نیستند اما در مجموعه ی تست وجود دارند را با عدد 1 مقدار دهی میکند و به صورت <unk> نمایش می دهد.
 
 
      PAD = 0 , UNK = 1 , BOS = 2 , EOS = 3
      PAD_WORD = '<blank>'
      UNK_WORD = '<unk>'
      BOS_WORD = '<s>'
      EOS_WORD = '</s>'


- فایل dataset.py  برای مجموعه ی دادگان SICK کلاس SICKDataset ایجاد می کند.  جمله ی اول و جمله ی دوم از این مجموعه داده را می گیرد. و با lsentences و rsentences نام گذاری می کند. 


       self.lsentences = self.read_sentences(os.path.join(path, 'a.toks'))
       self.rsentences = self.read_sentences(os.path.join(path, 'b.toks'))

برای هر جمله یک درخت ایجاد می کند تا از طریق درخت حاصل بتوان میزان وابستگی معنایی بین دو جمله را ارزیابی کرد  که گره ی اول جمله ی اول ltrees و گره ی اول جمله ی دوم rtrees می باشد:

        self.ltrees = self.read_trees(os.path.join(path, 'a.parents'))
        self.rtrees = self.read_trees(os.path.join(path, 'b.parents'))

 - در فایل utils.py تابع load-word.vectors بردارهای Glove و کلمات ورودی را برای تحلیل احساسی کلمات بارگذاری می کند.  با دستور torch.zero ، مدل Lstm درختی برای تحلیل احساسی می تواند اعمال شود. همچنین برای بردارهای کلمه، tensor ایجاد می شود.
 
- فایل metrics.py تعریف معیارهای ارزیابی نتایج وابستگی معنایی بین دو جمله است. برای مثال ارزیابی وابستگی جملات با استفاده از خطای میانگین مربعات به اینگونه است که اختلاف معنایی کلمه های  پیش شرط و کلمه های که برچسب خورده محاسبه و به توان دو می رسد، هر چه میزان عدد بدست آمده کمتر باشد، وابستگی معنایی بین دو جمله بیشتر است:


     def mse(self, predictions, labels):
     x = deepcopy(predictions)
     y = deepcopy(labels)
     return torch.mean((x - y)^ 2)
   
   - فایل tree.py گره ی جاری را به عنوان گره ی والد در نظر می گیرد، اندازه و عمق فرزندان گره ی والد را مشخص می کند. منظور از اندازه تعداد فرزندان یک گره به علاوه ی خود آن گره است. پس اندازه ی گره ای که برگ است یعنی گره ای که فرزندی ندارد، برابر با 1 است و عمق آن 0 است.  کد تابع size به صورت زیر است:


     def size(self):
     if getattr(self, '_size'):
     return self._size
     count = 1
     for i in range(self.num_children):
     count += self.children[i].size()
     self._size = count
     return self._size
   
 همچنین لینک پیاده سازی اصلی مقاله نیز در این [پیوند](https://github.com/stanfordnlp/treelstm) می باشد.
 
# جمع بندی


در این مقاله توسعه LSTM استاندارد به توپولوژی شبکه ای با ساختار درختی  معرفی شد. 
ساختار LSTM درختی می تواند به درختان با فاکتور انشعاب دلخواه اعمال شود.  تاثیر معماری LSTM درختی را که بهتر از تمام سیستم های موجود عمل می کند  بر روی دو مورد وابستگی معنایی و دسته بندی احساسات بررسی شد. 
همچنین نشان داده شد که  مدل LSTM با ساختار درختی برای انجام وظایف  بهتر از مشابه خودشان در مدل ترتیبی عمل می کنند. 
نتایج  این مقاله خط مشی هایی را برای کاربر  در تولید روش نمایش  جملات پیشنهاد می دهد.

# ایده ها و کارهای آینده
- از مدل های lstm ارائه شده در این مقاله می توان برای ارزیابی **میزان وابستگی جملات بین مقالات مختلف** بهره برد تا مقالات مرتبط به هم را از مقالات نا مرتبط به یکدیگر  تشخیص داد و با انجام ارزیابی می توان سنجید که در این زمینه تا چه حد قدرتمند تر از مدل های دیگر عمل می کند. 
- همچنین می توان دادگان این مقاله را تغییر داد و حتی این دادگان را از زبان های دیگر انتخاب کرد و میزان موفقیت مدل از لحاظ وابستگی معنایی جملات و تحلیل احساسی کلمات را برای **زبان های دیگر** که تفاوتهای زیادی می توانند داشته باشند  بررسی نمود. مثلا می توان دادگان را نظرات مشتریان و بازدید کنندگان سایت دیجی کالا و یا شبکه های اجتماعی در نظر گرفت و بازخوردهای بازدیدکنندگان را مورد تحلیل احساسی قرار داد تا بتوان دریافت که مدلهای ارائه شده در این مقاله تا چه حد می تواند به کیفیت بهتر محصولات و فروش بیشتر کمک کند. 
- می دانیم که از Lstm در بازشناسی خودکار متون [^(OCR)Optical Character Recognition] نیز استفاده می شود. مدل های ارائه شده در این مقاله ممکن است بتواند میزان بازشناسی ارقام و حروف دست نویس را افزایش دهد و منجر به ساخت برنامه[^Application] های مفید  برای **تشخیص متون دست نویس** شود. 

# مراجع


[1] Elman, Jeffrey L. 1990. Finding structure in time. Cognitive science 14(2):179–211.
[2] Mikolov, Toma´s. 2012. ˇ Statistical Language Models Based on Neural Networks. Ph.D. thesis, Brno University of Technology.
[3] Goller, Christoph and Andreas Kuchler. 1996. Learning task-dependent distributed representations by backpropagation through structure. In IEEE International Conference on Neural Networks.
[4]  Socher, Richard, Cliff C Lin, Chris Manning, and Andrew Y Ng. 2011. Parsing natural scenes and natural language with recursive neural networks. In Proceedings of the 28th International Conference on Machine Learning (ICML-11).
[5] Rumelhart, David E, Geoffrey E Hinton, and Ronald J Williams. 1988. Learning representations by back-propagating errors. Cognitive modeling 5.
[6] Collobert, Ronan, Jason Weston, Leon Bottou, ´Michael Karlen, Koray Kavukcuoglu, and Pavel Kuksa. 2011. Natural language processing (almost) from scratch. The Journal of Machine Learning Research 12:2493–2537
[7] Turian, Joseph, Lev Ratinov, and Yoshua Bengio. 2010. Word representations: A simple and general method for semi-supervised learning. In Proceedings of the 48th Annual Meeting of the Association for Computational Linguistics.
[8] Huang, Eric H., Richard Socher, Christopher D. Manning, and Andrew Y. Ng. 2012. Improving word representations via global context and multiple word prototypes. In Annual Meeting of the Association for Computational Linguistics (ACL).
[9] Mikolov, Tomas, Ilya Sutskever, Kai Chen, Greg S Corrado, and Jeff Dean. 2013. Distributed representations of words and phrases and their compositionality. In Advances in Neural Information Processing Systems.
[10] Pennington, Jeffrey, Richard Socher, and Christopher D Manning. 2014. Glove: Global vectors for word representation. In Proceedings of the 2014 Conference on Empiricial Methods in Natural Language Processing (EMNLP).
 [11] Mitchell, Jeff and Mirella Lapata. 2010. Composition in distributional models of semantics. Cognitive science 34(8):1388 1429. 
 [12] Yessenalina, Ainur and Claire Cardie. 2011. Compositional matrix-space models for sentiment analysis. In Proceedings of the 2011 Conference on Empirical Methods in Natural Language Processing (EMNLP).
 [13] Grefenstette, Edward, Georgiana Dinu, YaoZhong Zhang, Mehrnoosh Sadrzadeh, and Marco Baroni. 2013. Multi-step regression learning for compositional distributional semantics. In Proceedings of the 10th International Conference on Computational Semantics.
 [14] Srivastava, Nitish, Ruslan Salakhutdinov, and Geoffrey Hinton. 2013. Modeling documents with a Deep Boltzmann Machine. In Uncertainty in Artificial Intelligence.
 [15] Le, Quoc and Tomas Mikolov. 2014. Distributed representations of sentences and documents. In Proceedings of the 31st International Conference on Machine Learning (ICML-14).
 [16] Goller, Christoph and Andreas Kuchler. 1996. Learning task-dependent distributed representations by backpropagation through structure. In IEEE International Conference on Neural Networks.
 [17] Socher, Richard, Brody Huval, Christopher D Manning, and Andrew Y Ng. 2012. Semantic compositionality through recursive matrixvector spaces. In Proceedings of the 2012 Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural Language Learning (EMNLP).
  [18] Socher, Richard, Alex Perelygin, Jean Y Wu, Jason Chuang, Christopher D Manning, Andrew Y Ng, and Christopher Potts. 2013. Recursive deep models for semantic compositionality over a sentiment treebank. In Proceedings of the 2013 Conference on Empirical Methods in Natural Language Processing (EMNLP).
  [19] Socher, Richard, Alex Perelygin, Jean Y Wu, Jason Chuang, Christopher D Manning, Andrew Y Ng, and Christopher Potts. 2013. Recursive deep models for semantic compositionality over a sentiment treebank. In Proceedings of the 2013 Conference on Empirical Methods in Natural Language Processing (EMNLP).
  [20] Graves, Alex, Navdeep Jaitly, and A-R Mohamed. 2013. Hybrid speech recognition with deep
bidirectional LSTM. In IEEE Workshop on Automatic Speech Recognition and Understanding (ASRU).
[21] Zaremba, Wojciech and Ilya Sutskever. 2014. Learning to execute. arXiv preprint arXiv:1410.4615 .
# پا نوشت