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

۱. مقدمه

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

۲. برنامه های مشابه

تقریبا تمام سرویس دهنده های ایمیل، یک سیستم کشف هرزنامه دارند و تمام نامه ها ابتدا از غربال این سامانه ها عبور می کند. به جز این برنامه هایی جدا وجود دارند که به عنوان یک Email Client عمل کرده و در این بین جلوی ورود اسپم ها را می گیرند. Spamihilator از این دسته برنامه هاست. از طرفی دیگر برنامه ها و فریمورک هایی را می توان پیدا کرد که بر روی خود وبسایت های دارای سرویس ایمیل قرار گرفته و از این سمت هرزنامه ها را غربال می کنند. Spam Assassin از جمله این برنامه هاست.

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

در کل چند راه کلی برای مقابله با هرز نامه وجود دارد. هر کدام از این راه ها خود به روش هایی متفاوت منتهی می شوند. سرویس دهنده های بزرگ عموما از ترکیبی از چند راه برای تضخیص هرزنامه استفاده می کنند.[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:داده ها:
داده ها از آرشیو وبسایت دانشگاه اقتصاد آتن به دست آمده اند و توسط . V.Mestis و I.Androutsopoulos برای مقاله ی خود برای سومین کنفرانس ضد اسپم آمریکا در سال 2006 تهیه شده اند. لینک دسترسی مستقیم به داده ها در قسمت پیوند ها قرار داده شده است. زبان داده ها انگلیسی می باشد.
ساختار این داده ها بسته به نوع ایمیل ها متفاوت است؛ به طوری که هرزنامه ها در یک قالب و ایمیل های عادی در قالبی دیگر ذخیره شده اند. همچنین اطلاعاتی در این داده ها یافت می شود (مانند تعداد افراد فرستاده شده، زمان و ...) که با توجه به این که در این پیاده سازی تنها از روش دسته بندی استفاده شده، برای ما بی معنی هستند. به همین دلیل ابتدا دو برنامه ی پایتون وظیفه دارند داده ها را "تمیز" کرده و تا حد زیادی به صورت "متن" در بیاورند.
تعداد نمونه داده های هرز نامه حدود 9000 و تعداد داده های عادی حدود 4000 است. تمامی این داده ها در مرحله اول مورد استفاده قرار نخواهند گرفت.

2:پیاده سازی (لینک به گیت هاب)

پیاده سازی این برنامه به چند قسمت تقسیم شده است که در ادامه آمده است.

2.1: مقدمات

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

2.2: طراحی و توسعه یک "برداری ساز متن" (یا برداری ساز سند Document Vectorizer)

ابتدا یک برنامه برای برداری سازی متون طراحی شده است. در این برنامه ابتدا کلمات متن جدا شده و سپس ریشه ی آنها مشخص می گردد. این عمل به این خاطر است که کلماتی مانند buy، buying، bought و ... که همگی در یک خانواده قرار می گیرند، در نهایت به یک "بعد" در فضای برداری منتهی شوند. برای این کار از یک کتابخانه به نام snowballstemmer استفاده شده است.
پیش از این کار برنامه بررسی می کند که کلمه ی یافت شده، جزو کلمات بسیار پرکاربرد زبان است یا خیر. برای مثال در زبان انگلیسی کلماتی مانند am، is، if و ... جزو واژه های بسیار پرکاربرد محسوب می شوند و در واقعیت نیز کمکی به تشخیص هرزنامه نمی کنند. برای همین برنامه این کلمات را جزو داده های آموزش خود قرار نمی دهد. لیست این کلمات از منبعی که در قسمت پیوند ها آمده گرفته شده.
به غیر از این بعضی هرزنامه نویس ها برای گمراه کردن سیستم های مبتنی بر یادگیری، حجم عظیمی از حروف و اعداد بی معنی را کنار هم قرار داده تا برنامه ی های تشخیص اسپم تصور کنند که کلمات کاملا جدید هستند و نتوانند در مورد محتوا به طور دقیق پاسخ دهند.
برای جلوگیری از این اتفاق بهترین کار داشتن لیستی از تمام کلمات موجود در زبان و مقایسه ی واژگان متن با آنها است. اما از آنجا که این عمل تقریبا غیر ممکن است و باعث می شود متن های دارای غلط املایی زیاد، هرزنامه تشخیص داده شوند، نمی تواند مورد استفاده قرار گیرد.
به همین دلیل در هنگام برداری سازی، کلماتی که ترکیبی از حروف و عدد هستند را مستقیم به یک "بعد" خاص ارجاع می دهیم.
راه دیگری که هرزنامه نویسان از آن استفاده می کنند، چسباندن تمام کلمات متن به یکدیگر بدون فاصله است تا با این روش برنامه پردازشگر گمراه شود و نتواند کلمات را به درستی تشخیص دهد.
برای مقابله با این تکنیک، تمام کلماتی که تعداد حروف آنها از حد معینی تجاوز کند در یک بعد خاص طبقه بندی می شوند. طول بردار در این بعد اختلاف طول کلمه با "حد مجاز" یاد شده است. در این صورت هرزنامه هایی که از این روش استفاده کنند به سرعت تشخیص داده خواهند شد و در واقعیت نیز تعداد کلمات از حد معینی تجاوز نخواهد کرد. این "حد مجاز" در برنامه، 15 کاراکتر انتخاب شده است.
در نهایت این قسمت برنامه متن را گرفته و یک بردار تحویل می دهد که از تعدادی بعد تشکیل شده است که هر بعد، تعداد تکرار یک "خانواده" از کلمات را نشان می دهد. در این وضعیت می توان از بردار برای آموزش برنامه و یا تشخیص هرزنامه بودن متن استفاده نمود.
برای سهولت کار با این بردار و حذف عامل "طول متن" در تصمیم گیری، تمام پیشروی های بردار در ابعاد مختلف را بر تعداد کل کلمات آن تقسیم می کنیم.

2.3: مرحله آموزش برنامه

در این مرحله قرار است خود روش Perceptron پیاده سازی شود. ابتدا یک بردار w (مشابه بردار های یاد شده در قسمت قبل و دارای همان تعداد بعد) ساخته و تمام مقادیر آن را برابر صفر قرار می دهیم. می خواهیم این بردار طوری تعیین شود که حاصل ضرب داخلی آن در بردار هر متن، در صورت هرزنامه بودن مثبت و در صورت هرزنامه نبودن منفی شود. برای این کار از الگوریتم زیر استفاده می کنیم:
الف:به ازای هر متن i در مجموعه داده های آموزشی، بردار آن را در w ضرب کرده و حاصل را yi می نامیم.
ب:به ازای هر متن متغیری به نام di تعریف کرده و مقدار آن را در صورتی که متن هرزنامه است برابر 1 و در غیر این صورت -1 قرار می دهیم.
ج: هر کدام از مولفه های بردار w را با استفاده از فرمول زیر به روز رسانی می کنیم:
w[j] = w[j] + a (d - y) yi[j]
که در آن a، ضریب یادگیری نام داشته و توسط برنامه نویس تعیین می شود. هر چه ضریب یادگیری بیشتر باشد تغییرات w بیشتر و سریع تر است اما ممکن است باعث واگرا شدن آن شود. در اینجا پس از چند بار سعی و خطا a برابر 0.3 قرار داده شده است.
این کار را تا زمانی انجام می دهیم که به ازای تمام داده های ورودی، حاصلضرب داخلی بردار w در بردار متن، در صورت هرزنامه بودن مثبت و در غیر این صورت منفی شود.
از آنجا که الگوریتم Perceptron در نهایت بر پایه این فرض بنا شده که تشخیص نامه های اسپم و عادی با استفاده از روشی "خطی" ممکن است، و از آنجا که در واقعیت این گونه نیست، ضرایب w ممکن است هیچ گاه همگرا نشوند و عمل بالا تا ابد ادامه پیدا کند. همچنین هزینه زمانی انجام خود الگوریتم بالا بسیار زیاد است. به همین دلیل این الگوریتم را تنها n بار که n را خودمان تعیین کرده ایم، اجرا می کنیم.
پس از اتمام عملیات، w ها را ذخیره می کنیم.
برنامه ی نوشته شده برای این تحقیق برای تسریع عمل ضرب برداری از چند الگوریتم خاص استفاده می کند که مبتنی بر "مرتب شده بودن" مولفه های بردار ها می باشد. در این روش هر مولفه با یک عدد نشان داده می شود و برای ذخیره سازی بردار ها، شماره مولفه و مقدار پیشروی در یک لیست به صورت یک تاپل و در حالتی مرتب شده بر اساس شماره مولفه ذخیره می شوند. اگر پیشروی یک بردار در یک بعد صفر است، مولفه ی آن بعد اصلا ذخیره نمی شود. برای محاسبه ضرب بردار ها و اعمال این چنین، از الگوریتمی مشابه کمترین زیر دنباله مشترک (LCS) استفاده می شود.

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

تا به اینجا تمام اعمال انجام شده مقدمه ای بر عمل اصلی که تشخیص هرزنامه است، بوده اند. برای این کار اکنون کافی است با برداری کردن متن جدید، ضرب داخلی آن در بردار w که قبلا ذخیره شده است را به دست آورد و علامت آن را بررسی کرد. در صورت مثبت بودن علامت، نامه ی مورد نظر هرزنامه است و در غیر این صورت عادی است.

2.5: نتایج اولیه

پس از یک دوره یادگیری اولیه با حدود 1200 نمونه هرزنامه و 2000 نمونه متن عادی با 5 بار اجرای الگوریتم یاد شده بر روی w، نمونه های جدیدی به برنامه داده شد تا عملکرد آن بررسی شود. نتیجه ی آزمایش به شرح زیر است:
از بین 2072 ورودی هرزنامه، تعداد 1142 مورد به درستی اسپم تشخیص داده شدند و باقی 930 مورد نامه ی عادی تشخیص داده شدند که حاکی از عملکرد درست 55.12 درصدی برنامه در این زمینه است.
از بین 2267 ورودی نامه ی عادی، تعداد 2237 مورد به درستی "عادی" تشخیص داده شدند. در این حالت 30 مورد به اشتباه هرزنامه تشخیص داده شدند که حاکی از عملکرد درست 98.68 درصدی برنامه در این زمینه است.

2.6: بررسی نتایج

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

2.7: آزمایش دوباره

در این آزمایش برای کم کردن عامل عدم آموزش کافی، نمونه های هرزنامه آموزشی بیشتر شده اما نمونه های نامه عادی دست نخورده باقی مانده است. همچنین تعداد بار اجرای الگوریتم به 8 افزایش پیدا کرده است. به طور کلی حدود 2100 نمونه هرزنامه و 2000 نمونه نامه عادی برای آموزش برنامه استفاده شده است. برای آزمایش نمونه هایی متفاوت با آزمایش قبلی به عنوان ورودی داده شده اند. نتیجه ی این آزمایش به شرح زیر می باشد:
از بین 1950 ورودی هرزنامه، تعداد 1686 مورد به درستی اسپم تشخیص داده شدند و باقی 498 مورد نامه ی عادی تشخیص داده شدند که حاکی از عملکرد درست 86.46 درصدی برنامه در این زمینه است.
از بین 2228 ورودی نامه ی عادی، تعداد 2091 مورد به درستی "عادی" تشخیص داده شدند. در این حالت 137 مورد به اشتباه هرزنامه تشخیص داده شدند که حاکی از عملکرد درست 93.85 درصدی برنامه در این زمینه است.

2.8: بررسی نتایج جدید

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

2.9: پیشبینی اعمال برای بهبود نتایج

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

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

۸. مراجع

  • [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. گویا بودن کد می تواند فهم آن را راحت تر کند.بهتر بود از اسامی مناسب برای متغییر ها و کامنت استفاده می کردید.
    ۲.بهتر است نام نویسندگان را به صورت فارسی در متن بیاورید و نام لاتین آن را در پاورقی بنویسید.
    ۳.استفاده از منابع بیشتر می تواند درستی کار شما را تضمین کند.
    ۴.در قسمت آزمایش هیچ چیزی را ارجاع نداده اید.آیا این روش را خودتان طراحی کرده اید؟ اگر این طور نیست بهتر است که متنتان را به مراجع ارجاع دهید.
    ۵.اگر در قسمتی از متن مخفف یک روش یا اسم را میاورید(مثل LCS ) بهتر است در پاورقی نام اصلی آن را بیاورید.

محمد عبدوس

با سلام
آزمایشات شما نتایج قابل قبولی داشت ولی لازم است به نکات زیر توجه شود :
1- یک سری از اطلاعات رو شما توی صفحه گیت هابتون نوشته بودید (به زبان انگلیسی) خوب بود اینا رو هم توی متنتون میاوردید که از کدام فولدر برای تولید داده آموزشی استفاده کردید
2- در فولدر gp محتوای ایمیل ها به صورت html آمده است که شما توضیحی در مورد حذف کردن یا نکردن تگ های html نداده اید
3- قواعد نگارشی مانند نیم فاصله ها را در متن گزارش رعایت نکرده اید
4-خوب بود مثالهایی از هرزنامه را در مورد اینکه چرا دقت برنامه تو زمینه تشخیص هرزنامه پایین است، میاوردید(در این نامه ها تعداد زیادی کلمه ی متشکل از حروف تصادفی وجود دارد که طول آنها مشابه کلمات عادی است).
5- در مورد پارامترهای آموزش برنامه هیچ توضیحی مشاهده نشد. بهتر بود با رسم شکل نحوه یادگیری در شبکه عصبی را توضیح میدادید. تعداد کل لایه ها، تعداد لایه های مخفی، تعداد نرونها و سایر پارامترها را باید در قسمت آموزش بیاورید.
6- برای ارزیابی چرا ورودی ها را جداگانه داده اید و ارزیابی کرده اید. مثلا میشد همه 2228 نامه عادی و 1950 نامه هرزنامه را به سیستم داد و ارزیابی را انجام داد .همچنین ارزیابی ها را معمولا توی جدول میاورند که خواندش آسانتر است شما هم بهتر بود برای ارزیابیها جدول رسم میکردید.
7- بهتر بود ی مقایسه ای بین کار خودتون با یک مقاله دیگر که از روش شبکه عصبی استفاده کرده است قرار میداد تا خواننده بهتر به ارزش کار شما پی ببرد.
8- بهتر بود ویژگیهایی که برای فرآیند آموزش استفاده کرده اید را به صورت یکپارچه(نه پراکنده) مینوشتید.
9- بجای کلمه عملکرد درست از کلمه صحت استفاده کنید.
10-بهتر بود در مورد نحوه اجرای برنامه و ترتیب فایلها توضیج میدادید.
از تلاشی که انجام داده اید سپاسگزارم.

تایید شده

با سلام
برخی از نکات مثبت پروژه را می توان در زیر خلاصه کرد :

  • استفاده از منابع مختلف و استفاده از آنها در پروژه

  • بیان مختصر و مفید و گویا در هر مورد که خواننده را خسته نمی کند.

  • بیان نقاط مثبت و منفی و تحلیل آنها در قسمت پیاده سازی

اما نکات کوچکی نیز وجود دارد که بهتر بود آنها رعایت می شد :

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

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

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

  • در قسمت پیوندهای مفید، لینک پردازش زبان فارسی در پایتون آمده است. با توجه به اینکه پروژه ی شما به زبان انگلیسی می باشد، به نظر می رسد قرار دادن این لینک اساسا بی معنی است.

موفق باشید

تایید شده

با سلام.
درمورد خود پروژه با توجه به نتایجی که بدست آورده‌اید باید به شما تبریک گفت! اما درمورد نوشتن توضیحات انتظار می‌رفت دقت بیشتری مبذول می‌فرمودید. دیدن جملات بدون فعل، هرچند بسیار اندک باشد، وجود یک‌فاصله به جای نیم‌فاصله بین یک کلمه و «ها»ی جمع و استفاده از " " به جای « » در جملات فارسی خواننده را از فضای علمی و پژوهشی‌ای که متن یک پروژه باید داشته باشد اندکی دور می‌کند.
در نهایت کار شما در این فاز از پروژه قابل قبول است.
به امید موفقیت شما در تکمیل کردن این پروژه