Loading...

बेहतर बायेसियन फ़िल्टरिंग

Original

जनवरी 2003

(यह लेख 2003 स्पैम सम्मेलन में एक वार्ता के रूप में प्रस्तुत किया गया था। यह उस काम का वर्णन करता है जो मैंने A Plan for Spam में वर्णित एल्गोरिदम के प्रदर्शन में सुधार करने के लिए किया है, और मैं भविष्य में क्या करने की योजना बना रहा हूँ।)

यहाँ प्रस्तुत करने के लिए मेरी पहली खोज एक अनुसंधान पत्रों के आलसी मूल्यांकन के लिए एक एल्गोरिदम है। बस जो चाहें लिखें और किसी पिछले काम का उल्लेख न करें, और क्रोधित पाठक आपको उन सभी पत्रों के संदर्भ भेजेंगे जिन्हें आपको उल्लेख करना चाहिए था। मैंने यह एल्गोरिदम ''A Plan for Spam'' [1] के स्लैशडॉट पर आने के बाद खोजा।

स्पैम फ़िल्टरिंग पाठ वर्गीकरण का एक उपसमुच्चय है, जो एक अच्छी तरह से स्थापित क्षेत्र है, लेकिन बायेसियन स्पैम फ़िल्टरिंग के बारे में पहले के पत्र 1998 में एक ही सम्मेलन में दिए गए दो पत्र प्रतीत होते हैं, एक पैंटेल और लिन [2] द्वारा, और दूसरा माइक्रोसॉफ्ट रिसर्च [3] के एक समूह द्वारा।

जब मैंने इस काम के बारे में सुना तो मैं थोड़ा आश्चर्यचकित था। यदि लोग चार साल पहले बायेसियन फ़िल्टरिंग पर थे, तो फिर हर कोई इसका उपयोग क्यों नहीं कर रहा था? जब मैंने पत्र पढ़े तो मुझे पता चला कि क्यों। पैंटेल और लिन का फ़िल्टर दोनों में से अधिक प्रभावी था, लेकिन यह केवल 92% स्पैम को पकड़ता था, जिसमें 1.16% झूठे सकारात्मक थे।

जब मैंने एक बायेसियन स्पैम फ़िल्टर लिखने की कोशिश की, इसने 99.5% स्पैम को पकड़ा, जिसमें 0.03% से कम झूठे सकारात्मक [4] थे। जब दो लोग एक ही प्रयोग करने की कोशिश करते हैं और उनके परिणाम बहुत भिन्न होते हैं तो यह हमेशा चिंताजनक होता है। यहाँ विशेष रूप से चिंताजनक है क्योंकि उन दो संख्याओं के सेट विपरीत निष्कर्ष दे सकते हैं। विभिन्न उपयोगकर्ताओं की विभिन्न आवश्यकताएँ होती हैं, लेकिन मुझे लगता है कि कई लोगों के लिए 92% फ़िल्टरिंग दर और 1.16% झूठे सकारात्मक का मतलब है कि फ़िल्टरिंग एक स्वीकार्य समाधान नहीं है, जबकि 99.5% और 0.03% से कम झूठे सकारात्मक का मतलब है कि यह है।

तो हमें इतनी भिन्न संख्याएँ क्यों मिलीं? मैंने पैंटेल और लिन के परिणामों को पुन: उत्पन्न करने की कोशिश नहीं की है, लेकिन पत्र पढ़ने से मुझे पाँच बातें दिखाई देती हैं जो शायद इस अंतर का कारण हैं।

एक तो यह है कि उन्होंने अपने फ़िल्टर को बहुत कम डेटा पर प्रशिक्षित किया: 160 स्पैम और 466 गैर-स्पैम ईमेल। फ़िल्टर प्रदर्शन अभी भी इतनी छोटी डेटा सेट के साथ बढ़ता रहना चाहिए। इसलिए उनकी संख्याएँ शायद उनके एल्गोरिदम के प्रदर्शन का सटीक माप नहीं हो सकतीं, न ही सामान्य रूप से बायेसियन स्पैम फ़िल्टरिंग का।

लेकिन मुझे लगता है कि सबसे महत्वपूर्ण अंतर शायद यह है कि उन्होंने संदेश हेडर को नजरअंदाज किया। स्पैम फ़िल्टर पर काम करने वाले किसी भी व्यक्ति के लिए, यह एक विकृत निर्णय प्रतीत होगा। और फिर भी, मैंने जिन पहले फ़िल्टरों को लिखने की कोशिश की, मैंने भी हेडर को नजरअंदाज किया। क्यों? क्योंकि मैं समस्या को साफ रखना चाहता था। तब मुझे मेल हेडर के बारे में ज्यादा जानकारी नहीं थी, और वे मेरे लिए बेतरतीब चीजों से भरे हुए लगते थे। यहाँ फ़िल्टर लेखकों के लिए एक सबक है: डेटा को नजरअंदाज न करें। आपको लगेगा कि यह सबक उल्लेख करने के लिए बहुत स्पष्ट होगा, लेकिन मुझे इसे कई बार सीखना पड़ा है।

तीसरा, पैंटेल और लिन ने टोकन को स्टेम किया, जिसका अर्थ है कि उन्होंने उदाहरण के लिए ''mailing'' और ''mailed'' दोनों को मूल ''mail'' में घटित किया। वे शायद महसूस करते थे कि उन्हें अपने कॉर्पस के छोटे आकार के कारण ऐसा करने के लिए मजबूर होना पड़ा, लेकिन अगर ऐसा है तो यह एक प्रकार का पूर्ववर्ती अनुकूलन है।

चौथा, उन्होंने संभावनाएँ अलग तरीके से गणना कीं। उन्होंने सभी टोकन का उपयोग किया, जबकि मैं केवल 15 सबसे महत्वपूर्ण का उपयोग करता हूँ। यदि आप सभी टोकन का उपयोग करते हैं तो आप लंबे स्पैम को चूकने की प्रवृत्ति रखते हैं, उस प्रकार का जहाँ कोई आपको अपनी ज़िंदगी की कहानी बताता है जब तक कि वह किसी मल्टीलेवल मार्केटिंग योजना से अमीर नहीं हो जाता। और ऐसा एल्गोरिदम स्पैमर के लिए धोखा देना आसान होगा: बस स्पैम शर्तों के संतुलन के लिए एक बड़ा बेतरतीब पाठ जोड़ें।

अंत में, उन्होंने झूठे सकारात्मक के खिलाफ पूर्वाग्रह नहीं किया। मुझे लगता है किसी भी स्पैम फ़िल्टरिंग एल्गोरिदम में एक सुविधाजनक नॉब होना चाहिए जिसे आप फ़िल्टरिंग दर की कीमत पर झूठे सकारात्मक दर को कम करने के लिए घुमा सकें। मैं यह गैर-स्पैम कॉर्पस में टोकन की घटनाओं की गिनती करके करता हूँ।

मुझे नहीं लगता कि स्पैम फ़िल्टरिंग को एक सीधा पाठ वर्गीकरण समस्या के रूप में देखना एक अच्छा विचार है। आप उपयोग कर सकते हैं पाठ वर्गीकरण तकनीकें, लेकिन समाधान कर सकते हैं और चाहिए इस तथ्य को दर्शाना चाहिए कि पाठ ईमेल है, और विशेष रूप से स्पैम। ईमेल केवल पाठ नहीं है; इसमें संरचना है। स्पैम फ़िल्टरिंग केवल वर्गीकरण नहीं है, क्योंकि झूठे सकारात्मक झूठे नकारात्मकों की तुलना में बहुत अधिक खराब होते हैं कि आपको उन्हें एक अलग प्रकार की त्रुटि के रूप में मानना चाहिए। और त्रुटि का स्रोत केवल बेतरतीब परिवर्तन नहीं है, बल्कि एक सक्रिय मानव स्पैमर है जो आपके फ़िल्टर को हराने के लिए सक्रिय रूप से काम कर रहा है।

टोकन

एक और परियोजना के बारे में मैंने सुना स्लैशडॉट लेख के बाद बिल येराजुनिस का CRM114 [5]। यह उस डिज़ाइन सिद्धांत का प्रतिकूल उदाहरण है जिसका मैंने अभी उल्लेख किया। यह एक सीधा पाठ वर्गीकरणकर्ता है, लेकिन इतना प्रभावी है कि यह बिना यह जाने कि यह क्या कर रहा है, स्पैम को लगभग पूरी तरह से फ़िल्टर करने में सक्षम है।

एक बार जब मैंने समझ लिया कि CRM114 कैसे काम करता है, तो यह अनिवार्य लग रहा था कि मुझे अंततः एकल शब्दों पर आधारित फ़िल्टरिंग से इस तरह के दृष्टिकोण में स्थानांतरित होना होगा। लेकिन पहले, मैंने सोचा, मैं देखूँगा कि मैं एकल शब्दों के साथ कितनी दूर जा सकता हूँ। और उत्तर है, आश्चर्यजनक रूप से दूर।

मुख्य रूप से मैं स्मार्ट टोकनाइजेशन पर काम कर रहा हूँ। वर्तमान स्पैम पर, मैंने फ़िल्टरिंग दरें प्राप्त करने में सक्षम रहा हूँ जो CRM114 के करीब हैं। ये तकनीकें मुख्य रूप से बिल की तकनीकों के लिए ऑर्थोगोनल हैं; एक आदर्श समाधान दोनों को शामिल कर सकता है।

``A Plan for Spam'' एक बहुत सरल टोकन की परिभाषा का उपयोग करता है। अक्षर, अंक, डैश, अपॉस्ट्रोफ, और डॉलर के चिन्ह घटक वर्ण हैं, और बाकी सब एक टोकन विभाजक है। मैंने केस को भी नजरअंदाज किया।

अब मेरे पास टोकन की एक अधिक जटिल परिभाषा है:

केस को संरक्षित किया गया है।

विस्मयादिबोधक चिह्न घटक वर्ण हैं।

बिंदु और अल्पविराम घटक हैं यदि वे दो अंकों के बीच होते हैं। इससे मुझे आईपी पते और कीमतें सही-सही प्राप्त करने में मदद मिलती है।

$20-25 जैसे मूल्य सीमा दो टोकन उत्पन्न करती है, $20 और $25।

जो टोकन To, From, Subject, और Return-Path पंक्तियों के भीतर, या URLs के भीतर होते हैं, उन्हें तदनुसार चिह्नित किया जाता है। उदाहरण के लिए, ''foo'' विषय पंक्ति में ''Subject*foo'' बन जाता है। (तारांकित चिह्न कोई भी ऐसा वर्ण हो सकता है जिसे आप घटक के रूप में अनुमति नहीं देते।)

ऐसे उपाय फ़िल्टर के शब्दावली को बढ़ाते हैं, जिससे यह अधिक विवेकशील बनता है। उदाहरण के लिए, वर्तमान फ़िल्टर में, विषय पंक्ति में ''free'' की स्पैम संभावना 98% है, जबकि वही टोकन शरीर में केवल 65% की स्पैम संभावना रखता है।

यहाँ कुछ वर्तमान संभावनाएँ [6] हैं:

SubjectFREE 0.9999 free!! 0.9999 Tofree 0.9998 Subjectfree 0.9782 free! 0.9199 Free 0.9198 Urlfree 0.9091 FREE 0.8747 From*free 0.7636 free 0.6546

