Loading...

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

Original

जनवरी 2003

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

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

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

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

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

तो फिर हमें इतने अलग-अलग नंबर क्यों मिले? मैंने पेंटल और लिन के नतीजों को दोहराने की कोशिश नहीं की है, लेकिन पेपर पढ़ने से मुझे पाँच बातें नज़र आती हैं जो शायद इस अंतर के लिए जिम्मेदार हैं।

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

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

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

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

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

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

टोकन

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

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

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

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

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

मामला सुरक्षित है.

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

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

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

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

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

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

विषय मुफ़्त 0.9999 मुफ़्त!! 0.9999 से मुफ़्त 0.9998 विषय मुफ़्त 0.9782 मुफ़्त! 0.9199 मुफ़्त 0.9198 यूआरएल मुफ़्त 0.9091 मुफ़्त 0.8747 से*मुफ़्त 0.7636 मुफ़्त 0.6546

स्पैम फ़िल्टर की योजना में, इन सभी टोकन की संभावना समान होती, .7602. उस फ़िल्टर ने लगभग 23,000 टोकन पहचाने. वर्तमान फ़िल्टर लगभग 187,000 पहचानता है.

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

इसका एक समाधान वह है जिसे मैं डीजनरेशन कहता हूँ। यदि आपको किसी टोकन के लिए सटीक मिलान नहीं मिल पाता है, तो इसे ऐसे समझें जैसे कि यह कम विशिष्ट संस्करण हो। मैं टर्मिनल विस्मयादिबोधक चिह्न, बड़े अक्षर, और पाँच चिह्नित संदर्भों में से किसी एक में होने को टोकन को अधिक विशिष्ट बनाने के रूप में मानता हूँ। उदाहरण के लिए, यदि मुझे विषय*मुक्त!'' के लिए कोई संभावना नहीं मिलती है, तो मैं विषय*मुक्त'', free!'', and मुक्त'' Subject*free!'', I look for probabilities for , और जो भी .5 से सबसे दूर है उसे लेता हूँ।

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

विषय मुक्त!!! विषय मुक्त!!! विषय मुक्त! विषय मुक्त ! विषय मुक्त! विषय मुक्त विषय मुक्त विषय मुक्त मुक्त!!! मुक्त!!! मुक्त!!! मुक्त! मुक्त! मुक्त! मुक्त मुक्त

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

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

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

उदाहरण के लिए, टोकन dalco'' occurs 3 times in my spam corpus and never in my legitimate corpus. The token Url*optmails'' (जिसका अर्थ है एक यूआरएल के भीतर ``optmails'') 1223 बार आता है। और फिर भी, जैसा कि मैंने टोकन के लिए संभावनाओं की गणना की, दोनों में एक ही स्पैम संभावना होगी, .99 की सीमा।

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

मैं बाद में टोकन संभावनाओं को काफी हद तक बढ़ा सकता हूं, लेकिन इस छोटे से मापन से कम से कम यह सुनिश्चित हो जाता है कि टोकन सही तरीके से क्रमबद्ध हो जाएं।

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

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

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

प्रदर्शन

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

भविष्य

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

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

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

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

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

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

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

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

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

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

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

नोट्स

[1] पॉल ग्राहम. ``स्पैम के लिए एक योजना.'' अगस्त 2002. http://paulgraham.com/spam.html.

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

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

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

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

[2] पैट्रिक पेंटल और डेकांग लिन. ``स्पैमकॉप - एक स्पैम वर्गीकरण और संगठन कार्यक्रम.'' पाठ वर्गीकरण के लिए सीखने पर AAAI-98 कार्यशाला की कार्यवाही.

[3] मेहरान सहामी, सुसान डुमाइस, डेविड हेकरमैन और एरिक होर्विट्ज़। ``जंक ई-मेल को फ़िल्टर करने के लिए एक बायेसियन दृष्टिकोण।'' टेक्स्ट वर्गीकरण के लिए सीखने पर AAAI-98 कार्यशाला की कार्यवाही।

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

[5] बिल येराज़ुनिस. ``स्पैस बाइनरी पॉलीनोमियल हैश मैसेज फ़िल्टरिंग और CRM114 डिस्क्रिमिनेटर.'' 2003 स्पैम कॉन्फ्रेंस की कार्यवाही.

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

[7] यहाँ एक खामी है जिसे मुझे शायद ठीक करना चाहिए। वर्तमान में, जब Subject*foo'' degenerates to just , तो इसका मतलब यह है कि आपको foo'' in the body or header lines other than those I mark. What I should do is keep track of statistics for , और Subject*foo'' not to बल्कि ``Anywhere*foo'' में बदलना। केस के लिए भी यही बात लागू होती है: मुझे अपरकेस से any-case में बदलना चाहिए, लोअरकेस में नहीं।

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

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

[8] स्टीवन हॉसर. ``सांख्यिकीय स्पैम फ़िल्टर मेरे लिए काम करता है.'' http://www.sofbot.com.

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

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

शब्दों को चुनना आसान नहीं होगा। इसके लिए सिर्फ़ शब्दों की सीमाओं को फिर से बनाने से ज़्यादा की ज़रूरत होगी; स्पैमर ( xHot nPorn cSite'') and omit ( । दृष्टि अनुसंधान यहाँ उपयोगी हो सकता है, क्योंकि मानव दृष्टि ही वह सीमा है जिस तक ऐसी तरकीबें पहुँच सकती हैं।

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

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

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

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

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

संबंधित:

विषय मुफ़्त 0.9999 मुफ़्त!! 0.9999 से मुफ़्त 0.9998 विषय मुफ़्त 0.9782 मुफ़्त! 0.9199 मुफ़्त 0.9198 यूआरएल मुफ़्त 0.9091 मुफ़्त 0.8747 से*मुफ़्त 0.7636 मुफ़्त 0.6546

विषय मुक्त!!! विषय मुक्त!!! विषय मुक्त! विषय मुक्त ! विषय मुक्त! विषय मुक्त विषय मुक्त विषय मुक्त मुक्त!!! मुक्त!!! मुक्त!!! मुक्त! मुक्त! मुक्त! मुक्त मुक्त