स्पैम के लिए एक योजना
Originalअगस्त 2002
(यह लेख उस स्पैम-फिल्टरिंग तकनीक का वर्णन करता है जिसका उपयोग हमने Arc का अभ्यास करने के लिए बनाए गए स्पैम-प्रूफ वेब-आधारित मेल रीडर में किया था। एक सुधारित एल्गोरिदम का वर्णन Better Bayesian Filtering में किया गया है।)
मुझे लगता है कि स्पैम को रोकना संभव है, और इसके लिए सामग्री-आधारित फिल्टर ही सबसे अच्छा तरीका हैं। स्पैमर्स की एचिल्स एड़ी उनका संदेश है। वे आपके द्वारा लगाए गए किसी भी अन्य बाधा को पार कर सकते हैं। कम से कम अब तक तो वे ऐसा कर पाए हैं। लेकिन उन्हें अपना संदेश, चाहे वह कुछ भी हो, पहुंचाना ही होता है। यदि हम ऐसा सॉफ्टवेयर लिख सकते हैं जो उनके संदेशों को पहचान सके, तो उन्हें इससे कोई भी तरह से बचाव करने का कोई रास्ता नहीं होगा।
प्राप्तकर्ता के लिए, स्पैम आसानी से पहचाना जा सकता है। यदि आप किसी व्यक्ति को अपने मेल को पढ़ने और स्पैम को फेंकने के लिए नियुक्त करें, तो उन्हें इसे करने में कोई कठिनाई नहीं होगी। एआई के अलावा, इस प्रक्रिया को स्वचालित करने के लिए हमें क्या करना होगा?
मुझे लगता है कि हम काफी सरल एल्गोरिदमों के साथ इस समस्या का समाधान कर सकते हैं। वास्तव में, मैंने पाया है कि आप वर्तमान स्पैम को काफी अच्छी तरह से फिल्टर कर सकते हैं, केवल व्यक्तिगत शब्दों के स्पैम संभावनाओं के बेयेसियन संयोजन का उपयोग करके। नीचे वर्णित थोड़े से संशोधित (बेयेसियन फिल्टर का उपयोग करके), हम 1000 में से 5 से कम स्पैम को छूट जाते हैं, 0 गलत धनात्मक के साथ।
सांख्यिकीय दृष्टिकोण वह दृष्टिकोण नहीं है जिसे लोग स्पैम फिल्टर लिखते समय पहले आजमाते हैं। अधिकांश हैकर्स का पहला प्रवृत्ति स्पैम के व्यक्तिगत गुणों को पहचानने वाला सॉफ्टवेयर लिखने की होती है। आप स्पैम को देखते हैं और सोचते हैं, इन लोगों की बेशर्मी कि वे मुझे "प्रिय मित्र" से शुरू होने वाला मेल भेजने की कोशिश कर रहे हैं या उनका विषय पंक्ति पूरी तरह से अक्षर में है और आठ विस्मयबोधक चिह्नों से समाप्त होता है। मैं इस तरह का कुछ भी फिल्टर करने के लिए लगभग एक पंक्ति का कोड लिख सकता हूं।
और इसलिए आप ऐसा ही करते हैं, और शुरू में यह काम करता है। कुछ सरल नियम आपके आने वाले स्पैम का एक बड़ा हिस्सा कम कर देंगे। केवल "क्लिक" शब्द की तलाश करने से मेरे स्पैम कॉर्पस में मौजूद ईमेलों का 79.7% पकड़ा जा सकता है, केवल 1.2% गलत धनात्मक के साथ।
मैंने लगभग छह महीने तक स्पैम की व्यक्तिगत विशेषताओं को पहचानने वाला सॉफ्टवेयर लिखने में बिताए, जबतक कि मैंने सांख्यिकीय दृष्टिकोण आजमाया। जो मैंने पाया वह यह था कि अंतिम कुछ प्रतिशत स्पैम को पहचानना बहुत कठिन हो गया, और जैसे-जैसे मैंने फिल्टर को कठोर बनाया, मुझे अधिक गलत धनात्मक मिलने लगे।
गलत धनात्मक वे निर्दोष ईमेल हैं जिन्हें गलती से स्पैम के रूप में पहचान लिया जाता है। अधिकांश उपयोगकर्ताओं के लिए, वैध ईमेल को छूटने से निर्दोष ईमेल प्राप्त करने से कहीं अधिक गंभीर समस्या है, इसलिए एक ऐसा फिल्टर जो गलत धनात्मक देता है, वह मरीज के लिए मृत्यु का जोखिम लेने वाले एक ऐसे एक्ने उपचार की तरह है।
जितना अधिक स्पैम कोई उपयोगकर्ता प्राप्त करता है, उतना ही कम संभावना है कि वह अपने स्पैम फोल्डर में पड़े किसी निर्दोष मेल को देखेगा। और अजीब बात यह है कि आपके स्पैम फिल्टर जितने अच्छे होते हैं, गलत धनात्मक का खतरा उतना ही अधिक हो जाता है, क्योंकि जब फिल्टर वास्तव में अच्छे होते हैं, तो उपयोगकर्ता उन्हें पकड़ने वाली सभी चीजों को अनदेखा करने की अधिक संभावना होती है।
मुझे नहीं पता कि मैंने सांख्यिकीय दृष्टिकोण आजमाने से इतना लंबा क्यों बच गया। मुझे लगता है कि इसका कारण यह था कि मैं स्वयं स्पैम की विशेषताओं को पहचानने की कोशिश करके एक प्रकार का प्रतियोगिता खेल खेलने में लगा रहता था। (गैर-हैकर्स को अक्सर नहीं पता होता है, लेकिन अधिकांश हैकर बहुत प्रतिस्पर्धी होते हैं।) जब मैंने सांख्यिकीय विश्लेषण आजमाया, तो मुझे तुरंत पता चला कि यह मेरे द्वारा किए गए प्रयासों से कहीं अधिक चतुर था। इसने, बेशक, यह पता लगाया कि "virtumundo" और "teens" जैसे शब्द स्पैम के अच्छे संकेतक हैं। लेकिन इसने यह भी पता लगाया कि "per" और "FL" और "ff0000" भी स्पैम के अच्छे संकेतक हैं। वास्तव में, "ff0000" (चमकदार लाल के लिए एचटीएमएल) स्पैम का संकेतक किसी अश्लील शब्द के समान ही अच्छा निकलता है।
यहां मैं सांख्यिकीय फिल्टरिंग का एक स्केच दे रहा हूं। मैं स्पैम और गैर-स्पैम मेल के एक-एक कॉर्पस से शुरू करता हूं। वर्तमान में प्रत्येक में लगभग 4000 संदेश हैं। मैं प्रत्येक संदेश के पूरे पाठ, सहित हेडर और एम्बेडेड एचटीएमएल और जावास्क्रिप्ट, को स्कैन करता हूं। वर्तमान में मैं अक्षर-संख्यात्मक वर्ण, डैश, एपोस्ट्रोफी और डॉलर चिह्न को टोकन का हिस्सा मानता हूं, और शेष सब कुछ को टोकन विभाजक मानता हूं। (यहां सुधार की गुंजाइश है।) मैं सभी अंकों वाले टोकन को अनदेखा कर देता हूं, और मैं एचटीएमएल टिप्पणियों को भी अनदेखा कर देता हूं, उन्हें टोकन विभाजक के रूप में भी नहीं मानता।
मैं प्रत्येक कॉर्पस में प्रत्येक टोकन (केस को अनदेखा करते हुए, वर्तमान में) की घटनाओं की संख्या गिनता हूं। इस चरण में मैं दो बड़े हैश टेबल के साथ रह जाता हूं, एक-एक कॉर्पस के लिए, जो टोकन को घटनाओं की संख्या मैप करते हैं।
अगला चरण यह है कि मैं एक तीसरा हैश टेबल बनाता हूं, जो प्रत्येक टोकन को उस संभावना से मैप करता है कि क्या कोई ईमेल जिसमें यह टोकन मौजूद है स्पैम है, जिसे मैं निम्नानुसार गणना करता हूं [1]:
(let ((g (* 2 (or (gethash word good) 0))) (b (or (gethash word bad) 0))) (unless (< (+ g b) 5) (max .01 (min .99 (float (/ (min 1 (/ b nbad)) (+
(min 1 (/ g ngood)) (min 1 (/ b nbad)))))))))
जहां word वह टोकन है जिसकी संभावना हम गणना कर रहे हैं, good और bad पहले चरण में मैंने बनाए थे, और ngood और nbad क्रमशः गैर-स्पैम और स्पैम संदेशों की संख्या हैं।
मैंने इसे कोड के रूप में समझाया ताकि कुछ महत्वपूर्ण विवरण दिखाई दें। मैं गलत धनात्मक से बचने के लिए संभावनाओं को थोड़ा झुकाना चाहता हूं, और परीक्षण और त्रुटि के माध्यम से मैंने पाया है कि इसका एक अच्छा तरीका good में सभी संख्याओं को दोगुना करना है। यह वर्ड्स को पहचानने में मदद करता है जो कभी-कभी वैध ईमेल में भी आते हैं और वे शब्द जो लगभग कभी नहीं आते। मैं केवल उन शब्दों पर विचार करता हूं जो कुल मिलाकर पांच बार से अधिक आते हैं (वास्तव में, दोगुनी होने के कारण, गैर-स्पैम मेल में तीन बार आना भी काफी होगा)। और फिर एक और प्रश्न है कि एक कॉर्पस में मौजूद लेकिन दूसरे में नहीं मौजूद शब्दों को क्या संभावना आवंटित की जाए। फिर से परीक्षण और त्रुटि के माध्यम से मैंने .01 और .99 का चयन किया है। यहां ट्यूनिंग की गुंजाइश हो सकती है, लेकिन जैसे-जैसे कॉर्पस बढ़ता जाएगा, ऐसी ट्यूनिंग स्वचालित रूप से हो जाएगी।
विशेष रूप से गौरवान्वित लोग देखेंगे कि जबकि मैं घटनाओं की गणना के उद्देश्य से प्रत्येक क
एक व्यावहारिक प्रश्न जो उठता है वह यह है कि आप कभी नहीं देखे गए शब्द, यानी हैश टेबल में शब्द संभावनाओं में नहीं मौजूद शब्द, को किस संभावना को आवंटित करें। मैंने, एक बार फिर से परीक्षण और त्रुटि से, पाया है कि .4 एक अच्छा संख्या है जिसका उपयोग किया जा सकता है। यदि आप किसी शब्द को पहली बार देख रहे हैं, तो यह संभवतः काफी निर्दोष है; स्पैम शब्द बहुत परिचित होने की प्रवृत्ति रखते हैं।
अंत में एक परिशिष्ट में वास्तविक ईमेलों पर इस एल्गोरिदम के प्रयोग के उदाहरण हैं।
मैं ईमेल को स्पैम मानता हूं यदि उपरोक्त एल्गोरिदम इसे स्पैम होने की .9 से अधिक संभावना देता है। लेकिन व्यावहारिक रूप से यह महत्वपूर्ण नहीं होगा कि मैं इस सीमा को कहां रखता हूं, क्योंकि कम संभावनाएं मध्य श्रेणी में नहीं आती हैं।
सांख्यिकीय दृष्टिकोण का एक महान लाभ यह है कि आपको इतने सारे स्पैम को पढ़ने की जरूरत नहीं है। पिछले छह महीनों में, मैंने वास्तव में हजारों स्पैम पढ़े हैं, और यह वास्तव में निराशाजनक है। नॉर्बर्ट वीनर ने कहा था कि यदि आप गुलामों के साथ प्रतिस्पर्धा करते हैं तो आप गुलाम बन जाते हैं, और स्पैमरों के साथ प्रतिस्पर्धा करना भी इसी तरह का अपमानजनक है। व्यक्तिगत स्पैम सुविधाओं को पहचानने के लिए आपको स्पैमर के मन में प्रवेश करने की कोशिश करनी होती है, और सच कहूं तो मैं स्पैमरों के मन के भीतर जितना संभव हो उतना कम समय बिताना चाहता हूं।
लेकिन बेज़ियन दृष्टिकोण का वास्तविक लाभ, निश्चित रूप से, यह है कि आप जानते हैं कि आप क्या मापन कर रहे हैं। SpamAssassin जैसे सुविधा-पहचानने वाले फ़िल्टर ईमेल को एक स्पैम "स्कोर" देते हैं। बेज़ियन दृष्टिकोण वास्तविक संभावना देता है। "स्कोर" की समस्या यह है कि कोई नहीं जानता कि इसका क्या अर्थ है। उपयोगकर्ता नहीं जानता कि इसका क्या अर्थ है, लेकिन इससे भी बदतर, फ़िल्टर के विकासकर्ता को भी नहीं पता। "सेक्स" शब्द होने पर ईमेल को कितने अंक मिलने चाहिए? संभावना गलत हो सकती है, लेकिन इसका क्या अर्थ है और सबूत को कैसे संयोजित किया जाना चाहिए, इसके बारे में कम अस्पष्टता है। मेरे कॉर्पस के आधार पर, "सेक्स" ईमेल को स्पैम होने की .97 संभावना दिखाता है, जबकि "सेक्सी" .99 संभावना दिखाता है। और बेज़ का नियम, समान रूप से अस्पष्ट, कहता है कि यदि कोई ईमेल दोनों शब्दों को समाविष्ट करता है, तो (अन्य किसी सबूत के अभाव में) इसकी 99.97% संभावना होगी कि यह स्पैम है।
क्योंकि यह संभावनाओं को मापता है, बेज़ियन दृष्टिकोण ईमेल में मौजूद सभी सबूतों, अच्छे और बुरे दोनों, पर विचार करता है। स्पैम में असाधारण रूप से कम होने वाले शब्द ("हालांकि" या "आज रात" या "लगभग") संभावना को कम करने में उतना ही योगदान देते हैं, जितना "अनसब्सक्राइब" और "ऑप्ट-इन" जैसे बुरे शब्द इसे बढ़ाते हैं। इसलिए यदि कोई अन्यथा निर्दोष ईमेल "सेक्स" शब्द को शामिल करता है, तो इसे स्पैम के रूप में चिह्नित नहीं किया जाएगा।
आदर्श रूप से, संभावनाएं प्रत्येक उपयोगकर्ता के लिए व्यक्तिगत रूप से गणना की जानी चाहिए। मुझे "लिस्प" शब्द वाले बहुत सारे ईमेल मिलते हैं, और (अभी तक) कोई स्पैम नहीं मिला है। इसलिए एक ऐसा शब्द मेरे लिए एक प्रकार का पासवर्ड है जिसके माध्यम से मुझे ईमेल भेजा जा सकता है। मेरे पहले के स्पैम-फ़िल्टरिंग सॉफ़्टवेयर में, उपयोगकर्ता ऐसे शब्दों की एक सूची बना सकता था और ऐसे शब्द वाले ईमेल स्वचालित रूप से फ़िल्टर को पार कर जाते थे। मेरी सूची में मैंने "लिस्प" और भी मेरा ज़िपकोड डाला था, ताकि (अन्यथा काफी स्पैम-जैसे) ऑनलाइन ऑर्डर से प्राप्त रसीदें पार कर जाएं। मैं बहुत चतुर होने का दावा कर रहा था, लेकिन मुझे पता चला कि बेज़ियन फ़िल्टर ने मेरे लिए यही काम किया, और इसके अलावा मैंने सोचे नहीं थे ऐसे कई शब्द खोज लिए।
जब मैंने शुरू में कहा था कि हमारे फ़िल्टर 1000 में से 5 से कम स्पैम को छोड़ देते हैं और 0 गलत धकेलते हैं, तो मैं अपने ईमेल पर आधारित कॉर्पस का उपयोग करके फ़िल्टरिंग के बारे में बात कर रहा था। लेकिन ये आंकड़े गलत नहीं हैं, क्योंकि यही दृष्टिकोण मैं सुझाव दे रहा हूं: प्रत्येक उपयोगकर्ता के ईमेल को उसके द्वारा प्राप्त स्पैम और गैर-स्पैम ईमेल के आधार पर फ़िल्टर करें। बुनियादी रूप से, प्रत्येक उपयोगकर्ता के पास दो हटाने के बटन होने चाहिए, सामान्य हटाना और स्पैम के रूप में हटाना। स्पैम के रूप में हटाया गया कुछ भी स्पैम कॉर्पस में जाता है, और शेष सब गैर-स्पैम कॉर्पस में जाता है।
आप उपयोगकर्ताओं को एक बीज फ़िल्टर के साथ शुरू कर सकते हैं, लेकिन अंततः प्रत्येक उपयोगकर्ता को वास्तविक ईमेल के आधार पर अपनी प्रति-शब्द संभावनाओं पर आधारित होना चाहिए। इससे (क) फ़िल्टर अधिक प्रभावी हो जाते हैं, (ख) प्रत्येक उपयोगकर्ता अपनी स्पैम की सटीक परिभाषा तय कर सकता है, और (ग) शायद सबसे अच्छा यह है कि यह स्पैमरों के लिए फ़िल्टर को पार करने के लिए ट्यून करना मुश्किल बना देता है। यदि फ़िल्टर का अधिकांश दिमाग व्यक्तिगत बेस में होता है, तो केवल बीज फ़िल्टर को पार करने के लिए स्पैम को ट्यून करना व्यक्तिगत रूप से अधिक प्रशिक्षित और बहुत अधिक विविध फ़िल्टर को पार करने की गारंटी नहीं देगा।
सामग्री-आधारित स्पैम फ़िल्टरिंग को अक्सर व्हाइटलिस्ट के साथ जोड़ा जाता है, जो उन प्रेषकों की सूची है जिनके ईमेल को किसी भी फ़िल्टरिंग के बिना स्वीकार किया जा सकता है। ऐसी व्हाइटलिस्ट बनाने का एक आसान तरीका यह है कि उपयोगकर्ता द्वारा कभी भी भेजे गए प्रत्येक पते की सूची रखी जाए। यदि एक मेल रीडर में एक स्पैम के रूप में हटाने का बटन है, तो आप उपयोगकर्ता द्वारा सामान्य कचरे के रूप में हटाए गए प्रत्येक ईमेल के from पते को भी जोड़ सकते हैं।
मैं व्हाइटलिस्ट का समर्थन करता हूं, लेकिन अधिक गणना बचाने के तरीके के रूप में, फ़िल्टरिंग को बेहतर बनाने के तरीके के रूप में नहीं। मैं पहले सोचता था कि व्हाइटलिस्ट फ़िल्टरिंग को आसान बना देंगे, क्योंकि आपको केवल उन लोगों के ईमेल को फ़िल्टर करना होगा जिनसे आप पहली बार संपर्क कर रहे हैं, और किसी को पहली बार आपको ईमेल भेजने में परंपरा द्वारा प्रतिबंधित होना चाहिए। आप जिन लोगों को पहले से जानते हैं, वे आपको ईमेल में सेक्स के बारे में बात कर सकते हैं, लेकिन जो आपको पहली बार ईमेल भेज रहे हैं, वे ऐसा संभवतः नहीं करेंगे। समस्या यह है कि लोगों के पास एक से अधिक ईमेल पते हो सकते हैं, इसलिए एक नया from-पता यह गारंटी नहीं देता है कि प्रेषक आपको पहली बार लिख रहा है। यह आम है कि एक पुराना दोस्त (खासकर यदि वह हैकर है) अचानक एक नए from-पते के साथ आपको ईमेल भेजे, इसलिए अज्ञात पतों से आने वाले ईमेल को विशेष रूप से कड़ा फ़िल्टर करने का जोखिम नहीं लिया जा सकता।
एक अर्थ में, हालांकि, मेरे फ़िल्टर खुद एक प्रकार की व्हाइटलिस्ट (और काली सूची) को अंतर्निहित करते हैं क्योंकि वे पूरे संदेशों, हेडर सहित, पर आधारित हैं। इस हद तक वे विश्वसनीय प्रेषकों और यहां तक कि मुझे उन
फिर भी, जो भी स्पैम फिल्टरिंग के लिए एक योजना प्रस्तावित करता है, उसे यह सवाल का जवाब देने में सक्षम होना चाहिए: अगर स्पैमर्स जानते हैं कि आप क्या कर रहे हैं, तो वे आपको कितनी अच्छी तरह से पार कर सकते हैं? उदाहरण के लिए, मुझे लगता है कि अगर चेकसम-आधारित स्पैम फिल्टरिंग एक गंभीर बाधा बन जाती है, तो स्पैमर्स केवल संदेश शरीर बनाने के लिए मैड-लिब तकनीकों का उपयोग करना शुरू कर देंगे।
बेयेसियन फिल्टरों को हराने के लिए, स्पैमर्स के लिए यह पर्याप्त नहीं होगा कि वे अपने ईमेल को अद्वितीय बना दें या नुकसानदेह शब्दों का उपयोग करना बंद कर दें। उन्हें अपने सामान्य मेल से अवश्य भिन्न दिखने वाले मेल भेजने होंगे। और मुझे लगता है कि यह उन्हें काफी सीमित करेगा। स्पैम मुख्य रूप से बिक्री प्रस्ताव हैं, इसलिए जब तक आपका नियमित मेल सभी बिक्री प्रस्ताव नहीं है, स्पैम अवश्य ही एक अलग प्रकृति का होगा। और स्पैमर्स को, बेशक, अपने पूरे बुनियादी ढांचे को भी बदलना (और लगातार बदलते रहना) होगा, क्योंकि अन्यथा हेडर्स बेयेसियन फिल्टरों के लिए हमेशा की तरह ही खराब दिखेंगे, भले ही वे संदेश शरीर के साथ क्या करें। मुझे स्पैमर्स द्वारा उपयोग किए जाने वाले बुनियादी ढांचे के बारे में पर्याप्त जानकारी नहीं है, लेकिन मेरा अनुमान है कि हेडर्स को निर्दोष दिखाना संदेश को निर्दोष दिखाने से भी कठिन होगा।
यह मानते हुए कि वे हेडर्स की समस्या को हल कर सकते हैं, भविष्य के स्पैम शायद इस प्रकार दिखेंगे:
Hey there. Thought you should check out the following: http://www.27meg.com/foo
क्योंकि यह उस बिक्री प्रस्ताव का लगभग इतना ही है, जितना कि सामग्री-आधारित फिल्टरिंग स्पैमर को करने की अनुमति देगी। (वास्तव में, यह भी फिल्टरों को पार करना मुश्किल होगा, क्योंकि अगर ईमेल में अन्य सब कुछ तटस्थ है, तो स्पैम संभावना यूआरएल पर निर्भर करेगी, और उसे तटस्थ दिखने के लिए कुछ प्रयास करना होगा।)
स्पैमर व्यवसाय चलाने वाले ऐसे लोगों से लेकर पोर्न साइटों को बढ़ावा देने के लिए मेल सर्वर हाइजैक करने वाले लोगों तक का एक स्पेक्ट्रम होता है। अगर हम फिल्टरिंग का उपयोग करके उनके विकल्पों को उपरोक्त जैसे मेल तक सीमित कर देते हैं, तो यह "वैध" छोर पर स्पैमर्स को व्यवसाय से बाहर कर देना चाहिए; वे विभिन्न राज्य कानूनों द्वारा अपने स्पैम को स्पैम नहीं होने के बारे में बोलने और आपकी "सदस्यता" रद्द करने के बारे में बोलने के लिए बाध्य महसूस करते हैं, और इस तरह का पाठ्यांश पहचानना आसान होता है।
(मुझे लगता था कि कठोर कानून स्पैम को कम नहीं करेंगे। अब मुझे लगता है कि जबकि कठोर कानून स्पैमर्स द्वारा भेजे जाने वाले स्पैम की मात्रा को कम नहीं कर सकते, लेकिन वे निश्चित रूप से प्राप्तकर्ताओं द्वारा देखे जाने वाले स्पैम की मात्रा को कम कर सकते हैं।)
स्पेक्ट्रम के सभी हिस्सों में, अगर आप स्पैमर्स द्वारा किए जा सकने वाले बिक्री प्रस्तावों को सीमित करते हैं, तो आप अवश्य ही उन्हें व्यवसाय से बाहर कर देंगे। यह शब्द व्यवसाय एक महत्वपूर्ण शब्द है जिसे याद रखना है। स्पैमर व्यवसायी हैं। वे स्पैम भेजते हैं क्योंकि यह काम करता है। यह काम करता है क्योंकि हालांकि प्रतिक्रिया दर अत्यंत कम है (सर्वश्रेष्ठ में 15 प्रति मिलियन, बनाम कैटलॉग मेलिंग के 3000 प्रति मिलियन), लेकिन उन्हें लागत लगभग कुछ नहीं है। लागत प्राप्तकर्ताओं के लिए भारी है, प्रत्येक मिलियन प्राप्तकर्ताओं के लिए लगभग 5 मानव-सप्ताह, जो एक सेकंड में स्पैम को हटाने में व्यतीत करते हैं, लेकिन स्पैमर को यह भुगतना नहीं पड़ता।
स्पैम भेजना स्पैमर को कुछ खर्च करता है, हालांकि। [2] इसलिए जितना कम हम प्रतिक्रिया दर कर सकते हैं - चाहे फिल्टरिंग से, या फिल्टरों का उपयोग करके स्पैमर्स को अपने प्रस्तावों को कम करने के लिए मजबूर करके - उतने ही कम व्यवसाय स्पैम भेजना अपने लिए लाभकारी पाएंगे।
स्पैमर्स वे बिक्री प्रस्ताव का उपयोग क्यों करते हैं, यह प्रतिक्रिया दर को बढ़ाने के लिए है। यह शायद स्पैमर के मन में घुसने से भी अधिक घृणित है, लेकिन चलो एक क्षण के लिए उस व्यक्ति के मन में घुसें जो स्पैम का जवाब देता है। यह व्यक्ति या तो अद्भुत विश्वासी है या अपने यौन हितों के बारे में गहरी अस्वीकृति में है। किसी भी मामले में, हमारे लिए घृणित या मूर्खतापूर्ण लगने वाले स्पैम उनके लिए उत्साहजनक हैं। स्पैमर्स ये बातें नहीं कहते होंगे अगर वे उत्साहजनक नहीं लगती होतीं। और "आपको यह जांचना चाहिए" बिल्कुल भी उस आकर्षण का नहीं होगा जो स्पैम प्राप्तकर्ता को अब वाले स्पैमर्स कहते हैं। परिणाम: अगर यह उत्साहजनक बिक्री प्रस्ताव नहीं हो सकता, तो स्पैम एक विपणन माध्यम के रूप में कम प्रभावी हो जाता है, और कम व्यवसाय इसका उपयोग करना चाहते हैं।
यही अंत में बड़ी जीत है। मैंने स्पैम फिल्टरिंग सॉफ्टवेयर लिखना शुरू किया क्योंकि मुझे इसे देखना नहीं था। लेकिन अगर हम स्पैम को फिल्टर करने में काफी अच्छे हो जाते हैं, तो यह काम नहीं करेगा, और स्पैमर वास्तव में इसे भेजना बंद कर देंगे।
स्पैम से लड़ने के सभी アप्रोच में, सॉफ्टवेयर से लेकर कानूनों तक, मुझे लगता है कि बेयेसियन फिल्टरिंग सबसे प्रभावी होगा। लेकिन मुझे लगता है कि जितने अलग-अलग प्रकार के एंटी-स्पैम प्रयास हम करते हैं, उतना ही बेहतर होगा, क्योंकि कोई भी उपाय जो स्पैमर्स को प्रतिबंधित करता है, वह फिल्टरिंग को आसान बनाने की प्रवृत्ति रखता है। और सामग्री-आधारित फिल्टरिंग के दुनिया में भी, मुझे लगता है कि यह अच्छा होगा अगर एक साथ कई अलग-अलग प्रकार के सॉफ्टवेयर का उपयोग किया जा रहा है। जितने अलग-अलग फिल्टर हैं, स्पैमर्स के लिए उतना ही कठिन होगा कि वे उन्हें पार करने के लिए स्पैम को ट्यून करें।
फिल्टरिंग के उदाहरण
यहां मैं इस लेख को लिखते समय प्राप्त हुआ एक स्पैम का उदाहरण है। इस स्पैम में सबसे दिलचस्प 15 शब्द हैं:
qvp0045 indira mx-05 intimail $7500 freeyankeedom cdo bluefoxmedia jpg unsecured platinum 3d0 qves 7c5 7c266675
ये शब्द हेडर और संदेश शरीर दोनों से आते हैं, जो स्पैम के लिए आम है। स्पैम के लिए भी आम है कि इन शब्दों में से प्रत्येक का स्पैम संभावना, मेरे डेटाबेस में, 0.99 है। वास्तव में, 0.99 की संभावना वाले 15 से अधिक शब्द हैं, और ये केवल पहले 15 देखे गए हैं।
दुर्भाग्य से, यह बेयेज नियम के उपयोग का एक बोरिंग उदाहरण बनता है। विभिन्न संभावनाओं का एक दिलचस्प विविधता देखने के लिए हमें यह वास्तव में काफी असामान्य स्पैम देखना होगा।
इस स्पैम में सबसे दिलचस्प 15 शब्द, उनकी संभावनाओं के साथ, हैं:
madam 0.99 promotion 0.99 republic 0.99 shortest 0.047225013 mandatory 0.047225013 standardization 0.07347802 sorry 0.08221981 supported 0.09019077 people's 0.09019077 enter 0.9075001 quality 0.8921298 organization 0.12454646 investment 0.8568143 very 0.14758544 valuable 0.82347786
यह बार सबूत मिश्रित है। "सबसे छोटा" जैसा शब्द उतना ही गुनाह के लिए सबूत है जितना "मैडम" या "प्रमोशन" शब्द गुनाह के लिए है। लेकिन फिर भी गुनाह का मामला अधिक मजबूत है। अगर आप इन संख्याओं को बेज़ के नियम के अनुसार मिलाते हैं, तो परिणामी संभावना .9027 है।
"मैडम" स्पैम से स्पष्ट रूप से "प्रिय महोदय या महोदया" से शुरू होता है। वे बहुत आम नहीं हैं, लेकिन "मैडम" शब्द मेरे वैध ईमेल में कभी नहीं आता है, और यह अनुपात के बारे में है।
"गणराज्य" उच्च स्कोर करता है क्योंकि यह अक्सर नाइजीरियाई स्कैम ईमेल में दिखाई देता है, और कोरिया और दक्षिण अफ्रीका से संबंधित स्पैम में भी एक या दो बार आता है। आप कह सकते हैं कि यह एक दुर्घटना है कि यह इस स्पैम की पहचान करने में मदद करता है। लेकिन जब मैंने स्पैम संभावनाओं की जांच की है, तो मैंने पाया है कि ऐसी कई दुर्घटनाएं हैं, और उनका अचूक रुझान सही दिशा में धकेलने की प्रवृत्ति है बजाय गलत दिशा में। इस मामले में, यह पूरी तरह से एक संयोग नहीं है कि "गणराज्य" शब्द नाइजीरियाई स्कैम ईमेल और इस स्पैम में आता है। कम विकसित देशों से संबंधित संदिग्ध व्यावसायिक प्रस्तावों का एक पूरा वर्ग है, और ये बदले में उन नामों से अधिक संभावना से जुड़े हुए हैं जो स्पष्ट रूप से (क्योंकि वे नहीं हैं) कि वे गणराज्य हैं।[3]
दूसरी ओर, "प्रवेश करें" एक वास्तविक गलती है। यह अधिकांश रद्द करने के निर्देशों में होता है, लेकिन यहां पूरी तरह से निर्दोष तरीके से उपयोग किया जाता है। भाग्य से सांख्यिकीय दृष्टिकोण काफी मजबूत है, और गलतियों की एक बड़ी मात्रा को सहन कर सकता है जब तक कि परिणाम बिगड़ने शुरू नहीं हो जाते।
तुलना के लिए, यहाँ एक उदाहरण है उस दुर्लभ पक्षी का, एक स्पैम जो फिल्टर को पार कर जाता है। क्यों? क्योंकि शुद्ध संयोग से यह मेरे वास्तविक ईमेल में आने वाले शब्दों से भरा हुआ है:
perl 0.01 python 0.01 tcl 0.01 scripting 0.01 morris 0.01 graham 0.01491078 guarantee 0.9762507 cgi 0.9734398 paul 0.027040077 quite 0.030676773 pop3 0.042199217 various 0.06080265 prices 0.9359873 managed 0.06451222 difficult 0.071706355
यहां कुछ अच्छी खबरें हैं। पहली बात, यह मेल शायद उस व्यक्ति के फिल्टर को पार नहीं कर पाएगा जो प्रोग्रामिंग भाषाओं में विशेषज्ञ नहीं है और मोरिस नामक एक अच्छे दोस्त नहीं है। औसत उपयोगकर्ता के लिए, यहां के शीर्ष पांच शब्द तटस्थ होंगे और स्पैम संभावना में योगदान नहीं करेंगे।
दूसरा, मुझे लगता है कि शब्द युग्मों (नीचे देखें) पर आधारित फिल्टरिंग इसे पकड़ सकती है: "लागत प्रभावी", "सेटअप शुल्क", "धन वापसी" - काफी आरोपात्मक सामग्री। और जब वे मुझे (या जिस नेटवर्क का मैं हिस्सा हूं) लगातार स्पैम करते हैं, तो "होस्टेक्स" खुद को स्पैम शब्द के रूप में पहचाना जाएगा।
अंत में, यहाँ एक निर्दोष ईमेल है। इसके पंद्रह सबसे दिलचस्प शब्द इस प्रकार हैं:
continuation 0.01 describe 0.01 continuations 0.01 example 0.033600237 programming 0.05214485 i'm 0.055427782 examples 0.07972858 color 0.9189189 localhost 0.09883721 hi 0.116539136 california 0.84421706 same 0.15981844 spot 0.1654587 us-ascii 0.16804294 what 0.19212411
यहां के शब्दों में से अधिकांश इंगित करते हैं कि मेल एक निर्दोष है। दो बुरी गंध वाले शब्द हैं, "रंग" (स्पैमर रंगीन फ़ॉन्ट पसंद करते हैं) और "कैलिफ़ोर्निया" (जो गवाहियों और फ़ॉर्म में मेन्यू में भी आता है), लेकिन वे "निरंतरता" और "उदाहरण" जैसे स्पष्ट रूप से निर्दोष शब्दों को पलटने के लिए पर्याप्त नहीं हैं।
यह दिलचस्प है कि "वर्णन करें" इतना पूरी तरह से निर्दोष रेट करता है। यह मेरे 4000 स्पैम में से एक में भी नहीं आया है। डेटा ऐसी कई चौंकाने वाली चीजों से भरा पड़ा है। जब आप स्पैम पाठ का विश्लेषण करते हैं, तो आप सीखते हैं कि स्पैमर्स भाषा के कितने संकीर्ण सेट में काम करते हैं। यह तथ्य, साथ ही किसी भी व्यक्तिगत उपयोगकर्ता के मेल की समान रूप से विशिष्ट शब्दावली, बेज़ियन फ़िल्टरिंग को एक अच्छा विकल्प बनाता है।
परिशिष्ट: और विचार
एक विचार जिसे मैंने अभी तक नहीं आजमाया है वह है कि व्यक्तिगत शब्दों के बजाय शब्द युग्मों या यहां तक कि त्रयी पर फ़िल्टर करना। इससे संभावना का बहुत तेज अनुमान होगा। उदाहरण के लिए, मेरे वर्तमान डेटाबेस में, "ऑफ़र" शब्द की संभावना .96 है। अगर आप शब्द युग्मों पर आधारित संभावनाओं का उपयोग करते, तो आप "विशेष ऑफ़र" और "मूल्यवान ऑफ़र" के लिए .99 की संभावना और, कहें, "दृष्टिकोण ऑफ़र" (जैसे "यह दृष्टिकोण ऑफ़र करता है") के लिए .1 या उससे कम की संभावना पा सकते हैं।
इसका कारण यह है कि व्यक्तिगत शब्दों पर आधारित फ़िल्टरिंग पहले से ही बहुत अच्छी तरह काम करती है। लेकिन इसका मतलब है कि अगर स्पैम का पता लगाना कठिन हो जाता है, तो फ़िल्टर को कसना संभव है। (आश्चर्यजनक बात यह है कि शब्द युग्मों पर आधारित एक फ़िल्टर प्रभावी रूप से एक मार्कोव-श्रृंखला पाठ जनरेटर होगा जो उल्टा चल रहा है।)
विशिष्ट स्पैम सुविधाएं (जैसे कि प्राप्तकर्ता के पते को to: फ़ील्ड में न देखना) स्पैम को पहचानने में निश्चित रूप से मूल्यवान हैं। इस एल्गोरिदम में उन्हें "वर्चुअल शब्दों" के रूप में माना जा सकता है। भविष्य के संस्करणों में मैं शायद कुछ सबसे अधिक घृणित स्पैम संकेतकों के लिए ऐसा करूंगा। सुविधा-पहचानने वाले स्पैम फ़िल्टर कई विवरणों में सही हैं; उनमें कमी है एक समग्र अनुशासन जो सबूत को संयोजित करने के लिए है।
गैर-स्पैम सुविधाओं को पहचानना स्पैम सुविधाओं को पहचानने से अधिक महत्वपूर्ण हो सकता है। गलत धनात्मक इतने चिंताजनक हैं कि वे असाधारण उपायों की मांग करते हैं। मैं भविष्य के संस्करणों में एक दूसरे स्तर की जांच जोड़ूंगा जो विशेष रूप से गलत धनात्मक को टालने के लिए डिज़ाइन किया गया है। अगर कोई मेल इस दूसरे स्तर के फ़िल्टर को ट्रिगर करता है, तो यह स्वीकार किया जाएगा भले ही इसकी स्पैम संभावना सीमा से ऊपर हो।
मैं उम्मीद नहीं करता कि यह दूसरा स्तर की फ़िल्टरिंग बेज़ियन होगी। यह अनिवार्य रूप से न केवल एड हॉक होगा, बल्कि अनुमानों पर आधारित होगा, क्योंकि गलत धनात्मक की संख्या पर्याप्त नहीं होगी कि पैटर्न देखे जा सकें। (इसके अलावा, यह अच्छा है, यदि एक बैकअप प्रणाली प्राथमिक प्रणाली के समान प्रौद्योगिकी पर निर्भर न हो।)
भविष्य में मैं एक और चीज़ आज़मा सकता हूं वह है कि मैं ईमेल के विशिष्ट हिस्सों पर अतिरिक्त ध्यान केंद्रित करूं। उदाहरण के लिए, वर्तमान स्पैम का लगभग 95% में वह यूआरएल शामिल होता है जिस पर वे आपको जाने के लिए कहते हैं। (शेष 5% आपको कॉल करने, ईमेल या यूएस मेल पते पर जवाब देने या कुछ मामलों में एक निश्चित स्टॉक खरीदने के लिए कहते हैं।) यूआरएल इन मामलों में लगभग पर्याप्त है खुद से ही निर्धारित करने के लिए कि क्या ईमेल स्पैम है।
डोमेन नाम (गैर-जर्मन) ईमेल में शेष पाठ्य से इस मामले में भिन्न होते हैं कि वे अक्सर कई शब्दों को एक साथ जोड़कर बने होते हैं। सामान्य मामले में यह गणनात्मक रूप से महंगा हो सकता है, लेकिन उन्हें विघटित करने का प्रयास करना उपयुक्त हो सकता है। यदि एक फ़िल्टर ने "xxxporn" टोकन को पहले कभी नहीं देखा है, तो इसकी व्यक्तिगत स्पैम संभावना .4 होगी, जबकि "xxx" और "porn" अलग-अलग रूप से मेरे कॉर्पस में क्रमशः .9889 और .99 की संभावनाएं हैं, और संयुक्त संभावना .9998 है।
मुझे लगता है कि स्पैमर्स को अपने संदेशों के पाठ में आपत्तिजनक शब्दों का उपयोग करना बंद करने के लिए मजबूर होने के साथ-साथ डोमेन नाम विघटन महत्वपूर्ण होता जा रहा है। (एक आईपी पता वाला यूआरएल निश्चित रूप से एक अत्यधिक आपत्तिजनक संकेत है, केवल कुछ सिस्टम प्रशासकों के मेल में को छोड़कर।)
स्पैमर्स द्वारा प्रचारित यूआरएल की एक सहयोगी रूप से बनाई गई सूची होना एक अच्छा विचार हो सकता है। हमें राफ लेवियन द्वारा अध्ययन किए गए प्रकार के विश्वसनीयता मीट्रिक की आवश्यकता होगी ताकि दुर्भावनापूर्ण या अक्षम प्रविष्टियों को रोका जा सके, लेकिन यदि हमारे पास ऐसा कुछ होता, तो यह किसी भी फ़िल्टरिंग सॉफ़्टवेयर को एक बढ़त प्रदान करता। यह बहिष्कार के लिए भी एक सुविधाजनक आधार होगा।
संदिग्ध यूआरएल की जांच करने का एक और तरीका यह हो सकता है कि उपयोगकर्ता उस ईमेल को देखने से पहले उस साइट पर एक क्रॉलर भेजा जाए। आप बेयेसियन फ़िल्टर का उपयोग करके साइट को भी उसी तरह रेट कर सकते हैं जैसे कि एक ईमेल को, और जो कुछ भी साइट पर पाया गया हो, उसे ईमेल के स्पैम होने की संभावना की गणना में शामिल किया जा सकता है। एक यूआरएल जो रीडायरेक्ट पर जाता हो, निश्चित रूप से संदिग्ध होगा।
मुझे लगता है कि एक सहयोगी परियोजना जो वास्तव में एक अच्छा विचार होगा, वह एक विशाल स्पैम कॉर्पस एकत्रित करना होगा। एक बड़ा, स्वच्छ कॉर्पस बेयेसियन फ़िल्टरिंग को अच्छी तरह से काम करने के लिए कुंजी है। बेयेसियन फ़िल्टर वास्तव में इनपुट के रूप में कॉर्पस का उपयोग कर सकते हैं। लेकिन ऐसा कॉर्पस अन्य प्रकार के फ़िल्टरों के लिए भी उपयोगी होगा, क्योंकि इसका उपयोग उन्हें परीक्षण करने के लिए किया जा सकता है।
ऐसे कॉर्पस को बनाने में कुछ तकनीकी समस्याएं हैं। हमें निश्चित रूप से दुर्भावनापूर्ण या अक्षम प्रविष्टियों को रोकने के लिए विश्वसनीयता मीट्रिक की आवश्यकता होगी। हमें कॉर्पस में मौजूद व्यक्तिगत जानकारी (केवल प्रेषक पते और सीसी नहीं, बल्कि अनसब्सक्राइब यूआरएल के तर्क भी) को मिटाने के तरीके भी होने चाहिए। यदि कोई इस परियोजना को लेना चाहता है, तो यह दुनिया के लिए एक अच्छी चीज होगी।
परिशिष्ट: स्पैम को परिभाषित करना
मुझे लगता है कि स्पैम क्या है, इस बारे में एक लगभग सहमति है, लेकिन एक स्पष्ट परिभाषा होना उपयोगी होगा। यदि हम एक केंद्रीय स्पैम कॉर्पस स्थापित करना चाहते हैं, या यहां तक कि स्पैम फ़िल्टरिंग दरों की तुलना करना चाहते हैं, तो हमें ऐसा करना होगा।
शुरू में, स्पैम असॉलिसिटेड वाणिज्यिक ईमेल नहीं है। यदि मेरे पड़ोस में कोई व्यक्ति यह सुनता है कि मैं एक अच्छी स्थिति में पुराने रेली थ्री-स्पीड की तलाश कर रहा हूं, और मुझे इसे बेचने का ईमेल भेजता है, तो मैं प्रसन्न होऊंगा, और फिर भी यह ईमेल वाणिज्यिक और असॉलिसिटेड होगा। स्पैम की परिभाषित विशेषता (वास्तव में इसका raison d'etre) यह नहीं है कि यह असॉलिसिटेड है, बल्कि यह स्वचालित है।
यह भी केवल आकस्मिक है कि स्पैम आमतौर पर वाणिज्यिक होता है। यदि कोई व्यक्ति किसी राजनीतिक कारण का समर्थन करने के लिए बड़े पैमाने पर ईमेल भेजना शुरू कर देता है, तो यह भी उतना ही स्पैम होगा जितना कि एक पॉर्न साइट को प्रचारित करने वाला ईमेल।
मैं प्रस्ताव करता हूं कि हम स्पैम को असॉलिसिटेड स्वचालित ईमेल के रूप में परिभाषित करें। यह परिभाषा इस प्रकार कुछ ईमेल को शामिल करती है जिन्हें कानूनी परिभाषाएं स्पैम नहीं मानती हैं।
स्पैम के कानूनी परिभाषाएं, संभवतः लॉबिस्टों के प्रभाव से, प्राप्तकर्ता के साथ "मौजूदा संबंध" वाले कंपनियों द्वारा भेजे गए मेल को छोड़ देती हैं। लेकिन किसी ऑनलाइन स्टोर से कुछ खरीदना, उदाहरण के लिए, यह नहीं मतलब है कि आप उनसे लगातार ईमेल प्राप्त करने के लिए सहमत हो गए हैं। यदि मैं किसी ऑनलाइन स्टोर से कुछ ऑर्डर करता हूं, और वे फिर मुझे स्पैम भेजते हैं, तो यह अभी भी स्पैम है।
स्पैम भेजने वाली कंपनियां अक्सर आपको "अनसब्सक्राइब" करने या अपने "खाता वरीयताओं" को बदलने के लिए अपनी वेबसाइट पर जाने का तरीका देती हैं। यह मेल को स्पैम होना बंद करने के लिए पर्याप्त नहीं है। ऑप्ट-आउट करना ऑप्ट-इन करने के समान नहीं है। जब तक प्राप्तकर्ता ने स्पष्ट रूप से लेबल किए गए बॉक्स (जिसका डिफ़ॉल्ट नहीं था) पर चेक नहीं किया हो कि वह ईमेल प्राप्त करना चाहता है, तब तक यह स्पैम है।
कुछ व्यावसायिक संबंधों में, आप अनुरोधित कुछ प्रकार के मेल का संकेत देते हैं। जब आप ऑनलाइन ऑर्डर करते हैं, मुझे लगता है कि आप एक रसीद और जब ऑर्डर भेजा जाता है तो उसकी सूचना प्राप्त करने का संकेत देते हैं। जब Verisign मुझे ईमेल भेजता है कि एक डोमेन नाम समाप्त होने वाला है (कम से कम, यदि वे इसके वास्तविक रजिस्ट्रार हैं), तो मुझे इससे कोई आपत्ति नहीं है। लेकिन जब Verisign मुझे ईमेल भेजता है कि मेरी ई-कॉमर्स वेबसाइट बनाने के लिए एक मुफ्त गाइड है, तो यह स्पैम है।
नोट:
[1] इस लेख में दिए गए उदाहरण कॉमन लिस्प में अनुवादित हैं, विश्वास नहीं होगा, लेकिन अधिक पहुंच के लिए। यहां वर्णित अनुप्रयोग वह है जिसे हमने एक नए लिस्प डायलेक्ट Arc का परीक्षण करने के लिए लिखा था, जो अभी जारी नहीं किया गया है।
[2] वर्तमान में न्यूनतम दर लगभग $200 प्रति मिलियन स्पैम लगती है। यह बहुत सस्ता है, प्रति स्पैम 1/50 सेंट। लेकिन 95% स्पैम को फ़िल्टर करना, उदाहरण के लिए, स्पैमरों के लागत को एक निश्चित दर्शक तक पहुंचने के लिए 20 गुना बढ़ा देगा। कुछ भी इतने बड़े मार्जिन नहीं हो सकते हैं कि वे इसे सहन कर सकें।
[3] एक नियम के रूप में, देश के नाम से पहले जितने अधिक विशेषण होते हैं, उतनी ही अधिक भ्रष्ट शासक होते हैं। "द सोशलिस्ट पीपुल्स डेमोक्रेटिक रिपब्लिक ऑफ एक्स" नामक एक देश शायद दुनिया का सबसे खराब जगह हो जहां रहना चाहिए।
धन्यवाद सारा हार्लिन को ड्राफ्ट पढ़ने के लिए; डैनियल गिफ़िन (जो आर्क व्याख्याता का उत्पादन भी कर रहे हैं) को फ़िल्टरिंग और हमारी मेल बुनियादी ढांचे को बनाने के लिए कई अच्छे विचारों के लिए; रॉबर्ट मॉरिस, ट्रेवर ब्लैकवेल और एरान गैट को स्पैम के बारे में कई चर्चाओं के लिए; राफ लेवियन को विश्वसनीयता मीट्रिक के बारे में सलाह के लिए; और चिप कोल्डवेल और सैम स्टेइंगोल्ड को सांख्यिकी के बारे में