基于统计概率和机器学习的文本分类技术
生活随笔
收集整理的這篇文章主要介紹了
基于统计概率和机器学习的文本分类技术
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于統計概率和機器學習的文本分類技術
—— 社區產品機器審核機制
一、現狀 ?
目前,所在公司社區類產品(論壇、博客、百科)每天都會接收到大量的垃圾、灌水信息,高峰期16小時內(晚6點以后到第二天9點前)可以達到十萬量級。大量的人力、時間被浪費在刪除、屏蔽這些重復無用信息上,從而導致無法更好地為客戶服務。用人工審核的方式去對抗機器發帖,類似于二戰時的“長矛戰坦克”。如果繼續采用這種方式,正在和未來可能面臨的問題主要一下幾點:?
總結目前產品中常見的垃圾廣告主要有以下特點:?
目前,了解到同行百科類網站審核情況如下?
二、背景 ?
在日常生活中,人們往往進行常識推理,而這種推理通常并不是十分準確的。例如,你看見一個頭發潮濕的人走進來,你可能會認為外面下雨了,那你也許錯了;如果你在公園里看到一男一女走得很近,你可能會認為他們是情侶,你可能也犯了錯誤。對結果的預測往往是建立在原有經驗積累的基礎上,并對現有現象各個特征分別屬于某一結果的概率加權。?
基于貝葉斯定理的進行分類或決策需要一系列特征向量(即某些東西,它們或存在、或不存在、或部分存在于某個分類中)。比如對于一套可以根據照片識別男女性別的系統,它決策所依賴的特征向量可能就是眼睛、鼻梁、臉龐、發型等;用它正確識別張靚穎的成功率就要高于李宇春,因為后者的許多特征向量的沒有明顯的傾向性。?
對文本過濾來說,特征向量就是某段給定文本的各個詞語。貝葉斯決策優于常用敏感詞庫過濾的一個重要原因在于,它考慮到了文本的上下問環境。我們先考慮簡單的情況(不考慮中文分詞),以英語為例,假設我們需要一個系統來識別一段包含單詞python的文本,究竟應該是屬于編程類,還是生物類。首先,我們需要模擬人知識積累的過程,給計算機一些已有的樣本進行學習,如下表所示。?
我們統計各特征向量(單詞)在各類別(編程類或生物類)中出現的頻率,得到類似如下的結果:?
使用足夠多的數據進行訓練,上表的結果就很有意思。dynamic相對較常出現在編程類的文本中,而constrictor則相對較常出現在生物類的文本中,而source和long就沒有那么強的傾向性。另外,像and這些詞,它在各類目中出現的頻率幾乎一樣(因為基本每篇文章中都會用到and),所以對于機器學習來說沒有任何價值,這類詞我們稱為“停用詞”(stop word),意味著以后在樣本訓練之前可以將它們去除,從而減少學習時間。幾乎每個搜索引擎都會維護一份“停用詞表”(stop word list),后面的章節會講到如何使用它。?
在使用貝葉斯分類器之前,讓我們先來看看以下定義:?
1.Pr(Category):屬于某一特定分類的概率,先驗概率?
2.Pr(Document):某一文本的概率,先驗概率,對任一文本,其值均為常量,故此值可以忽略?
3.Pr(Category|Document):已知文本A,它屬于某一分類的概率,就是我們要求的結果,條件概率、后驗概率?
4.Pr(Document | Category):某一分類下,文本A可能出現的概率,條件概率、非后驗概率?
一般的, Pr(Document | Category) = Pr(Word1 | Category) × Pr(Word2 | Category) × ……,例如“Python is a dynamic language”去除停用詞 (is、a)后屬于編程類的概率即為Pr(python | Pro) × Pr(dynamic | Pro) × Pr(language | Pro), 其中各Pr(Word | Category)的值取自前表。事實上,由于Pr(Word | Category) < 1,文本所包含的單詞越多,Pr(Document | Category)的結果就越小。但這并非會影響最后的結果,因為我們使用的是各分類的相對值,例如,判斷某一段文字是屬于編程類還是生物類,計算的是Pr(Document | Pro)/ Pr(Document | Bio)。?
使用貝葉斯分類器本質上就是根據先驗概率、條件概率求后驗概率的過程,描述為?
Pr(Category|Document) = Pr(Document | Category) × Pr(Category) / Pr(Document)?
事實上,正如前面所說的,Pr(Document)對所有待測文本都是相同的,而我們又只關心相對值,因此該公式可進一步簡化為?
Pr(Category|Document) = Pr(Document | Category) × Pr(Category)?
計算Pr(Category|Document)所需的兩個參數搜可以通過類似的方法訓練歷史數據得到,并且每次計算機決策、運營手工訂正后以及錯判投訴的結果又都會被加入到樣本庫中進行修正和再學習,這就是“有監督的機器學習”。?
MicroSoft的工程師在Outlook中就使用了這種機制,并在?
http://www.gfi.com/whitepapers/why-bayesian-filtering.pdf?
闡述了為什么貝葉斯分類器是最有效的文本過濾算法,同時宣稱合理的參數設置和足夠豐富的樣本能保證99.7%的審核正確率。?
它的優點:?
1、貝葉斯分類器識別整段代詞文本內容。它在檢索某些常用垃圾詞的同時,也會兼顧那些在正常郵件中出現的詞語。例如,并不是每封包含“free”和“cash”的郵件都是垃圾郵件,事實上,如果貝葉斯分類器在文本的其它地方發現了商業術語、公司合同等,還是可能會將它歸為正常郵件。貝葉斯分類器考慮了上下文的語境,并智能化地使用概率、詞頻來權衡各詞語,這是它與關鍵詞\敏感詞算法相比的最大優勢。?
2、貝葉斯分類器是完全自適應的 —— 它會從垃圾郵件和正常郵件不斷地學習、抽取知識,甚至會在對抗中成長 —— 隨著新出現的垃圾郵件而進化。比如專業的spammer使用“f-r-e-e”來代替“free”,或是使用“5ex”來代替“sex”,來逃避敏感詞庫的過濾。對于貝葉斯分類器來說,剛開始它從未見過這個單詞,因此可能會將其歸為“unknown”;但隨著人工審核的復查,它會很快學習到這是個垃圾詞。以后,spammer在垃圾帖中使用“f-r-e-e”的效果甚至還不如使用“free”,因為“f-r-e-e”幾乎不會出現在正常郵件中,因此分類器更有自信將其歸為垃圾郵件(useful/spam的比率更高)。?
3、貝葉斯分類會分析用戶的行為,更適合與定制化需求。例如對于一家經營五金的公司來說,“mortgage“ 幾乎以為著垃圾郵件,但對于一家金融服務公司來說,它很有肯能是正常郵件(起碼是”unknown”的) 。?
4、貝葉斯分類器與敏感詞相比,更適合國際化\多語言。事實上,要維護一份敏感詞庫十分困難,需要專業人士的參與。貝葉斯分類器采用自然語言分類的方式,某個詞語屬于垃圾郵件/正常郵件的概率完全由日常的行為所決定,即使是中英文混合的內容,也照常處理。?
5、基于貝葉斯分類器的文本過濾機制較難被繞過 。一位高級的 spammer 想要繞過它,無非兩種方法,較少采用強垃圾郵件傾向的詞(比如free, Viagra等),或是較多采用強正常郵件傾向的詞語。一般來說,采用后者較為困難,因為需要了解收件方公司的詳細業務,而采用一些中性詞(比如public等)對最后的結果有影響甚微。?
6、不需要維護、下載、更新敏感詞庫,貝葉斯分類器是完全可以自循環的?
它的缺點:?
1、唯一的缺點是需要原始數據的進行學習/訓練,或是需要運行一段時間才能看出效果。隨著時間的推移,不同于其它靜態技術,貝葉斯分類器會越來越有效,因此之前花一段時間等待是完全值得的,正如《基督山伯爵》結語,“人類最偉大的智慧,在于等待和希望”……?
三、原型設計 ?
初步寫了個原型,想測試一下效果,(無接口、無抽象、單類、命名不規范、無注釋,汗),詳細過程不說了,有興趣的可參考附件。?
首先給出五個訓練樣本:?
cf.train("Nobody owns the water", "good");?
cf.train("the quick rabbit jumps fences", "good");?
cf.train("buy pharmaceuticals now", "bad");?
cf.train("make quick money at the online casino", "bad");?
cf.train("the quick brown fox jumps", "good");?
接下來,我們試一下“make quick money at the online casino“的效果?
cf.prob("make quick money at the online casino", "good")?
cf.prob("make quick money at the online casino", "bad")?
輸出結果分別是0.0013183593749999999和0.00625,這并沒有顯示出貝葉斯分詞的優勢,畢竟這段文本在以前出現過。如果我們將文本修改為“make quick money, visit XXX.htm“?
cf.prob("make quick money, visit XXX.htm ", "good")?
cf.prob("make quick money, visit XXX.htm ", "bad")?
輸出結果分別是0.005859375和0.0125。由于分類器從未見過visit、XXX.htm等詞語,因此它也不是非常確定這是一條垃圾文本,如果我們通過人工審核將其加入訓練庫?
cf.train("make quick money, visit XXX.htm ", "bad");?
下一次,如果接收到文本“make quick money , visit YYY.htm, earn dollars“,分類器將會毫不猶豫地將它劃分為垃圾郵件(good:4.1232638888888883E-4;bad:0.004199620627572015)。?
前面提過的都是英文文本的識別。對于中文,則要考慮分詞器的影響。這里選用MMAnalyzer,建議使用最大正向匹配方式(細粒度為零),因為“人民”和“人民幣”是兩個不同的概念。對“2008年前三季度,美國次貸危機升級,全球金融持續動蕩,世界經濟增長全面放緩,全球經濟增長動力減弱,世界主要經濟體與新興市場正面臨巨大的外部沖擊?!?的分詞效果還是比較理想的。?
2008] [年前] [三季度] [美國] [次] [貸] [危機] [升級] [全球] [金融] [持續] [動蕩] [世界經濟] [增長] [全面] [放] [緩] [全球] [經濟] [增長] [動力] [減弱] [世界] [主要] [經濟] [體] [新興] [市場] [正] [面臨] [巨大] [外部] [沖擊]?
我們采用生意經中的數據來模擬,鎖定“機票“這一關鍵詞?
cf.train( " 網上預定了飛機票,請問具體付款流程的怎樣的" , "good");?
cf.train( "請問高手們,如何開辦一家預定銷售機票的公司?謝謝" , "good");?
cf.train( "中國民航全國統一訂票(銷售)熱線" , "bad");?
cf.train( "杭州到上海機票預定熱線是多少?" , "bad");?
cf.train( "機票預定熱線是多少?" , "bad");?
cf.train( "特價機票預定方法有哪些?" , "good");?
cf.train( "東方航空特價機票:400+6918118" , "bad");?
cf.train( "攜程機票預定中心:400.6888.932" , "bad");?
cf.train( "機票銷售代理" , "bad");?
假設我們新接收一條文本“廣州到青島機票預定熱線是多少?“,貝葉斯分類器將其判定為垃圾文本(bad:0.010416666666666666;good:0.0010363520408163264)?
假設我們新接收一條文本“預定國內機票具體應該注意那些問題?“,貝葉斯分類器將其判定為正常文本(bad:0.003348214285714286;good:0.005181760204081632)?
考慮大多數的情況下,可以原諒幾篇廣告文本繞過審核,卻無法忍受一篇有效文本被過濾,因此特別維護一個thresholds的HashMap,比如當bad/good > 3時才判定,該文本為垃圾廣告。比如“預定國內機票應該怎么做?”,貝葉斯分類器將其判定為unknown(未知)(bad:0.013392857142857144;good:0.012436224489795918),因為3 > bad/good > 1。運營人員在審核unknown的文本時,發覺這是一條正常文本,因此將其加入訓練庫?
cf.train( "預定國內機票應該怎么做?" , "good");?
下一次,再接收到類似文本比如“預定國內機票怎么操作?”,分類器將會自動將其歸類為正常郵件(bad:0.006054687499999999;good:0.018951416015625)。?
四、初步架構 ?
五、展望 ?
1、自然語義(主、謂、賓)的引入?
2、將標題、內容、副標題、相關類目的文本內容作為權值引入?
3、非文本因素的引入(id、ip、web行為)?
4、論壇、博客、百科等詞庫共享?
六、參考文獻 ?
1、《垃圾信息相關范例和情況》
2、《每日審核戰報》
3、http://www.gfi.com/whitepapers/why-bayesian-filtering.pdf?
4、《Programming Collective Intelligence,Building Smart Web 2.0》 Toby Segaran?
5、《Collective Intelligence in Action》 Satnam Alag?
6、http://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html?
7、http://www.emis.de/journals/GM/vol14nr4/pop/pop.pdf?
8、http://mathforum.org/~ken/bayes/bayes.html ?
—— 社區產品機器審核機制
一、現狀 ?
目前,所在公司社區類產品(論壇、博客、百科)每天都會接收到大量的垃圾、灌水信息,高峰期16小時內(晚6點以后到第二天9點前)可以達到十萬量級。大量的人力、時間被浪費在刪除、屏蔽這些重復無用信息上,從而導致無法更好地為客戶服務。用人工審核的方式去對抗機器發帖,類似于二戰時的“長矛戰坦克”。如果繼續采用這種方式,正在和未來可能面臨的問題主要一下幾點:?
- 未來版本量增加導致人工審核壓力的增大。
- 目前負責版本審核的人員約2-3人/天,基本能保證答案在4-5小時內被審核,但該速度不是令大多數用戶滿意的
- 對于百科wiki類產品,除了判別是否違禁以外,還有一個需求,就是客戶答案是否與問題確實相關。wiki的審核大多牽扯到一個多版本問題。由于審核延遲,可能造成部分答案有多個版本,而后面的用戶在回答時不能看到前面用戶的版本,故不是在原來答案基礎上做修改,造成多個版本質量接近或后面的版本質量不高,被退回影響用戶通過率和使用體驗;
- 特定任務中部分功能的實現遇到問題。任務中的倒計時功能,由于審核有延遲,不能做自動到時結束,必須人工審核完成后人工手動結束
總結目前產品中常見的垃圾廣告主要有以下特點:?
- 批量垃圾信息是同幾撥人發的,只是內容變來變去,感覺像專門的發帖公司。
- 現在大都采取變換不同ID發帖的方式,導致黑名單方式不可用
- 有些會在帖子標題中加很多符號或標點等分隔符隔斷內容,所以之前嘗試將他們的熱線電話的號碼加到違禁詞里的辦法,效果也不佳;另外還有火星文等樣式
目前,了解到同行百科類網站審核情況如下?
- 百度知道:先發后審,機器過濾+人工檢舉
- 搜搜問問:機器審核,能夠計算出比較準確的審核時間,基本在5分鐘以內
- 百度百科:先審后發,機器過濾+人工審核,人工審核為主,所需時間從幾分鐘到小時不等,且晚上23:00以后沒有審核不生成新版本
- 互動百科:先發后審,人工審核,所需時間平均8小時左右
二、背景 ?
在日常生活中,人們往往進行常識推理,而這種推理通常并不是十分準確的。例如,你看見一個頭發潮濕的人走進來,你可能會認為外面下雨了,那你也許錯了;如果你在公園里看到一男一女走得很近,你可能會認為他們是情侶,你可能也犯了錯誤。對結果的預測往往是建立在原有經驗積累的基礎上,并對現有現象各個特征分別屬于某一結果的概率加權。?
基于貝葉斯定理的進行分類或決策需要一系列特征向量(即某些東西,它們或存在、或不存在、或部分存在于某個分類中)。比如對于一套可以根據照片識別男女性別的系統,它決策所依賴的特征向量可能就是眼睛、鼻梁、臉龐、發型等;用它正確識別張靚穎的成功率就要高于李宇春,因為后者的許多特征向量的沒有明顯的傾向性。?
對文本過濾來說,特征向量就是某段給定文本的各個詞語。貝葉斯決策優于常用敏感詞庫過濾的一個重要原因在于,它考慮到了文本的上下問環境。我們先考慮簡單的情況(不考慮中文分詞),以英語為例,假設我們需要一個系統來識別一段包含單詞python的文本,究竟應該是屬于編程類,還是生物類。首先,我們需要模擬人知識積累的過程,給計算機一些已有的樣本進行學習,如下表所示。?
| 文本 | 歸類(Bio or Pro) |
| Pythons are constrictors that feed on birds and mammals | Bio |
| Python was originally developed as a scripting language | Pro |
| A 49-ft.-long python was found in China | Bio |
| Python has dynamic type system | Pro |
| Python with vivid scales | Bio |
| An Open source project developed by python | Pro |
| …… | …… |
我們統計各特征向量(單詞)在各類別(編程類或生物類)中出現的頻率,得到類似如下的結果:?
| 詞 | Pro | Bio |
| dynamic | 0.6 | 0.1 |
| constrictor | 0.0 | 0.6 |
| long | 0.1 | 0.2 |
| source | 0.3 | 0.1 |
| and 0.95 | 0.95 | |
| …… | …… | …… |
使用足夠多的數據進行訓練,上表的結果就很有意思。dynamic相對較常出現在編程類的文本中,而constrictor則相對較常出現在生物類的文本中,而source和long就沒有那么強的傾向性。另外,像and這些詞,它在各類目中出現的頻率幾乎一樣(因為基本每篇文章中都會用到and),所以對于機器學習來說沒有任何價值,這類詞我們稱為“停用詞”(stop word),意味著以后在樣本訓練之前可以將它們去除,從而減少學習時間。幾乎每個搜索引擎都會維護一份“停用詞表”(stop word list),后面的章節會講到如何使用它。?
在使用貝葉斯分類器之前,讓我們先來看看以下定義:?
1.Pr(Category):屬于某一特定分類的概率,先驗概率?
2.Pr(Document):某一文本的概率,先驗概率,對任一文本,其值均為常量,故此值可以忽略?
3.Pr(Category|Document):已知文本A,它屬于某一分類的概率,就是我們要求的結果,條件概率、后驗概率?
4.Pr(Document | Category):某一分類下,文本A可能出現的概率,條件概率、非后驗概率?
一般的, Pr(Document | Category) = Pr(Word1 | Category) × Pr(Word2 | Category) × ……,例如“Python is a dynamic language”去除停用詞 (is、a)后屬于編程類的概率即為Pr(python | Pro) × Pr(dynamic | Pro) × Pr(language | Pro), 其中各Pr(Word | Category)的值取自前表。事實上,由于Pr(Word | Category) < 1,文本所包含的單詞越多,Pr(Document | Category)的結果就越小。但這并非會影響最后的結果,因為我們使用的是各分類的相對值,例如,判斷某一段文字是屬于編程類還是生物類,計算的是Pr(Document | Pro)/ Pr(Document | Bio)。?
使用貝葉斯分類器本質上就是根據先驗概率、條件概率求后驗概率的過程,描述為?
Pr(Category|Document) = Pr(Document | Category) × Pr(Category) / Pr(Document)?
事實上,正如前面所說的,Pr(Document)對所有待測文本都是相同的,而我們又只關心相對值,因此該公式可進一步簡化為?
Pr(Category|Document) = Pr(Document | Category) × Pr(Category)?
計算Pr(Category|Document)所需的兩個參數搜可以通過類似的方法訓練歷史數據得到,并且每次計算機決策、運營手工訂正后以及錯判投訴的結果又都會被加入到樣本庫中進行修正和再學習,這就是“有監督的機器學習”。?
MicroSoft的工程師在Outlook中就使用了這種機制,并在?
http://www.gfi.com/whitepapers/why-bayesian-filtering.pdf?
闡述了為什么貝葉斯分類器是最有效的文本過濾算法,同時宣稱合理的參數設置和足夠豐富的樣本能保證99.7%的審核正確率。?
它的優點:?
1、貝葉斯分類器識別整段代詞文本內容。它在檢索某些常用垃圾詞的同時,也會兼顧那些在正常郵件中出現的詞語。例如,并不是每封包含“free”和“cash”的郵件都是垃圾郵件,事實上,如果貝葉斯分類器在文本的其它地方發現了商業術語、公司合同等,還是可能會將它歸為正常郵件。貝葉斯分類器考慮了上下文的語境,并智能化地使用概率、詞頻來權衡各詞語,這是它與關鍵詞\敏感詞算法相比的最大優勢。?
2、貝葉斯分類器是完全自適應的 —— 它會從垃圾郵件和正常郵件不斷地學習、抽取知識,甚至會在對抗中成長 —— 隨著新出現的垃圾郵件而進化。比如專業的spammer使用“f-r-e-e”來代替“free”,或是使用“5ex”來代替“sex”,來逃避敏感詞庫的過濾。對于貝葉斯分類器來說,剛開始它從未見過這個單詞,因此可能會將其歸為“unknown”;但隨著人工審核的復查,它會很快學習到這是個垃圾詞。以后,spammer在垃圾帖中使用“f-r-e-e”的效果甚至還不如使用“free”,因為“f-r-e-e”幾乎不會出現在正常郵件中,因此分類器更有自信將其歸為垃圾郵件(useful/spam的比率更高)。?
3、貝葉斯分類會分析用戶的行為,更適合與定制化需求。例如對于一家經營五金的公司來說,“mortgage“ 幾乎以為著垃圾郵件,但對于一家金融服務公司來說,它很有肯能是正常郵件(起碼是”unknown”的) 。?
4、貝葉斯分類器與敏感詞相比,更適合國際化\多語言。事實上,要維護一份敏感詞庫十分困難,需要專業人士的參與。貝葉斯分類器采用自然語言分類的方式,某個詞語屬于垃圾郵件/正常郵件的概率完全由日常的行為所決定,即使是中英文混合的內容,也照常處理。?
5、基于貝葉斯分類器的文本過濾機制較難被繞過 。一位高級的 spammer 想要繞過它,無非兩種方法,較少采用強垃圾郵件傾向的詞(比如free, Viagra等),或是較多采用強正常郵件傾向的詞語。一般來說,采用后者較為困難,因為需要了解收件方公司的詳細業務,而采用一些中性詞(比如public等)對最后的結果有影響甚微。?
6、不需要維護、下載、更新敏感詞庫,貝葉斯分類器是完全可以自循環的?
它的缺點:?
1、唯一的缺點是需要原始數據的進行學習/訓練,或是需要運行一段時間才能看出效果。隨著時間的推移,不同于其它靜態技術,貝葉斯分類器會越來越有效,因此之前花一段時間等待是完全值得的,正如《基督山伯爵》結語,“人類最偉大的智慧,在于等待和希望”……?
三、原型設計 ?
初步寫了個原型,想測試一下效果,(無接口、無抽象、單類、命名不規范、無注釋,汗),詳細過程不說了,有興趣的可參考附件。?
首先給出五個訓練樣本:?
cf.train("Nobody owns the water", "good");?
cf.train("the quick rabbit jumps fences", "good");?
cf.train("buy pharmaceuticals now", "bad");?
cf.train("make quick money at the online casino", "bad");?
cf.train("the quick brown fox jumps", "good");?
接下來,我們試一下“make quick money at the online casino“的效果?
cf.prob("make quick money at the online casino", "good")?
cf.prob("make quick money at the online casino", "bad")?
輸出結果分別是0.0013183593749999999和0.00625,這并沒有顯示出貝葉斯分詞的優勢,畢竟這段文本在以前出現過。如果我們將文本修改為“make quick money, visit XXX.htm“?
cf.prob("make quick money, visit XXX.htm ", "good")?
cf.prob("make quick money, visit XXX.htm ", "bad")?
輸出結果分別是0.005859375和0.0125。由于分類器從未見過visit、XXX.htm等詞語,因此它也不是非常確定這是一條垃圾文本,如果我們通過人工審核將其加入訓練庫?
cf.train("make quick money, visit XXX.htm ", "bad");?
下一次,如果接收到文本“make quick money , visit YYY.htm, earn dollars“,分類器將會毫不猶豫地將它劃分為垃圾郵件(good:4.1232638888888883E-4;bad:0.004199620627572015)。?
前面提過的都是英文文本的識別。對于中文,則要考慮分詞器的影響。這里選用MMAnalyzer,建議使用最大正向匹配方式(細粒度為零),因為“人民”和“人民幣”是兩個不同的概念。對“2008年前三季度,美國次貸危機升級,全球金融持續動蕩,世界經濟增長全面放緩,全球經濟增長動力減弱,世界主要經濟體與新興市場正面臨巨大的外部沖擊?!?的分詞效果還是比較理想的。?
2008] [年前] [三季度] [美國] [次] [貸] [危機] [升級] [全球] [金融] [持續] [動蕩] [世界經濟] [增長] [全面] [放] [緩] [全球] [經濟] [增長] [動力] [減弱] [世界] [主要] [經濟] [體] [新興] [市場] [正] [面臨] [巨大] [外部] [沖擊]?
我們采用生意經中的數據來模擬,鎖定“機票“這一關鍵詞?
cf.train( " 網上預定了飛機票,請問具體付款流程的怎樣的" , "good");?
cf.train( "請問高手們,如何開辦一家預定銷售機票的公司?謝謝" , "good");?
cf.train( "中國民航全國統一訂票(銷售)熱線" , "bad");?
cf.train( "杭州到上海機票預定熱線是多少?" , "bad");?
cf.train( "機票預定熱線是多少?" , "bad");?
cf.train( "特價機票預定方法有哪些?" , "good");?
cf.train( "東方航空特價機票:400+6918118" , "bad");?
cf.train( "攜程機票預定中心:400.6888.932" , "bad");?
cf.train( "機票銷售代理" , "bad");?
假設我們新接收一條文本“廣州到青島機票預定熱線是多少?“,貝葉斯分類器將其判定為垃圾文本(bad:0.010416666666666666;good:0.0010363520408163264)?
假設我們新接收一條文本“預定國內機票具體應該注意那些問題?“,貝葉斯分類器將其判定為正常文本(bad:0.003348214285714286;good:0.005181760204081632)?
考慮大多數的情況下,可以原諒幾篇廣告文本繞過審核,卻無法忍受一篇有效文本被過濾,因此特別維護一個thresholds的HashMap,比如當bad/good > 3時才判定,該文本為垃圾廣告。比如“預定國內機票應該怎么做?”,貝葉斯分類器將其判定為unknown(未知)(bad:0.013392857142857144;good:0.012436224489795918),因為3 > bad/good > 1。運營人員在審核unknown的文本時,發覺這是一條正常文本,因此將其加入訓練庫?
cf.train( "預定國內機票應該怎么做?" , "good");?
下一次,再接收到類似文本比如“預定國內機票怎么操作?”,分類器將會自動將其歸類為正常郵件(bad:0.006054687499999999;good:0.018951416015625)。?
四、初步架構 ?
五、展望 ?
1、自然語義(主、謂、賓)的引入?
2、將標題、內容、副標題、相關類目的文本內容作為權值引入?
3、非文本因素的引入(id、ip、web行為)?
4、論壇、博客、百科等詞庫共享?
六、參考文獻 ?
1、《垃圾信息相關范例和情況》
2、《每日審核戰報》
3、http://www.gfi.com/whitepapers/why-bayesian-filtering.pdf?
4、《Programming Collective Intelligence,Building Smart Web 2.0》 Toby Segaran?
5、《Collective Intelligence in Action》 Satnam Alag?
6、http://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html?
7、http://www.emis.de/journals/GM/vol14nr4/pop/pop.pdf?
8、http://mathforum.org/~ken/bayes/bayes.html ?
總結
以上是生活随笔為你收集整理的基于统计概率和机器学习的文本分类技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双目立体视觉系统精度分析
- 下一篇: [王晓刚]深度学习在图像识别中的研究进展