垃圾評論識別

問題:

判斷給定的一個評論是否為垃圾評論(spam)

大致:

應(yīng)用樸素貝葉斯公式計算該評論為垃圾評論的概率,如果大于一個指定值纯赎,則判斷該評論為垃圾評論

具體思路:
第一步

對于一個評論來說傅蹂,它由多個單詞組成,在考慮評論是否為垃圾評論的時候刨秆,先簡化問題為考慮包含某一個特定的單詞的評論是否為垃圾評論:

這個公式便是貝葉斯凳谦,它計算出了在已知某一個單詞的情況下這個評論是spam的可能性Pr(S|W),這個概率由先驗概率進(jìn)行計算衡未。

  • Pr(S)代表了一個評論是spam的概率
  • Pr(H)代表了一個評論是ham的概率
  • Pr(W|S)代表了在spam評論中這個單詞出現(xiàn)的概率
  • Pr(W|H)代表了在ham評論中這個單詞出現(xiàn)的概率

而以上的這些概率均可以通過已有的評論資源進(jìn)行獲取尸执,使用統(tǒng)計得到的頻率進(jìn)行替換家凯。值得一提的是,對于Pr(S)與Pr(H)來說如失,很多時候雖然大致的概率比在80%:20%绊诲,但經(jīng)過試驗,一般來說褪贵,不對需要判斷的評論做這個假設(shè)掂之,而認(rèn)為這個評論是垃圾評論或正常評論的概率是一樣的,所以公式中的Pr(S)與Pr(H)都設(shè)為0.5脆丁,約掉后公式簡化為

在計算公式中的兩項的時候世舰,也有一個值得注意的地方,以Pr(W|S)為例槽卫,計算垃圾評論中這個單詞出現(xiàn)的概率跟压,也有兩種方式,一種是晒夹,以評論為單位裆馒,該單詞出現(xiàn)的垃圾評論數(shù) / 總的垃圾評論數(shù),另一種是該單詞在垃圾評論中出現(xiàn)的次數(shù)(該垃圾評論中可能出現(xiàn)多個該單詞)/ 總的垃圾評論中的單詞數(shù)丐怯。本文最終使用的是前一種方式喷好。

第二步

在得到評論中出現(xiàn)某一個單詞它的垃圾評論的可能性后,要考慮的就是這個評論包含的所有的單詞對于這個評論是垃圾評論可能性的影響读跷。如果按概率論來討論所有的單詞出現(xiàn)在這個評論中的概率會十分復(fù)雜梗搅,這里就假設(shè)所有的單詞出現(xiàn)在這個評論中是條件獨立的事件,那么對于已知評論中所有的單詞效览,求這條評論為垃圾評論的概率的公式可以簡化為:


p1 = Pr(S|W1)
pn = Pr(S|WN)

這個條件獨立的假設(shè)也就是樸素貝葉斯里的樸素(Naive)无切,公式具體的解釋可以看http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_two.html

將所有的概率連乘計算得到整條評論的垃圾評論概率,雖然公式很簡單丐枉,但是在具體計算的時候哆键,由于概率都是0-1的浮點數(shù),所以為了避免出現(xiàn)向下的overflow瘦锹,在計算的時候使用了對數(shù)的加減法籍嘹,公式如下:


公式的具體解釋參看https://en.wikipedia.org/wiki/Naive_Bayes_spam_filtering#Combining_individual_probabilities

第三步

計算得到了概率之后,和一個閾值進(jìn)行比較弯院,如果大于這個閾值(0.9)辱士,那么就可以判斷這個評論為垃圾評論。

優(yōu)化
  1. 針對罕見詞听绳,可能在計算的時候出現(xiàn)概率為0颂碘,為了避免這種情況,可以有兩種方式優(yōu)化:
    a. 拉普拉斯平滑
    http://blog.csdn.net/xueyingxue001/article/details/52396170#t4
    Pr(W|S)= (n1 + 1) / (n + N)
    這里n1是該單詞在spam中出現(xiàn)的次數(shù)椅挣,n為垃圾評論數(shù)头岔,分子分母增加了1和N保證了這一項在任何情況下都不會為0塔拳,N為單詞的總類數(shù)。
    b. 修正
    s為3切油,n為單詞出現(xiàn)的全部次數(shù)蝙斜。
    https://en.wikipedia.org/wiki/Naive_Bayes_spam_filtering#Dealing_with_rare_words
  2. 只有|Pr - 0.5|的越大,這個單詞才越能判斷這個評論是否為垃圾評論澎胡,越接近1說明這個單詞在垃圾評論中出現(xiàn)的概率遠(yuǎn)大于在正常評論中,越接近0則相反娩鹉,所以只取最有用的30個單詞攻谁,也就是|Pr - 0.5|最大的30個詞,用它們來計算概率弯予。
具體實現(xiàn):
分詞

