朱曉旭 錢培德
ZHU Xiaoxu, QIAN Peide
蘇州大學 計算機科學與技術學院,江蘇 蘇州 215006
School of Computer Science & Technology, Soochow University,Suzhou, Jiangsu 215006, China
隨著Web2.0的發展深入,論壇、博客和微博等發布與交互平臺的普及,用戶從被動接受信息轉而可以制造信息,大量的用戶參與到網絡信息的主動發布中來,信息在以爆炸的速度增長。尤其是以微博為代表的社交網絡工具,它們具有簡單便捷、互動性和時效性極強的特征[1],對這些用戶主動發布的文本進行分析與挖掘具有非常大的實際意義與應用價值。
臟話作為一種非正規的語言現象,在現代社會中已經無處不在[2]。臟話表示了表達者一種憤怒的情感,明顯具有侮辱、辱罵、攻擊他人的意味,但是臟話往往缺乏邏輯性,而且由于網絡很多場合是非實名制的,它也是一種不負責任的貶損,顯然這與網絡的文明背道而馳。在2012年2月的“方舟子與韓寒的大戰”中,大量的粉絲蜂擁到對方的博客中用臟話進行謾罵回復;2012年4月的“甄子丹和趙文卓的爭論”中,再次出現了該不文明的現象。因此自動識別用戶文本中是否包含臟話句子并進行干預處理是一個非常有實用意義的研究課題。
目前一些在線游戲、論壇中已經提供了類似臟話檢測的功能,主要的手段是通過臟話詞典進行機械匹配,通常的步驟是:首先對用戶輸入文本進行分詞,然后對分詞結果進行臟話關鍵詞機械匹配,如果匹配到明顯的臟話關鍵詞,則禁止該語句的提交,或者將認為的敏感內容替換為星號,圖1就是國內某知名游戲平臺上對用戶的發布文本進行處理后的結果。但是由于查準率和查全率都不是特別高,而且經常誤識別,因此會影響用戶正常信息的發布,圖1中的最后一句話就是一個典型被誤識別的例子。

圖1 國內某知名游戲平臺對用戶臟話文本的處理結果例子
臟話識別可以看成是文本情感分析的一個具體的應用。Pang[3]首次將情感分類任務和機器學習相結合,使用了不同的特征,采用 NB(Naive Bayesian)、ME(Maximum Entropy)、和 SVM(Support Vector Machine)三種方法進行了分類,并發現使用 unigram作為分類特征效果最好,同時他們發現在文本情感分析問題上使用“0-1”值作為權重比tf-idf方法要好。Cui[4]的實驗證明,當訓練語料少時,unigram作用明顯,但當訓練語料的增多時,bi-gram和 tri-gram以及n-gram(n>3)發揮越來越重要的作用。Ng[5]也通過實驗也發現將bi-gram和tri-gram加入unigram項后能夠提高SVM的分類性能。
Swapna Somasundaran[6]詳細介紹了人工標注情感語料庫的注意事項、規范,和對標注者的培訓,以及評價標注者之間的標注統一程度的評價方法。Wiebie[7]描述了MPAQ(multiple-perspective QA)語料庫的手工標注的詳細流程。但是顯然純粹依靠人工來標注語料,耗時耗力,有些不需要深度標注的場合,完全可以采用人工與機器相結合的方法節約成本并提高效率。
目前國內外尚無專門用于文本情感分析臟話語料庫的報道與文獻,本文借助海量的真實評價文本,通過半監督學習的方法,構造了一個高質量的較大規模臟話語料庫。
按照廖德明的總結[2],臟話可以歸納為如下五類:1)以男性、女性的性器官和性行為為對象的臟話;2)以家庭譜系成員為對象,在輩分上占便宜;3)把對方比擬成動物或者牲口;4)把對方比擬成骯臟物、污穢物或無價值的東西;5)瀆神與詛咒。本文認為1)、3)、4)和5)屬于顯式臟話,而2)屬于隱式臟話,這里主要進行顯式臟話的處理與分析。
為了便于研究,本文需要采集大量的臟話文本進行分析。百度貼吧是百度旗下的中文社區,它結合搜索引擎建立了一個在線的交流平臺,讓那些對同一個話題感興趣的人們聚集在一起,方便地展開交流和互相幫助[8]。百度貼吧中具有海量的真實人物評價文本語料,其中也包含了大量的臟話。
在對百度貼吧網頁數據分析的技術上,本文實現了一個百度貼吧語料自動采集工具。該工具讓用戶指定一個起始頁面,將會自動抓取該貼吧內所有主題的網頁數據。在去除一些純西文的句子、和超長的無意義“水帖”后,以句號、感嘆號、問號標點符號和換行符作為分句依據,對文本進行了分句。接著刪除長度大于1000的句子,刪除不包含中文的句子,替換
、 和等字符串。本文在 “芙蓉姐姐”、“鳳姐”、“甄子丹”、“趙文卓”等貼吧中合計采集了1736722句評價文本。
由于自然語言的字詞具有歧義性,并且搭配變化多,顯然僅僅根據關鍵字詞,難以實現較高質量的臟話識別。在海量文本中提取出臟話文本構造高質量臟話語料庫有利于挖掘出臟話的特征。,本文采用半監督學習的思路設計了一個少量人工干預的可迭代的臟話語料采集方法,該方法的具體步驟參見圖2。

