تشخیص شباهت متون (Text Similarity) با استفاده از الگوریتم Jaccard

مدرس: مسعود کاویانی

فرض کنید شما مسئول مرور پایان‌نامه‌های دانشجویی هستید و یک پروژه به شما سپرده شده است. در این پروژه بایستی میزان شباهتِ یک پایان‌نامه‌ی جدید را با پایان‌نامه‌های موجود در دانشگاه مقایسه کنید تا دانشگاه بتواند اطمینان حاصل کند که این پایان‌نامه یک پایان‌نامه‌ی تقلبی و کپی نیست. قطعاً شما نمی‌توانید این کار را در زمان معقول و با کیفیت معقول انجام دهید، پس احتمالاً نیاز به طراحی یک الگوریتم برای انجام این کار دارید.

برای مثال می‌خواهیم جمله‌ی شماره‌ی ۱ را با جمله‌های شماره‌ی ۲ و ۳ مقایسه کنیم:

۱. بهترین غذا در ایران، قرمه سبزی است

۲. غذاهای ایرانی، بسیار خوشمزه و البته مانند انواع قرمه‌ها بعضاً چرب هستند
۳. در مکزیک غذا و خوراکی‌ها معمولاً تند هستند

برای مقایسه‌ی میزانِ شباهت جمله‌ی ۱ با جمله‌های ۲ و ۳، ابتدا می‌توانیم کلمات را به ریشه‌ی آن‌ها تبدیل کنیم. در درسِ گذشته با ساخت و کاربرد ریشه‌ی کلمات آشنا شدیم. اجازه بدهید (به صورت نادقیق) کلمات را در جملاتِ بالا، به ریشه‌ی آن‌ها برگردانیم:

۱. به غذا در ایران قرمه سبزی است

۲. غذا ایران بسیار خوشمزه و البته مانند انواع قرمه بعضاً چرب است
۳. در مکزیک غذا و خوراکی معمولاً تند است

برای مقایسه‌ی میزان شباهت، می‌توان از معیاری به اسم معیار Jaccard استفاده کرد. فرمول محاسبه‌ی میزان شباهت Jaccard به صورت زیر تعیین می‌شود:

اجازه بدهید برای همین مثالِ بالا، شباهت جملات ۱ و ۲ را با هم طبق معیار Jaccard محاسبه کنیم. ابتدا باید محاسبه کنیم که جملاتِ ۱ و ۲ چند کلمه مشترک با هم دارند. کلمات: غذا، ایران، قرمه، است (شامل ۴کلمه) با هم مشترک هستند. سپس بایستی تعداد کل کلمات (یکتا) را حساب کنیم. کلمات: به، غذا، در، ایران، قرمه، سبزی، است، بسیار، خوشمزه، و، البته، مانند، انواع، بعضاً، چرب (شامل ۱۵ کلمه) است. پس عدد ۴ را بر ۱۵ تقسیم می‌کنیم تا در واقع تعداد کلماتِ مشترک را بر تعدادِ کلِ کلمات یکتا تقسیم کرده باشیم. عدد ۰.۲۶۶ معیار شباهت Jaccard برای جملات ۱ و ۲ بود. تصویر زیر گویای کلمات مشترک و غیر مشترکِ این دو جمله است:

معیار شباهت Jaccard

همین‌کار را برای جمله‌ی ۱ و ۳ انجام می‌دهیم. جملات ۱ و ۳ در دو کلمه، مشترک هستند و کلِ کلمات یکتای آن‌ها برابر ۱۳ عدد است. پس با تقسیم عدد ۲ بر ۱۳ مقدار ۰.۱۵۳ به دست می‌آید که این، معیارِ شباهت Jaccard برای جملات ۱ و ۳ است.

همان‌طور که به صورتِ شهودی هم مشخص هست، جمله‌ی ۱ با جمله‌ی ۲ بسیار نزدیک‌تر است تا با جمله‌ی ۳. برای همین هست که مقدارِ معیار جاکارد (Jaccard) برای جمله‌ی ۱ و ۲ بیشتر از جمله‌ی ۱ و ۳ شده است.

معیارهای دیگری نیز مانند Cosine Similarity جهت تشخیصِ شباهت بین دو جمله، موجود هستند که هر کدام کاربردها و مزایای خود را دارند.

منابع این بحث و اطلاعات بیشتر

» وب‌سایت TowardsDataScience

در صورت تمایل به یادگیری بیشتر، منابع بالا در نظر گرفته شده است. می توانید با خواندن این منابع، به یادگیری خود در این زمینه عمق ببخشید

3 دیدگاه دربارهٔ «تشخیص شباهت متون (Text Similarity) با استفاده از الگوریتم Jaccard»

  1. برای مقایسه پایان نامه اگه بخوایم از این روش استفاده کنیم که شباهت ها خیلی زیاد میشه. چون یک موضوعی رو به هر شکلی که بنویسن شباهت بسیار زیادی داره.
    اگه بخوایم دقیقا خود پاراگراف رو بسنجیم که مثلا دقیقا فلان پاراگراف با پاراگراف دیگه یکی هست یا نه، باید هر پاراگراف رو جدا جدا بررسی کنیم؟

  2. سلام وقتتون بخیر
    ممنون بابت توضیحات خوبتون یک سوال داشتم اگر یک متن را برای اموزش به مدل ساخته شده ی خود بدهیم و سپس یک جمله ی غلط به مدل خود بدهیم تا ان را اصلاح کند(مثلا جمله علی به درخت رفت….) این از چه پردازشی ( یعنی n-gram یا test similarity یا correction text یا…..) ؟ از کدوم پردازش باید استفاده کنه؟

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

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