中文分詞涉及到的內(nèi)容非常多戚宦,現(xiàn)在市面上提供分詞服務(wù)的也有很多,免費的付費的都有锈嫩,從成本考慮受楼,本文選擇了Ansj分詞,使用時只要添加Maven依賴就好呼寸。

        <dependency>
            <groupId>org.ansj</groupId>
            <artifactId>ansj_seg</artifactId>
            <version>5.1.1</version>
        </dependency>

本文借助于Ansj實現(xiàn)的分詞器艳汽,目前使用的詞典文件由library.properties來配置,其中ambiguity.dic是歧義詞詞典对雪,synonyms.dic是同義詞詞典河狐,banwords.dic則是禁止詞詞典。
分詞器在分詞后瑟捣,將結(jié)果進(jìn)行過濾與處理:

  1. 過濾掉不需要的詞性馋艺,如標(biāo)點(w)、未知(null)
  2. 過濾掉不需要的單詞符號迈套,如“%”捐祠,“'”,“.”等
  3. 對同義詞進(jìn)行處理桑李,將具有相同意義的詞語以一個標(biāo)準(zhǔn)符號返回踱蛀。
  4. 對數(shù)字與英文符號進(jìn)行處理鳖链,數(shù)字返回"__NUM_SHORT__", "__NUM_LONG__", "__NUM_PHONE__"這些類別莲组,英文符號返回"__EN__", "__EN_MEANINGLESS__"附鸽,而鏈接地址返回"__URL__ "蔗喂,這樣不會出現(xiàn)太多數(shù)字與英文符號绝骚,也有助于后面的判斷蒸播。
    處理之后的單詞符號結(jié)果就可以進(jìn)行判斷了茂腥。
spam判斷
  1. 流程圖


  2. 數(shù)據(jù)庫表
CREATE TABLE `T_EBK_TOKEN` (
  `FID` int(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
  `FNAME` varchar(32) NOT NULL COMMENT '詞語名',
  `FSPAM_A` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '詞語出現(xiàn)的spam評論數(shù)',
  `FHAM_A` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '詞語出現(xiàn)的ham評論數(shù)',
  `FSPAM_B` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '詞語出現(xiàn)的spam單詞數(shù)',
  `FHAM_B` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '詞語出現(xiàn)的ham單詞數(shù)',
  PRIMARY KEY (`FID`),
  UNIQUE KEY `UIDX_FNAME` (`FNAME`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COMMENT='評論中詞語的spam|ham表'

其中的A與B分別代表了以評論為單位以及以單詞為單位兩種統(tǒng)計方法井联,實際使用中這兩種方式計算出來的結(jié)果差距并不大圈浇。
在表的第一行寥掐,F(xiàn)ID = 1靴寂,統(tǒng)計的是當(dāng)前所有評論的數(shù)量以及單詞數(shù)量,后面的每一行記錄是某一個單詞的結(jié)果召耘。

  1. 計算中的參數(shù)
    a. 是否有預(yù)設(shè)百炬,也就是Pr(S)與(1-Pr(S))的值,沒有的情況下都為0.5污它,有的情況下根據(jù)數(shù)據(jù)進(jìn)行計算剖踊。
    b. 使用拉普拉斯平滑處理罕見詞
    c. 使用評論數(shù)或是單詞數(shù)進(jìn)行計算
模型訓(xùn)練
  1. 手動分揀數(shù)據(jù),得到一個垃圾評論數(shù)據(jù)集和一個正常評論數(shù)據(jù)集
  2. 分詞后對數(shù)據(jù)進(jìn)行更新衫贬。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末德澈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子固惯,更是在濱河造成了極大的恐慌梆造,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葬毫,死亡現(xiàn)場離奇詭異镇辉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贴捡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門忽肛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人栈暇,你說我怎么就攤上這事麻裁。” “怎么了源祈?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵煎源,是天一觀的道長。 經(jīng)常有香客問我香缺,道長手销,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任图张,我火速辦了婚禮锋拖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祸轮。我一直安慰自己兽埃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布适袜。 她就那樣靜靜地躺著柄错,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上售貌,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天给猾,我揣著相機(jī)與錄音,去河邊找鬼颂跨。 笑死敢伸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恒削。 我是一名探鬼主播池颈,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钓丰!你這毒婦竟也來了饶辙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤斑粱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后脯爪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體则北,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年痕慢,在試婚紗的時候發(fā)現(xiàn)自己被綠了尚揣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡掖举,死狀恐怖快骗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塔次,我是刑警寧澤方篮,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站励负,受9級特大地震影響藕溅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜继榆,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一巾表、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧略吨,春花似錦集币、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春偶妖,著一層夾襖步出監(jiān)牢的瞬間姜凄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工趾访, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留态秧,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓扼鞋,卻偏偏與公主長得像申鱼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子云头,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容