Introduction to Word Embedding

Word Representation

Word embedding یکی از روش های represent کلمات است.که الگوریتم ما را قادر میسازد تا روابط و شباهت های بین کلمات را بصورت خودکار بفهمد. تا کنون ما برای تعریف زبان از یک دیکشنری 10000 تایی از کلمات استفاده میکردیم. و برای نشان دادن هر کلمه از یک بردار 1-hot استفاده میکردیم؛ برای مثال کلمه man کلمه 5391 در دیکشنری است و 1-hot vector آن را بصورت O5391 نشان میدهیم که index  5391 آن یک و بقیه صفر است و به همینصورت بقیه کلمات دیکشنری.

از نقاط ضعف این representation میتوان به این اشاره کرد که کلمات را بصورت یک چیز ذخیره میکند و  اجازه نمیدهد الگوریتم ان را تعمیم دهد.

برای مثال:

مدل میتواند تشخیص دهد که در جای خالی کلمه juice را قرار دهد ولی اگر جمله بعدی را هم آموزش نداده باشیم نمیتواند juice را پیش بینی کند چون apple  و orange رابطه نزدیکی نسبت ب بقیه کلمات با هم ندارند.

ضرب داخلی بین هر دو وکتور 1-hot صفر است پس فاصله اقلیدسی بین همه آن ها یکسان است.

پس بجای 1-hot representation از featurized representation  برای هر کدام از کلمات دیکشنری استفاده میکنیم.

Featurized Representation: word embedding

به اینصورت که هر کلمه در دیکشنری به طور مثال 300، feature با نوع اعشاری دارد. مثل جنسیت، سلطنتی بودن، خوراکی بودن و… .برای هر کلمه یک وکتور 300 بعدی از کلمات در نظر میگیریم و آن را با e و index آن کلمه در دیکشنری نشان میدهیم. بطور مثال feature vector کلمه man را بصورت  نشان میدهیم.

اگر مثال قبلی را در نظر بگیریم میبینیم که apple و orange ، feature های شبیه به هم زیادی دارند که generalize بین این دو کلمه برای الگوریتممان راحت تر است.به این representation، word embeddings میگوییم.

برای تجسم word embedding از الگوریتم t-SNE استفاده میکنیم تا بعدهای بردار ویژگی را به دو بعد کاهش دهیم.


همانطور که میبینیم کلمات مرتبط تر به هم نزدیکتر هستند.

استفاده از word embeddings

با یک مثال از شناسایی اسم میبینیم که چطور از feature representation هایی که از هر کدوم از لغات استخراج کردیم استفاده کنیم.

Sally Johnson اسم یک شخص است. بعد از آموزش این جمله، مدل باید بداند که

“Robert Lin is an apple farmer” شامل Robert Lin به عنوان یک اسم است.

حالا اگر مدل را با جمله “Robert Lin is a durian cultivator” تست کنیم، شبکه باید اسم ها را تشخیص حتی با وجود اینکه کلمه durian را در طی آموزش ندیده باشد. این توانایی word representation است. الگوریتم هایی که از یادگیری به وسیله word embedding استفاده میکنند میتوانند میلیاردها لغت بدون برچسب را بررسی کند و بازنمایی آنهارا یاد بگیرد.

Transfer learning and word embedding
  1. یاد دادن word embedding از یک متن خیلی بزرگ ( 1 تا 100 میلیارد لغت)
    • یا دانلود embedding های از قبل اموزش داده شده
  2. میتونیم برای task دیگه ای ک خیلی کوچکتر است از transfer embedding استفاده کنیم.
  3. به عنوان قسمت اختیاری میتوانیم با افزودن داده های جدید، Word embedding رو finetune هم کنیم.

یک ویژگی مثبت word embedding نسبت به 1-hot کاهش ابعاد ورودی است. بردار 10000 بعدی 1-hot در مقایسه با بردار 300 بعدی ویژگی!

