تشخیص هرزنامه

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

# مقدمه
امروزه ایمیل به یکی از رایج ترین ابزارهای ارتباطی در زندگی روز مره بشر تبدیل شده است. این ارتباط میتواند یک مکالمه ساده دوستانه باشد ویا یک موضوع مهم تجاری. ایمیل متدی سریع و ارزان قیمت برای برقراری این ارتباط است متاسفانه همین عمومیت و سادگی استفاده ازایمیل باعث شده تا موردسوء استفاده هرزنامه نویسان و کلاهبرداران اینترنتی قرار بگیرد ، [7] مسئله ای که روزی کم اهمیت جلوه می نمود ، امروزه به معضلی جدی برای میلیون ها کاربر ایمیل بدل شده است و استفاده از ابزار ومتدهایی برای شناسایی و فیلترهرزنامه ها ضرورتی غیراقبل انکار است .  نمودار زیر موضوعات اصلی هرزنامه ها را نشان می دهد .
![توضیح تصویر](http://www.jpprufino.com/wp-content/uploads/2008/01/spam.png)

تاکنون فیلترهای ضدهرزنامه مختلفی عرضه شده اند که اکثر آنها براساس تطبیق قوانین ثابت عمل میکنند .قوانین این سامانه ها به صورت دستی توسط کاربر تعیین می شوند و شامل ویژگی ها و مشخصات ثابت نامه های الکترونیکی نامعتبر یا هرزنامه هستند و عمل حذف هرزنامه براساس آنها انجام می شود مثلاً فیلترهای استفاده شده در یاهو که کاربر نشانی هایی را به عنوان فرستنده هرزنامه معرفی کرده و سرویس دهنده نامه های الکترونیکی براساس نشانی های معرفی شده ، هر نامه الکترونیکی دریافتی از آنها را جداگانه ذخیره یا حذف می کند. 
روشهای دیگر استفاده از فهرست های سیاه [^Black list] یا سفید ، استفاده از واژه های کلیدی ، فیلترهای قانون-پایه [^Rule-Based] و غیره هستند. اغلب این این روش ها با استفاده از ویژگی های موجود در سرپیام نامه های الکترونیکی ، هرزنامه ها را شناسایی و فیلتر می کنند .این روش ها بدون نیاز نرم افزار فیلترکردن ، توسط سرویس دهندگان پست الکترونیکی استفاده می شوند.
اشکال چنین روشهایی این است که قوانین آنها ثابت بوده و باید توسط کاربر تعیین شود و فرستندگان هرزنامه نیز می توانند با ترفند های مختلفی این فیلترها را فریب داده و هرزنامه های خویش را از آنها عبور دهند.
برخی برای فیلتر کردن هرزنامه ها به صورت کارا ، تنها از یک روش استفاده نمی کنند ، بلکه تعدادی از روش ها با هم ترکیب می شوند تا به دقت بیشتری دست پیدا کنند . برای مثال spam assassin که یک فیلتر متن باز است ، از روشهای تحلیلی سرپیام[^Header] ، فهرست سیاه ، فیلتر بیزین و فیلتر های مشارکتی به طور همزمان بهره می برد .

**روش های فیلتر کردن هرزنامه **

به طور کلی روش های موجود برای فیلتر کردن هرزنامه می توانند دارای قابلیت یادگیری و یا بدون این قابلیت باشند. فیلترهایی که بدون قابلیت یادگیری هستند ، عموما بر اساس تطبیق قوانین ثابت عمل میکنند .که این قوانین اکثراً به صورت دستی و توسط کاربر تعیین می شوند .ولی روش های مبتنی بر قابلیت یادگیری ، با یادگیری ویژگی های هرزنامه ها ، سعی در فیلتر کردن آنها می کنند .از جمله  شیوه های محبوب در سالهای اخیر ، شناسایی بر اساس محتوای[^content based] هرزنامه است ، که می توان آن را نوعی دسته بندی متن[^Text classification] به حساب آورد.
در نتیجه روش های موجود برای فیلتر کردن هرزنامه ها را میتوان به سه دسته زیر تقسیم کرد که در هر دسته ، این امکان وجود دارد تا بتوان فیلتری با قابلیت یادگیری و یا بدون این قابلیت طراحی نمود.

1. فیلتر درسطح شبکه :
اغلب این روش ها با استفاده از از ویژگی های موجود در سرپیام نامه های الکترونیکی ، هرزنامه ها را شناسایی و فیلتر میکنند . این روش ها بدون نیاز به نرم افزار فیلتر کردن ، توسط بسیاری از سرویس دهندگان پست الکترونیکی ، استفاده می شوند . در این سطح فیلتر های بسیاری طراحی شده اند که مهمترین آن ها فهرست سیاه و سفید است . 

2. فیلتر در سطح سرور: 
این گونه فیلتر ها با شناسایی هرزنامه ها و فیلتر کردن آن ها ، باعث صرفه جویی در اتلاف پهنای باند می شوند . همچنین چون هرزنامه ها به تعداد زیادی از کاربران فرستاده می شوند ، مسدود کردن آن ها می تواند کاهش زیادی در حجم هرزنامه نامه هایی که باید ذخیره و تحویل شوند ، داشته باشد . در این سطح هم فیلترهای بیشماری طراحی شده اند، مانند فیلتر های گروهی [^Collaborative Filters] .

3.  فیلتر در سطح کاربر نهایی[^end user] :
فیلترهای موجود در این سطح برخلاف روش های قبلی مبتنی بر دانش هستند و باید در یک مرحله تحت عنوان فراگیری ، قوانین لازم برای فیلتر کردن نامه ها را استخراج کنند . از مهمترین روش های موجود در این بخش ، فیلتر های مبتنی بر محتوا است . فیلتر های مبتنی بر محتوا سعی می کنند که با استفاده از محتوای متنی نامه تشخیص دهند که آیا یک نامه هرزنامه هست یا نه . فیلتر های مبتنی بر محتوا به دو گروه فیلتر های مبتنی بر قانون و فیلترهای مبتنی بر یادگیری ماشین تقسیم می شوند .

# کارهای مرتبط
در بخش کارهای مرتبط تمرکز خود را بر روی روش های مبتنی بر یادگیری ماشین قرار میدهیم و به بررسی چند نمونه از این روش ها در مقالات مختلف می پردازیم.

**درخت پوشای بیزین[^Bayesian Spanning Tree] :**
درخت پوشای مینیمم یک نوع درخت است که در آن به غیر از گره ریشه تمامی گره ها حداکثر دارای دو والد می باشند .[3] این نکته حائز اهمیت است که ما از تکرار کلمات در مجموعه ایمیل ها به عنوان یک ویژگی در مساله طبقه بندی استفاده می کنیم و برای اینکه ما بهترین کارایی را داشته باشیم از انتخاب زیر مجموعه ای از خصوصیات مناسب استفاده می نماییم که به عنوان انتخاب کلمات مرتبط یاد می شود. در فیلترینگ ایمیل ها این بدین معنا است که ما می خواهیم یک زیر مجموعه ای از کلمات که در شناسایی تفاوت بین ایمیل های اسپم و غیر اسپم کمک می کند را مشخص کنیم .[10]
![فرایند شناسایی ایمیل های اسپم مبتنی بر شبکه بیزین ](http://parsis.tahasys.ir/capture.jpg)
فرآیند شناسایی ایمیلهای اسپم مبتنی بر شبکه بیزین از چندین مرحله تشکیل شده است. ما آن را به سه مرحله تقسیم نموده ایم, پیش پردازش, ساخت درخت پوشای مینیمم, و در نهایت ارزیابی و نتیجه گیری. در مرحله پیش پردازش, ما تمام کلماتی اضافه که زیاد استفاده می شوند( مانند the, as, a , ...) را خارج می کنیم, کلمات را ریشه یابی کرده و تگ های HTML را قبل از پیش پردازش خارج می نماییم.
 درخت پوشای بیزین ، شکل ساده تری از شبکه های بیزین است . درسختار شبکه، کنار هر ریشه ، هر راس در نهایت می تواند دو والد داشته باشد[3]
![نمونه ای از درخت پوشای بیزین ](http://parsis.tahasys.ir/123.jpg)

**کنترل تغییر مفهوم با استفاده از خوشه بندی ترتیبی[^control of change concepts using] :**
منظور از تغییر مفهوم ، تغییرات ایجاد شده در مفهوم هدف به دلیل تغییر در توصیف نمادین مفاهیم هدف ، ایجاد مفاهیم هدف جدید و تغییر مفهوم هدف نمونه ها می باشد. در این روش با استفاده از خوشه بندی و یک معیار شباهت جدید ، نمونه های آموزشی به زیر مجموعه های مجزا تقسیم می شود .[11] سپس با استفاده از الگوریتم ژنتیک و یک تابع تناسب جدید ، ویژگی های مناسب از بردار نماینده هر زیر مجموعه استخراج می شوند . 
با ورود ایمیل جدید ، شباهت آن با زیر مجموعه ها سنجیده می شود و دسته بندی نزدیکترین زیر مجموعه به عنوان برچسب ایمیل جدید انتخاب می شود . نتایج آزمایشها نشان می دهد که این روش دارای کارایی و انعطاف پذیری بهتری نسبت به روش های موجود است و قادر است تا تغییر مفهوم را شناسایی و سیستم یادگیری را با این تغییرات به روز رسانی کند .

**شناسایی هرزنامه با استفاده از یک شبکه عصبی مصنوعی [^Artificial Neural Nets] :**
در این روش یک دیتاست  را دسته بندی [^Classify]می کنیم و روش های مختلف هرزنامه نویسان  [^Spammer ] را بررسی کرده و با استفاده از یک پرسپترون چندلایه  [^Multi Layer Perceptrons ] متداول آموزش میدهیم [^Training] .یکی از محاسن این روش سهولت استفاده برای تمام ورودی و خروجی ها می باشد و از معایب آن میتوان به کند بودن و نیز تعداد زیاد نمونه ها اشاره نمود .[12]
همچنین از روش یادگیری log-sigmoid استفاده می شود که مقدار پیوسته ای  [^Continuos Range]بین صفر و یک به ما میدهد. که هرچه به صفر نزدیک می شویم عدم هرزنامه [^non spam] و به یک نزدیک میشویم ، هرزنامه بودن را به ما نشان میدهد.[13]
# آزمایش‌ها

**معرفی برنامه فیلتر کردن اسپم**
برنامه ای به زبان C#.net طراحی شده است که در این برنامه تلاش شده است :
+   پیام های هرز  را از پیام های اصلی تشخیص دهیم . 
+   روش استفاده از بانک اطلاعاتی کلمه های هرز (کلمه های خوب یا بد) را پیاده سازی نماییم.
+ کلمات مربوط به موضوعات مختلف را دسته بندی نموده و هر کدام دارای درجه اولویت هرزگی باشند . مثلا کلمات مربوط به فروشگاه اینترنتی دارای درجه بالایی بوده و درنتیجه بیشتر کلمات آن به عنوان هرزنامه شناخته شده ، اما نامه هایی با محتوای تورهای مسافرتی از درجه عضویت کمتری برخوردارند و احتمال هرزنامه بودنشان چون کمتر است ، در یک جدول دیگر نگهداری خواهند شد .

**الگوریتم کار**
برای اینکه بتوانیم پیام های هرز را از پیام های سالم تفکیک کنیم نیاز به الگوریتم زیر داریم :

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

2-وقتی پیامی دریافت شد ، نرم افزار متن داخل آنرا بخواند و کلمات آنرا با بانک اطلاعاتی مقایسه کند . اگر در این پیام از کلمات مشابه استفاده شده باشد جای آن کدی منحصر به فرد قرار دهد . در غیر اینصورت پیام سالم خواهد بود .
![توضیح تصویر](https://boute.s3.amazonaws.com/130-TEST2.JPG)

3-اگر کلمه خوب باشد در خروجی کلمات با معنی خوب قرار بگیرد . در غیر اینصورت در خروجی کلمات با معنی بد قرار بگیرد . این خود تفکیک کلمات خوب و بد است .

4-اگر کلمه هرز یافت شد کد قرار گرفته به همراه کد بانک اطلاعاتی آن کلمه در فایل خروجی ذخیره شود .

*توضیح اینکه در این قسمت سعی شده کار انجام شده توسط کد برنامه به صورت توضیحی در بین خود کد متن قرار داده شود تا فهم و اجرای کد راحت تر صورت گیرد .*
**ایجاد کلاس** **SpamFilter** **برای فیلتر کردن کلمات هرز**
برای ایجاد این کلاس به کدهای زیر احتیاج داریم :
[پیوند به کد ایجاد کلاس SPAM FILTER](https://github.com/alirezataei/code1/blob/master/CreateClass1)

**کلاس** **Corpus** **برای خواند متن و مقایسه کلمات با بانک اطلاعاتی**
[پیوند به کد کلاس Corpus](https://github.com/alirezataei/code1/blob/master/Corpus)
در این برنامه ابتدا بانک اطلاعاتی برنامه بارگذاری  [^Load]شده  و در حافظه موقت[^Cash] نگهداری می شود . سپس متن مورد نظر بارگذاری می شود . توسط تابع های تعریف شده در این کلاس ها ابتدا لغات هرز که با بانک اطلاعاتی مطابقت دارند از متن حذف مشود و جای آنها کدی قرار می گیرد . کلمات خوب و بد توسط الگوریتم پاول گراهام از هم جدا می شود . 
گاهی اوقات احتمال می رود که یک کلمه هرز باشد که با توجه الگوریتم پاول گراهام مشخص می شود . 
یکی دیگر از نقاط قوت برنامه ، این است که یک قابلیت یادداشت کلمات هرز در یک فایل متنی در خروجی میسر می باشد .
[دریافت کدها و لیست های پروژه](http://parsis.tahasys.ir/pr.zip)
![](http://parsis.tahasys.ir/w1.jpg)
![](http://parsis.tahasys.ir/w2.jpg)
![](http://parsis.tahasys.ir/w3.jpg)
![](http://parsis.tahasys.ir/w4.jpg)
# کارهای آینده

# مراجع
[1] Liu, Bing, and Lei Zhang. "A survey of opinion mining and sentiment analysis." Mining Text Data. Springer US, 2012. 415-463.
[2] Blanzieri, Enrico, and Anton Bryl. "A survey of learning-based techniques of email spam filtering." Artificial Intelligence Review 29.1 (2008): 63-92.
[3] Hui-Fang Shi ,Tie-GanG Fan ,Guo-Li Zhang “Documents Categorization Based on Bayesian Spanning Tree”, Proceedings of the fifth International Conference on Machine Learning and Cyberneticsm,Dalian , pp 1072-1075 (2006)
[4] W. W . Cohen , “ Learning Rules that Classify e-mails”,In Spring Symposium on Machine Learning in Information Access , Stanford , California (1996)
[5] Karl-Michael Schneider,“A Comparison of Event Model For naïve Bayes Anti-Spam E-Mail Filtering”, In Proceedings of the 10th conference of the European Chapter of Association for Computational Linguistics,Budapest,Hungary, pp 307-314 (April 2003)
[6] Aleksander Kolez and Joshua Alspector, “ SVM-based filtering of e-mails spam with content-specific missclassification costs”,In proceeding of the TextDM'01 Workshop on Text Mining -helad at the 2001 IEEE International Conference on Data Mining (2001)
 [7] I. Androutsopoulos et al. , “Learning to Filter Spam E-mail : A Comparison of naïve bayesian and a Memory-based Approach ”,In proceeding of the Workshop on Machine Learning and Textual Information Access”, Pages :1-13 (2000)
[8]  Georgios Sakkis , Ion Androutosopoulos , Georgios Paliouras , Vangelis Karkaletsis,Constantine D. Spyropoulos and Panagiotis Stamatopoulos, “Stacking classifiers for anti-spam filtering of e-mail ”,In proceeding of 6th  Conference on Emprical Methods in Natural Language Processing (EMNLP 2001),pages :44-50 (2001)
[9] Mehran Sahami,Susan Dumais,David Heckerman and Eric Horvitz,”A bayesian approach to filtering junk  e-mail”,In learning for text categorization : papers from the 1998 workshop ,Madison,Wisconsin (1998)
[10] Geiger d. ,”An entropy-bases learning algorithm of bayesian conditional trees”,In proceeding of the conference of uncertainty in artificial intelligence,pages:92-97 (1993)
[11] F.  Fdez-Riverola,  E.L.  Iglesias,  F.  Diaz,  J.R.  Mendez, J.M.  Corchado.  Applying  lazy  learning  algorithms  to tackle  concept  drift.  Expert  Systems  with  Applications, Vol. 33,pp. 36–48, 2007.
[12] D. Puniškis ,R. Laurutis , R. Dirmeikis-An Artificial Neural Nets for Spam e-mail Recognition - ELECTRONICS AND ELECTRICAL ENGINEERING - ISSN 1392 – 1215   2006. Nr. 5(69) -ELEKTRONIKA IR ELEKTROTECHNIKA
[13] Principe C. J., Euliano R. N., Neural and Adaptive Systems: Fundamentals Through Simulations // John Wiley and Sons, 2000. – USA. – P. 350-400.



# پیوندهای مفید
+ [پردازش زبان فارسی در پایتون](http://www.sobhe.ir/hazm)
+ [یادگیری ماشین در پایتون](http://scikit-learn.org)
+ [راهنمایی برای استخراج ویژگی از متن زبان طبیعی](http://pyevolve.sourceforge.net/wordpress/?p=1589)
+ [رده‌بندی متون با استفاده از کتابخانه Scikit-learn](http://scikit-learn.org/stable/auto_examples/document_classification_20newsgroups.html)
+ [UCI Spambase Data Set ](https://archive.ics.uci.edu/ml/datasets/Spambase)
+ [WEBSPAM-UK2007 dataset](http://chato.cl/webspam/datasets/uk2007/)
+ [Natual Language Processing Course - Text Classification](https://class.coursera.org/nlp/lecture/preview)
+ [NLTK](http://nltk.org)
+ [Enron Spam-Detection Dataset](http://nlp.cs.aueb.gr/software_and_datasets/Enron-Spam/index.html)