圖2 自動擴展臟話典型特征的結構圖
如圖2所示,本文首先人工采集了少量的典型臟話特征構成臟話特征庫,然后利用一個高精度的臟話分類器對海量的文本集合進行處理,如果臟話分類器的分類值大于一個閾值,則加入到臟話子集,如果分類值為0則加入到非臟話子集,其余的情況放到不確定集合。顯然由于一開始臟話特征的數量少,此時分類出的非臟話集合中其實也包括了很多臟話,然后本文利用臟話和非臟話兩個集合進行特征篩選,找出部分顯著的臟話特征添加到臟話特征庫中。然后多次迭代上述過程,隨著迭代的進行,臟話集合不斷擴大,非臟話集合不斷縮小,當臟話集合的規模達到一個合適的大小,就停止迭代。
經過統計與觀察,本文發現臟話句子的詞性特征和句法特征與普通句子區別不大,因此本文主要是以詞組和詞組間的二元、三元搭配作為特征進行分析。
按照廖德明的總結的規則[2],在百度貼吧中人工查看并標注網頁,合計找到400句臟話。首先用斯坦福分詞系統[9]對400句臟話就行分詞,然后利用SRILM[10]進行一元統計分析,找到了40個高頻的詞條。由五位自愿者對這些詞條進行了 1-10的權值標記,越高的數字代表是臟話的可能性越大,然后對五位志愿者的標注權值計算平均后取整,得到了每個詞條的權值,40個基礎特征詞以及權值參見表1。
本文設計了一個簡單的高精度分類器,設Sentence代表一個句子,Words={w1,w2,…wn}代表一個句子中詞組的集合,Features={(fea1,value1),(fea2,value2)…(feam,v aluem)},它是一個二元組集合,代表臟話特征庫中的特征以及特征的權值,fvalue(feaj)函數用于獲取指定特征feaj的權值。那么判斷一個句子是否臟話的算法如下:

當采用表1中的40個典型臟話特征,以20作為閾值時,高精度臟話分類器的準確率為96.29%,查全率為20.47%。

表1 初始臟話特征以及權值
為了便于統一處理,本文將待處理的文本全部轉換為UTF-8編碼。因為日期中經常出現“2”和“日”這樣的字符,因此用正則表達式匹配出一個句子中的日期,并替換為空,然后用斯坦福分詞系統對1736722句評價文本進行分詞。
使用前述的高精度的分類器,在1736722句評價文本中第一輪找到284句臟話,本文對這些分詞后的句子用 SRILM 工具對它們進行一元、二元、三元統計,去除現有特征庫中的特征,并刪除停用詞,然后對統計的結果按照出現頻度各取出前5%、%2和%1,接著利用卡方(χ2)檢驗對這些特征進行計算,對計算結果從大到小排序,將排序后的前50個特征作為候選特征,然后人工對前50個進行篩選與確定權值,合計進行了6輪,每一輪找到的句子數量以及篩選出的特征參見表2。這里使用人工篩選主要基于兩個考慮,第一,每次只需要對50個特征篩選,工作量不大,切實可行;第二,人工篩選的準確性非常好,有利于保證語料庫是在可靠質量的前提下增長。
卡方(χ2)檢驗是統計中最為常用的方法之一,它的公式如下所示:

