امبدینگ وابسته به جمله
جواب کوتاه
توی بردار کلمههای قدیمی، هر کلمه فقط یه بردار داشت؛ «شیر» چه خوراکی بود چه جنگلی چه شیر آب، یه نقطه بود. مدلهای زبانی امروزی بردار هر کلمه رو با کلمههای دیگهی همون جمله قاطی میکنن، برای همین «شیر» توی «شیر آب رو ببند» یه بردار میگیره و توی «شیر توی جنگل میدوه» یه بردار دیگه. به این میگن امبدینگ وابسته به جمله.
یه کلمه، سه معنی
وقتی یکی بهتون میگه «شیر رو ببند»، اصلا یاد شیر جنگل نمیافتید. چرا؟ چون بقیهی جمله رو هم شنیدید. «ببند» بهتون گفت منظور شیر آبه.
توی درس بردار کلمه دیدیم مشکل بزرگ بردار کلمههای قدیمی اینه که هر کلمه فقط یه بردار داره. «شیر» یه نقطهست، یه جایی وسط نوشیدنیها و حیوونها و چیزهای خونه. اینجا اسمش رو میذاریم «بردار ایستا»، چون هیچوقت عوض نمیشه.
از اواخر دههی ۲۰۱۰ یه راه تازه اومد: بردار هر کلمه، هر بار که توی یه جمله میاد، از نو ساخته بشه. اونوقت «شیر» توی جملهی بچه و شیر گرم، نزدیک «چای» میشینه؛ توی جملهی جنگل، نزدیک «ببر»؛ و توی جملهی شیر آب، نزدیک «در». به این میگن امبدینگ وابسته به جمله.
قاطی با همسایهها
خب حالا مدل چطور این کار رو میکنه؟ ایدهی اصلی خیلی سادهست: بردار هر کلمه رو با بردار کلمههای دیگهی همون جمله قاطی کن.
ما برای این درس یه نسخهی خیلی سادهاش رو ساختیم. اول برای چند تا جملهی کوتاه، مثل درس امبدینگ، از روی همنشینها برای هر کلمه یه بردار ایستا ساختیم. بعد برای «شیر» توی هر جمله، این سه قدم رو رفتیم:
قدم اول: بردار ایستای خود «شیر» رو برمیداریم. قدم دوم: میانگین بردار بقیهی کلمههای همون جمله رو حساب میکنیم؛ توی «شیر آب رو ببند» یعنی میانگین «آب» و «رو» و «ببند». قدم سوم: این دو تا رو با هم جمع میکنیم. نتیجه میشه «شیر این جمله».
یعنی بردار تازه یه بخشش از خود کلمه میاد و یه بخشش از جمله. اگه جمله دربارهی آب و بستن باشه، بردار «شیر» به همون سمت کشیده میشه.
آزمایش ما
۹ جملهی کوتاه نوشتیم، با ۱۸ کلمه؛ چند تا با شیر خوراکی، یکی با شیر جنگل، دو تا با شیر آب، و چند تا جملهی شبیهشون با چای و ببر و در. بعد شباهت «شیر» رو با این سه کلمه حساب کردیم، یه بار با بردار ایستا، یه بار توی هر جمله:
ردیف اول بردار ایستاست. اونجا «شیر» از همه به «چای» نزدیکتره (۰٫۶۰)، چون توی بیشتر جملهها شیر خوراکی بود. یعنی بردار ایستا معنی پرتکرار رو برنده میکنه و بقیه رو کمرنگ.
ولی توی جملهی جنگل، «شیر» به «ببر» رسید (۰٫۶۸)؛ و توی «شیر آب رو ببند»، نزدیکترین شد «در» (۰٫۴۴)، که توی بردار ایستا از همه دورتر بود (۰٫۱۸). با همین قاطی کردن ساده، هر «شیر» رفت سمت معنی خودش.
شیر با خودش
یه سوال دیگه هم داریم: «شیر» توی جملههای مختلف، چقدر شبیه خودشه؟
دو تا «شیر» که هر دو خوراکیان، شباهتشون ۰٫۹۶ شد؛ دو تا شیر آب، ۰٫۹۳. ولی شیر جنگل با بقیه، فقط حدود ۰٫۷۴. یعنی هممعنیها نزدیک هم موندن و معنیهای مختلف از هم فاصله گرفتن؛ همون چیزی که میخواستیم.
دقت کنید که هیچکدوم صفر نشد. هنوز همه «شیر»ان و یه بخش از بردارشون مشترکه. این توی مدلهای واقعی هم دیده شده: یه پژوهش ۲۰۱۹ نشون داد بردار یه کلمه توی جملههای مختلف هنوز از بردار دو کلمهی مختلف شبیهتره.
اولین بردارهای وابسته به جمله
این ایده از کجا شروع شد؟ پیش از اینکه ترنسفورمرها همهجا رو بگیرن.
یه پژوهش ۲۰۱۸ اولین بار بردارهای وابسته به جمله رو برای همه به کار برد. اونها یه مدل زبانی رو، با شبکهی بازگشتی، دو طرفه آموزش دادن: یه بار از اول جمله به آخر، یه بار از آخر به اول. بردار هر کلمه از حالت درونی هر دو ساخته میشد؛ پس «شیر» هم چیزی رو میدید که پیش از خودش اومده و هم چیزی رو که بعدش میاد. اون پژوهش گفت این بردارها هم دستور جمله رو نگه میدارن هم معنی رو، و با چندمعنایی کنار میان؛ و وقتی به مدلهای اون روز اضافه شدن، توی شش کار مختلف، مثل جواب سوال و تشخیص احساس، نتیجهها خیلی بهتر شد.
همون سال خانوادهی فقط رمزگذار با ترنسفورمر همین کار رو، با توجه بهجای شبکهی بازگشتی، خیلی بهتر انجام داد.
توی مدل واقعی
آزمایش ما خیلی ساده بود. مدلهای زبانی واقعی همین ایده رو دارن، ولی سه تا فرق مهم:
اول، شروع از جدول. هر توکن اول از واژهنامهی مدل یه بردار ایستا میگیره؛ درست مثل قدم اول ما.
دوم، وزنهای فرقدار. ما همهی همسایهها رو با وزن برابر قاطی کردیم. مدل واقعی برای هر کلمه حساب میکنه کدوم همسایه مهمتره و سهم اون رو بیشتر میکنه؛ مثلا برای «شیر»، کلمهی «آب» خیلی مهمتر از «رو»ست. به این کار میگن توجه، و اینکه کدوم همسایه چقدر مهمه رو مدل خودش موقع آموزش یاد گرفته. درسهای مسیر ترنسفورمر نشون میدن توجه دقیقا چطور حساب میشه. جای کلمهها توی جمله هم جدا به مدل داده میشه، تا ترتیبشون گم نشه.
سوم، لایه روی لایه. این قاطی کردن یه بار انجام نمیشه؛ توی لایههای زیادی، پشت سر هم، تکرار میشه، و هر بار همهی کلمهها با هم بهروز میشن. همون پژوهش ۲۰۱۹ دید که توی لایههای بالاتر، بردار یه کلمه خیلی بیشتر به جملهاش وابستهست، و کمتر از ۵ درصد تفاوتهای بردار یه کلمه توی جملههای مختلف رو میشه با یه بردار ایستا توضیح داد. یعنی بیشتر چیزی که مدل دربارهی یه کلمه میدونه، از جملهاش میاد.
کدوم لایه رو برداریم
وقتی بردار هر کلمه توی هر لایه یه کم فرق داره، کدومش رو برداریم؟
همون پژوهش ۲۰۱۸ یه چیز مهم دید: بهتره فقط لایهی آخر رو برنداریم؛ بهجاش ترکیبی از همهی لایهها، که وزن هر لایه رو خود کار یاد میگیره. چون لایههای مختلف چیزهای مختلفی نگه میدارن، و هر کار به یه ترکیب خاص نیاز داره. پژوهش ۲۰۱۹ هم که بالاتر دیدیم، گفت لایههای بالا به جمله وابستهترن؛ یعنی هر چی بالاتر، بردار کلمه بیشتر از جملهش خبر داره.
چرا مهمه
وقتی هر کلمه معنی خودش رو توی همون جمله داره، مدل کارهایی رو بهتر انجام میده که به فهم دقیق جمله بستگی دارن. پژوهشهای ۲۰۱۸ که این ایده رو جا انداختن، توی کارهایی مثل جواب دادن به سوال از روی یه متن، فهمیدن اینکه یه جمله از جملهی دیگه نتیجه میشه یا نه، و تشخیص احساس یه متن، از روشهای قبلی خیلی بهتر شدن.
و مهمتر از همه، مدلهای زبانی بزرگ امروزی روی همین ایده ساخته شدن. وقتی از یه چتبات میپرسید «شیر رو چطور تعمیر کنم؟»، اون میتونه از «تعمیر» بفهمه منظورتون شیر آبه، نه شیر جنگل؛ چون بردار «شیر» توی جملهی شما با «تعمیر» قاطی شده.
چند نکته
- ایستا یعنی یه بردار برای همیشه. معنی پرتکرار برنده میشه.
- وابسته به جمله یعنی هر بار از نو. هر جمله، یه بردار تازه.
- راهش قاطی کردن با همسایههاست. با وزنهایی که مدل یاد گرفته.
- چند لایه، پشت هم. هر لایه، وابستهتر به جمله.
- جمله رو کامل بنویسید. هر چی جملهتون روشنتر، مدل معنی رو بهتر میگیره.
با این درس ایستگاه «معنی به عدد» تموم شد. ایستگاه بعد یه نگاه کلی به داخل مدل میندازه: از متن تا احتمال، مسیر داخل مدل.
جمعبندی. آنچه از این درس با خودتان میبرید.
- قدیمی: هر کلمه یه بردار، همهی معنیها قاطی.
- امروزی: هر کلمه توی هر جمله یه بردار تازه.
- راهش: قاطی کردن با کلمههای همون جمله.
- سهم هر همسایه رو مدل خودش یاد میگیره.
- این کار توی چند لایه، پشت هم، تکرار میشه.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.