بردار کلمات چیست و چگونه ساخته میشود؟

بردار کلمات چیست و چگونه ساخته میشود؟

کامپیوتر چگونه «معنی» کلمات در متن را بدون دخالت انسان یاد میگیرد؟منبع عکس: deeplearning.irنویسنده: نیما نبی‌زاده، شهره حدادانتصور کنید می‌خواهید دستگاهی بسازید که نوعی از پردازش را روی زبان طبیعی انجام دهد، مثلا متنی را از زبانی به زبان دیگر ترجمه کند. اولین قدم این است که «کلمات» را به نحوی وارد دستگاه کنید. از طرفی با دستگاهی طرفید که جز عملیات ریاضی روی اعداد قادر به کار دیگری نیست، پس باید روشی بیابید تا کلمات را به صورت اعداد درآورد. مثلا می‌توانید هر کلمه را با یک عدد صحیح نشان دهید که در اینصورت «لغت‌نامه»‌ای خواهید ساخت که مثلا حاوی ده‌هزار کلمه‌ی پرکاربرد زبانتان است و در آن جلوی هر کلمه یک عدد صحیح بین یک تا ‌ده‌هزار نوشته شده است. با استفاده از این لغت‌نامه می‌توانید هر کلمه را با عدد متناظرش «رمزگذاری» کرده و یک جمله را به صورت رشته‌ای از اعداد صحیح وارد دستگاه کنید.اما مدل کردن هر کلمه با یک عدد باعث می‌شود که دستگاه عملا اطلاعات خاصی درباره‌ی ماهیت کلمه دریافت نکند. مثلا ممکن است کلمه‌ی «آب» عدد ۵۰ و کلمه‌ی «بابا» عدد ۱۶۰۰ باشد که این عددها چیز خاصی درباره‌ی این کلمات به دستگاه نمی‌گویند. راه دیگر آن است که مثلا به جای هر کلمه هر حرف را با یک عدد نشان داد. در این صورت برای مدل کردن کلمات در زبان فارسی (بدون اعراب) تنها به ۳۲ عدد نیاز دارید، درحالی که می توانید هر کلمه را به صورت «برداری از اعداد» نشان دهید. مثلا اگر حرف «ا» را با ۱ و حرف «ب» را با ۲ کدگذاری کنیم، کلمه‌ی آب (۲،۱) و کلمه‌ی بابا به (۱،۲،۱،۲) تبدیل می‌شود. با این روش برای هر کلمه اطلاعات بیشتری را (در این مثال درباره‌ی شکل ظاهری کلمه و اینکه از چه حروفی ساخته شده) وارد دستگاه می‌کنید. هرچند با این روش هم چیزی درباره‌ی «معنی» کلمات به دستگاه نمی‌گویید. برای مثال بردار کلمه‌‌ی «پلنگ» بیشتر از اینکه به بردار کلمه‌ی «ببر» شباهت داشته باشد به بردار کلمه‌ی «کلنگ» شبیه خواهد بود! در واقع حالت مطلوب این است که بتوان برای هر کلمه برداری ساخت که مجموعه‌ای از خصوصیات معنایی آن کلمه را منتقل کند. مثلا بتوانیم یک بردار با تعداد زیادی عدد برای کلمه‌ی آب بسازیم که یکی از این عددها به مایع بودن آب اشاره می‌کند. اما اختصاص دادن یک عدد در این بردار تنها به مایع (یا جامد یا گاز) بودن ایده‌ی خوبی نیست. «معنی» یک کلمه می‌تواند شامل حقایق فراوانی درباره‌ی آن کلمه باشد که نمی‌توان اهمیت آن حقایق را به همه‌ی کلمات گسترش داد و برای هر واقعیت یک عدد در بردار اختصاص داد. ممکن است برای کلمه‌ی «آب» مایع و جامد بودن مهم باشد، اما مثلا برای کلمه‌ی «پدر» چنین نیست. در واقع مایع بودن یک جسم در شباهتش با سایر مایعات و تفاوتش مثلا با جامدات و گازها اهمیت پیدا می‌کند. بردارهای کلمات عملا با همین منطق و براساس نسبت کلمات با سایر کلمات تعریف می‌شوند. اینجاست که مفهوم «بردار» اهمیت پیدا می‌کند چون بردارها را به راحتی می‌توان با هم مقایسه کرد و فاصله‌شان را با هم سنجید. اما چگونه می‌توان چنین بردارهایی ساخت؟امروزه روش‌های مختلفی برای ساختن بردارهای کلمات وجود دارد که همه‌ی آنها به نحوی بدون نیاز به نظارت هستند، بدین معنی که نیاز نیست برای هر کلمه اطلاعات خاصی را به صورت دستی وارد کرد. تنها چیزی که لازم است حجم زیادی متن است. روش‌های تولید بردارهای کلمات شاید از لحاظ محاسبات بعضا پیچیده باشند، اما همگی از یک ایده‌ی کلی برای ساختن بردارها پیروی می‌کنند: کلمات با معنی مشابه در محتوای (context) مشابه ظاهر می‌شوند. کلمه‌ی «رئیس‌جمهور» را بیشتر در محتوای سیاسی و اطراف کلمات خاصی، مثل «قانون»، «بودجه» و امثالهم در متن مشاهده می‌کنید و کلمه‌ی «دروازه» را در محتوای ورزشی و اطراف کلمات دیگری مثل «فوتبال»، «بازیکن» و غیره. هدف ساختن بردار برای یک کلمه هم همین است که نشان دهیم یک کلمه از نظر معنایی چقدر و از چه ابعادی به دیگر کلمات شبیه است. با همین ایده‌ی ساده می‌توانید بردارهای کلمه‌ی خودتان را بسازید. به عنوان مثال می‌توانید برای هر کلمه‌ی منحصر‌به‌فرد متن را جستجو کنید و مثلا دو کلمه قبل و دو کلمه بعدش را ثبت کرده و نهایتا برای کلماتتان یک جدول هم‌رخداد (co-occurrence) بسازید.تصور کنید که متن شما شامل جملات زیر است:فصل بهار فصل سبز شدن زمین است. پاییز فصل سوم سال است. سال با فصل بهار آغاز میشود. برگ درختان در فصل پاییز زرد میشود. فصل دوم کتاب را به پایان رساندم.برای این جملات در نهایت چیزی مثلا شبیه جدول زیر خواهید داشت (حروف ربط و اضافه نادیده گرفته شده) که نشان میدهد مثلا کلمه‌ی بهار ۳بار در محتوای دوکلمه‌ایِ کلمه‌ی فصل در متن وجود داشته، یعنی در متن، بدون در نظر گرفتن حروف اضافه، به دو کلمه قبل و دو کلمه بعد از کلمه‌ی بهار که نگاه کردیم در کل ۳ بار کلمه‌ی فصل را مشاهده کردیم.مثالی از یک جدول هم‌رخداد که نشان میدهد مثلا کلمه‌ی بهار ۳ بار در محتوای دوکلمه‌ایِ کلمه‌ی فصل در متن وجود داشته، یعنی در متن به دو کلمه قبل و دو کلمه بعد از کلمه‌ی بهار که نگاه کردیم کلا ۳ بار کلمه‌ی فصل را مشاهده کردیم. سطرها (یا ستون های) این جدول می‌توانند بردارهای کلمات شما باشد، مثلا بردار کلمه‌ی بهار می‌شود (۰،۱،۱،۳) و این اعداد به نحوی فاصله‌ی کلمه‌ی بهار از دیگر کلمات متن را نشان می‌دهند. با همین روش آماری ساده شما برای هر کلمه در یک لغت‌نامه‌ی محدود یک بردار ساخته‌اید که رابطه‌ی بین آن کلمه و کلمات دیگر در متن را دربردارد. مثلا در این جدول میتوان مشاهده کرد که کلمات «بهار» و «پاییز» با توجه به اینکه در مجاورت کلمات مشابهی قرار گرفته اند در مقایسه با کلمه‌ای مانند «کتاب» بردارهای شبیه‌تری دارند. در عمل البته ماجرا کمی از این پیچیده‌تر است، چون شما با تعداد زیادی از کلمات، مثلا صد هزار کلمه‌ی منحصربه‌فرد سروکار دارید و ذخیره و پردازش یک بردار صد هزار عددی برای هر کلمه میسر و مقرون‌به‌صرفه نیست. از طرفی بسیاری از ابعاد چنین جدول بزرگی شامل اطلاعات غیر مفید و تکراری است. پس محققان از برخی روش‌های جبری استفاده می‌کنند که در حین اینکه کمترین اطلاعات ممکن را از دست می‌دهیم ابعاد این جدول صد هزار در صدهزار عددی را کم کرده و هر کلمه را با بردار کوچک‌تری مثلا با ۳۰۰ عدد نشان دهند.به روشی که شرح داده شد مدل‌ معنایی توزیع شده (Distributed Semantic Model) میگویند. این روشِ کم و بیش قدیمی همچنان هم پرکاربرد است و بردار کلمات معروف دانشگاه استنفورد معروف به GloVe بر اساس همین روش ساخته میشوند. امروزه روشهای دیگری عموما بر پایه یادگیری عمیق برای ساختن بردارهای کلمات نیز استفاده می‌شوند که نهایتا همگی از همان ایده‌ی پیدا کردن نسبت کلمات با محتوایشان در متن پیروی میکنند. مثلا در الگوریتم Skip-gram مدل تلاش میکند با دیدن هر کلمه در متن کلمات اطرافش (قبل و بعدش) را پیش‌بینی کند. (اگر به جزئیات الگوریتم‌های یادگیری عمیق در ساخت بردارهای کلمات علاقه مندید میتوانید به اینجا یا اینجا سر بزنید).بردارهای کلمات اگر بر روی حجم انبوهی از متن آموزش داده شوند اطلاعات معنایی را به طرز شگفت‌انگیزی فراگیری میکنند، به گونه‌ای که بازنمایی کلمات فراگرفته شده در حقیقت قواعد نحوی و معنایی را به شیوه‌ی ساده‌ای ثبت و ضبط میکند. رابطه‌ی بین کلمات در فضای معنایی (semantic space) با استفاده از رابطه‌ی بین بردارهای کلمات قابل مشاهده است. مثلا اگر بردار ساخته شده برای کلمه‌ی «سیب‌ها» را از بردار کلمه‌ی «سیب» کم کنید نتیجه کم و بیش با حاصل تفریق بردار «ماشین» از بردار «ماشینها» خواهد بود. چنین نتیجه‌ای نه تنها برای جمع و مفرد که برای روابط پیچیده‌ی معنایی بین کلمات مثل جنسیت نیز قابل مشاهده است. مثلا فاصله‌ی بین بردار کلمه‌ی «مرد» و «زن» برابر با فاصله بردار کلمه‌ی «پادشاه» و«ملکه» یا کلمه‌ی «عمو» و «عمه» است.بردارهای کلمات می‌توانند روابط معنایی بین کلمات را نشان دهند، مثلا فاصله‌ی بین بردار کلمه‌ی «مرد» و «زن» برابر با فاصله بردار کلمه‌ی «پادشاه» و«ملکه» یا کلمه‌ی «عمو» و «عمه» است. (منبع عکس: deeplearning.ir)
روش‌های یادگیری بردارهای کلمات به سرعت در حال پیشرفت هستند و امروزه این ایده که برای هر کلمه یک بردار ثابت داشته باشیم طرفداران کمتری دارد. دلیل این امر آن‌ است که بسیاری از کلمات، مثل کلمات همنام (Homonyms)، در محتوای متفاوت معانی مختلفی می‌دهند و نمی‌توان یک معنی ثابت برای آنها در نظر گرفت. حتی انسان هم صرفا با دیدن کلمه‌ی «شیر» و بدون نگاه کردن به مابقی متنی که این کلمه در آن ظاهر شده نمی‌تواند تشخیص دهد که معنی این کلمه اشاره به کدام شیر (خوردنی، در جنگل یا حمام) دارد. برای همین امروزه بردارهای کلمات به صورت ثابت برای یک کلمه ذخیره نمی‌شوند و با توجه به محتوای متنی که کلمه در آن قرار دارند می‌توانند تغییر کنند. به چنین بردار کلماتی contextualized word embeddings گفته میشود.یادگیری خودکار بردارهای کلمات نشان از نظم بی‌نظیر نهفته در زبان طبیعی دارد که اجازه می‌دهد مدل‌ها چنین اطلاعاتی را بدون دخالت انسان فرا بگیرد. بیاد می‌آوریم تمام دانشی که در اینجا با آن مواجه هستیم صرفا با نگاه به توالی تعداد زیادی از کلمات در متن بدست آمده است بدون آنکه هیچ اطلاعات دیگری مبنی بر معنا یا روابط این کلمات به مدل ارائه شود.چنین روش‌های یادگیری بدون نظارتی هرچند فواید فراوانی دارد اما در عین حال می‌توانند منجر به ایجاد مشکلاتی شوند. مثلا بردارهای آموخته شده با این روشها سوگیری‌های موجود در متن را بازتولید می‌کنند. اگر با متنی مواجه باشید که در آن اسامی مونث در محتوای خاصی، مثلا مربوط به مشاغلی مثل خانه‌داری، و اسامی مذکر در محتوای دیگری،‌ مثلا مربوط به مشاغل مهندسی وجود دارند،‌ دور از انتظار نخواهد بود که بردار کلمات اسامی مونث به بردار کلمه‌ی «خانه‌دار» نزدیکتر و بردار اسامی مذکر به بردار کلمه‌ی «مهندس» نزدیکتر باشد. در مطلبی دیگر به تفصیل به چنین سوگیری‌هایی در مدل‌های پردازش زبان طبیعی پرداختیم و با مثال‌هایی نشان دادیم وجود این سوگیری‌ها منجر به چه مشکلاتی در عملکرد این مدل‌ها می‌شوند و چگونه میتوان با این سوگیری‌ها مقابله کرد.

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *