سلام
مکانیزم اتنشن روی هر مجموعه ای ازجمله صوت، تصویر، متن و ... قابل اعمال هست:
فرض کنید یک متن فارسی داریو و قرار است اون رو به انگلیسی ترجمه کنید:
مبدا: من یک پسر خوب هستم
مقصد: I am a good boy
خب در روش NLP باید هر کدوم از کلمات مبدا و مقصد رو بصورت یک بردار ریاضی مدل کنیم تا بتونیم به یک شبکه اعمالشون کنیم. یک راه استفاده از روش one-hot-embedding است یعنی کل دادگان زبان مبدا و مخرچ رو جمع آوری کنیم و به هرکدوم یک بردار one-hot بدیم، مثلا تو مثال بالا در زبان مبدا می تونیم ازین نمایش استفاده کنیم:
من = [1,0,0,0,0]
یک = [0,1,0,0,0]
پسر = [0,0,1,0,0]
خوب = [0,0,0,1,0]
هستم = [0,0,0,0,1]
به همین ترتیب برای زبان مقصد این کار رو میکنیم، البته اگه تعداد لغات خیلی زیاد باشه روش one-hot-coding خیلی خوب نیست و از روشهای word-embedding استفاده میکنیم. حالا بریم سراغ بحث اتنشن، در ساختار Autoencoder باید بردارهای زبان مبدا رو به ترتیب به یک LSTM بدیم و بعد اتمام لغات اون رو به عنوان حالت اولیه به LSTM دیکدر بدیم تا یک جمله از زبان مقصد رو تولید کنیم. اگر از روش اتنشن استفاده کنیم بجای اینکه صرفا خروجی انکدر رو در مرحله اخر به ورودی دیکدر بدیم در هر لحظه برای تولید یک کلمه خروجی از زبان مقصد می تونه یک ترکیب خطی از حالات نهان LSTM دیکدر رو بگیرهو بهتر بتونه خروج رو تولید کنه مثلا برای تولید کلمه boy میتونه به لایه نهان در لحظات اعمال لغات "من" و "پسر" نگاه کنه تا اولا بفهمه باید کلمه "boy" رو تولید کنه و ثانیا اینکه فاعل مفرد و "boys" تولید نکنه
و به همین ترتیب میره جلو و اگر طول جمله ورودی زیاد باشه ممکنه بردار نهان لایه اخر انکدر خیلی خوب نتونه اطلاعات لحظات اول رو حفظ کنه و عملکردمون خوب نباشه