رفتن به نوشته‌ها

استفاده از واحد‌های زبانی کوچکتر

هنگامی که از داده‌های زبانی استفاده می‌کنیم معمولا با یک توالی از کاراکترها، لغات، جملات، یا پاراگراف‌ها سروکار داریم. گاهی اوقات می‌توان از واحدهای زبانی دیگری استفاده کرد. مثلا در بحث مدل زبانی (language modeling) میشه واحدها رو در حد ۲، ۳، ۴ یا بیشتر کاراکتر (character) در نظر گرفت و اصلاحا مدل زبانی character ngram ساخت و بعد تسک مورد نظر رو انجام داد.

در زمینه کاراکترهای nتایی (ngram character) کارهای زیادی انجام شده است و بعضا نتیاج جالب و چشم‌گیری به دست آمده است. ایده‌ای هم که پشت استفاده از کاراکترهای nتایی است این است که اصلاحا best of both world رو بهره ببریم. یعنی هم مزیت لغات رو استفاده کنیم و هم مزیت کاراکترهارو. لغات واحدهای معنایی مستقل هستند که از این جهت مناسب هستند ولی از طرفی تنوع (variation) آنها بسیار زیاد است. مثلا در زبان انگلیسی حداقل ۲۰۰ هزار لغت وجود دارد. از طرفی کاراکتر واحدهای معنادار نیستند ولی تنوع آنها بسیار کم است (۲۸ تا کاراکتر انگلیسی کلا داریم). character ngram یه جورایی مزیت‌های هردو را می‌خواهد داشته باشد.

مثلا تو بحث بردارهای نهفته (embedding)، بردارهای که با کاراکترهای nتایی آموزش داده شده‌اند با بردارهایی که از خود کلمات استفاده شده است (مثل ورد۲وک و گلاو) تفاوت نسبتا زیادی خواهیم. مثلا کلمه کیمیا رو اگر در بردارهایی که از fasttext به دست آمده با بردارهایی که از Word2vec به دست آمده نتایجی که بدست میاد کاملا متفاوت است. در Fasttext کلماتی شبیه کیمیا قرار میگیرند که به نحوی تعداد کاراکترهای شبیه داشته باشند در حالی که کلمات شبیه این کلمه در ورد۲وک کاملا متفاوت خواهند شد و اسامی سایر دخترها خواهد شد (جدول پایین).

 

یکی از ایده‌های که من خیلی خوشم آمد استفاده از کاراکترهای nتایی در بحث ترجمه ماشین بود. همانطور که میدونید یکی از چالش‌هایی که در بسیاری از تسک‌های پردازش زبان وجود دارد، کلمات کم کاربرد (rare) و کلمات خارج از واژگان (out of vocabulary) هستند. بسیاری از کلمات وجود دارد که در دادگانی که ما استفاده میکنیم وجود ندارد یا خیلی کم استفاده شده‌اند. مثلا فرض کنید یک دادگان مربوط به سال ۲۰۱۰ جمع‌آوری کردید. احتمال اینکه کلمه ترامپ در آن به کار رفته باشه خیلی کم است و بخاطر همین در تسکی که انجام میدید احتمالا شما رو دچار مشکل خواهد کرد و مدل شما اون رو به درستی یاد نخواهد گرفت.

مقاله زیر برای مقابله با این چالش از کاراکترهای nتایی کمک گرفته است (به طور دقیق‌تر از subword کمک گرفته است که این subwordها در هر کلمه با یکدیگر اشتراکی ندارند). یکی از انگیزه‌های آن هم به این صورت بوده که کلماتی مثل love و loving ریشه‌های یکسانی دارند و میشه با این ایده به نحوی با این مشکل مقابله کرد. در این دو کلمه هر دو قسمت مشترک lov دارند پس شبکه میتونه از این subword استفاده کنه و این کلمات رو یاد بگیره.

علاوه بر کم کردن مشکل کلمات خارج از واژگان، استفاده از کارهای nتایی مزیت‌های دیگری به ارمغان خواهد آورد. مثلا در مدلهای sequence 2 sequence اغلب یک سقف برای تعداد کلمات در نظر میگیریم (۱۰ هزار تا ۱۰۰هزار). این تعداد از نظر بار محاسباتی سنگین محسوب میشه و تازه تمام کلمات زبان را پوشش نخواهد داد. مثلا اگر متن غلط املایی داشته باشد این موضوع عملا با ۱۰۰هزار لغت پوشش داده نخواهد شد. در صورتی که بیاییم از کاراکترهای nتایی استفاده کنیم تعداد واژگان ما به مراتب کمتر خواهد شد (چرا؟). که این باعث میشود پردازش کمتری انجام دهیم.

فارغ از نتایجی که در مقاله به دست آمده است ایده آن بنظرم جالب است و ارزش خواندن دارد. شما هم اگر کاری میشناسید که همچین ایده‌ای استفاده شده است خوشحال میشم معرفی کنید.

منتشر شده در پردازش زبان طبیعییادگیری عمیقیادگیری ماشین

اولین باشید که نظر می دهید

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

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