消除不需要的電子郵件的六種方法
多年來不請(qǐng)自來的電子郵件問題日漸嚴(yán)重地困擾著人們,但現(xiàn)在有了解決這一問題的辦法。在本文中,David 討論并比較了幾種主要的方法來自動(dòng)消除不需要的電子郵件,同時(shí),還介紹和測試了一些采用這些方法的流行的工具。
不道德的電子郵件發(fā)送者可以不費(fèi)多大成本或根本不費(fèi)成本地分發(fā)大量消息,而正常用戶卻被迫花費(fèi)一些時(shí)間和精力從他們的郵箱中清除這些欺詐性的或不需要的郵件。在本文中,我描述了幾種方法,這些方法用計(jì)算機(jī)代碼來幫助消除不請(qǐng)自來的商業(yè)性電子郵件、病毒、特洛伊木馬和蠕蟲病毒以及懷有惡意的欺詐性電子郵件與其它一些不希望收到的和令人煩惱的電子郵件。在某種意義上,消除垃圾郵件最好的終極解決方案可能是通過立法來制止這種行為。然而,在此期間,即在法律的進(jìn)步(如果有過的話)還未解決公眾不斷所受到的困擾之前,可以用代碼開發(fā)一些工具作為過渡性的解決方案來處理這類問題。
從技術(shù)角度考慮 — 但也是常識(shí) — 我們所說的“垃圾郵件”的含義通常比“不請(qǐng)自來的商業(yè)性電子郵件”的范疇要廣;垃圾郵件包含了所有我們不需要的以及沒有明確表明要發(fā)送給我們的電子郵件。這樣的消息其本身并不總是具有商業(yè)性,而對(duì)于有些消息,很難說是我們所需要的。例如,我們不想感染上病毒(即使來自不謹(jǐn)慎的朋友);通常也不想收到連鎖電子郵件(chain letter),即使這些郵件不是來要錢的;既不想收到來自陌生人的誘勸性的消息;也不想收到完全是欺騙性的郵件。在任何一種情況中,都能很清楚地確定郵件是否為垃圾郵件,許許多多人都曾收到過這樣的郵件。
垃圾郵件的問題是,它會(huì)將正常的電子郵件淹沒。以我的經(jīng)歷為例,幾年前,我偶爾會(huì)收到了一封不請(qǐng)自來的消息,大概每天有一封或兩封。與此相對(duì)照,在這個(gè)月中的每一天,我所收到垃圾郵件的數(shù)目是合法郵件的很多倍。平均大概每收到 1 封正常的郵件就會(huì)得到 10 封垃圾郵件。從某些方面講,我與一般人不同 — 作為一名公眾撰稿人,我的電子郵件地址是公布給大家的;而且,我歡迎那些未曾謀面之人就我所發(fā)表的文章以及我的軟件庫給我發(fā)電子郵件,并且也確實(shí)經(jīng)常收到這方面的電子郵件。遺憾的是,來自陌生人的電子郵件 — 誰也不知道這些郵件使用的是什么電子郵件應(yīng)用程序、哪種 OS 以及本地自然語言等 — 不會(huì)馬上明顯地顯示出它的目的;垃圾郵件發(fā)送者設(shè)法在這種含糊狀態(tài)之下來發(fā)送他們的消息。對(duì)我來講,我的時(shí)間是寶貴的,特別是每時(shí)每刻都有許多工作要做。
隱藏聯(lián)系人信息
對(duì)于一些電子郵件用戶,避免垃圾郵件的非常簡單且合理的方法(而且這種方法也足夠應(yīng)付這個(gè)問題)是,只要牢牢地保護(hù)好電子郵件地址,不泄漏出去。對(duì)于這些人,只將電子郵件地址告訴給那些經(jīng)過挑選的、可信的對(duì)方。另外需要注意的是,挑選電子郵件地址時(shí),避免選用那些容易被猜出的名字以及選用字典里的單詞,在將地址張貼到公共場合時(shí),可以偽裝地址,我們都見過巧妙地編碼成以下形式的電子郵件地址:
除了隱藏地址之外,隱蔽的電子郵件使用者還常常使用一個(gè)或多個(gè)免費(fèi)的電子郵件服務(wù),他們將這些地址作為“用完即棄”的地址。如果自己對(duì)對(duì)方半信半疑但需要與之進(jìn)行電子郵件通信,則可以將一個(gè)臨時(shí)的電子郵件地址用上幾天,然后,只要有垃圾郵件出現(xiàn)(自此之后,可能會(huì)有垃圾郵件源源不斷地發(fā)送到此地址),就廢棄這個(gè)地址。要保護(hù)好“只有心腹知己 ”才能知道的真正地址。
我做過一次非正式的調(diào)查,在 Web 公告板(Web-board)、郵件列表、Usenet 等上討論了垃圾郵件問題,我發(fā)現(xiàn),有了這些基本的預(yù)防性措施,就足以保護(hù)這類電子郵件用戶。
然而,對(duì)于我 — 以及對(duì)于其他許多人 — 這些方法根本不可能完全避免垃圾郵件。我有一個(gè)公開的電子郵件地址,出于許多理由,我必須公開這個(gè)地址。在我能控制的范圍內(nèi),確實(shí)利用了多個(gè)地址來檢測“漏網(wǎng)”垃圾郵件的來源;但不幸的事實(shí)是,大多數(shù)垃圾郵件發(fā)送者可以用與合法郵件發(fā)送者相同的方法獲取到我的電子郵件地址:象這篇文章一樣,從文章的頂部獲得地址列表,以及其它有關(guān)我地址方面的公開信息。
過濾軟件一瞥
本文從特定的角度來研究過濾軟件。對(duì)于正確識(shí)別垃圾郵件和合法消息這方面,我想了解這些不同的方法做得如何。為了回答這個(gè)問題,我沒有將注意力特別放在配置過濾器應(yīng)用程序,使之能使用各種“郵件傳送代理(Mail Transfer Agents (MTA))”的細(xì)節(jié)上。在 MTA(譬如,Sendmail、QMail、Procmail、Fetchmail 以及其它郵件程序)的最佳配置方面,確實(shí)存在著許多奧妙。而且,許多電子郵件客戶機(jī)都有自己的過濾選項(xiàng)和插件 API。幸運(yùn)的是,我研究的大多數(shù)過濾器都帶有相當(dāng)出色的文檔,里面講述了如何配置它們以與各種 MTA 協(xié)同工作。
為了測試,我開發(fā)了兩組消息集:垃圾郵件和合法郵件。實(shí)際上這是我從前幾個(gè)月收到的郵件中抽取出的兩組消息,但我又向其中添加了一個(gè)重要的消息子集,在這些消息中,有的來自幾年前,這就擴(kuò)大了測試范圍。我不能確切地知道,在下個(gè)月的電子郵件中會(huì)包含什么,但過去的郵件已為以后的趨勢提供了極好的線索。這聽上去似乎很神秘,但我的意思是,我不希望把這些模式只限制于一些單詞、短語和正則表達(dá)式等,這些也許能描述出最近電子郵件的特征,但卻不能概括成這兩種類型。
除了這兩組電子郵件,我為那些工具開發(fā)了培訓(xùn)(training)消息集,以“了解”什么是垃圾郵件,什么不是垃圾郵件消息。這些培訓(xùn)消息集比較大,而且有一部分是與測試集不相交的。測試集中包含略少于 2000 條的垃圾郵件消息,合法消息的數(shù)目與此大致相同。而培訓(xùn)集中的消息是它們的兩倍。
關(guān)于測試,這里有必要強(qiáng)調(diào)一下一般性的注意事項(xiàng)。在垃圾郵件過濾器中的“誤否認(rèn)”(False negatives)僅意味著一些不需要的消息進(jìn)入了郵箱。這不是一件好事,但其本身沒有多可怕!罢`承認(rèn)”(False positive)是指合法消息被誤判為垃圾郵件。這可能非常糟糕,因?yàn)橐恍┖戏ㄠ]件實(shí)際上很重要,甚至非常緊急,有時(shí)盡管這些消息是一些聊天性質(zhì)的郵件,但我們也不希望丟失它們。大多數(shù)過濾軟件能讓您將受拒的消息保存在臨時(shí)文件夾中,等待您去查看 — 但如果需要查看的文件夾中充斥著大量的垃圾郵件,那么這個(gè)軟件的實(shí)用性會(huì)因此而削弱。
1. 基本的結(jié)構(gòu)化文本過濾器
我所使用的電子郵件客戶機(jī)能夠根據(jù)特定郵件頭域、一般性郵件頭和/或正文中的簡單字符串來對(duì)到來的電子郵件進(jìn)行排序。這個(gè)功能非常簡單,甚至不包含正則表達(dá)式匹配。幾乎所有的電子郵件客戶機(jī)都有這樣的過濾能力。
在過去幾個(gè)月中,我開發(fā)了少量的文本過濾器。這些少量的簡單過濾器能正確捕獲我所收到垃圾郵件中的 80%。遺憾的是,這些過濾器的“誤承認(rèn)”的發(fā)生率比較高 — 以至于我不時(shí)地需要手工來檢查垃圾郵件文件夾中的某些郵件。(我將可能的垃圾郵件進(jìn)行分類,放在幾個(gè)不同的文件夾中,然后保存它們以形成消息語言資料庫(corpora)。)雖然各個(gè)用戶之間具體的細(xì)節(jié)會(huì)有所不同,但對(duì)大多數(shù)讀者來講,這個(gè)通用的模式是很有用的:
集合 1:一些人或郵件列表在他們的郵件頭上做了一些有趣的手腳,使得它們與眾不同。我捕獲郵件頭中的某些內(nèi)容(通常是 From:),并將其放在“白名單(whitelist)”中(“收件箱”或其它文件夾)。
集合 2:我執(zhí)行以下垃圾郵件過濾器(沒有按特定的順序):
識(shí)別特定的惡意郵件發(fā)送者。
查找作為 From: 郵件頭的“<>”。
查找郵件頭中的“@<”(出于許多原因,許多垃圾郵件都有這個(gè)標(biāo)記)。
查找“Content-Type: audio”。我不需要這個(gè),只有 virii 病毒需要(具體情況因人而異)。
在郵件頭中查找“euc-kr”和“ks_c_5601-1987”,我不懂這種語言,但出于某些原因,我收到了大量韓國垃圾郵件(當(dāng)然,對(duì)于真正的韓國讀者,這條規(guī)則恐怕不太適合他)。
集合 3:存儲(chǔ)那些已知是合法地址的消息。我有幾條這樣的規(guī)則,但它們都僅僅與文字 To: 域相匹配。
集合 4:查找那些在郵件頭中具有合法地址,但通過上一個(gè) To: 過濾器沒有捕獲到的消息。我發(fā)現(xiàn),只要我的郵件地址出現(xiàn)在 Bcc: 域,其中有一串按字母順序排列的地址(譬如,mertz1@……、mertz37@……等)時(shí),那這封郵件肯定是不請(qǐng)自來的郵件。
集合 5:到此,所剩下的可能就是垃圾郵件(它可能有偽造的郵件頭以避免被識(shí)別出發(fā)送者的身份)。
2.“白名單”/驗(yàn)證過濾器
對(duì)于垃圾郵件的過濾,有一種主動(dòng)性相當(dāng)強(qiáng)的技術(shù),我想稱之為“白名單加自動(dòng)驗(yàn)證”方法。這里有幾種工具可以實(shí)現(xiàn)帶驗(yàn)證的“白名單”:TDMA 是一個(gè)深受大家喜愛的多平臺(tái)開放源碼工具;ChoiceMail 是一個(gè)針對(duì) Windows 的商業(yè)性工具;其它大多數(shù)似乎都比較初級(jí)。(請(qǐng)參閱本文后面的參考資料,那里有一些鏈接。)
“白名單”過濾器連接到 MTA,只有當(dāng)接收者顯式地同意接收,才會(huì)將郵件傳到收件箱。其它消息會(huì)產(chǎn)生一個(gè)特殊的質(zhì)詢(challenge)響應(yīng)給發(fā)送者。“白名單”過濾器的響應(yīng)包含某種唯一的可以識(shí)別原始消息的代碼,譬如,一個(gè)散列或序列標(biāo)識(shí)。這個(gè)質(zhì)詢消息包含讓發(fā)送者答復(fù)的指示,以便將其加到“白名單”中(這個(gè)響應(yīng)消息必須包含由“白名單”過濾器生成的代碼)。幾乎所有的垃圾郵件信息中的回復(fù)地址信息都是偽造的,所以這個(gè)質(zhì)詢通常沒有人會(huì)收到;但即便那些垃圾郵件發(fā)送者提供了有用的回復(fù)地址,但他們往往不會(huì)響應(yīng)這個(gè)質(zhì)詢。當(dāng)合法的發(fā)送者答復(fù)了這個(gè)質(zhì)詢之后,會(huì)將她/他的地址添加到“白名單”中,以便將來來自同一地址的消息會(huì)自動(dòng)地通過檢查。
雖然我沒有用過這些工具,而只是自己做了些實(shí)驗(yàn),但我認(rèn)為,“白名單”/驗(yàn)證過濾器幾乎可以 100% 地將垃圾郵件消息阻擋在外面?梢韵胂螅]件發(fā)送者會(huì)開始在他們的系統(tǒng)中加一個(gè)質(zhì)詢響應(yīng),但只要稍微使質(zhì)詢消息變得復(fù)雜些,就可以解決這個(gè)問題(例如,要求對(duì)代碼做一點(diǎn)小小的人為改動(dòng))。而且,如果垃圾郵件發(fā)送者響應(yīng)了質(zhì)詢,那么就會(huì)使那些尋求合法地抵御垃圾郵件的人們可以更容易地跟蹤到他們。
“白名單”/驗(yàn)證過濾器這種做法給合法的發(fā)送者帶來了額外的負(fù)擔(dān)。由于有些通信者可能出于各種原因而無法響應(yīng)質(zhì)詢,所以會(huì)帶來“誤承認(rèn)”這種情況。在最好的情形下,合法發(fā)送者只需花費(fèi)一點(diǎn)點(diǎn)精力即可。但在以下情況,發(fā)送者可能無法發(fā)送他們合法的消息:發(fā)送者具有不可靠的 ISP,防火墻的要求過于嚴(yán)格,發(fā)送者具有多個(gè)電子郵件地址,不能夠理解英語(或者質(zhì)詢所使用的語言),或者發(fā)送者只是忽略了質(zhì)詢以及不想被質(zhì)詢所干擾。而且,有時(shí)合法的“通信者”根本不是人,而是不能夠響應(yīng)質(zhì)詢的自動(dòng)響應(yīng)系統(tǒng)!鞍酌麊巍保(yàn)證過濾器可能需要額外花精力來處理郵件列表注冊(cè)、在線購買、網(wǎng)站注冊(cè)以及其它“自動(dòng)通信”。
3. 分布式適應(yīng)性黑名單
垃圾郵件往往被定義為發(fā)送給大量接收方的郵件。實(shí)際上,幾乎很少有垃圾郵件被定制為發(fā)送給個(gè)別接收方。然而,在缺少預(yù)先過濾的情況下,每個(gè)垃圾郵件的接收者必須按自己的“Delete”按鈕來刪除垃圾消息。分布式黑名單過濾器會(huì)讓一個(gè)用戶的“Delete”操作去警告其他許多用戶,注意這個(gè)垃圾郵件消息。
象 Razor 和 Pyzor(請(qǐng)參閱參考資料)這樣的工具運(yùn)行在服務(wù)器一端,服務(wù)器上存儲(chǔ)了一些已知垃圾郵件的摘要。當(dāng) MTA 收到一條消息時(shí),會(huì)調(diào)用分布式黑名單過濾器來確定這條消息是否是已知的垃圾郵件。這些工具運(yùn)用一些智能化的統(tǒng)計(jì)技術(shù)來創(chuàng)建摘要,使得在垃圾郵件作了微小的變動(dòng)或自動(dòng)的變化(或僅僅是由于傳輸路由的變化而導(dǎo)致郵件頭的更改)時(shí),也不會(huì)防止識(shí)別消息的身份。此外,分布式黑名單服務(wù)器的維護(hù)者經(jīng)常會(huì)專門創(chuàng)建一些“蜜罐”地址,以引誘垃圾郵件(但從不針對(duì)合法的通信)。在我的測試中,發(fā)現(xiàn)用 Pyzor,從沒有出現(xiàn)“誤承認(rèn)”這類情況。我認(rèn)為用其它類似的工具(如 Razor)也不會(huì)出現(xiàn)這樣的情況。
對(duì)此有些常識(shí)。即使那些有不良企圖的發(fā)送者可以篡改合法消息,他們也不可能讓我的好消息樣本向服務(wù)器報(bào)告 — 通常只有垃圾郵件是廣泛分發(fā)的。可以想象,被大量發(fā)送但又是合法的消息(譬如,developerWorks 時(shí)事通訊)可能會(huì)導(dǎo)致錯(cuò)誤報(bào)告,但分布式黑名單服務(wù)器的維護(hù)者幾乎肯定會(huì)檢測到這一點(diǎn),并快速地糾正這樣的問題。
然而,正如由下面的匯總表所顯示,使用分布式黑名單時(shí)發(fā)生“誤否認(rèn)”的頻率要比其它我所測試的技術(shù)多很多。Pyzor 的作者推薦將這個(gè)工具與其它技術(shù)相結(jié)合使用,而不是作為單獨(dú)的防線來抵御垃圾郵件。雖然,這似乎合乎情理,但對(duì)于識(shí)別郵件是否為垃圾郵件這一點(diǎn),事實(shí)上還不清楚這樣的組合過濾技術(shù)是否比單獨(dú)使用那些技術(shù)要強(qiáng)。
此外,由于分布式黑名單需要與服務(wù)器進(jìn)行對(duì)話以執(zhí)行驗(yàn)證,所以,在對(duì)我的語言資料庫做測試時(shí),Pyzor 的執(zhí)行效率要比其它技術(shù)慢得多。對(duì)于測試小流量的消息,這不是大問題,但對(duì)于高容量的 ISP,這可能是個(gè)問題。我還發(fā)現(xiàn),每一千條查詢中,總會(huì)出現(xiàn)幾次網(wǎng)絡(luò)超時(shí),所以,我的結(jié)果有一些“錯(cuò)誤”(error),而不是標(biāo)出“spam”(垃圾郵件)或“good”(合法郵件)。
4. 基于規(guī)則的評(píng)定
在基于規(guī)則的垃圾郵件過濾技術(shù)方面,SpamAssassin 是最受大家喜愛的工具,它處于遙遙領(lǐng)先的地位。還有其它一些工具,但它們要么沒有得到廣泛地使用,要么沒有得到積極的維護(hù)。對(duì)要識(shí)別的消息,SpamAssassin(及其它類似工具)評(píng)估了大量的模式 — 大多數(shù)是正則表達(dá)式。如果有匹配的模式,則增加消息分?jǐn)?shù),否則,則減少消息分?jǐn)?shù)。如果消息分?jǐn)?shù)超過某一特定的閾值,則將其視為垃圾郵件而過濾它;否則認(rèn)為是合法。
一些評(píng)定規(guī)則基本上穩(wěn)定不變 — 例如,偽造的頭和自動(dòng)執(zhí)行的 JavaScript,幾乎總是垃圾郵件的標(biāo)志。因?yàn)槔]件發(fā)送者所開發(fā)出的產(chǎn)品和詭計(jì)在不斷變化,所以需要更新其它一些規(guī)則。今天的垃圾消息中,偉哥和非洲獨(dú)裁者的后繼者們也許還風(fēng)行一時(shí),但明天一些新品種的蛇油藥品或色情作品可能會(huì)將擠占它們的位置。隨著垃圾郵件的發(fā)展,SpamAssassin 也必須發(fā)展,以跟上它們的步伐。
SpamAssassin 的自述文件中有下列非常有力的聲明:
在最近的測試中,SpamAssassin 區(qū)分垃圾郵件和非垃圾郵件的正確率達(dá)到了 99.94%。以后,SpamAssassin 一直會(huì)做得越來越好!
我的測試顯示,它沒有達(dá)到這個(gè)水平。根據(jù)我的語言資料庫,SpamAssassin 大約會(huì)發(fā)生 0.3%“誤承認(rèn)”和 19%“誤否認(rèn)”的情況(這一比率非常高)。公平而論,這只是評(píng)估基于規(guī)則的過濾器,而沒有針對(duì)分布式黑名單做選擇性的檢查。此外,我的垃圾郵件語言資料庫中不都是純的垃圾郵件 — 它還包括大量可能是病毒的附件(我沒有打開這些附件做確認(rèn),但我知道它們不是我認(rèn)可的消息)。SpamAssassin 的 FAQ 對(duì)查找病毒作了免責(zé)聲明;而另一方面,在查找病毒方面,以下技術(shù)做得更好,所以,這份免責(zé)聲明并不是那么引人注目。
在速度方面,SpamAssassin 比分布式黑名單運(yùn)行得更快,因?yàn)榉植际胶诿麊涡枰樵兙W(wǎng)絡(luò)服務(wù)器。但它的速度還是遠(yuǎn)低于下面統(tǒng)計(jì)模型(使用本機(jī)數(shù)據(jù)結(jié)構(gòu),用解釋型的 Python 編寫的)的非優(yōu)化版本。有關(guān) SpamAssassin 的優(yōu)缺點(diǎn),請(qǐng)閱讀“用 SpamAssassin 消滅垃圾郵件”(developerWorks,2002 年 9 月)。
5. 貝葉斯(Bayesian)單詞分布過濾
Paul Graham 于 2002 年 8 月寫了一篇極具爭議的文章。在“A Plan for Spam”(請(qǐng)參閱本文后面的參考資料)中,Graham 提議建立垃圾郵件和非垃圾郵件單詞的貝葉斯概率模型。Graham 的文章或者其它任何有關(guān)統(tǒng)計(jì)和概率的一般性文章都詳細(xì)講述了數(shù)學(xué)方面的背景知識(shí),比我在這里講得更透徹。
其大體思想是,在已知的垃圾郵件中,一些單詞出現(xiàn)的頻率較高,而在合法消息中,另一些單詞出現(xiàn)的頻率較高。運(yùn)用一些眾所周知的數(shù)學(xué)知識(shí),對(duì)于每個(gè)單詞,可以生成一個(gè)“垃圾郵件指示性概率”。根據(jù)消息中所包含的一組詞,可以用另一個(gè)簡單的數(shù)學(xué)公式來確定文本消息的整體“垃圾郵件概率”。
Graham 的想法有以下幾個(gè)值得注意的好處:
可以從已分類消息的語言資料庫中自動(dòng)生成過濾器,而不需要人花費(fèi)精力來制訂規(guī)則。
可以根據(jù)個(gè)別用戶特有的垃圾郵件和合法消息來進(jìn)行定制。
可以通過少數(shù)幾行代碼來實(shí)現(xiàn)這個(gè)想法。
運(yùn)行情況出奇得好。
乍一看,似乎這樣的猜想合乎情理:即,象 SpamAssassin 這樣用手工調(diào)整和耗費(fèi)大量人力開發(fā)的規(guī)則要比漫無目的的自動(dòng)方法更能準(zhǔn)確地的預(yù)測出垃圾郵件。事實(shí)說明這種猜想完全錯(cuò)誤。基本上,統(tǒng)計(jì)模型僅比基于規(guī)則的方法要好。附帶的好處是,Graham 樣式的貝葉斯過濾器還是比 SpamAssassin 更快和更簡單。
在 Graham 的文章發(fā)表的這些天里 — 也許就在數(shù)小時(shí)里,許多人同時(shí)開始實(shí)現(xiàn)這個(gè)系統(tǒng)。我出于測試目的,使用了由我的通信者 John Barham 所創(chuàng)建的 Python 實(shí)現(xiàn)。我感謝他給我提供了這個(gè)實(shí)現(xiàn)。不過,由于數(shù)學(xué)原理是如此之簡單,以至于每個(gè)其它的實(shí)現(xiàn)大都相同。
有一些數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)技術(shù)的問題會(huì)影響到各種工具的運(yùn)行速度。但事實(shí)上預(yù)測的精確性取決于很少幾個(gè)因素 — 最關(guān)鍵因素可能是所使用的詞法技術(shù),這些因素大都用來消除虛假的隨機(jī)字符串。Barham 的實(shí)現(xiàn)僅在一個(gè)小的集合中(字母數(shù)字加一些其它字符)查看相對(duì)較短和不相交(disjoint)的字符序列。
6. 貝葉斯三元模型(trigram)過濾器
貝葉斯技術(shù)建立在單詞模型上,其工作良好。這種單詞模型的缺點(diǎn)之一是,電子郵件中采用的“單詞”的數(shù)量實(shí)際上是無限制的。這個(gè)事實(shí)可能與我們的直覺相反 — 認(rèn)為一旦全部包括了幾乎所有的英文單詞,您就可以一勞永逸,這似乎很合乎情理。從我以前對(duì)全文本索引的研究了解到,這完全是不現(xiàn)實(shí)的;“與單詞類似的”字符序列的數(shù)量可能是接近無限,新的文本會(huì)不斷地產(chǎn)生新的序列。對(duì)電子郵件來說,尤其是這樣,電子郵件包括消息標(biāo)識(shí)、內(nèi)容分隔符、UU 和 base64 編碼等等任意的字符串。從模型中丟棄單詞有多種方式(最簡單的方式是只丟棄出現(xiàn)頻率非常稀少的單詞)。
我決定研究一下,對(duì)于貝葉斯垃圾郵件過濾器,一個(gè)絕對(duì)有限的模型空間究竟工作得有多好。我明確地決定,我的概率模型使用三元模型,而不是“單詞”。當(dāng)然,這個(gè)想法不是憑空而來的;對(duì)于語言識(shí)別/區(qū)分、英語的密碼唯一長度、模式頻率和相關(guān)領(lǐng)域所進(jìn)行的大量研究極力推薦將三元模型作為一個(gè)良好的單元。
沿著這條思路,我做了幾個(gè)決定。其中最重要的選擇是確定三元模型是什么。雖然這比識(shí)別一個(gè)“單詞”要稍微簡單些,但這完全是一種幼稚的方法 — 查找三字節(jié)的每個(gè)(重疊)序列的方法不是最優(yōu)化的。尤其考慮到高位字符 — 雖然在多字節(jié)字符集(換句話說,CJK)出現(xiàn)的頻率相對(duì)較高 — 會(huì)使三元模型的空間比只在 ASCII 范圍中查找要大得多。進(jìn)一步將三元模型空間限制在低位字符會(huì)產(chǎn)生較小的空間,但整體結(jié)果不是很好。
對(duì)于我的三元模型分析,我只利用了高差分三元模型作為消息分類器。但我只是用試錯(cuò)法(trial and error)才達(dá)到了“垃圾郵件”和“合法”三元模型所選定的數(shù)目。對(duì)垃圾郵件,我還用了臨界概率,而不是任意概率:我發(fā)現(xiàn)了一個(gè)有趣的現(xiàn)象,“合法”語言資料庫中沒有一條消息的垃圾郵件概率是超過 .0071 的,而在 .99 概率范圍內(nèi),只有兩個(gè)“誤承認(rèn)”的情況。然而,將臨界概率從最初的 0.9 降到 0.1,可以使我在“垃圾郵件”語言資料庫中捕獲更多的消息。出于速度方面的考慮,從每個(gè)候選消息中挑出不多于 100 個(gè)“令人感興趣”的三元模型 — 改變這個(gè)數(shù)目,結(jié)果可能略微會(huì)有所變化(但不是很明顯)。
結(jié)束語
給出了前面所描述的測試方法,讓我們看一下具體的測試結(jié)果。在速度方面,雖然我沒有定量的數(shù)據(jù),但這張表是按照速度順序來安排的,從最快到最慢。三元模型較快,Pyzor(網(wǎng)絡(luò)查詢)較慢。在評(píng)估技術(shù)中,正如我所說,我認(rèn)為“誤承認(rèn)”這種情況最差,而“誤否認(rèn)”這種情況只是稍微有點(diǎn)差。每個(gè)單元中的數(shù)量表示,在對(duì)每個(gè)電子郵件(合法郵件和垃圾郵件中)正文所測試的每種技術(shù),正確識(shí)別出的消息和錯(cuò)誤識(shí)別出的消息的數(shù)目的對(duì)比。
表 1. 垃圾郵件過濾技術(shù)量化的準(zhǔn)確度
技術(shù) 合法郵件語言資料庫
(正確識(shí)別 vs. 錯(cuò)誤識(shí)別) 垃圾郵件語言資料庫
(正確識(shí)別 vs. 錯(cuò)誤識(shí)別)
"The Truth" 1851 vs. 0 1916 vs. 0
三元模型 1849 vs. 2 1774 vs. 142
單詞模型 1847 vs. 4 1819 vs. 97
SpamAssassin 1846 vs. 5 1558 vs. 358
Pyzor 1847 vs. 0(4 個(gè)錯(cuò)誤) 943 vs. 971(2 個(gè)錯(cuò)誤)
參考資料
TDMA 主頁提供了更多有關(guān)“標(biāo)記消息發(fā)送代理(Tagged Message Delivery Agent)”的信息。
您可以從 DigitalPortal Software 了解到更多有關(guān) ChoiceMail 的信息。
Pyzor 是基于 Python 的分布式垃圾郵件目錄/過濾器。
Vipul 的 Razor 是一個(gè)非常流行的分布式垃圾郵件目錄/過濾器。其它一些過濾器工具(譬如,SpamAssassin)可以隨意地調(diào)用 Razor。
SpamAssassin 是最流行的基于規(guī)則的垃圾郵件過濾器。請(qǐng)閱讀“用 SpamAssassin 消滅垃圾郵件”(developerWorks,2002 年 9 月),以了解更多這方面的內(nèi)容。
請(qǐng)閱讀 Paul Graham 的文章“A Plan for Spam”。
Eric Raymond 的“bogofilter”快速實(shí)現(xiàn)了 Paul Graham 的想法。除了使用一些有效的數(shù)據(jù)表示和存儲(chǔ)策略外,在確認(rèn)什么可形成有意義的單詞方面,bogofilter 嘗試更智能化些。
我自己的基于三元模型的分類工具仍處于早期 alpha 測試或原型級(jí)別。然而,歡迎您在其基礎(chǔ)上做進(jìn)一步的開發(fā)。這些工具是公開的,就象我在 developerWorks 文章中提到的所有工具一樣。
Lawrence Lessig 寫了一些書和文章,對(duì)他戲稱的“西海岸代碼”和“東海岸代碼”— 換句話說,指在華盛頓特區(qū)(以及其它地區(qū))通過的法律和在硅谷(以及其它地方)所編寫的軟件 — 進(jìn)行了深刻的對(duì)比。就 Lessig 的 Code and Other Laws of Cyberspace,我寫了一篇短評(píng)。要更多地研究這方面的內(nèi)容,請(qǐng)參閱 Lessig 的網(wǎng)站。