یك شنبه 11 خرداد 1399 |  عضویت / ورود

چگونه بفهمیم یک کلمه در یک سایت کلمه کلیدی است؟ (معرفی الگوریتم «فراوانی وزنی»)


در مطلب قبل (یعنی الگوریتمِ پیدا کردن مطالب مرتبط با یک مقاله از بین صدها مقاله) در بخشی از مطلب به این موضوع اشاره کردم که برای اینکه ما مطالب مرتبط با یک مطلب را از دیتابیس پیدا کنیم، نیاز داریم که کلمات کلیدی مطلب فعلی را به دست آوریم و اشاره کردم که برای این کار نیاز به دیتابیسی داریم به نام Go List و گفتم که چنین دیتابیسی فعلاً برای رشته کامپیوتر وجود ندارد.

اما بعد از آن مطلب، دنبال راه حلی گشتم که بشود بدون داشتن هر نوع دیتابیسی (حتی اگر دیتابیس Stop Words یا کلمات بازدارنده مثل «از» و «به» و ...) را نداشته باشیم، بتوانیم کلمات کلیدی را از داخل یک متن استخراج کنیم.

دقت کنید که اگر حتی دیتابیس Go List موجود می‌بود، ممکن بود کلماتی که در آن دیتابیس است برای یک سایت خاص کلمه کلیدی به حساب نیاید. به طور مثال فرض کنید دیتابیس کلمات کلیدی بگوید که کلمه «چاپ» در رشته کامپیوتر یک کلمه کلیدی است اما این کلمه در سایتی مانند سایت ما واقعاً کلمه کلیدی نیست! ما اصلاً در مورد چاپ صحبت خاصی نداشته‌ایم! این موضوع نشان می‌دهد که کلمات کلیدی یک مطلب یا سایت باید از طریق خود آن مقاله یا مقالات آن سایت به دست آید.

در این مطلب قصد دارم روشی را معرفی کنم که با استفاده از آن می‌توان تا حد زیادی کلمات بازدارنده (Stop Words) و کلمات نیمه بازدارنده (یا Semi-Stop Words: کلماتی مانند «ترمیم» و «قدیمی» در عنوان «آموزش ترمیم عکس قدیمی در فتوشاپ») و کلمات کلیدی (یا Go List یا Keywords: کلماتی مانند «آموزش» و «عکس» و «فتوشاپ» در عنوان «آموزش ترمیم عکس قدیمی در فتوشاپ») را از طریق مطالب سایت به دست آورد.

این روش «فراوانی وزنی» یا TF-IDF نام دارد:

TF-IDF مخفف Term Frequency - Inverse Document Frequecy و به معنی «فراوانی کلمه-عکسِ فراوانی سند» است.

در مورد این روش به خوبی در این مقاله انگلیسی و ترجمه‌ی آن توضیح داده شده است:

در این شیوه به لغات یک وزن بر اساس فراوانی آن در سند داده می شود. در واقع این سیستم وزن‌دهی نشان می‌دهد چقدر یک کلمه برای یک سند (مدرک) مهم است. این مساله کاربردهای بسیاری در بازیابی اطلاعات دارد. وزن کلمه با افزایش تعداد تکرار آن در متن افزایش می‌یابد، اما توسط تعداد کلمات در متن کنترل می‌شود، چرا که می‌دانیم در صورت زیاد بودن طول متن، بعضی از کلمات به طول طبیعی بیشتر از دیگران تکرار خواهند شد، اگرچه چندان اهمیتی در معنی نداشته باشند.

نتیجه محاسباتی که خواهم گفت، عددی می‌شود که tfidf نامیده می‌شود. با تغییر رنج این tfidf آن سه دیتابیس به دست خواهند آمد. به طور مثال اگر tfidf را نزدیک به 0 بگیریم، کلمات
Stop Words به دست می‌آیند. اگر این عدد را نزدیک‌ترین مقدار به بالاترین عددی که به دست می‌آید بگیریم، کلمات کلیدی به دست می‌آید و بقیه هم که کلمات نیمه-بازدارنده می‌شوند.

tfidf چطور به دست می‌آید؟

برای به دست آوردن این عدد در مورد یک کلمه، به مواد زیر نیاز دارید:

Tf : برای به دست آوردن Tf مربوط به یک کلمه در یک دیتابیس باید ببینید کدام سندها حاوی آن کلمه هستند و در هر سند آن کلمه چند بار تکرار شده است؟ ماکزیمم تعدادی که این کلمه در یک سند تکرار شده را Tf بگیرید. به مثال زیر دقت کنید:

http://img.aftab.cc/news/93/tfidf-1.png

در این مثال دو سند داریم. که تعداد تکرار کلمات آن سند مقابل هر کلمه نوشته شده. اگر شما Tf مربوط به کلمه example را بخواهید، پاسخ، ۳ خواهد بود. چون این کلمه در سند دوم بیشترین تکرار را داشته که ۳ بار بوده. Tf کلمه a برابر با ۲ می‌شود چون ۲ بار در سند اول تکرار شده.


idf: کمی سخت‌تر به دست می‌آید:

http://img.aftab.cc/news/93/tfidf-2.png

این فرمول یعنی idf به این صورت محاسبه می‌شود: لگاریتمِ [تعداد کل مقالات تقسیم بر (تعداد مقالاتی که شامل این کلمه می‌شوند+1)]

