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

۱. مقدمه

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

۲. کارهای مرتبط

در کل چند راه کلی برای مقابله با هرز نامه وجود دارد. هر کدام از این راه ها خود به روش هایی متفاوت منتهی می شوند. سرویس دهنده های بزرگ عموما از ترکیبی از چند راه برای تضخیص هرزنامه استفاده می کنند.[4]

۳. دسته بندی

در این راه، مشخصات ذاتی ایمیل مورد توجه واقع می شوند و تصمیم گیری بر اساس آنها صورت می گیرد. تقریبا تمام این روش ها از یادگیری ماشین استفاده می کنند. چند روش پرکاربرد در این زمینه عبارتند از:

1:استفاده از دسته بند های بیزین (Naive Bayes Classifiers)

یکی از اولین راه ها برای مقابله با هرزنامه، استفاده از فیلتر های مبتنی بر دسته بند های بیزین است. در این روش که بر مبنای رخداد مجموعه مواردی که از پیش دیده شده کار می کند، کلمات متن مهم ترین نقش را بازی می کنند. احتمال وقوع بعضی کلمات در هرزنامه بالاتر است و این نوع دسته بند ها بر همین اساس دست به تشخیص ایمیل های تبلیغاتی می کنند. این روش، عموما در صورتی یک نامه را اسپم می داند که میزان کلماتی که در چنین ایمیل هایی بیشتر یافت می شوند، از حد معینی تجاوز کند.
فیلتر های مبتنی بر دسته بند های بیزین برای تشخیص هرزنامه محبوب هستند اما برای کارکرد درست نیاز به آموزش کافی دارند. در این شرایط کلمات بسته به میزان وقوعشان در اسپم ها با استفاده از روابط آماری بیز، طبقه بندی می شوند و در هنگام کارکرد حقیقی از این دانسته های کسب شده استفاده می کنند.[1] از نظر ریاضی اثبات شده است که این روش کمترین میزان ریسک کلی مورد انتظار را داراست.[2]

2:استفاده از روش نزدیک ترین k همسایه (k-Nearest -neighbor یا به اختصار k-NN)

در این روش به طور کلی تعدادی "گره" وجود دارد که می توان با استفاده از الگوریتمی مشخص، "فاصله" ی هر دو "گره" را به عنوان معیاری از تفاوت آنها به دست آورد. در نهایت برای دسته بندی هر "گره" ی جدید، فاصله ی آن با تمام "گره" های کنونی را محاسبه کرده و به دسته بندی نزدیک ترین k "گره" توجه می کنیم (k در اینجا یک ثابت است که بسته به نوع مسئله باید از پیش مشخص شود). گره ی جدید در بیشترین دسته بندی مشاهده شده در این k گره قرار می گیرد.
در مسئله ی ما "گره" ها همان نامه های الکترونیکی هستند و جمعا دو دسته بندی وجود دارد. هرزنامه و نامه عادی.
اولین مشکل استفاده از این روش تعیین معیاری برای تشخیص "فاصله" بین دو ایمیل است. در این مورد می توان از بردار تعدد کلمات و فاصله ی اقلیدسی بین آنها استفاده کرد (فاصله ی همینگ). هر کلمه ی خاص یک "بعد" را مشخص می کند و بردار کل ایمیل به تعداد تکرار آن کلمه در این بعد حرکت می کند.
از مشکلات دیگر این الگوریتم کندی فرآیند یادگیری است. اگر پیاده سازی این مرحله بدون استفاده از الگوریتم های خاص صورت بگیرد، پیچیدگی این کار از مرتبه n به توان 2 خواهد بود که در آن n تعداد نمونه های موجود است.[2]
برای تسریع فرآیند، می توان تنها گره هایی را به مجموعه تست اضافه کرد که به اشتباه دسته بندی شده اند. این کار از شلوغی بیش از حد داده ها و کند شدن فرآیند تشخیص جلوگیری می کند.[3]

3:استفاده از شبکه های عصبی

شبکه های عصبی در کل مجموعه ای از چندین "تابع ساده ریاضی" هستند که در نهایت تابعی پیچیده را تشکیل می دهند. خروجی هر کدام از این توابع می تواند ورودی تابعی دیگر باشد. در نهایت با استفاده از خروجی ها باید بتوان دسته بندی نمونه را مشخص نمود.
خود شبکه های عصبی به دو دسته تقسیم می شوند. روشی که بیشتر در تشخیص هرزنامه به کار می رود روش Perceptron است.
در این روش هر تابع ساده ما به شکل یک ترکیب خطی از ورودی هاست. خروجی ما عددی حقیقی است. قرار داد می کنیم که خروجی مثبت به معنی عادی بودن ایمیل و اعداد منفی بیانگر اسپم بودن آن می باشند. ضرایب این ترکیب خطی در ابتدا مقادیری دلخواه تعیین می شوند. حال باید یکی از نمونه هایی به تابع داده شود که حدس تابع در مورد هزنامه بودن یا نبودن آن اشتباه است. در این صورت تمام ضرایب ترکیب خطی یاد شده بر پایه این ورودی و با استفاده از رابطه ای مشخص اصلاح می گردند. این عمل را چندین بار تکرار می کنیم. اگر به وضعیتی برسیم که تمام نمونه ها درست دسته بندی شده بودند، کار را متوقف می کنیم. در صورتی که رابطه بین ورودی های مسئله خطی نباشد، ضرایب واگرا خواهند شد و الگوریتم به نتیجه نمی رسد.
شبکه های عصبی نیاز به زمان و نمونه های زیاد برای تکمیل فرآیند یادگیری دارند. همچنین لزومی ندارد که رابطه بین ورودی ها واقعا خطی باشد و ممکن است روش کلا به نتیجه نرسد.[2] در عوض پیاده سازی آن ها کار مشکلی نیست و نتیجه ی حاصله در صورت وجود عموما خوب و مطلوب است.