其中 N表示訓練集合中臟話與非臟話句子的總數,Cj為具體一個類別,Cj∈{臟話、非臟話}。Featurei表示特定的特征,A表示屬于Cj類且包含Featurei的句子頻數,B表示不屬于 Cj類但是包含 Featurei的句子頻數,C表示屬于Cj類但是不包含Featurei的句子頻數,D表示既不屬于 Cj也不包含Featurei的句子頻數。

表2 迭代6次的實驗過程
結合找到的6232句臟話文本,本文從百度百科人物介紹中采集了6656句文本作為非臟話文本集合。首先對文本進行分詞,然后進行一元、二元和三元統計,按照頻度分別找出前 5%、2%和 1%作為候選特征,計算它們的卡方(χ2)檢驗值,進行排序,分別取前 200、400、600、800、1000、1500和2000個特征作為分類特征,使用SVM和最大熵分類器分別進行訓練后分類,采用了5折交叉測試,并對五折交叉測試的結果取平均,實驗結果參見表3。

表3 SVM和最大熵使用不同數量的特征分類結果

通過表3可以看出,隨著特征數量的增加,準確性在略微提高,但是查全率也在同步微微降低,而F值穩定在98%以上。在實際應用中可以根據需要在準確率、查全率和計算復雜度和之間尋找一個平衡點。
實驗結果顯示,利用機器學習的方法進行臟話的自動識別是一種切實可行的方法,在良好語料庫支撐的基礎上SVM和最大熵方法都能取得很好的效果。
本文對網絡評價中的臟話進行了介紹與分析,設計了一種半監督的多次迭代的方法從海量文本中找臟話文本和臟話文本的特征,構建了一個高質量的臟話語料庫,并利用該語料庫進行了臟話文本自動分類試驗,取得了很好的效果。如果與具體系統相結合,可以實現論壇、博客和微博發布與回復的臟話過濾。也可以利用臟話識別的結果來輔助分析評價文本的褒貶極性。
[1]袁納宇. 圖書館應用微博客的價值分析[J]. 圖書與情報, 2010,3:104-106.
[2]廖德明. 臟話的性意識指向剖析[J]. 遼東學院學報(社會科學版), 2009,11(4):25-30.
[3]Pang B,Lee L,Vaithyanathan S.Thumbs up?Sentiment classification using machine learning techniques[C]//Proc of the EMNLP 2002. Morristown: ACL, 2002.79-86.
[4]Cui H,Mittal VO,Datar M. Comparative experiments on sentiment classification for online product reviews[C].//Proc.of the AAAI 2006.Menlo Park:AAAI Press,2006.1265-1270.
[5]NgV, Dasgupta S, Arifin SM N. Examining the role of linguistic knowledge sources in the automatic identification and classification of reviews[C]//Proceedings of the COLING/ACLMain Conference Poster Sessions,Morristown,NJ,USA:Association for Computational Linguistics, 2006: 611-618.
[6]Swapna Somasundaran, Janyce Wiebe,等. Manual annotation of opinion categories in meetings[C]//Proceedings of the Workshop on Frontiers in Linguistically Annotated Corpora 2006. Sydney, Australia. Association for Computational Linguistics.
[7]Wiebe J,Wilson T,Cardie C. Annotating expressions of opinions and emotions in language[J]. Language Resources and Evaluation,2005,39(2-3):164-210.
[8]百度百科.貼吧百科名片[OL].[2012-07-15].http://baike.baidu.com/view/2185.htm
[9]Huihsin Tseng, Pichuan Chang, Galen Andrew,Daniel Jurafsky, Christopher Manning. 2005. A Conditional Random Field Word Segmenter for Sighan Bakeoff 2005[C]. //Proceedings of the Fourth SIGHAN Workshop on Chinese Language Processing, 168-171. Jeju Island,Korea.
[10]Andreas Stolcke. SRILM—an extensible language modeling toolkit[C]//In International Conference on Spoken Language Processing,Denver, Colorado,September 2002.