بردار کلمات چیست و چگونه ساخته میشود؟
تصور کنید میخواهید دستگاهی بسازید که نوعی از پردازش را روی زبان طبیعی انجام دهد، مثلا متنی را از زبانی به زبان دیگر ترجمه کند. اولین قدم این است که «کلمات» را به نحوی وارد دستگاه کنید. از طرفی با دستگاهی طرفید که جز عملیات ریاضی روی اعداد قادر به کار دیگری نیست،
پس باید روشی بیابید تا کلمات را به صورت اعداد درآورد. برای شروع میتوانید هر کلمه را با یک عدد صحیح نشان دهید که در اینصورت «لغتنامه»ای خواهید ساخت که مثلا حاوی دههزار کلمهی پرکاربرد زبانتان است و در آن جلوی هر کلمه یک عدد صحیح بین یک تا دههزار نوشته شده است. با استفاده از این لغتنامه میتوانید هر کلمه را با عدد متناظرش «رمزگذاری» کرده و یک جمله را به صورت رشتهای از اعداد صحیح وارد دستگاه کنید.
اما مدل کردن هر کلمه با یک عدد باعث میشود که دستگاه عملا اطلاعات خاصی دربارهی ماهیت کلمه دریافت نکند. مثلا ممکن است کلمهی «آب» عدد ۵۰ و کلمهی «بابا» عدد ۱۶۰۰ باشد که این عددها چیز خاصی دربارهی این کلمات به دستگاه نمیگویند. راه دیگر آن است که مثلا به جای هر کلمه هر حرف را با یک عدد نشان داد. در این صورت برای مدل کردن کلمات در زبان فارسی (بدون اعراب) تنها به ۳۲ عدد نیاز دارید، درحالی که می توانید هر کلمه را به صورت «برداری از اعداد» نشان دهید. مثلا اگر حرف «ا» را با عدد ۱ و حرف «ب» را با ۲ کدگذاری کنیم، کلمهی آب (۲،۱) و کلمهی بابا به (۱،۲،۱،۲) تبدیل میشود.
با این روش برای هر کلمه اطلاعات بیشتری را (در این مثال دربارهی شکل ظاهری کلمه و اینکه از چه حروفی ساخته شده) وارد دستگاه میکنید. هرچند با این روش هم چیزی دربارهی «معنی» کلمات به دستگاه نمیگویید. برای مثال بردار کلمهی «پلنگ» بیشتر از اینکه به بردار کلمهی «ببر» شباهت داشته باشد به بردار کلمهی «کلنگ» شبیه خواهد بود! در واقع حالت مطلوب این است که بتوان برای هر کلمه برداری ساخت که مجموعهای از خصوصیات معنایی آن کلمه را منتقل کند. مثلا بتوانیم یک بردار با تعداد زیادی عدد برای کلمهی آب بسازیم که یکی از این عددها به مایع بودن آب اشاره میکند.
اما اختصاص دادن یک عدد در این بردار تنها به مایع (یا جامد یا گاز) بودن ایدهی خوبی نیست. «معنی» یک کلمه میتواند شامل حقایق فراوانی دربارهی آن کلمه باشد که نمیتوان اهمیت آن حقایق را به همهی کلمات گسترش داد و برای هر واقعیت یک عدد در بردار اختصاص داد. ممکن است برای کلمهی «آب» مایع و جامد بودن مهم باشد، اما مثلا برای کلمهی «پدر» چنین نیست. در واقع مایع بودن یک جسم در شباهتش با سایر مایعات و تفاوتش مثلا با جامدات و گازها اهمیت پیدا میکند. بردارهای کلمات عملا با همین منطق و براساس نسبت کلمات با سایر کلمات تعریف میشوند. اینجاست که مفهوم «بردار» اهمیت پیدا میکند چون بردارها را به راحتی میتوان با هم مقایسه کرد و فاصلهشان را با هم سنجید. اما چگونه میتوان چنین بردارهایی ساخت؟
بردارهای کلمات چگونه ساخته میشوند؟
امروزه روشهای مختلفی برای ساختن بردارهای کلمات وجود دارد که همهی آنها به نحوی بدون نیاز به نظارت هستند، بدین معنی که نیاز نیست برای هر کلمه اطلاعات خاصی را به صورت دستی وارد کرد. تنها چیزی که لازم است حجم زیادی متن است. روشهای تولید بردارهای کلمات شاید از لحاظ محاسبات بعضا پیچیده باشند، اما همگی از یک ایدهی کلی برای ساختن بردارها پیروی میکنند: کلمات با معنی مشابه در محتوای (context) مشابه ظاهر میشوند. کلمهی «رئیسجمهور» را بیشتر در محتوای سیاسی و اطراف کلمات خاصی، مثل «قانون»، «بودجه» و امثالهم در متن مشاهده میکنید
کلمهی «دروازه» را در محتوای ورزشی و اطراف کلمات دیگری مثل «فوتبال»، «بازیکن» و غیره. هدف ساختن بردار برای یک کلمه هم همین است که نشان دهیم یک کلمه از نظر معنایی چقدر و از چه ابعادی به دیگر کلمات شبیه است. با همین ایدهی ساده میتوانید بردارهای کلمهی خودتان را بسازید. به عنوان مثال میتوانید برای هر کلمهی منحصربهفرد متن را جستجو کنید و مثلا دو کلمه قبل و دو کلمه بعدش را ثبت کرده و نهایتا برای کلماتتان یک جدول همرخداد (co-occurrence) بسازید.