4:استفاده از ماشین پشتیبانی برداری (Support Vector Machine) یا به اختصار (SVM)

ایده ی کلی این الگوریتم شبیه روش Perceptron است که در بالا توضیح داده شد. به این شکل که در این روش نیز ما تابعی خطی را پیدا می کنیم که با گرفتن ورودی ها، هرزنامه بودن را مشخص کند. تفاوت اینجاست که در این روش ما تابع خطی را به یک معادله تبدیل کرده و با استفاده از آن تلاش می کنیم "خط مرز" بین نمونه های عادی و اسپم را پیدا کنیم. در این صورت برای تشخیص وضعیت هر ایمیل جدید، کافیست ببینیم که آیا این ایمیل کدام طرف خط مذکور است (با توجه به n بعدی بودن فضا، خط یاد شده در اصل خود یک فضای n-1 بعدی با معادله ی مشخصه ی خاص خود است).
پیاده سازی این روش اندکی مشکل است اما حاصل عموما بهتر از روش های بالا می باشد.[2][1]

5:استفاده از توکن های متنی متمایل (Biased Text Token)

در این روش تمام نمونه های "اسپم" در یک گروه و تمام نمونه های عادی در گروهی دیگر قرار می گیرند. برای هر کدام از گروه ها، تعداد کلمات به طور جدا ذخیره می شود به طوری که به ازای هر کلمه دو متغیر "تعداد در خوب ها" و "تعداد در اسپم ها" را خواهیم داشت. حال با تقسیم این تعداد بر کل تعداد ایمیل ها، می توان ضریبی برای تشخیص به دست آورد. نکته ی مهم تر این است که می توان با ضرب یک عدد ثابت در هر کدام از این دو ضریب، ارزش آن را افزایش داد و به عبارتی تشخیص را به سمت "خوب" بودن و یا "بد بودن" متمایل (بایاس) کرد. در نهایت با استفاده از تمام این ضرایب و استفاده از ترکیبی خطی می توان احتمال اسپم بودن یک ایمیل را به دست آورد.[4]

۴. تشخیص بر اساس رفتار[4]

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

1:مدل زمان فرستادن ایمیل

این مدل رفتار کاربر فرستنده را بررسی می کند و به دنبال موارد غیر عادی می گردد. برای مثال، تاریخچه ساعات فرستادن ایمیل توسط یک کاربر مورد بررسی قرار میگیرد. کاربری که در 24 ساعت شبانه روز در حال فرستادن ایمیل است پتانسیل بالایی برای ربات بودن (Spam-bot) دارد. در این روش نیز بر اساس تاریخچه ی یک کاربر، می توانیم یک "فاصله" بین رفتار عادی او و رفتار ایمیل کنونی پیدا کنیم و از آن برای تشخیص هرزنامه بودن استفاده کنیم.

2:مدل کاربران مشابه

بعضی افراد از بیش از یک ایمیل استفاده می کنند. پیدا کردن تشابه بین دو ایمیل و در نهایت حدس یکسان بودن کاربر آنها باعث می شود که ما بتوانیم در مورد واقعی بودن خود ایمیل ها حدس هایی بزنیم و از دسته بندی اشتباه ایمیل های عادی پرهیز کنیم.

3:مدل گیرنده های ایمیل

همچنین می توان افرادی که عموما از یک کاربر خاص ایمیل دریافت می کنند را ذخیره کرد و با این روش تغییرات غیر عادی در گیرنده های ایمیل یک کاربر را متوجه شد. برای پیاده سازی این وضعیت می توان از ماتریس ها استفاده کرد. حتی می توان الگو هایی برای ارسال همزمان چند ایمیل توسط یک کاربر پیدا کرد (برای مثال ممکن است یک کاربر چند بار در روز مطالبی را به چند ایمیل خاص بفرستد) و از آن برای تصمیمی گیری های بیشتر استفاده کرد.

4:مدل اهمیت متقابل کاربران

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

5:مدل تشخیص گروه ها

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

6:مدل های دیگر

می توان از المان های دیگر ایمیل ها مانند لینک ها و فایل های پیوست برای تشخیص رفتار غیر عادی یا عدم آن استفاده کرد. در نهایت روش های تشخیص رفتاری باید همراه یک روش تشخیص محتوایی استفاده شوند تا اثربخشی واقعی داشته باشند.

۵. آزمایش‌ها

۶. کارهای آینده

۷. مراجع

  • [1] W.A.Awad, and S.M.ELseufi. "Machine Learning Methods for Spam Email Classification" (2001)

  • [2] Konstantin Tretyakov. "Machine Learning Techniques in spam filtering" (2004)

  • [3] W.Yerazunis, Fidelis Asis, Christian Siefkes and Shalendra Chhabra. "Sorting Spam with K-Nearesr-Neighbor and Hyperspace classifiers"

  • [4] Sholmo Hershkop. "Behaivior based email analysis with Application to Spam Detection"

۸. پیوندهای مفید

محمد عبدوس

با عرض سلام و آرزوی توفیق روز افزون. از زحماتی که در این فاز پروژه انجام داده اید تشکر میکنم.بررسی دقیقی داشتید. نکاتی را که باید در این فاز رعایت میکردید در زیر آورده شده است:
1- از ابزارهایی که در زمینه تشخیص هرزنامه وجود دارد صحبتی نشده بود
2- ترجمه support vector machine برابر است با ماشین بردار پشتیبان که اشتباه نوشته شده بود.
از توجهتون ممنونم