बेहतर बेयेसियन फ़िल्टरिंग
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 गैर-स्पैम मेल। फ़िल्टर प्रदर्शन इतने छोटे डेटा सेट के साथ भी बढ़ता रहना चाहिए। इसलिए उनके आंकड़े शायद उनके एल्गोरिदम के प्रदर्शन का एक सटीक माप भी नहीं हो सकते, न ही बेयेसियन स्पैम फ़िल्टरिंग के सामान्य प्रदर्शन का।
लेकिन मुझे लगता है कि सबसे महत्वपूर्ण अंतर शायद यह है कि उन्होंने संदेश हेडर को नज़रअंदाज कर दिया। स्पैम फ़िल्टर पर काम करने वाले किसी भी व्यक्ति के लिए, यह एक विकृत निर्णय होगा। और फिर भी मैंने जिन पहले फ़िल्टर को लिखने की कोशिश की थीं, मैंने हेडर को भी नज़रअंदाज कर दिया था। क्यों? क्योंकि मैं समस्या को साफ रखना चाहता था। मुझे तब मेल हेडर के बारे में ज्यादा नहीं पता था, और वे मुझे रैंडम चीजों से भरे हुए लगे। यहां फ़िल्टर लेखकों के लिए एक सबक है: डेटा को नज़रअंदाज न करें। आप सोचते हैं कि यह सबक बहुत स्पष्ट होना चाहिए कि उल्लेख करना, लेकिन मुझे इसे कई बार सीखना पड़ा है।
तीसरा, पैंटेल और लिन ने टोकन को स्टेम किया, मतलब उन्होंने उदाहरण के लिए दोनों "मेलिंग" और "मेल्ड" को मूल "मेल" में कम कर दिया। वे महसूस कर सकते थे कि उनके कॉर्पस के छोटे आकार के कारण वे इसे करने के लिए मजबूर थे, लेकिन अगर ऐसा है तो यह एक प्रकार का समय से पहले अनुकूलन है।
चौथा, उन्होंने संभावनाएं अलग-अलग गणना कीं। उन्होंने सभी टोकन का उपयोग किया, जबकि मैं केवल 15 सबसे महत्वपूर्ण का उपयोग करता हूं। अगर आप सभी टोकन का उपयोग करते हैं तो आप लंबे स्पैम को छोड़ देंगे, जहां कोई व्यक्ति आपको अपनी जीवन कहानी बताता है जहां तक वह किसी बहुस्तरीय विपणन योजना से धनी हो गया। और ऐसा एल्गोरिदम स्पैमर्स के लिए आसान हो जाएगा: बस कुछ बड़ा स्पैम शब्दों को संतुलित करने के लिए कोई भी रैंडम पाठ जोड़ें।
अंत में, उन्होंने गलत धनात्मक के खिलाफ झुकाव नहीं किया। मुझे लगता है कि किसी भी स्पैम फ़िल्टरिंग एल्गोरिदम में एक सुविधाजनक नॉब होना चाहिए जिसे आप घुमा सकते हैं ताकि गलत धनात्मक दर को कम किया जा सके फ़िल्टरिंग दर के खर्च पर। मैं यह करता हूं गैर-स्पैम कॉर्पस में टोकन की घटनाओं को दोगुना गिनकर।
मुझे नहीं लगता कि स्पैम फ़िल्टरिंग को एक सीधा पाठ वर्गीकरण समस्या के रूप में देखना अच्छा है। आप पाठ वर्गीकरण तकनीकों का उपयोग कर सकते हैं, लेकिन समाधान बदल सकते हैं और यह तथ्य प्रतिबिंबित करना चाहिए कि पाठ ईमेल है, और स्पैम विशेष रूप से। ईमेल केवल पाठ नहीं है; इसकी संरचना है। स्पैम फ़िल्टरिंग केवल वर्गीकरण नहीं है, क्योंकि गलत धनात्मक इतने बुरे हैं कि गलत ऋणात्मक से आप उन्हें एक अलग प्रकार की त्रुटि के रूप में देखना चाहिए। और त्रुटि का स्रोत केवल यादृच्छिक प्रवृत्ति नहीं है, बल्कि एक जीवित मानव स्पैमर सक्रिय रूप से आपके फ़िल्टर को हराने के लिए काम कर रहा है।
टोकन
मैंने स्लैशडॉट लेख के बाद एक और परियोजना के बारे में सुना बिल येरज़ुनिस' CRM114 [5] के बारे में। यह उस डिज़ाइन सिद्धांत का प्रतिवाद है जिसका मैंने अभी-अभी उल्लेख किया। यह एक सीधा पाठ वर्गीकर्ता है, लेकिन इतना चौंकाने वाला प्रभावी है कि यह लगभग पूर्ण रूप से स्पैम फ़िल्टर करता है बिना यह जाने कि वह क्या कर रहा है।
एक बार जब मैंने समझ लिया कि CRM114 कैसे काम करता है, तो यह अनिवार्य लगा कि मुझे एकल शब्दों पर आधारित फ़िल्टरिंग से एक ऐसे アप्रोच में जाना होगा। लेकिन पहले, मैं सोचता हूं, मैं देखूंगा कि मैं एकल शब्दों के साथ कहां तक पहुंच सकता हूं। और जवाब है, आश्चर्यजनक रूप से दूर।
ज्यादातर मैं स्मार्टर टोकनाइजेशन पर काम कर रहा हूं। वर्तमान स्पैम पर, मैं CRM114 के समान फ़िल्टरिंग दरों को प्राप्त करने में सक्षम रहा हूं। ये तकनीकें ज्यादातर बिल की तरह नहीं हैं; एक अनुकूलित समाधान में दोनों को शामिल किया जा सकता है।
"A Plan for Spam" एक बहुत ही सरल टोकन की परिभाषा का उपयोग करता है। अक्षर, अंक, डैश, उद्धरण चिह्न, और डॉलर चिह्न घटक अक्षर हैं, और सब कुछ अन्य एक टोकन अलगाव है। मैंने केस को भी नज़रअंदाज कर दिया।
अब मेरे पास एक अधिक जटिल टोकन की परिभाषा है:
केस बरकरार रखा जाता है।
उद्गार चिह्न घटक अक्षर हैं।
अवरोध और कॉमा तब घटक हैं जब वे दो अंकों के बीच आते हैं। यह मुझे आईपी पते और क
विषयमुक्त 0.9999 मुक्त!! 0.9999 करनेमुक्त 0.9998 विषयमुक्त 0.9782 मुक्त! 0.9199 मुक्त 0.9198 Urlमुक्त 0.9091 मुक्त 0.8747 से*मुक्त 0.7636 मुक्त 0.6546
स्पैम फ़िल्टर के योजना में, इन सभी टोकन की समान संभावना, .7602 होगी। उस फ़िल्टर ने लगभग 23,000 टोकन पहचाने। वर्तमान एक लगभग 187,000 पहचानता है।
टोकन के बड़े यूनिवर्स होने का नुकसान है कि गलतियों की अधिक संभावना है। अपने कॉर्पस को अधिक टोकन पर फैलाना उसे छोटा करने के समान प्रभाव है। यदि आप उद्गार चिह्नों को घटक मानते हैं तो आप मुक्त के लिए स्पैम संभावना नहीं हो सकते सात उद्गार चिह्नों के साथ, भले ही आप जानते हों कि केवल दो उद्गार चिह्नों के साथ मुक्त की संभावना 99.99% है।
इसका एक समाधान है जो मैं विकृति कहता हूं। यदि आप
किसी टोकन के लिए एक सटीक मेल नहीं पा सकते,
उसे एक कम विशिष्ट
संस्करण के रूप में मानें।
मैं टर्मिनल उद्गार
बिंदुओं, अक्षर के उच्च मामले, और पांच में से किसी एक में होने को
चिह्नित संदर्भों को एक टोकन को अधिक विशिष्ट बनाने के रूप में मानता हूं।
उदाहरण के लिए, यदि मैं Subject*free!'', के लिए कोई संभावना नहीं पाता हूं, तो मैं
Subject*free'', 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'') 1223 बार होता है।
और फिर भी, जैसा कि मैं टोकन के लिए संभावनाएं गणना करता था,
दोनों को एक ही स्पैम संभावना, .99 की सीमा होगी।
यह सही नहीं लगता। इन दो टोकन को महत्वपूर्ण रूप से अलग संभावनाएं देने के लिए सैद्धांतिक तर्क हैं (पैनटेल और लिन करते हैं), लेकिन मैंने अभी तक ऐसा नहीं किया है। कम से कम यह लगता है कि यदि हम 15 से अधिक टोकन पाते हैं जो केवल एक कॉर्पस या दूसरे में होते हैं, तो हमें अधिक बार होने वालों को प्राथमिकता देनी चाहिए। इसलिए अब दो सीमा मान हैं। केवल स्पैम कॉर्पस में होने वाले टोकन के लिए, संभावना .9999 है यदि वे 10 से अधिक बार होते हैं और .9998 अन्यथा। इसी तरह दूसरे छोर पर वैध कॉर्पस में पाए जाने वाले टोकन के लिए।
मैं बाद में टोकन संभावनाओं को काफी मात्रा में मापूंगा, लेकिन यह छोटा सा मापन कम से कम सुनिश्चित करता है कि टोकन सही तरह से क्रमबद्ध हो जाते हैं।
एक और संभावना यह हो सकती है कि आप न केवल 15 टोकन, बल्कि एक निश्चित से अधिक दिलचस्पता का सीमा पार करने वाले सभी टोकन पर विचार करें। स्टीवन हाउसर अपने सांख्यिकीय स्पैम फ़िल्टर में ऐसा करता है [8]। यदि आप एक सीमा का उपयोग करते हैं, तो इसे बहुत ही उच्च रखें, या स्पैमर आपको धोखा दे सकते हैं क्योंकि वे संदेशों में अधिक निर्दोष शब्द पैक कर सकते हैं।
अंत में, एचटीएमएल के साथ क्या किया जाना चाहिए? मैंने विकल्पों के पूरे स्पेक्ट्रम का प्रयास किया है, से इसे नजरअंदाज करना से लेकर इसे पूरी तरह से पार्स करना। एचटीएमएल को नजरअंदाज करना एक बुरा विचार है, क्योंकि यह उपयोगी स्पैम संकेतों से भरा है। लेकिन यदि आप सब को पार्स करते हैं, तो आपका फ़िल्टर एक मात्र एचटीएमएल पहचानकर्ता बन सकता है। सबसे प्रभावी दृष्टिकोण बीच का रास्ता प्रतीत होता है, कुछ टोकन पर ध्यान देना लेकिन नहीं अन्य। मैं a, img, और font टैग देखता हूं, और बाकी को नजरअंदाज करता हूं। लिंक और छवियों पर निश्चित रूप से देखना चाहिए, क्योंकि वे यूआरएल शामिल हैं।
मैं एचटीएमएल से निपटने के बारे में अधिक होशियार हो सकता हूं, लेकिन मैं इस पर बहुत अधिक समय लगाने के लायक नहीं हूं। एचटीएमएल से भरे स्पैम आसानी से फ़िल्टर किए जा सकते हैं। स्मार्टर स्पैमर पहले से ही इससे बचते हैं। इसलिए भविष्य में प्रदर्शन काफी हद तक आप पर निर्भर नहीं करेगा एचटीएमएल से कैसे निपटते हैं।
प्रदर्शन
10 दिसंबर 2002 और 10 जनवरी 2003 के बीच मुझे लगभग 1750 स्पैम मिले। इनमें से 4 बच गए। यह लगभग 99.75% की फ़िल्टरिंग दर है।
चार स्पैम में से दो मैंने इसलिए नहीं पकड़ा क्योंकि वे मेरे वैध ईमेल में अक्सर होने वाले शब्दों का उपयोग कर रहे थे।
तीसरा वह था जो असुरक्षित सीजीआई स्क्रिप्ट का दोहन करके तीसरे पक्षों को मेल भेजता है। उन्हें केवल सामग्री के आधार पर फ़िल्टर करना मुश्किल है क्योंकि हेडर निर्दोष हैं और वे उपयोग किए जाने वाले शब्दों के बारे में सावधान हैं। भी मैं आमतौर पर उन्हें पकड़ सकता हूं। यह एक था जो संभावना .88 के साथ बच गया, .9 की सीमा से नीचे।
निश्चित रूप से, बहुत से टोकन अनुक्रम पर नज़र डालना आसानी से पकड़ लेता। ``नीचे आपके प्रतिक्रिया फॉर्म का परिणाम है'' एक तुरंत संकेत है।
चौथा स्पैम वह था जिसे मैं भविष्य का स्पैम कहता हूं, क्योंकि यह वह है जिसके बारे में मैं उम्मीद करता हूं कि स्पैम में विकसित होगा: कुछ पूरी तरह से तटस्थ पाठ के बाद एक यूआरएल। इस मामले में यह किसी व्यक्ति से था जो कह रहा था कि उन्होंने अंतत: अपना होमपेज पूरा कर लिया है और क्या मैं उसे देखने जाऊंगा। (पृष्ठ तो निश्चित रूप से एक पोर्न साइट का विज्ञापन था।)
यदि स्पैमर्स हेडर के बारे में सावधान हैं और एक ताजा यूआरएल का उपयोग करते हैं, तो स्पैम-ऑफ़-द-फ्यूचर में फ़िल्टर को कुछ भी नहीं मिलेगा। हम तो निश्चित रूप से क्रॉलर को पृष्ठ देखने के लिए भेज सकते हैं। लेकिन यह आवश्यक नहीं हो सकता है। स्पैम-ऑफ़-द-फ्यूचर के लिए प्रतिक्रिया दर कम होनी चाहिए, नहीं तो सभी लोग ऐसा कर रहे होंगे। यदि यह पर्याप्त रूप से कम है, तो यह [1] स्पैमर्स के लिए भुगतान नहीं करेगा, और हमें इसे फ़िल्टर करने के लिए बहुत मेहनत नहीं करनी होगी।
अब सबसे चौंकाने वाली खबर के लिए: उसी एक महीने की अवधि में मुझे तीन झूठे धनात्मक मिले।
एक तरह से यह झूठे धनात्मक प्राप्त करना एक राहत है। जब मैंने "स्पैम के लिए एक योजना" लिखी थी, तो मुझे कोई नहीं मिला था, और मुझे नहीं पता था कि वे कैसे होंगे। अब जब मुझे कुछ मिले हैं, तो मुझे राहत मिलती है कि वे मेरे डर से बदतर नहीं हैं। सांख्यिकीय फ़िल्टर द्वारा प्रदान किए गए झूठे धनात्मक वे मेल हैं जो स्पैम की तरह बहुत लगते हैं, और ये वे हैं जिन्हें आप सबसे कम मिस करना चाहेंगे [9]।
झूठे धनात्मक में से दो कंपनियों से प्राप्त न्यूज़लेटर थे जिनसे मैंने कुछ खरीदा था। मैंने उन्हें प्राप्त करने के लिए कभी नहीं कहा था, इसलिए तर्कसंगत रूप से वे स्पैम थे, लेकिन मैं उन्हें झूठे धनात्मक के रूप में गिनता हूं क्योंकि मैं उन्हें पहले स्पैम के रूप में नहीं हटा रहा था। फ़िल्टर ने उन्हें पकड़ा क्योंकि जनवरी में दोनों कंपनियों ने अपने स्वयं के सर्वरों के बजाय वाणिज्यिक ईमेल भेजकारों का उपयोग करना शुरू कर दिया, और दोनों हेडर और शरीर बहुत स्पैमी हो गए।
तीसरा झूठा धनात्मक बुरा था, हालांकि। यह मिस्र से किसी व्यक्ति से था और पूरी तरह से अक्षर में लिखा था। यह टोकन केस संवेदनशील बनाने का एक सीधा परिणाम था; स्पैम के लिए योजना फ़िल्टर इसे नहीं पकड़ता।
यह कहना मुश्किल है कि कुल झूठे धनात्मक दर क्या है, क्योंकि हम सांख्यिकीय शोर में हैं। फ़िल्टर पर काम करने वाला कोई भी (कम से कम, प्रभावी फ़िल्टर) इस समस्या से परिचित होगा। कुछ ईमेल के साथ यह कहना मुश्किल है कि वे स्पैम हैं या नहीं, और ये वे हैं जिन पर आप देखते हैं जब आप फ़िल्टर को वास्तव में कड़ा बना देते हैं। उदाहरण के लिए, अब तक फ़िल्टर ने दो ईमेल पकड़े हैं जो किसी गलती से मेरे पते पर भेजे गए थे, और एक जिसे मुझे किसी और व्यक्ति समझकर भेजा गया था। तर्कसंगत रूप से, ये न तो मेरा स्पैम हैं और न ही मेरा गैर-स्पैम मेल।
एक और झूठा धनात्मक वर्चुमुंडो के उपाध्यक्ष से था। मैंने उन्हें एक ग्राहक बनकर लिखा, और चूंकि जवाब वर्चुमुंडो के मेल सर्वरों के माध्यम से आया, इसमें सबसे अपराधपूर्ण हेडर थे। तर्कसंगत रूप से यह एक वास्तविक झूठा धनात्मक नहीं है, बल्कि एक प्रकार का हाइजेनबर्ग अनिश्चितता प्रभाव है: मैं इसे केवल इसलिए प्राप्त किया क्योंकि मैं स्पैम फ़िल्टरिंग के बारे में लिख रहा था।
इन्हें छोड़कर, मुझे अब तक कुल पांच झूठे धनात्मक मिले हैं, लगभग 7740 वैध ईमेल में से, .06% की दर से। अन्य दो एक नोटिस थी कि मैंने जो कुछ खरीदा था वह बैक-ऑर्डर पर था, और एक पार्टी रिमाइंडर एवेंट से था।
मुझे नहीं लगता कि यह संख्या भरोसेमंद हो सकती है, आंशिक रूप से क्योंकि नमूना इतना छोटा है, और आंशिक रूप से क्योंकि मुझे लगता है कि मैं फ़िल्टर को ऐसे कुछ को पकड़ने से रोक सकता हूं।
झूठे धनात्मक मुझे गलतियों की एक अलग प्रकार की तरह लगते हैं। फ़िल्टरिंग दर प्रदर्शन का एक माप है। झूठे धनात्मक को मैं बग्स की तरह देखता हूं। मैं फ़िल्टरिंग दर में सुधार को अनुकूलन के रूप में और झूठे धनात्मक को कम करने को डीबगिंग के रूप में पहुंचता हूं।
इसलिए ये पांच झूठे धनात्मक मेरी बग सूची हैं। उदाहरण के लिए, मिस्र से आई मेल को इसलिए पकड़ा गया क्योंकि अक्षर में लिखा होना इसे फ़िल्टर को नाइजीरियन स्पैम की तरह दिखाई दिया। यह वास्तव में एक प्रकार का बग है। एचटीएमएल की तरह, मेल पूरी तरह से अक्षर में होना वास्तव में एक विशेषता है, न कि प्रत्येक शब्द के लिए एक। मुझे केस को एक अधिक परिष्कृत तरीके से संभालना चाहिए।
तो इस .06% से क्या करें? ज्यादा कुछ नहीं, मुझे लगता है। आप इसे एक ऊपरी सीमा के रूप में मान सकते हैं, छोटे नमूने आकार को ध्यान में रखते हुए। लेकिन इस चरण में यह मेरे कार्यान्वयन में बग्स का एक माप है, न कि बेज़ियन फ़िल्टरिंग का कोई अंतर्निहित झूठा धनात्मक दर।
भविष्य
अब क्या? फ़िल्टरिंग एक अनुकूलन समस्या है, और अनुकूलन की कुंजी प्रोफ़ाइलिंग है। अनुमान नहीं लगाओ कि आपका कोड कहां धीमा है, क्योंकि आप गलत अनुमान लगाएंगे। देखो कि आपका कोड कहां धीमा है, और उसे ठीक करो। फ़िल्टरिंग में, यह अर्थ है: उन स्पैमों को देखो जिन्हें आप छोड़ देते हैं, और पता लगाओ कि आप उन्हें पकड़ने के लिए क्या कर सकते थे।
उदाहरण के लिए, स्पैमर अब फ़िल्टरों से बचने के लिए आक्रामक ढंग से काम कर रहे हैं, और उनमें से एक चीज़ जो वे कर रहे हैं वह शब्दों को टूटना और गलत लिखना है ताकि फ़िल्टर उन्हें पहचान न सकें। लेकिन इस पर काम करना मेरी पहली प्राथमिकता नहीं है, क्योंकि मुझे अभी भी इन स्पैमों को पकड़ने में कोई दिक्कत नहीं है [10]।
ऐसे दो प्रकार के स्पैम हैं जिनका मुझे वर्तमान में मुश्किल है। एक वह है जो एक महिला से ईमेल होने का दावा करता है जो आपको किसी डेटिंग साइट पर चैट करने या उसकी प्रोफ़ाइल देखने के लिए आमंत्रित करता है। ये इसलिए पास हो जाते हैं क्योंकि ये वह एकमात्र प्रकार का बिक्री पिच हैं जिसे बिना बिक्री वार्ता का उपयोग किए किया जा सकता है। वे सामान्य ईमेल के समान शब्दावली का उपयोग करते हैं।
स्पैमों के दूसरे प्रकार जिनका मुझे फ़िल्टर करने में मुश्किल है वे हैं जो बल्गारिया जैसे देशों में स्थित कंपनियों से आते हैं जो कॉन्ट्रैक्ट प्रोग्रामिंग सेवाएं प्रदान करते हैं। ये इसलिए पास हो जाते हैं क्योंकि मैं भी एक प्रोग्रामर हूं, और स्पैम मेरे वास्तविक मेल के समान शब्दों से भरे हैं।
मैं शायद पहले व्यक्तिगत विज्ञापन प्रकार पर ध्यान केंद्रित करूंगा। मुझे लगता है कि यदि मैं और करीब से देखूंगा तो मुझे इनमें और मेरे वास्तविक मेल के बीच सांख्यिकीय अंतर मिल जाएंगे। लिखने का शैली निश्चित रूप से अलग है, हालांकि यह बहुशब्द फ़िल्टरिंग लेने के लिए हो सकता है। इसके अलावा, मुझे लगता है कि वे यूआरएल को दोहराते हैं, और किसी वैध मेल में किसी व्यक्ति द्वारा यूआरएल शामिल करने की संभावना नहीं होती [11]।
आउटसोर्सिंग प
क्या सांख्यिकीय फिल्टरिंग वास्तव में हमें उस बिंदु तक ले जाएगा? मुझे नहीं पता। अभी के लिए, मेरे व्यक्तिगत रूप से, स्पैम एक समस्या नहीं है। लेकिन स्पैमर्स ने अभी तक सांख्यिकीय फिल्टरों को धोखा देने का गंभीर प्रयास नहीं किया है। जब वे ऐसा करेंगे तो क्या होगा?
मुझे नेटवर्क स्तर पर काम करने वाले फिल्टरों के बारे में आशावादी नहीं हूं [13]। जब कोई स्थिर बाधा पार करने योग्य होती है, तो स्पैमर उसे पार करने में काफी कुशल होते हैं। एक कंपनी, जिसे एश्योरेंस सिस्टम्स कहा जाता है, पहले से ही आपके मेल को स्पैमएसएसिन से गुजारकर बताती है कि क्या यह फिल्टर किया जाएगा।
नेटवर्क स्तर के फिल्टर पूरी तरह से बेकार नहीं होंगे। वे "ऑप्ट-इन" स्पैम को मार सकते हैं, यानी कि कंपनियों जैसे वर्चुमुंडो और इक्वालमेल से आने वाला स्पैम, जो दावा करते हैं कि वे वास्तव में ऑप्ट-इन सूचियों का संचालन कर रहे हैं। आप केवल हेडर के आधार पर उन्हें फिल्टर कर सकते हैं, भले ही वे शरीर में क्या कहें। लेकिन जो लोग हेडर को जालसाजी करने या ओपन रिले का उपयोग करने के लिए तैयार हैं, शायद अधिकांश पोर्न स्पैमर्स, वे नेटवर्क स्तर के फिल्टरों से कुछ संदेश पार कर सकते हैं यदि वे चाहते हैं। (हालांकि, जो संदेश वे भेजना चाहते हैं वह कुछ भी नहीं होगा।)
जिन फिल्टरों के बारे में मैं आशावादी हूं, वे हैं जो प्रत्येक व्यक्तिगत उपयोगकर्ता के मेल पर आधारित संभावनाओं की गणना करते हैं। ये कहीं अधिक प्रभावी हो सकते हैं, न केवल गलत धनात्मक परिणामों से बचने में, बल्कि फिल्टरिंग में भी: उदाहरण के लिए, किसी संदेश में किसी प्राप्तकर्ता के ईमेल पता को बेस-64 एन्कोडेड पाना एक बहुत अच्छा स्पैम संकेतक है।
लेकिन व्यक्तिगत फिल्टरों का वास्तविक लाभ यह है कि वे सभी अलग-अलग होंगे। यदि हर किसी के फिल्टर में अलग-अलग संभावनाएं हैं, तो यह स्पैमरों के अनुकूलन लूप, जिसे प्रोग्रामर लोग उनके संपादन-कंपाइल-परीक्षण चक्र कहते हैं, भयानक धीमा कर देगा। बजाय इसके कि वे अपने डेस्कटॉप पर किसी फिल्टर की प्रति में संशोधन करके स्पैम को पार करने का प्रयास करें, उन्हें प्रत्येक संशोधन के लिए एक परीक्षण मेल भेजना होगा। यह उन लोगों के लिए एक इंटरैक्टिव टॉपलेवल के बिना भाषा में प्रोग्रामिंग करने जैसा होगा, और मैं किसी पर भी यह नहीं चाहूंगा।
नोट्स
[1] पॉल ग्राहम। "स्पैम के लिए एक योजना।" अगस्त 2002। http://paulgraham.com/spam.html।
इस एल्गोरिदम में संभावनाएं बेयेज के नियम के एक विकृत मामले का उपयोग करके गणना की जाती हैं। दो सरलीकरण धारणाएं हैं: कि विशेषताओं (यानी शब्दों) की संभावनाएं स्वतंत्र हैं, और कि हमें किसी ईमेल को स्पैम होने की पूर्व संभावना के बारे में कुछ भी नहीं पता है।
पहली धारणा पाठ वर्गीकरण में व्यापक है। इस धारणा का उपयोग करने वाले एल्गोरिदम को "नाइव बेयेज" कहा जाता है।
दूसरी धारणा मैंने इसलिए की क्योंकि मेरे आने वाले मेल में स्पैम का अनुपात दिन-प-दिन (वास्तव में घंटे-घंटे) इतना उतार-चढ़ाव करता था कि कुल पूर्व अनुपात एक भविष्यवक्ता के रूप में बेकार लगता था। यदि आप मान लेते हैं कि P(स्पैम) और P(गैर-स्पैम) दोनों .5 हैं, तो वे रद्द हो जाते हैं और आप उन्हें सूत्र से हटा सकते हैं।
यदि आप ऐसे स्थिति में बेयेज फिल्टरिंग कर रहे हैं जहां स्पैम और गैर-स्पैम का अनुपात लगातार बहुत अधिक या (विशेष रूप से) बहुत कम है, तो आप पूर्व संभावनाओं को शामिल करके फिल्टर प्रदर्शन में सुधार कर सकते हैं। इसे सही ढंग से करने के लिए आपको दिन के समय के अनुसार अनुपात ट्रैक करना होगा, क्योंकि स्पैम और वैध मेल दोनों की मात्रा में दिन-प्रतिदिन के पैटर्न हैं।
[2] पैट्रिक पैनटेल और देकांग लिन। "स्पैमकॉप-- एक स्पैम वर्गीकरण और संगठन कार्यक्रम।" AAAI-98 कार्यशाला कार्यवाही, पाठ वर्गीकरण के लिए सीखना।
[3] मेहरान सहामी, सुजन डुमेस, डेविड हेकरमैन और एरिक होर्विट्ज। "जंक ई-मेल को फिल्टर करने के लिए एक बेयेज दृष्टिकोण।" AAAI-98 कार्यशाला कार्यवाही, पाठ वर्गीकरण के लिए सीखना।
[4] उस समय मेरे पास लगभग 4,000 वैध ईमेल में से शून्य गलत धनात्मक थे। यदि अगला वैध ईमेल एक गलत धनात्मक था, तो यह हमें .03% देता। ये गलत धनात्मक दर विश्वसनीय नहीं हैं, जैसा कि मैं बाद में समझाता हूं। मैं यहां एक संख्या का उल्लेख केवल इस बात पर जोर देने के लिए करता हूं कि जो भी गलत धनात्मक दर हो, वह 1.16% से कम है।
[5] बिल येरजुनिस। "स्पार्स बाइनरी पॉलीनोमियल हैश संदेश फिल्टरिंग और सीआरएम114 डिस्क्रिमिनेटर।" 2003 स्पैम सम्मेलन की कार्यवाही।
[6] "स्पैम के लिए एक योजना" में मैंने .99 और .01 के थ्रेशोल्ड का उपयोग किया था। कॉर्पस के आकार के अनुपात में थ्रेशोल्ड का उपयोग करना उचित प्रतीत होता है। चूंकि मेरे पास अब प्रत्येक प्रकार के मेल का लगभग 10,000 है, इसलिए मैं .9999 और .0001 का उपयोग करता हूं।
[7] यहां एक दोष है जिसे मुझे संभवतः ठीक करना चाहिए। वर्तमान में, जब "Subjectfoo" केवल "foo" तक सुनिश्चित हो जाता है, तो इसका अर्थ यह है कि आप उन पंक्तियों में "foo" की घटनाओं के आंकड़ों को प्राप्त कर रहे हैं जिन्हें मैं चिह्नित नहीं करता। जो मैं करना चाहता हूं वह यह है कि "foo" के लिए कुल और विशिष्ट संस्करणों दोनों के लिए आंकड़ों को ट्रैक करूं, और "Subjectfoo" से सुनिश्चित न होकर "Anywhere*foo" तक सुनिश्चित हो जाऊं। इसी तरह, मामले के लिए: मुझे केवल लोअरकेस में नहीं, बल्कि किसी भी मामले में "foo" तक सुनिश्चित होना चाहिए।
कीमतों के साथ भी यह करना एक जीत होगा, उदाहरण के लिए, "$129.99" से "$--9.99", "$--.99", और "$--" तक सुनिश्चित होना।
आप शब्दों को उनके स्टेम तक भी सुनिश्चित कर सकते हैं, लेकिन यह संभवतः केवल तब सुधार करेगा जब आपके पास छोटे कॉर्पस होंगे।
[8] स्टीवन हाउजर। "सांख्यिकीय स्पैम फिल्टर मेरे लिए काम करता है।" http://www.sofbot.com।
[9] गलत धनात्मक सभी समान नहीं होते, और जब हम स्पैम को रोकने के तरीकों की तुलना करते हैं, तो हमें इसे याद रखना चाहिए। जबकि फिल्टरों के कारण होने वाले अधिकांश गलत धनात्मक लगभग स्पैम होंगे जिन्हें आप नहीं चूकना चाहेंगे, ब्लैकलिस्ट के कारण होने वाले गलत धनात्मक केवल ऐसे लोगों का मेल होगा जिन्होंने गलत आईएसपी का चयन किया। दोनों मामलों में आप स्पैम के करीब का मेल पकड़ते हैं, लेकिन ब्लैकलिस्ट के लिए निकटता भौतिक है, और फिल्टरों के लिए यह पाठ्य है।
[10] यदि स्पैमर टोकन को धुंधला करने में इतने अच्छे हो जाते हैं कि यह समस्या बन जाती है, तो हम केवल व्हाइटस्पेस, पूर्णविराम, कॉमा आदि को हटाकर और एक शब्दकोश का उपयोग करके शब्दों को निकालने का प्रयास कर सकते हैं। और निश्चित रूप से मूल पाठ में दिखाई न देने वाले शब्दों को खोजना स्वयं में स्पैम का सबूत होगा।
शब्दों को निकालना आसान नहीं होगा। यह केवल शब्द सीमाओं को पुनर्गठित करने से अधिक होगा; स्पैमर दोनों जोड़ते हैं ("xHot nPorn cSite") और छोड़ते हैं ("P#rn")। यहां दृश्य अनुसंधान उपयोगी हो सकता है, क्योंकि मानव द
[11] सामान्य रूप से, स्पैम नियमित ईमेल की तुलना में अधिक दोहराव वाले होते हैं। वे उस संदेश को घर में पीटना चाहते हैं। वर्तमान में मैं शीर्ष 15 टोकन में प्रतिलिपियों की अनुमति नहीं देता हूं, क्योंकि यदि भेजने वाला किसी बुरे शब्द का बार-बार उपयोग करता है, तो आप एक झूठा सकारात्मक प्राप्त कर सकते हैं। (मेरे वर्तमान फ़िल्टर में, ``dick'' का स्पैम संभावना 0.9999 है, लेकिन यह एक नाम भी है।) लगता है कि हमें कम से कम दोहराव पर ध्यान देना चाहिए, इसलिए मैं ब्रायन बर्टन द्वारा SpamProbe में किए गए अनुसार प्रत्येक टोकन की अधिकतम दो की अनुमति देने की कोशिश कर सकता हूं।
[12] यह वह है जिसमें Brightmail जैसे दृष्टिकोण तब तक पदावनत हो जाएंगे जब तक कि स्पैमर्स को संदेश में अन्य सब कुछ उत्पन्न करने के लिए मैड-लिब तकनीकों का उपयोग करने के लिए धकेला नहीं जाता है।
[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