''A Plan for Spam'' फ़िल्टर में, इन सभी टोकनों की संभावना समान होती, .7602। वह फ़िल्टर लगभग 23,000 टोकनों को पहचानता था। वर्तमान फ़िल्टर लगभग 187,000 को पहचानता है।

बड़ी संख्या में टोकनों का होना इसका नुकसान है कि चूकने की अधिक संभावना होती है। अपने कॉर्पस को अधिक टोकनों पर फैलाना छोटा करने के समान प्रभाव डालता है। यदि आप विस्मयादिबोधक चिह्नों को घटक मानते हैं, उदाहरण के लिए, तो आप अंततः सात विस्मयादिबोधक चिह्नों के साथ free के लिए स्पैम संभावना नहीं रख सकते, हालाँकि आप जानते हैं कि केवल दो विस्मयादिबोधक चिह्नों के साथ free की संभावना 99.99% है।

इसका एक समाधान वह है जिसे मैं विकृति कहता हूँ। यदि आप किसी टोकन के लिए एक सटीक मेल नहीं पा सकते हैं, तो इसे एक कम विशिष्ट संस्करण के रूप में मानें। मैं टर्मिनल विस्मयादिबोधक चिह्नों, बड़े अक्षरों, और उन पाँच चिह्नित संदर्भों में होने को एक टोकन को अधिक विशिष्ट मानता हूँ। उदाहरण के लिए, यदि मैं ''Subjectfree!'' के लिए कोई संभावना नहीं पाता, तो मैं ''Subjectfree'', ''free!'', और ''free'' के लिए संभावनाएँ देखता हूँ, और जो भी .5 से सबसे दूर है उसे ले लेता हूँ।

यहाँ विकल्प हैं [7] यदि फ़िल्टर ''FREE!!!'' को विषय पंक्ति में देखता है और इसके लिए कोई संभावना नहीं है।

SubjectFree!!! Subjectfree!!! SubjectFREE! SubjectFree! Subjectfree! SubjectFREE SubjectFree Subjectfree FREE!!! Free!!! free!!! FREE! Free! free! FREE Free free

यदि आप ऐसा करते हैं, तो सुनिश्चित करें कि प्रारंभिक कैप के साथ संस्करणों पर विचार करें, साथ ही सभी बड़े और सभी छोटे अक्षरों पर। स्पैम आमतौर पर अधिक वाक्य होते हैं जो अनिवार्य रूप में होते हैं, और उनमें पहला शब्द एक क्रिया होता है। इसलिए प्रारंभिक कैप के साथ क्रियाएँ उनकी तुलना में उच्च स्पैम संभावनाएँ रखती हैं जो सभी छोटे अक्षरों में होती हैं। मेरे फ़िल्टर में, ''Act'' की स्पैम संभावना 98% है और ''act'' के लिए केवल 62% है।

यदि आप अपने फ़िल्टर की शब्दावली बढ़ाते हैं, तो आप अंततः ''समान'' की अपनी पुरानी परिभाषा के अनुसार एक ही शब्द को कई बार गिन सकते हैं। तर्कसंगत रूप से, वे अब एक ही टोकन नहीं हैं। लेकिन यदि यह अभी भी आपको परेशान करता है, तो मुझे अनुभव से जोड़ने दें कि आप जिन शब्दों को कई बार गिनते हुए प्रतीत होते हैं, वे वास्तव में वही होते हैं जिन्हें आप चाहेंगे।

बड़ी शब्दावली का एक और प्रभाव यह है कि जब आप एक आने वाले मेल को देखते हैं तो आपको अधिक दिलचस्प टोकन मिलते हैं, जिसका अर्थ है कि उनकी संभावनाएँ .5 से बहुत दूर हैं। मैं यह तय करने के लिए 15 सबसे दिलचस्प का उपयोग करता हूँ कि मेल स्पैम है या नहीं। लेकिन जब आप इस तरह की निश्चित संख्या का उपयोग करते हैं तो आप एक समस्या में पड़ सकते हैं। यदि आप बहुत सारे अधिकतम दिलचस्प टोकन पाते हैं, तो परिणाम उस यादृच्छिक कारक द्वारा तय किया जा सकता है जो समान रूप से दिलचस्प टोकनों के क्रम को निर्धारित करता है। इससे निपटने का एक तरीका यह है कि कुछ को दूसरों की तुलना में अधिक दिलचस्प माना जाए।

उदाहरण के लिए, टोकन ''dalco'' मेरे स्पैम कॉर्पस में 3 बार होता है और मेरे वैध कॉर्पस में कभी नहीं होता। टोकन ''Url*optmails'' (जिसका अर्थ है ''optmails'' एक URL के भीतर) 1223 बार होता है। और फिर भी, जब मैंने टोकनों के लिए संभावनाएँ गणना कीं, दोनों की स्पैम संभावना समान होती, .99 का थ्रेशोल्ड।

यह सही नहीं लगता। इन दोनों टोकनों को काफी भिन्न संभावनाएँ देने के लिए सैद्धांतिक तर्क हैं (पैंटेल और लिन ऐसा करते हैं), लेकिन मैंने अभी तक ऐसा नहीं किया है। यह कम से कम ऐसा प्रतीत होता है कि यदि हम 15 से अधिक टोकन पाते हैं जो केवल एक कॉर्पस में या दूसरे में होते हैं, तो हमें उन पर प्राथमिकता देनी चाहिए जो बहुत होते हैं। इसलिए अब दो थ्रेशोल्ड मान हैं। उन टोकनों के लिए जो केवल स्पैम कॉर्पस में होते हैं, संभावना .9999 है यदि वे 10 बार से अधिक होते हैं और अन्यथा .9998। इसी तरह स्केल के दूसरे छोर पर उन टोकनों के लिए जो केवल वैध कॉर्पस में पाए जाते हैं।