این معیار به تنهایی برای یافتن کلمات بازدارنده کافی است! فرض کنید کل مقالات شما ۱۰۰ تا باشد و کلمه‌ی «در» در همه مقالات تکرار شده باشد. در این صورت لگاریتم ۱۰۰ تقسیم بر ۱۰۰ (یعنی لگاریتم ۱) می‌شود: 0
هر گاه این معیار 0 یا خیلی نزدیک به 0 شد یعنی آن کلمه جزء کلمات بازدارنده است.

tfidf: این معیار که پارامتر تصمیم‌گیری در مورد کلیدی بودن یا نبودن یک کلمه است از طریق ضرب دو پارامتر بالا به دست می‌آید:

http://img.aftab.cc/news/93/tfidf-3.png

شما با کنترل tfidf می‌توانید انواع کلمه (کلیدی، غیرکلیدی و بازدارنده) را به دست آورید...

 

دقت کنید که به جای متن مقالات می‌توانید عنوان مقالات را هم ملاک قرار دهید. اما با توجه به اینکه تعداد تکرار یک کلمه در عنوان، معمولاً ۱ است پس Tf را 1 در نظر می‌گیریم و یعنی می‌توان آن‌را حذف کرد و فقط idf را ملاک قرار داد.

به طور مثال اگر ما بخواهیم مقالات مرتبط با همین مقاله (چگونه بفهمیم یک کلمه در یک سایت کلمه کلیدی است؟ (معرفی الگوریتم «فراوانی وزنی») را از بین حدود ۱۲۰۰ مقاله سایت به دست آوریم باید این روال را طی کنیم:

- اولاً تعداد کل مقالات را به دست می‌آوریم. (فرض کنید ۱۲۰۰ مقاله)

- تک تک کلمات عنوان را در دیتابیس جستجو کنیم. (مثلاً کلمه «چگونه» را)

- تعداد مقالاتی که هر کلمه را شامل می‌شود محاسبه می‌کنیم. (مثلاً الان کلمه «چگونه» در ۴۲ مقاله تکرار شده و کلمه «در» در ۳۱۳ مقاله)

- لگاریتم تعداد کل مقالات تقسیم بر تعداد مقالاتی که هر کلمه تکرار شده را محاسبه می‌کنیم. (مثلاً در مورد کلمه «چگونه» لگاریتم ۱۲۰۰ تقسیم بر ۴۲ می‌شود: ۱.۴ و لگاریتم «در» می‌شود: 0.5)

- هر کلمه‌ای که نتیجه‌اش نزدیک‌تر به 0 باشد یعنی کمتر کلیدی است...

 

این الگوریتم را در بخش «آموزش‌های آفتابگردان» به کار گرفتم. در پایین آموزش‌ها به مطالب مرتبط نگاه کنید... به نظر می‌رسد دقیق‌تر عمل می‌کند...

موفق باشید؛
حمید رضا نیرومند


[ارسال شده در مورخه : شنبه، 24 آبان، 1393 توسط Hamid]
[ #دانستني‌هاي IT]



بازدیدها از این مطلب: 8012 بار   امتیاز متوسط : 0  تعداد آراء: 0   امتیاز دهید:

نظرات طرح شده

نام: [ کاربر جدید ]
ایمیل:

نظر:


اجازه استفاده از تگهای HTML را ندارید


جمع عدد 6 با 5 را در كادر زیر وارد نمایید:
(این كار برای جلوگیری از فعالیت موتورهای اسپمر است)


* توجه: نظر شما بعد از بررسی، نمایش داده خواهد شد.

amirhosein                توسط amirhosein در مورخه : شنبه، 24 آبان، 1393(لینک نظر)
حمیدخان با تشکر از مقالات مفید شما.

یه سوال داشتم: آیا این روش برای تعداد مقالات کم جواب خوبی میده؟ مثلا با 100 تا مقاله؟


[ ارسال جوابیه ]

    Hamid (امتیاز : 1)
    توسط Hamid در مورخه : دوشنبه، 26 آبان، 1393
    سلام.

    اگر فقط عنوان مقالات مد نظر باشه به نظر من خوب عمل نمی‌کنه اما اگر متن مقالات هم بررسی بشه شاید بهتر عمل کنه... یعنی به عنوان اکتفا نشه و جستجوی کلمات در متن مقالات هم انجام بشه.


    [ ارسال جوابیه ]


imanmoodi                توسط imanmoodi در مورخه : شنبه، 24 آبان، 1393(لینک نظر)
جالبه


[ ارسال جوابیه ]


بهنام نيك رو (امتیاز : 0)(لینک نظر)
توسط بهنام نيك رو در مورخه : جمعه، 21 آذر، 1393
سلام.

دم همتون گرم واقعا خسته نباشيد سايت عاليييه.

اين كار خوبيه كه هر موضوعي از ابتدا و به طور مفيد آموزش داده ميشود .اميدوارم مؤفق باشيد.

فقط يه سؤال كوچيك و شايد براي شما تكراري داشتم : دانشجوي ترم يك نرم افزار دانشگاه آزاد (البته هدفم اينه كه بعد ليسانس IT ادامه بدم) برنامه نويسي خيلي علاقه دارم يه مدت (python،vb،HTML،php) كار كرده ام و الآن خيلياشو فراموش كردم و طراحيمم خوبه (الانم يه سايت طراحي بنر راه انداختم البته تازه راه افتاده) ميخواستم يه راهنمايي كوچيك بكنيد كه چيكار كنم و چه راهي برم كه مؤفق باشم.

بازم ممنون. ...


[ ارسال جوابیه ]