توضیح LDA و پیاده سازی آن با استفاده از Scikit learn
این الگوریتم، یکی از الگوریتم های رایج در زمینه ی topic modeling می باشد که در سال 2002 به وجود آمد.
تاپیک مدلینگ چیست ؟
تاپیک مدلینگ یکی از زمینه های محبوب در ماشین لرنینگ می باشد.تاپیک مدلینگ به معنی استخراج موضوعات از مجموعه ی اسناد موجود، می باشد.یکی از کاربردهای ابتدایی NLP، دانستن این است که مردم در مورد چه موضوعاتی درون متن های بزرگ، صحبت می کنند .به عبارت بهتر، چه اطلاعاتی درون این متن ها وجود دارد و تاپیک مدلینگ برای استخراج این اطلاعات از اسناد متنی، مورد استفاده قرار میگیرد.
فرض کنید شما در حال مطالعه ی مقاله ای در روزنامه هستید که از کلمه ی آب و هوا درون آن مقاله به صورت مکرر، استفاده شده است . در این حالت، برداشت شما این است که موضوع اصلی مقاله احتمالا در مورد آب و هوا و شرایط جوی می باشد .این کار مشابه کاری است که تاپیک مدلینگ انجام می دهد.
در واقع تاپیک مدلینگ، موضوعات را به وسیله ی دسته بندی کلمات مشابه،تولید می کند.حال 2 اصطلاح به وجود می آید .
1- تاپیک مدلینگ
2- تاپیک کلاسیفیکیشن
اگرچه این دو به هم شباهت دارند ولی دو فرایند کاملا جدا می باشند.اولی به صورت unsupervised machine learning technique است و دومی به صورت supervised technique می باشد.topic classification اغلب شامل mutually-exclusive classes می شود .به این معنی که، هر سندی فقط شامل یک موضوع می شود و توسط یک موضوع label دریافت می کند.(هیچ دو کلاسی به صورت همزمان، نمیتواند اتفاق بیفتد.) در نقطه ی مقابل، تاپیک مدلینگ به این صورت نیست و یک سند ممکن است که شامل چندین موضوع احتمالی باشد.
در واقع به دلیل این که تاپیک مدلینگ بر اساس توزیع احتمالی کار می کند،یک سند منتی می تواند توزیع احتمالی ای روی چندین موضوع، داشته باشد. به این معنی که یک متن برای مثال، 50% به جغرافیا 30% به گردشگری و 20% به غذا مرتبط است.
برای تاپیک مدلینگ الگوریتم های متعددی وجود دارد . از قبیل Non-Negative Matrix Factorization(NMF), Latent Semantic Analysis or Latent Semantic Indexing(LSA or LSI) و Latent Dirichlet Allocation یا همان LDA .ما در این جا به بررسی LDA می پردازیم .
ایده ی اصلی LDA این است که اسناد از ترکیب تصادفی چندین موضوع، به وجود آمده اند و موضوعات هم از ترکیب چندین کلمه تشکیل شده است.حال فرض کنید شما چندین هزار مقاله دارید و از موضوعات این مقاله ها هم اطلاعی ندارید. شما به مقالاتی در ارتباط با حیوانات احتیاج دارید.خواندن تمام این مقالات برای پیدا کردن مقالات مرتبط با موضوع حیوانات کار بسیار مشکلی است . حال به مثال زیر توجه کنید.
فرض کنید 4 مقاله دارید. مقاله ی اول در مورد حیوانات، مقاله ی دوم در مورد ژنتیک، مقاله ی سوم در مورد کامپوتر، مقاله ی چهارم در مورد ژنتیک و حیوانات.به عنوان یک انسان، شما به راحتی می توانید موضوعات را بر اساس کلمات درون آنها از هم تفکیک کنید . اما اگر هزار مقاله ی هزار خطی داشتید دیگر به این سادگی قادر به تفکیک نبودید. کامپیوتر ها به کمک LDA ، قادر به انجام چنین کاری می باشند .
تا به حال با کاربرد LDA آشنا شده ایم . حال نوبت آن است که ببینیم LDA چگونه کار می کند .
نحوه ی عملکرد LDA
ابتدا به شکل گرافیکی LDA نگاهی خواهیم انداخت و سپس به فرمول محاسبه ی احتمال LDA می پردازیم .
در شکل بالا، 6 پارامتر مشاهده می شود . آلفا و اتا نماینده ی توزیع دریکله می باشند . هرچه آلفا بزرگ تر باشد، هر سند احتمالا موضوعات بیشتری را شامل میشود و در نقطه ی مقابل، هرچه آلفا کوچک تر باشد، هر سند احتمالا تعداد کمتری موضوع را در بر میگیرد .
مشابه آلفا، هرچه مقدار اتا بزرگ تر باشد، احتمالا موضوعات کلمات بیشتری را در بر میگیرد و در نقطه ی مقابل، هرچه اتا کمتر باشد موضوعات احتمالا کلمات کمتری را در بر میگیرد.
بتا و تتا نماینده ی توزیع چندجمله ای و z نماینده ی شاخه ای از موضوعات و w نماینده ی شاخه ای از کلمات می باشد.
سمت چپ فرمول بیانگر احتمال سند متنی می باشد.در سمت راست فرمول 4 عبارت وجود دارد . عبارت اول و سوم مربوط به پیدا کردن موضوعات است . عبارت دوم و چهارم مربوط به پیدا کردن کلمات در مقالات است .دو عبارت اول سمت راست فرمول مربوط به توزیع دریکله و دو عبارت باقی مانده مربوط به توزیع چند جمله ای می باشد .
فرض کنید در شکل بالا و درون مثلث سمت چپ، دایره های آبی بیانگر مقالات مختلف می باشد.حال اگر ما مقالات را بر اساس موضوعات مختلف توزیع کنیم به شکل مثلث سمت راست در خواهند آمد . مقالات بسته به درصد شامل شدن موضوع، به سمت رئوس مثلث حرکت خواهند کرد.این فرایند توسط عبارت اول سمت راست فرمول بالا، انجام می شود.(اولین عبارت متعلق به توزیع دریکله). حال ما از توزیع چند جمله ای (عبارت سوم سمت راست فرمول بالا) برای تولید موضوعات بر اساس درصد بدست آمده از عبارت اول، استفاده می کنیم .
حال بعد از پیدا کردن موضوعات، خواهیم فهمید که کدام کلمات بیشترین ارتباط را با این موضوعات دارند.این کار توسط عبارت دوم سمت راست فرمول بیان شده(عبارت دوم توزیع دریکله)، انجام می شود.
همان طور که در شکل زیر می بینید، موضوعات بر اساس کلمات توزیع شده اند.
حال ما از توزیع چند جمله ای دیگر(عبارت چهارم) استفاده خواهیم کرد، برای پیدا کردن کلماتی که مرتبط تر با آن موضوعات هستند و با استفاده از توزیع دریکله، کلمات را با احتمال آنها تولید خواهیم کرد . این فرایند چندین بار اتفاق خواهد افتاد. بنابراین ما کلماتی را خواهیم یافت که ارتباط بیشتری با موضوعات دارند و میتوانیم مقالات را بر اساس آن موضوعات توزیع کنیم .
پیاده سازی LDA با استفاده از Scikit learn
ابتدا dataset مورد نظر را بارگذاری میکنیم . برای دریافت dataset از این لینک میتوانید اقدام کنید.
در این مرحله ماتریس TF-IDF برای داکیومنت موردنظر را ایجاد می کنیم.همچنین فرایند توکن کردن و حذف کلمات ایست (stopwords) هم انجام شده است .
حال مدل LDA را با تعداد موضوع موردنظر به وجود می آوریم و مدل را روی داده های آماده شده فیت می کنیم.
بعد از فیت کردن، باید موضوعات را از component matrix استخراج کنیم.
خروجی به شکل زیر خواهد بود . همانطور که می بینید، 5 موضوع از هم تفکیک شده و 7 کلمه ای که بیشترین ارتباط را با هر موضوع دارند. استخراج شده است .
مطلبی دیگر از این انتشارات
دستهبندی(classification) و خوشهبندی(clustering)؛ مفاهیم و تفاوتها
مطلبی دیگر از این انتشارات
کشف اشیاء در تصویر R-CNN و Fast R-CNN و Faster R-CNN و YOLO
مطلبی دیگر از این انتشارات
Unsupervised learning vs Self-supervised learning