मैं बाद में टोकन संभावनाओं को काफी बढ़ा सकता हूँ, लेकिन यह थोड़ी मात्रा में स्केलिंग कम से कम यह सुनिश्चित करती है कि टोकन सही तरीके से क्रमबद्ध होते हैं।

एक और संभावना यह होगी कि केवल 15 टोकनों पर विचार करने के बजाय, लेकिन सभी टोकनों पर एक निश्चित दिलचस्पता के थ्रेशोल्ड के ऊपर। स्टीवन हाउज़र ऐसा करते हैं अपने सांख्यिकीय स्पैम फ़िल्टर में [8]। यदि आप एक थ्रेशोल्ड का उपयोग करते हैं, तो इसे बहुत ऊँचा बनाएं, या स्पैमर आपको अधिक निर्दोष शब्दों के साथ संदेशों को पैक करके धोखा दे सकते हैं।

अंत में, किसी को html के बारे में क्या करना चाहिए? मैंने विकल्पों की पूरी श्रृंखला का प्रयास किया है, इसे नजरअंदाज करने से लेकर इसे पूरी तरह से पार्स करने तक। html को नजरअंदाज करना एक बुरा विचार है, क्योंकि यह उपयोगी स्पैम संकेतों से भरा होता है। लेकिन यदि आप इसे पूरी तरह से पार्स करते हैं, तो आपका फ़िल्टर केवल एक html पहचानकर्ता में बदल सकता है। सबसे प्रभावी दृष्टिकोण मध्य मार्ग प्रतीत होता है, कुछ टोकनों को नोटिस करना लेकिन अन्य को नहीं। मैं a, img, और font टैग पर ध्यान देता हूँ, और बाकी को नजरअंदाज करता हूँ। लिंक और छवियों पर आपको निश्चित रूप से ध्यान देना चाहिए, क्योंकि वे URLs को शामिल करते हैं।

मैं शायद html के साथ निपटने में अधिक स्मार्ट हो सकता हूँ, लेकिन मुझे नहीं लगता कि इसमें बहुत अधिक समय लगाना उचित है। html से भरे स्पैम को फ़िल्टर करना आसान है। अधिक स्मार्ट स्पैमर पहले से ही इससे बचते हैं। इसलिए भविष्य में प्रदर्शन इस बात पर निर्भर नहीं होना चाहिए कि आप html के साथ कैसे निपटते हैं।

प्रदर्शन

10 दिसंबर 2002 और 10 जनवरी 2003 के बीच मुझे लगभग 1750 स्पैम मिले। इनमें से, 4 पास हो गए। यह लगभग 99.75% की फ़िल्टरिंग दर है।

चार में से दो स्पैम जो मैंने चूक गए, वे इसलिए पास हो गए क्योंकि उन्होंने मेरे वैध ईमेल में अक्सर होने वाले शब्दों का उपयोग किया।

तीसरा उन में से एक था जो एक असुरक्षित cgi स्क्रिप्ट का लाभ उठाकर तीसरे पक्ष को मेल भेजता है। इनका केवल सामग्री के आधार पर फ़िल्टर करना कठिन है क्योंकि हेडर निर्दोष होते हैं और वे जिन शब्दों का उपयोग करते हैं, वे सावधान होते हैं। फिर भी मैं आम तौर पर उन्हें पकड़ सकता हूँ। यह एक .88 की संभावना के साथ पास हो गया, जो .9 के थ्रेशोल्ड के ठीक नीचे है।

बेशक, कई टोकन अनुक्रमों को देखना इसे आसानी से पकड़ लेगा। ''आपकी फीडबैक फ़ॉर्म का परिणाम नीचे है'' एक तात्कालिक संकेत है।

चौथा स्पैम वह था जिसे मैं भविष्य का स्पैम कहता हूँ, क्योंकि यही मैं उम्मीद करता हूँ कि स्पैम में विकसित होगा: कुछ पूरी तरह से तटस्थ पाठ एक URL के बाद। इस मामले में यह किसी से था जो कह रहा था कि उसने अंततः अपनी होमपेज पूरी कर ली है और क्या मैं इसे देखने जाऊँगा। (पृष्ठ निश्चित रूप से एक पोर्न साइट के लिए विज्ञापन था।)

यदि स्पैमर हेडर के बारे में सावधान हैं और एक ताजा URL का उपयोग करते हैं, तो भविष्य के स्पैम में फ़िल्टरों के लिए ध्यान देने के लिए कुछ नहीं है। हम निश्चित रूप से पृष्ठ को देखने के लिए एक क्रॉलर भेजकर इसका मुकाबला कर सकते हैं। लेकिन यह आवश्यक नहीं हो सकता। भविष्य के स्पैम के लिए प्रतिक्रिया दर कम होनी चाहिए, या हर कोई इसे कर रहा होगा। यदि यह पर्याप्त कम है, तो यह नहीं होगा स्पैमर के लिए इसे भेजने के लिए, और हमें इसे फ़िल्टर करने के लिए बहुत मेहनत नहीं करनी पड़ेगी।

अब वास्तव में चौंकाने वाली खबर: उसी एक महीने की अवधि में मुझे तीन झूठे सकारात्मक मिले।

