داده های طبقه بندی به ویژگی های ورودی اشاره دارد که یک یا چند آیتم گسسته را از مجموعه محدودی از انتخاب ها نشان می دهد. به عنوان مثال، می تواند مجموعه فیلم هایی باشد که کاربر تماشا کرده است، مجموعه کلمات در یک سند یا شغل یک شخص.
دادههای طبقهبندی به بهترین شکل از طریق تانسورهای پراکنده نمایش داده میشوند که تانسورهایی با عناصر غیر صفر بسیار کمی هستند. به عنوان مثال، اگر ما در حال ساخت یک مدل توصیه فیلم هستیم، میتوانیم یک شناسه منحصربهفرد به هر فیلم ممکن اختصاص دهیم و سپس هر کاربر را با یک تانسور پراکنده از فیلمهایی که تماشا کردهاند نشان دهیم، همانطور که در شکل 3 نشان داده شده است.
شکل 3. داده ها برای مشکل توصیه فیلم ما.
هر ردیف از ماتریس در شکل 3 نمونه ای است که تاریخچه تماشای فیلم کاربر را ثبت می کند و به عنوان یک تانسور پراکنده نشان داده می شود زیرا هر کاربر تنها بخش کوچکی از تمام فیلم های ممکن را تماشا می کند. ردیف آخر با تانسور پراکنده [1, 3, 999999] مطابقت دارد، با استفاده از شاخصهای واژگان نشان داده شده در بالای نمادهای فیلم.
به همین ترتیب، میتوان کلمات، جملات و اسناد را بهعنوان بردارهای پراکنده نشان داد که در آن هر کلمه در واژگان نقشی شبیه به فیلمهای موجود در مثال پیشنهادی ما دارد.
برای استفاده از چنین نمایشهایی در یک سیستم یادگیری ماشینی، ما به روشی نیاز داریم که هر بردار پراکنده را بهعنوان بردار اعداد نشان دهیم تا موارد مشابه معنایی (فیلمها یا کلمات) فواصل مشابهی در فضای برداری داشته باشند. اما چگونه می توان یک کلمه را به عنوان بردار اعداد نشان داد؟
ساده ترین راه این است که یک لایه ورودی غول پیکر با یک گره برای هر کلمه در واژگان خود، یا حداقل یک گره برای هر کلمه ای که در داده های شما ظاهر می شود، تعریف کنید. اگر 500000 کلمه منحصربهفرد در دادههای شما ظاهر میشود، میتوانید کلمهای را با طول 500000 بردار نشان دهید و هر کلمه را به یک شکاف در بردار اختصاص دهید.
اگر "اسب" را به ایندکس 1247 اختصاص دهید، سپس برای تغذیه "اسب" به شبکه خود، ممکن است یک عدد 1 را در 1247مین گره ورودی و 0ها را در بقیه کپی کنید. به این نوع نمایش، رمزگذاری تک داغ گفته می شود، زیرا فقط یک شاخص دارای مقدار غیر صفر است.
معمولاً وکتور شما ممکن است شامل تعداد کلمات در یک تکه بزرگتر از متن باشد. این به عنوان نمایش "کیف کلمات" شناخته می شود. در یک بردار کیسه کلمات، چندین مورد از 500000 گره ارزش غیر صفر دارند.
اما هر طور که مقادیر غیر صفر را تعیین کنید، یک گره در هر کلمه بردارهای ورودی بسیار پراکنده را به شما می دهد - بردارهای بسیار بزرگ با مقادیر نسبتاً کمی غیر صفر. نمایشهای پراکنده چند مشکل دارند که میتواند یادگیری مؤثر مدل را دشوار کند.
اندازه شبکه
بردارهای ورودی عظیم به معنای تعداد بسیار زیاد وزن برای یک شبکه عصبی است. اگر M کلمه در واژگان شما و N گره در اولین لایه شبکه بالای ورودی وجود دارد، شما وزن MxN برای آموزش آن لایه دارید. تعداد زیاد وزنه ها باعث مشکلات بیشتر می شود:
مقدار داده ها هر چه وزن مدل شما بیشتر باشد، برای تمرین موثر به داده های بیشتری نیاز دارید.
مقدار محاسبه هر چه وزن ها بیشتر باشد، محاسبات بیشتری برای آموزش و استفاده از مدل مورد نیاز است. فراتر رفتن از توانایی های سخت افزاری شما آسان است.
عدم وجود روابط معنادار بین بردارها
اگر مقادیر پیکسل کانال های RGB را به یک طبقه بندی کننده تصویر وارد کنید، منطقی است که در مورد مقادیر "بسته" صحبت کنید. آبی مایل به قرمز هم از نظر معنایی و هم از نظر فاصله هندسی بین بردارها به آبی خالص نزدیک است. اما بردار با 1 در شاخص 1247 برای "اسب" به بردار با 1 در شاخص 50430 برای "آنتلوپ" از بردار با یک در شاخص 238 برای "تلوزیون" نزدیکتر نیست.
راه حل: جاسازی
راه حل این مشکلات استفاده از embeddings است که بردارهای پراکنده بزرگ را به فضایی با ابعاد پایین تر ترجمه می کند که روابط معنایی را حفظ می کند. در بخشهای بعدی این ماژول، جاسازیها را بهطور شهودی، مفهومی و برنامهای بررسی میکنیم.