رابطه word embedding و face encoding

Word embedding رابطه جالبی با taskهای face recognition دارد:

در این مسئله ما هر کدام از تصاویر را به یک وکتور encode کردیم و شباهت این وکتورها را بررسی کردیم. در اینجا words encoding وembedding معنی مشابهی دارند.

در word embedding ما برای هر کدوم از کلماتی ک در دیکشنری وجود دارند یک representation داریم بر خلاف image encoding که ما هر تصویر جدید را به یک وکتور n بعدی map میکنیم.

خواص word embedding

یکی از خواص شگفت انگیز word embedding، analogy  (تناسب)  است.

جدول Word embedding زیر را در نظربگیرید:


میتونیم با استفاده از رابطه man ==> woman رابطه ؟؟ <== king  را هم استدلال کنیم؟

بردار e manو e womn از هم کم میکنیم که وکتور [-2  0  0  0] حاصل میشود. بهمین صورت برای بردار امبدینگ های king و queen بردار [-2  0  0  0] بدست میاید.این بردار را میتوانیم بردار جنسیت در نظر بگیریم!

مسئله را به صورت فرمول زیر مینویسیم:

بیان بالا را به صورت فرمول ریاضی میتوانیم بصورت زیر بنویسیم:

که بهترین جواب بردار امبدینگ queen است.

Cosine similarity:

میتوانیم از فاصله اقلیدسی هم به عنوان یک similarity function استفاده کنیم.

Embedding matrix

وقتی یک الگوریتم برای یادگیری word embedding پیاده سازی میکنیم، آنچه در نهایت یاد میگیرد یک ماتریس embedding است.

فرض کنید یک دیکشنری ده هزار کلمه ای داریم. الگوریتم یک ماتریس (300, 10000) بنام E میسازد.

با ضرب بردار 1-hot و ماتریس امبدینگ میتوان بردار امبدینگ را پیدا کرد.

ماتریس embedding در keras

طبقه بند متن برای نظرات فیلم ها با keras

در این مثال به پیاده سازی طبقه بند برای نظرات سایت imdbمیپردازیم.

دانلود کردن مجموعه داده imdb از datasetهای tensorflow

آرگومان num_words = 10000 ، برای ده هزار کلمه پرتکرار در دیتای اموزشی.

داده ها ب صورت یک آرایه از اعداد صحیح است که هر کدوم از این اعداد صحیح به یک واژه دلالت میکند و برچسب ها هم بصورت 1 برای نظرات مثبت و 0 برای نظرات منفی است.

با توجه به این که هر کدام از داده ها به صورت مجموعه ای از اعداد صحیح هستند، برای تبدیل دوباره به کلمات از یک تابع کمکی استفاده میکنیم:

آماده سازی داده
  • استفاده از 1-hot
  • استفاده از padding

که ما از مورد دوم استفاده میکنیم با ابعاد max_length * num_reviews.

برای مساوی کردن طول ها از pad_sequences استفاده میکنیم که طول طولانی ترین جمله را 256 در نظر میگیریم و اگر جمله کوچکتر ازین بود بقیه را با توکن <pad> پر میکنیم.

ایجاد مدل

در این مثال از rnn ها استفاده نکردیم و از یک شبکه dense ساده استفاده میکنیم.

برای loss function از binary_crossentropy  استفاده میکنیم.

آموزش مدل

ارزیابی مدل در دیتای تست

کشیدن نمودار accuracy  و loss

استفاده از history خود کراس

همانطور که میبینیم training loss کم شده ولی  validation loss ، overfit شده.

در این نمودار هم validation accuracy ، overfit شده.

برای جلوگیری از overfit میتونیم از راه های مختلفی استفاده کنیم :

  • استفاده از dropout
  • استفاده از یک embedding خوب pretrain شده
  • استفاده از شبکه های rnn
  • اسنفاده از early stopping