एक तरह से यह कुछ झूठे सकारात्मक प्राप्त करना राहत की बात है। जब मैंने ''A Plan for Spam'' लिखा था, तब मुझे कोई नहीं मिला था, और मुझे नहीं पता था कि वे कैसे होंगे। अब जब मुझे कुछ मिले हैं, तो मैं राहत महसूस कर रहा हूँ कि वे उतने बुरे नहीं हैं जितना मैंने सोचा था। सांख्यिकीय फ़िल्टरों द्वारा उत्पन्न झूठे सकारात्मक वे मेल होते हैं जो स्पैम की तरह बहुत लगते हैं, और ये वे होते हैं जिन्हें आप सबसे कम चूकना चाहेंगे [9]।

झूठे सकारात्मक में से दो कंपनियों के न्यूज़लेटर्स थे जिनसे मैंने चीजें खरीदी हैं। मैंने कभी उन्हें प्राप्त करने के लिए नहीं कहा, इसलिए तर्कसंगत रूप से वे स्पैम थे, लेकिन मैं उन्हें झूठे सकारात्मक के रूप में गिनता हूँ क्योंकि मैंने पहले उन्हें स्पैम के रूप में हटाया नहीं था। फ़िल्टरों ने उन्हें पकड़ने का कारण यह था कि दोनों कंपनियों ने जनवरी में अपने मेल भेजने के लिए व्यावसायिक ईमेल भेजने वालों का उपयोग करना शुरू किया अपने स्वयं के सर्वरों से मेल भेजने के बजाय, और दोनों के हेडर और शरीर बहुत अधिक स्पैमी हो गए।

हालाँकि तीसरा झूठा सकारात्मक एक बुरा था। यह मिस्र के किसी व्यक्ति से था और सभी बड़े अक्षरों में लिखा गया था। यह टोकनों को केस संवेदनशील बनाने का प्रत्यक्ष परिणाम था; प्लान फॉर स्पैम फ़िल्टर इसे पकड़ नहीं पाता।

यह कहना कठिन है कि कुल झूठे सकारात्मक दर क्या है, क्योंकि हम सांख्यिकीय रूप से शोर में हैं। जो कोई भी फ़िल्टर पर काम कर चुका है (कम से कम, प्रभावी फ़िल्टर) इस समस्या से अवगत होगा। कुछ ईमेल के साथ यह कहना कठिन है कि वे स्पैम हैं या नहीं, और ये वही हैं जिन पर आप वास्तव में कड़ी फ़िल्टरिंग करते समय ध्यान देते हैं। उदाहरण के लिए, अब तक फ़िल्टर ने मेरे पते पर भेजे गए दो ईमेल को पकड़ा है क्योंकि एक टाइपो के कारण, और एक मुझे इस विश्वास में भेजा गया कि मैं कोई और था। तर्कसंगत रूप से, ये न तो मेरे स्पैम हैं और न ही मेरे गैर-स्पैम मेल।

एक और झूठा सकारात्मक वर्चुअलमंडो के एक उपाध्यक्ष से था। मैंने उनसे ग्राहक होने का नाटक करते हुए लिखा, और चूंकि उत्तर वर्चुअलमंडो के मेल सर्वरों के माध्यम से वापस आया, इसमें सबसे अधिक आरोपित हेडर थे। तर्कसंगत रूप से यह भी एक वास्तविक झूठा सकारात्मक नहीं है, बल्कि एक प्रकार का हाइजेनबर्ग अनिश्चितता प्रभाव है: मुझे यह केवल इसलिए मिला क्योंकि मैं स्पैम फ़िल्टरिंग के बारे में लिख रहा था।

इनको छोड़कर, मुझे अब तक कुल पांच झूठे सकारात्मक मिले हैं, लगभग 7740 वैध ईमेल में, .06% की दर। अन्य दो एक नोटिस थे कि मैंने जो कुछ खरीदा था वह बैक-ऑर्डर था, और एक पार्टी की याद दिलाने वाला ईमेल Evite से।

मुझे नहीं लगता कि इस संख्या पर भरोसा किया जा सकता है, आंशिक रूप से क्योंकि नमूना इतना छोटा है, और आंशिक रूप से क्योंकि मुझे लगता है कि मैं फ़िल्टर को ठीक कर सकता हूँ ताकि इनमें से कुछ को न पकड़ें।

झूठे सकारात्मक मुझे झूठे नकारात्मकों से अलग प्रकार की त्रुटि लगते हैं। फ़िल्टरिंग दर प्रदर्शन का एक माप है। झूठे सकारात्मक मुझे अधिक बग की तरह लगते हैं। मैं फ़िल्टरिंग दर में सुधार करने के लिए अनुकूलन के रूप में संपर्क करता हूँ, और झूठे सकारात्मक को कम करने के लिए डिबगिंग के रूप में।

तो ये पांच झूठे सकारात्मक मेरी बग सूची हैं। उदाहरण के लिए, मिस्र से आया मेल पकड़ा गया क्योंकि बड़े अक्षर ने इसे फ़िल्टर के लिए नाइजीरियाई स्पैम की तरह दिखाया। यह वास्तव में एक प्रकार का बग है। html की तरह, ईमेल का सभी बड़े अक्षरों में होना वास्तव में एक विशेषता है, न कि प्रत्येक शब्द के लिए एक। मुझे केस को एक अधिक परिष्कृत तरीके से संभालने की आवश्यकता है।

तो इस .06% का क्या करें? मुझे नहीं लगता कि बहुत कुछ। आप इसे एक ऊपरी सीमा के रूप में मान सकते हैं, छोटे नमूने के आकार को ध्यान में रखते हुए। लेकिन इस चरण में यह अधिक मेरी कार्यान्वयन में बग का माप है न कि बायेसियन फ़िल्टरिंग की कोई अंतर्निहित झूठी सकारात्मक दर।

भविष्य

अब आगे क्या? फ़िल्टरिंग एक अनुकूलन समस्या है, और अनुकूलन की कुंजी प्रोफाइलिंग है। अपने कोड के धीमे होने का अनुमान लगाने की कोशिश न करें, क्योंकि आप गलत अनुमान लगाएंगे। देखें कि आपका कोड कहाँ धीमा है, और उसे ठीक करें। फ़िल्टरिंग में, इसका अर्थ है: उन स्पैम पर ध्यान दें जिन्हें आप चूक गए हैं, और पता करें कि आप उन्हें पकड़ने के लिए क्या कर सकते थे।

उदाहरण के लिए, स्पैमर अब फ़िल्टरों से बचने के लिए आक्रामक रूप से काम कर रहे हैं, और वे जो कर रहे हैं उनमें से एक यह है कि वे शब्दों को तोड़ते और गलत स्पेल करते हैं ताकि फ़िल्टर उन्हें पहचान न सकें। लेकिन इस पर काम करना मेरी पहली प्राथमिकता नहीं है, क्योंकि मुझे अभी भी इन स्पैम को पकड़ने में कोई परेशानी नहीं है [10]।

वर्तमान में मुझे दो प्रकार के स्पैम हैं जिनसे मुझे परेशानी है। एक वह प्रकार है जो एक महिला के रूप में ईमेल का नाटक करता है जो आपको उसके साथ चैट करने या डेटिंग साइट पर उसका प्रोफ़ाइल देखने के लिए आमंत्रित करता है। ये पास हो जाते हैं क्योंकि ये एकमात्र प्रकार की बिक्री पिच हैं जो आप बिना बिक्री की बात किए कर सकते हैं। वे सामान्य ईमेल के समान शब्दावली का उपयोग करते हैं।

दूसरे प्रकार के स्पैम जिन्हें मैं फ़िल्टर करने में परेशानी करता हूँ वे हैं जो कंपनियों से हैं, जैसे कि बुल्गारिया में अनुबंध प्रोग्रामिंग सेवाएँ पेश करने वाली। ये पास हो जाते हैं क्योंकि मैं भी एक प्रोग्रामर हूँ, और स्पैम में मेरे असली मेल के समान शब्दों की भरपूरता होती है।

मैं शायद पहले व्यक्तिगत विज्ञापन प्रकार पर ध्यान केंद्रित करूँगा। मुझे लगता है कि यदि मैं करीब से देखूँगा तो मैं इन और मेरे असली मेल के बीच सांख्यिकीय भिन्नताएँ पा सकूँगा। लेखन की शैली निश्चित रूप से अलग है, हालाँकि इसे पकड़ने के लिए बहु-शब्द फ़िल्टरिंग की आवश्यकता हो सकती है। इसके अलावा, मैं देखता हूँ कि वे URL को दोहराने की प्रवृत्ति रखते हैं, और कोई भी वैध मेल में URL शामिल करते समय ऐसा नहीं करेगा [11]।

आउटसोर्सिंग प्रकार को पकड़ना कठिन होने वाला है। भले ही आप साइट पर एक क्रॉलर भेजें, आप एक धूम्रपान सांख्यिकीय बंदूक नहीं पाएंगे। शायद एकमात्र उत्तर स्पैम में विज्ञापित डोमेन की एक केंद्रीय सूची है [12]। लेकिन इस प्रकार के मेल की संख्या इतनी नहीं हो सकती। यदि केवल बुल्गारिया से अनुबंध प्रोग्रामिंग सेवाओं के अनचाहे प्रस्ताव बचे होते, तो हम सभी शायद कुछ और पर काम करने के लिए आगे बढ़ सकते थे।

क्या सांख्यिकीय फ़िल्टरिंग वास्तव में हमें उस बिंदु पर ले जाएगी? मुझे नहीं पता। इस समय, मेरे लिए व्यक्तिगत रूप से, स्पैम कोई समस्या नहीं है। लेकिन स्पैमर ने अभी तक सांख्यिकीय फ़िल्टरों को धोखा देने के लिए गंभीर प्रयास नहीं किया है। जब वे ऐसा करेंगे तो क्या होगा?

मैं नेटवर्क स्तर पर काम करने वाले फ़िल्टरों के बारे में आशावादी नहीं हूँ [13]। जब एक स्थिर बाधा होती है जिसे पार करना महत्वपूर्ण होता है, तो स्पैमर इसे पार करने में काफी कुशल होते हैं। पहले से ही एक कंपनी है जिसका नाम Assurance Systems है जो आपके मेल को Spamassassin के माध्यम से चलाएगी और आपको बताएगी कि क्या यह फ़िल्टर किया जाएगा।

नेटवर्क-स्तरीय फ़िल्टर पूरी तरह से बेकार नहीं होंगे। वे सभी "ऑप्ट-इन" स्पैम को समाप्त करने के लिए पर्याप्त हो सकते हैं, जिसका अर्थ है कि स्पैम कंपनियों जैसे वर्चुअलमंडो और Equalamail से है जो दावा करते हैं कि वे वास्तव में ऑप्ट-इन सूचियाँ चला रहे हैं। आप उन पर केवल हेडर के आधार पर फ़िल्टर कर सकते हैं, चाहे वे शरीर में क्या कहते हैं। लेकिन जो कोई भी हेडर को गलत साबित करने या ओपन रिलेज का उपयोग करने के लिए तैयार है, जिसमें शायद अधिकांश पोर्न स्पैमर शामिल हैं, उन्हें नेटवर्क-स्तरीय फ़िल्टरों के माध्यम से कुछ संदेश भेजने में सक्षम होना चाहिए यदि वे चाहें। (यह निश्चित रूप से वह संदेश नहीं है जो वे भेजना चाहेंगे, जो कुछ है।)

जिस प्रकार के फ़िल्टरों के बारे में मैं आशावादी हूँ वे हैं जो प्रत्येक व्यक्तिगत उपयोगकर्ता के मेल के आधार पर संभावनाएँ गणना करते हैं। ये न केवल झूठे सकारात्मक से बचने में अधिक प्रभावी हो सकते हैं, बल्कि फ़िल्टरिंग में भी: उदाहरण के लिए, किसी संदेश में प्राप्तकर्ता के ईमेल पते को बेस-64 एन्कोडेड कहीं भी ढूंढना एक बहुत अच्छा स्पैम संकेतक है।

लेकिन व्यक्तिगत फ़िल्टरों का असली लाभ यह है कि वे सभी अलग होंगे। यदि सभी के फ़िल्टरों में विभिन्न संभावनाएँ हैं, तो यह स्पैमर के अनुकूलन लूप को, जिसे प्रोग्रामर उनके संपादित-सम्पादित-परखने के चक्र के रूप में कहेंगे, भयानक रूप से धीमा कर देगा। केवल एक स्पैम को ट्वीक करने के बजाय जब यह उनके डेस्कटॉप पर किसी फ़िल्टर की एक प्रति के माध्यम से हो जाता है, तो उन्हें प्रत्येक ट्वीक के लिए एक परीक्षण मेलिंग करनी होगी। यह एक ऐसी भाषा में प्रोग्रामिंग करने के समान होगा जिसमें कोई इंटरैक्टिव टॉपलेवल नहीं है, और मैं यह किसी पर भी नहीं चाहूँगा।

नोट्स

[1] पॉल ग्राहम। ''A Plan for Spam.'' अगस्त 2002। http://paulgraham.com/spam.html।

इस एल्गोरिदम में संभावनाएँ बायेस के नियम के एक विकृत मामले का उपयोग करके गणना की जाती हैं। वहाँ दो सरल बनाने वाले अनुमान हैं: कि विशेषताओं (यानी शब्दों) की संभावनाएँ स्वतंत्र हैं, और कि हमें स्पैम होने की ईमेल की पूर्व संभावना के बारे में कुछ नहीं पता।

पहला अनुमान पाठ वर्गीकरण में व्यापक है। जो एल्गोरिदम इसका उपयोग करते हैं उन्हें ''नैव बायेसियन'' कहा जाता है।

दूसरा अनुमान मैंने इसलिए बनाया क्योंकि मेरे आने वाले मेल में स्पैम का अनुपात दिन-प्रतिदिन (वास्तव में, घंटे-घंटे) इतना भिन्न होता था कि समग्र पूर्व अनुपात एक भविष्यवक्ता के रूप में बेकार प्रतीत होता था। यदि आप मानते हैं कि P(spam) और P(nonspam) दोनों .5 हैं, तो वे एक-दूसरे को रद्द कर देते हैं और आप उन्हें सूत्र से हटा सकते हैं।

यदि आप बायेसियन फ़िल्टरिंग कर रहे हैं ऐसी स्थिति में जहाँ स्पैम और गैर-स्पैम का अनुपात लगातार बहुत अधिक या (विशेष रूप से) बहुत कम था, तो आप शायद पूर्व संभावनाओं को शामिल करके फ़िल्टर प्रदर्शन में सुधार कर सकते हैं। इसे सही करने के लिए आपको दिन के समय के अनुसार अनुपात को ट्रैक करना होगा, क्योंकि स्पैम और वैध मेल की मात्रा दोनों में विशिष्ट दैनिक पैटर्न होते हैं।

[2] पैट्रिक पैंटेल और डेकांग लिन। ''SpamCop-- A Spam Classification & Organization Program.'' AAAI-98 पाठ वर्गीकरण के लिए सीखने पर कार्यशाला की कार्यवाही।

[3] मेहरान सहामी, सुसान डुमाइस, डेविड हेकरमैन और एरिक होर्विट्ज़। ''A Bayesian Approach to Filtering Junk E-Mail.'' AAAI-98 पाठ वर्गीकरण के लिए सीखने पर कार्यशाला की कार्यवाही।

[4] उस समय मेरे पास लगभग 4,000 वैध ईमेल में से शून्य झूठे सकारात्मक थे। यदि अगला वैध ईमेल एक झूठा सकारात्मक था, तो यह हमें .03% देगा। ये झूठे सकारात्मक दरें अविश्वसनीय हैं, जैसा कि मैं बाद में समझाता हूँ। मैं यहाँ एक संख्या उद्धृत करता हूँ केवल यह जोर देने के लिए कि झूठे सकारात्मक दर चाहे जो भी हो, यह 1.16% से कम है।

[5] बिल येराजुनिस। ''Sparse Binary Polynomial Hash Message Filtering and The CRM114 Discriminator.'' 2003 स्पैम सम्मेलन की कार्यवाही।

[6] ''A Plan for Spam'' में मैंने .99 और .01 के थ्रेशोल्ड का उपयोग किया। यह उचित प्रतीत होता है कि कॉर्पोरा के आकार के अनुपात में थ्रेशोल्ड का उपयोग किया जाए। चूंकि अब मेरे पास प्रत्येक प्रकार के मेल के क्रम में 10,000 हैं, मैं .9999 और .0001 का उपयोग करता हूँ।

[7] यहाँ एक दोष है जिसे मुझे शायद ठीक करना चाहिए। वर्तमान में, जब ''Subjectfoo'' केवल ''foo'' में घटित होता है, तो इसका अर्थ है कि आप ''foo'' की घटनाओं के लिए आँकड़े प्राप्त कर रहे हैं शरीर या हेडर पंक्तियों में अन्य जो मैंने चिह्नित नहीं किया। मुझे यह करना चाहिए कि ''foo'' के लिए आँकड़े को समग्र रूप से ट्रैक करना चाहिए, साथ ही विशिष्ट संस्करणों के लिए, और ''Subjectfoo'' से घटित होना चाहिए न कि ''foo'' से बल्कि ''Anywhere*foo'' से। केस के लिए भी यही है: मुझे बड़े अक्षरों से किसी भी केस में घटित होना चाहिए, न कि छोटे अक्षरों में।

यह शायद कीमतों के साथ भी करना एक जीत होगी जैसे, ''$129.99'' से ''$--9.99'', ''$--.99'', और ''$--'' में घटित होना।

आप शब्दों को उनके स्टेम में भी घटित कर सकते हैं, लेकिन यह शायद केवल प्रारंभ में फ़िल्टरिंग दरों में सुधार करेगा जब आपके पास छोटे कॉर्पस हों।

[8] स्टीवन हाउज़र। ''Statistical Spam Filter Works for Me.'' http://www.sofbot.com।

[9] झूठे सकारात्मक सभी समान नहीं होते हैं, और हमें यह याद रखना चाहिए जब हम स्पैम को रोकने के लिए तकनीकों की तुलना करते हैं। जबकि फ़िल्टरों द्वारा उत्पन्न कई झूठे सकारात्मक नजदीकी स्पैम होते हैं जिन्हें आप चूकने में कोई आपत्ति नहीं करेंगे, ब्लैकलिस्ट द्वारा उत्पन्न झूठे सकारात्मक, उदाहरण के लिए, बस उन लोगों का मेल होगा जिन्होंने गलत ISP चुना। दोनों के मामलों में आप मेल पकड़ते हैं जो स्पैम के करीब है, लेकिन ब्लैकलिस्ट के लिए निकटता भौतिक होती है, और फ़िल्टर के लिए यह पाठ्य होती है।

[10] यदि स्पैमर इस पर अच्छे हो जाते हैं कि टोकनों को अस्पष्ट करने के लिए यह एक समस्या है, तो हम प्रतिक्रिया दे सकते हैं बसWhitespace, बिंदुओं, अल्पविराम, आदि को हटा कर, और परिणामस्वरूप अनुक्रम से शब्दों को चुनने के लिए एक शब्दकोश का उपयोग कर सकते हैं। और निश्चित रूप से इस तरह से उन शब्दों को ढूंढना जो मूल पाठ में दिखाई नहीं देते थे, स्वयं स्पैम का प्रमाण होगा।

शब्दों को चुनना आसान नहीं होगा। यह केवल शब्द सीमाओं को पुनर्निर्माण करने से अधिक की आवश्यकता होगी; स्पैमर दोनों जोड़ते हैं (''xHot nPorn cSite'') और छोड़ते हैं (''P#rn'') अक्षर। दृष्टि अनुसंधान यहाँ उपयोगी हो सकता है, क्योंकि मानव दृष्टि ऐसे चालों के लिए सीमा है।

[11] सामान्यतः, स्पैम नियमित ईमेल की तुलना में अधिक दोहरावदार होते हैं। वे उस संदेश को घर पर पाउंड करना चाहते हैं। मैं वर्तमान में शीर्ष 15 टोकनों में डुप्लिकेट की अनुमति नहीं देता, क्योंकि यदि प्रेषक किसी बुरे शब्द का उपयोग कई बार करता है तो आपको झूठा सकारात्मक मिल सकता है। (मेरे वर्तमान फ़िल्टर में, ''dick'' की स्पैम संभावना .9999 है, लेकिन यह एक नाम भी है।) हालांकि, ऐसा लगता है कि हमें कम से कम डुप्लिकेशन पर ध्यान देना चाहिए, इसलिए मैं शायद प्रत्येक टोकन की दो तक अनुमति देने की कोशिश करूँगा, जैसा कि ब्रायन बर्टन स्पैमप्रोब में करते हैं।

[12] यह वही है जो ब्राइटमेल के जैसे दृष्टिकोण में घटित होगा जब स्पैमर को संदेश में बाकी सब कुछ उत्पन्न करने के लिए मैड-लिब तकनीकों का उपयोग करने के लिए धकेला जाएगा।

[13] कभी-कभी यह तर्क किया जाता है कि हमें नेटवर्क स्तर पर फ़िल्टरिंग पर काम करना चाहिए, क्योंकि यह अधिक कुशल है। जब लोग ऐसा कहते हैं तो वे आमतौर पर इसका मतलब यह होता है: हम वर्तमान में नेटवर्क स्तर पर फ़िल्टर करते हैं, और हम नहीं चाहते कि हम फिर से शुरू करें। लेकिन आप समस्या को अपने समाधान के अनुसार नहीं बना सकते।

ऐतिहासिक रूप से, दुर्लभ संसाधन तर्क सॉफ़्टवेयर डिज़ाइन के बारे में बहस में हारने वाले पक्ष रहे हैं। लोग केवल उन्हें अन्य कारणों से किए गए विकल्पों (विशेष रूप से निष्क्रियता) को सही ठहराने के लिए उपयोग करते हैं।

धन्यवाद सारा हार्लिन, ट्रेवर ब्लैकवेल, और डैन गिफ़िन को इस पेपर के ड्राफ्ट पढ़ने के लिए, और डैन को फिर से इस फ़िल्टर पर चलने वाली अधिकांश अवसंरचना के लिए।

संबंधित:

SubjectFREE 0.9999 free!! 0.9999 Tofree 0.9998 Subjectfree 0.9782 free! 0.9199 Free 0.9198 Urlfree 0.9091 FREE 0.8747 From*free 0.7636 free 0.6546

SubjectFree!!! Subjectfree!!! SubjectFREE! SubjectFree! Subjectfree! SubjectFREE SubjectFree Subjectfree FREE!!! Free!!! free!!! FREE! Free! free! FREE Free free