基於詞典的分詞演算法
⑴ 有哪些比較好的中文分詞方案
1. 好詞典很重要m不論什麼樣的分詞方法, 優秀的詞典必不可少, 越拿老掉牙的詞典對越新的文本進行分詞, 就越會分成一團糟. 怎樣構建一個優秀的詞典, 快速發現新新詞彙.。可以看有幾篇文章,講的非常透徹明白 : 互聯網時代的社會語言學:基於SNS的文本數據挖掘。
2. 演算法跟著需求走,建議根據不同的需求選用不同的演算法, 例如, 類似知乎頭部搜索的 AutoComplete 部分, 講究的是速度快, 興趣相關( 優先找和你賬戶相關, 和可能感興趣的內容 ), 分詞演算法反而在其次了. 而像全文搜索這樣大段大段的長文字.。我覺得則更注重的是精準, 應該選一個像CRF這樣的演算法。
⑵ 分詞方法有哪些
分詞是指將一段扮鍵岩句子切分成一個個單獨的詞項,對於英文來講,單詞作為詞項,由於英文的書寫格式,詞與詞之間必須有空格,這樣搜索引擎很容易將一段句子處理成詞項的集合;但是中文來講,詞之間沒有廳御空格,搜索引擎不能夠直接將句子處理成詞項的集合,需要一個分詞過程,這里簡單介紹搜索引擎中文分詞的方法。
一、基於詞典的分詞方法
也叫「機械分詞法」,將分詞的句子與詞典中的詞語進行匹配,如果匹配成功,則將匹配的部分作為亮畝一個詞,最後生成一個詞語序列,根據分詞的方向與優先長度不同可分為一下四種方法:
1、正向匹配法
根絕句子的正序(由左至右)進行匹配,例如:發展中國家,切分為:發展/中國/家。
2、逆向匹配法
根據句子的逆序(由右至左)進行匹配,例如:發展中國家,切分為:發展/中/國家。
3、最大匹配法
根據詞典中最長的詞語的長度確切分,如果不是,則在使用次一級長度去切分,假設字典中最長的詞語是4個,以「發展中國家」為例,首先截取前四個「發展中國」判斷,如果與字典中的詞匹配,那麼就是詞項,如果不匹配,那就截取前三個詞「發展中」來判斷,以此類推直至切分出詞項。
4、最小匹配法
同最大匹配法剛好相反。
二、基於理解分詞的方法
為了解決分詞中的歧義問題,搜索引擎完全模擬人理解句子的過程,對句子進行句法分析與語義分析,這個方法需要大量的語言知識和信息,計算過程比較復雜,對搜索引擎的基礎硬體要求比較高。
三、基於統計分詞的方法
隨著時代與互聯網的發展,會產生很多新的詞彙,例如一些人名、新科技名詞、新事件名(比如XX門、XX帝等),這些詞彙未被詞典收錄,這些詞成為「未登錄詞」,這些詞彙的切分就要依靠統計分詞的方法,搜索引擎通過統計這些字在整個語料庫中出現的頻率,例如在語料庫中發現「S」、「E」、「O」同時出現的次數非常高,那麼搜索引擎就判定」SEO」是一個詞彙。
⑶ 切詞技術是什麼
二、 中文分詞技術的分類
我們討論的分詞演算法可分為三大類:基於字典、詞庫匹配的分詞方法;基於詞頻度統計的分詞方法和基於知識理解的分詞方法。
第一類方法應用詞典匹配、漢語詞法或其它漢語語言知識進行分詞,如:最大匹配法、最小分詞方法等。這類方法簡單、分詞效率較高,但漢語語言現象復雜豐富,詞典的完備性、規則的一致性等問題使其難以適應開放的大規模文本的分詞處理。第二類基於統計的分詞方法則基於字和詞的統計信息,如把相鄰字間的信息、詞頻及相應的共現信息等應用於分詞,由於這些信息是通過調查真實語料而取得的,因而基於統計的分詞方法具有較好的實用性。
下面簡要介紹幾種常用方法:
1)逐詞遍歷法
逐詞遍歷法將詞典中的所有詞按由長到短的順序在文章中逐字搜索,直至文章結束。也就是說,不管文章有多短,詞典有多大,都要將詞典遍歷一遍。這種方法效率比較低,大一點的系統一般都不使用。
2)基於字典、詞庫匹配的分詞方法(機械分詞法)
這種方法按照一定策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行匹配,若在詞典中找到某個字元串,則匹配成功。識別出一個詞,根據掃描方向的不同分為正向匹配和逆向匹配。根據不同長度優先匹配的情況,分為最大(最長)匹配和最小(最短)匹配。根據與詞性標注過程是否相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。常用的方法如下:
(一)最大正向匹配法 (Maximum Matching Method)通常簡稱為MM法。
其基本思想為:假定分詞詞典中的最長詞有i個漢字字元,則用被處理文檔的當前字串中的前i個字作為匹配欄位,查找字典。若字典中存在這樣的一個i字詞,則匹配成功,匹配欄位被作為一個詞切分出來。如果詞典中找不到這樣的一個i字詞,則匹配失敗,將匹配欄位中的最後一個字去掉,對剩下的字串重新進行匹配處理…… 如此進行下去,直到匹配成功,即切分出一個詞或剩餘字串的長度為零為止。這樣就完成了一輪匹配,然後取下一個i字字串進行匹配處理,直到文檔被掃描完為止。
其演算法描述如下:
初始化當前位置計數器,置為0;
從當前計數器開始,取前2i個字元作為匹配欄位,直到文檔結束;
如果匹配欄位長度不為0,則查找詞典中與之等長的作匹配處理。
如果匹配成功,則,
a)把這個匹配欄位作為一個詞切分出來,放入分詞統計表中
b)把當前位置計數器的值加上匹配欄位的長度
c)跳轉到步驟2)
否則
a) 如果匹配欄位的最後一個字元為漢字字元
則①把匹配欄位的最後一個字去掉;
②匹配欄位長度減2;
否則①把匹配欄位的最後一個位元組去掉;
②匹配欄位長度減1;
b)跳轉至步驟3)
否則a)如果匹配欄位的最後一個字元為漢字字元,
則 當前位置計數器的值加2;
否則當前位置計數器的值加1;
b)跳轉到步驟2)
(二)逆向最大匹配法 (Reverse Maximum Matcing Method)通常簡稱為RMM法。RMM法的基本原理與MM法相同 ,不同的是分詞切分的方向與MM法相反,而且使用的分詞辭典也不同。逆向最大匹配法從被處理文檔的末端開始匹配掃描,每次取最末端的2i個字元(i字字串)作為匹配欄位,若匹配失敗,則去掉匹配欄位最前面的一個字,繼續匹配。相應地,它使用的分詞詞典是逆序詞典,其中的每個詞條都將按逆序方式存放。在實際處理時,先將文檔進行倒排處理,生成逆序文檔。然後,根據逆序詞典,對逆序文檔用正向最大匹配法處理即可。
由於漢語中偏正結構較多,若從後向前匹配,可以適當提高精確度。所以,逆向最大匹配法比正向最大匹配法的誤差要小。統計結果表明 ,單純使用正向最大匹配的錯誤率為 1/16 9,單純使用逆向最大匹配的錯誤率為 1/245。例如切分欄位「碩士研究生產」,正向最大匹配法的結果會是「碩士研究生 / 產」,而逆向最大匹配法利用逆向掃描,可得到正確的分詞結果「碩士 / 研究 / 生產」。
當然,最大匹配演算法是一種基於分詞詞典的機械分詞法,不能根據文檔上下文的語義特徵來切分詞語,對詞典的依賴性較大,所以在實際使用時,難免會造成一些分詞錯誤,為了提高系統分詞的准確度,可以採用正向最大匹配法和逆向最大匹配法相結合的分詞方案(即雙向匹配法,見(四)。)
(三)最少切分法:使每一句中切出的詞數最小。
(四)雙向匹配法:將正向最大匹配法與逆向最大匹配法組合。先根據標點對文檔進行粗切分,把文檔分解成若干個句子,然後再對這些句子用正向最大匹配法和逆向最大匹配法進行掃描切分。如果兩種分詞方法得到的匹配結果相同,則認為分詞正確,否則,按最小集處理。
3).全切分和基於詞的頻度統計的分詞方法
基於詞的頻度統計的分詞方法是一種全切分方法。在討論這個方法之前我們先要明白有關全切分的相關內容。
全切分
全切分要求獲得輸入序列的所有可接受的切分形式,而部分切分只取得一種或幾種可接受的切分形式,由於部分切分忽略了可能的其他切分形式,所以建立在部分切分基礎上的分詞方法不管採取何種歧義糾正策略,都可能會遺漏正確的切分,造成分詞錯誤或失敗。而建立在全切分基礎上的分詞方法,由於全切分取得了所有可能的切分形式,因而從根本上避免了可能切分形式的遺漏,克服了部分切分方法的缺陷。
全切分演算法能取得所有可能的切分形式,它的句子覆蓋率和分詞覆蓋率均為100%,但全切分分詞並沒有在文本處理中廣泛地採用,原因有以下幾點:
1)全切分演算法只是能獲得正確分詞的前提,因為全切分不具有歧義檢測功能,最終分詞結果的正確性和完全性依賴於獨立的歧義處理方法,如果評測有誤,也會造成錯誤的結果。
2)全切分的切分結果個數隨句子長度的增長呈指數增長,一方面將導致龐大的無用數據充斥於存儲資料庫;另一方面當句長達到一定長度後,由於切分形式過多,造成分詞效率嚴重下降。
基於詞的頻度統計的分詞方法:
這是一種全切分方法。它不依靠詞典,而是將文章中任意兩個字同時出現的頻率進行統計,次數越高的就可能是一個詞。它首先切分出與詞表匹配的所有可能的詞,運用統計語言模型和決策演算法決定最優的切分結果。它的優點在於可以發現所有的切分歧義並且容易將新詞提取出來。
⑷ 自然語言處理(NLP)的基礎難點:分詞演算法
自然語言處理(NLP,Natural Language Processing)是人工智慧領域中的一個重要方向,主要研究人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理的底層任務由易到難大致可以分為詞法分析、句法分析和語義分析。分詞是詞法分析(還包括詞性標注和命名實體識別)中最基本的任務,也是眾多NLP演算法中必不可少的第一步,其切分准確與否往往與整體結果息息相關。
金融領域分詞的難點
分詞既簡單又復雜。簡單是因為分詞的演算法研究已經很成熟了,大部分的演算法(如HMM分詞、CRF分詞)准確率都可以達到95%以上;復雜則是因為剩下的5%很難有突破,主要可以歸結於三點:
▲粒度,即切分時的最小單位,不同應用對粒度的要求不一樣,比如「融資融券」可以是一個詞也可以是兩個詞
▲歧義,比如「恆生」一詞,既可指恆生公司,又可指恆生指數
▲未登錄詞,即未出現在演算法使用的詞典中的詞,比如不常見的專業金融術語,以及各種上市公司的名稱
在金融領域中,分詞也具有上述三個難點,並且在未登錄詞方面的難點更為突出,這是因為金融類詞彙本來就多,再加上一些專有名詞不僅有全稱還有簡稱,這就進一步增大了難度。
在實際應用中,以上難點時常會造成分詞效果欠佳,進而影響之後的任務。尤其是在一些金融業務中,有許多需要與用戶交互的場景,某些用戶會用口語化的詞彙描述業務,如果分詞錯誤會影響用戶意圖的解析,這對分詞的准確性提出了更高的要求。因此在進行NLP上層應用開發時,需要對分詞演算法有一定的了解,從而在效果優化時有能力對分詞器進行調整。接下來,我們介紹幾種常用的分詞演算法及其應用在金融中的優劣。
幾種常見的分詞演算法
分詞演算法根據其核心思想主要分為兩種:
第一種是基於字典的分詞,先把句子按照字典切分成詞,再尋找詞的最佳組合方式,包括最大匹配分詞演算法、最短路徑分詞演算法、基於N-Gram model的分詞演算法等;
第二種是基於字的分詞,即由字構詞,先把句子分成一個個字,再將字組合成詞,尋找最優的切分策略,同時也可以轉化成序列標注問題,包括生成式模型分詞演算法、判別式模型分詞演算法、神經網路分詞演算法等。
最大匹配分詞尋找最優組合的方式是將匹配到的最長片語合在一起,主要的思路是先將詞典構造成一棵Trie樹(也稱為字典樹),Trie樹由詞的公共前綴構成節點,降低了存儲空間的同時可以提升查找效率。
最大匹配分詞將句子與Trie樹進行匹配,在匹配到根結點時由下一個字重新開始進行查找。比如正向(從左至右)匹配「他說的確實在理」,得出的結果為「他/說/的確/實在/理」。如果進行反向最大匹配,則為「他/說/的/確實/在理」。
這種方式雖然可以在O(n)時間對句子進行分詞,但是只單向匹配太過絕對,尤其是金融這種詞彙較豐富的場景,會出現例如「交易費/用」、「報價單/位」等情況,所以除非某些詞的優先順序很高,否則要盡量避免使用此演算法。
最短路徑分詞演算法首先將一句話中的所有詞匹配出來,構成詞圖(有向無環圖DAG),之後尋找從起始點到終點的最短路徑作為最佳組合方式,例:
我們認為圖中每個詞的權重都是相等的,因此每條邊的權重都為1。
在求解DAG圖的最短路徑問題時,總是要利用到一種性質:即兩點之間的最短路徑也包含了路徑上其他頂點間的最短路徑。比如S->A->B->E為S到E到最短路徑,那S->A->B一定是S到B到最短路徑,否則會存在一點C使得d(S->C->B)<d(S->A->B),那S到E的最短路徑也會變為S->C->B->E,這就與假設矛盾了。利用上述的最優子結構性質,可以利用貪心演算法或動態規劃兩種求解演算法:
(1)基於Dijkstra演算法求解最短路徑,該演算法適用於所有帶權有向圖,求解源節點到其他所有節點的最短路徑,並可以求得全局最優解;
(2)N-最短路徑分詞演算法,該方法是對Dijkstra演算法的擴展,在每一步保存最短的N條路徑,並記錄這些路徑上當前節點的前驅,在最後求得最優解時回溯得到最短路徑。這種方法的准確率優於Dijkstra演算法,但在時間和空間復雜度上都更大。
相較於最大匹配分詞演算法,最短路徑分詞演算法更加靈活,可以更好地把詞典中的片語合起來,能更好地解決有歧義的場景。比如上述「他說的確實在理」這句話,用最短路徑演算法的計算結果為「他/說/的/確實/在理」,避免了正向最大匹配的錯誤。但是對於詞典中未存在的詞基本沒有識別能力,無法解決金融領域分詞中的「未登錄詞」難點。
N-Gram(又稱N元語法模型)是基於一個假設:第n個詞出現與前n-1個詞相關,而與其他任何詞不相關。在此種假設下,可以簡化詞的條件概率,進而求解整個句子出現的概率。
現實中,常用詞的出現頻率或者概率肯定比罕見詞要大。因此,可以將求解詞圖最短路徑的問題轉化為求解最大概率路徑的問題,即分詞結果為「最有可能的詞的組合「。
計算詞出現的概率,僅有詞典是不夠的,還需要充足的語料,所以分詞任務已經從單純的「演算法」上升到了「建模」,即利用統計學方法結合大數據挖掘,對「語言」(句子出現的概率)進行建模。
我們將基於N-gram模型所統計出的概率分布應用到詞圖中,可以得到詞的概率圖。對該詞圖用最短路徑分詞演算法求解最大概率的路徑,即可得到分詞結果。
相較於前兩種分詞演算法,基於N-Gram model的分詞演算法對詞頻進行了統計建模,在切分有歧義的時候力求得到全局最優值,比如在切分方案「證券/自營/業務」和「證券/自/營業/務」中,統計出「證券/自營/業務」出現的概率更大,因此結果有更高的准確率。但也依然無法解決金融場景中未登錄詞的問題。
生成式模型主要有隱馬爾可夫模型(HMM,Hidden Markov Model)、樸素貝葉斯分類等。HMM是常用的分詞模型,基於Python的jieba分詞器和基於Java的HanLP分詞器都使用了HMM。
HMM模型認為在解決序列標注問題時存在兩種序列,一種是觀測序列,即人們顯性觀察到的句子,另一種是隱狀態序列,即觀測序列的標簽。假設觀測序列為X,隱狀態序列是Y,則因果關系為Y->X。因此要得到標注結果Y,必須對X的概率、Y的概率、P(X|Y)進行計算,即建立P(X,Y)的概率分布模型。
HMM演算法可以在一定程度上解決未登錄詞的問題,但生成式模型的准確率往往沒有接下來要談到的判別式模型高。
判別式模型主要有感知機、支持向量機(SVM,Support Vector Machine)、條件隨機場(CRF,Conditional Random Field)、最大熵模型等,其中感知機模型和CRF模型是常用的分詞模型。
(1)平均感知機分詞演算法
感知機是一種簡單的二分類線性模型,通過構造超平面,將特徵空間(輸入空間)中的樣本分為正負兩類。通過組合,感知機也可以處理多分類問題。但由於每次迭代都會更新模型的所有權重,被誤分類的樣本會造成很大影響,因此採用平均的方法,在處理完一部分樣本後對更新的權重進行平均。
(2)CRF分詞演算法
CRF可以看作一個無向圖模型,假設給定的標注序列為Y,觀測序列為X,CRF對條件概率P(Y|X)進行定義,而不是對聯合概率建模。
平均感知機演算法雖然速度快,但仍不夠准確。適合一些對速度要求高、對准確性要求相對不那麼高的場景。CRF分詞演算法可以說是目前最常用的分詞、詞性標注和實體識別演算法,它對未登陸詞也有很好的識別能力,是目前在速度、准確率以及未登錄詞識別上綜合表現最突出的演算法,也是我們目前所採用的解決方案,但速度會比感知機慢一些。
在NLP中,最常用的神經網路為循環神經網路(RNN,Recurrent Neural Network),它在處理變長輸入和序列輸入問題中有著巨大的優勢。LSTM(Long Short-Term Memory,長短期記憶網路)為RNN變種的一種,在一定程度上解決了RNN在訓練過程中梯度消失和梯度爆炸的問題。
目前對於序列標注任務,業內公認效果最好的模型是BiLSTM+CRF。相比於上述其它模型,雙向循環神經網路BiLSTM,可以更好地編碼當前字等上下文信息,並在最終增加CRF層,核心是用Viterbi演算法進行解碼,以得到全局最優解,避免B,S,E這種不可能的標記結果的出現,提高准確率。
神經網路分詞雖然能在准確率、未登錄詞識別上有更好的表現,但RNN無法並行計算,在速度上沒有優勢,所以該演算法通常在演算法研究、句子精確解析等對速度要求不高的場景下使用。
分詞作為NLP底層任務之一,既簡單又重要,很多時候上層演算法的錯誤都是由分詞結果導致的。因此,對於底層實現的演算法工程師,不僅需要深入理解分詞演算法,更需要懂得如何高效地實現和調試。
而對於上層應用的演算法工程師,在實際分詞時,需要根據業務場景有選擇地應用上述演算法,比如在搜索引擎對大規模網頁進行內容解析時,對分詞對速度要求大於精度,而在智能問答中由於句子較短,對分詞的精度要求大於速度。
⑸ 分詞的定義及介紹
http://www.fullsearcher.com/n2004911134640735.asp什麼是中文分詞
眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個意思。例如,英文句子I am a student,用中文則為:「我是一個學生」。計算機可以很簡單通過空格知道student是一個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個學生,分詞的結果是:我 是 一個 學生。 中文分詞技術
中文分詞技術屬於自然語言處理技術范疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞演算法。
現有的分詞演算法可分為三大類:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。
1、基於字元串匹配的分詞方法
這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行配,若在詞典中找到某個字元串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。常用的幾種機械分詞方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的詞數最小)。
還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。由於漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169,單純使用逆向最大匹配的錯誤率為1/245。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各種其它的語言信息來進一步提高切分的准確率。
一種方法是改進掃描方式,稱為特徵掃描或標志切分,優先在待分析字元串中識別和切分出一些帶有明顯特徵的詞,以這些詞作為斷點,可將原字元串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法是將分詞和詞類標注結合起來,利用豐富的詞類信息對分詞決策提供幫助,並且在標注過程中又反過來對分詞結果進行檢驗、調整,從而極大地提高切分的准確率。
對於機械分詞方法,可以建立一個一般的模型,在這方面有專業的學術論文,這里不做詳細論述。
2、基於理解的分詞方法
這種分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。由於漢語語言知識的籠統、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。
3、基於統計的分詞方法
從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。可以對語料中相鄰共現的各個字的組合的頻度進行統計,計算它們的互現信息。定義兩個字的互現信息,計算兩個漢字X、Y的相鄰共現概率。互現信息體現了漢字之間結合關系的緊密程度。當緊密程度高於某一個閾值時,便可認為此字組可能構成了一個詞。這種方法只需對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這種方法也有一定的局限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如「這一」、「之一」、「有的」、「我的」、「許多的」等,並且對常用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部基本的分詞詞典(常用詞詞典)進行串匹配分詞,同時使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。
到底哪種分詞演算法的准確度更高,目前並無定論。對於任何一個成熟的分詞系統來說,不可能單獨依靠某一種演算法來實現,都需要綜合不同的演算法。筆者了解,海量科技的分詞演算法就採用「復方分詞法」,所謂復方,相當於用中葯中的復方概念,即用不同的葯才綜合起來去醫治疾病,同樣,對於中文詞的識別,需要多種演算法來處理不同的問題。
⑹ 文本分類的6類方法
一、中文分詞:
針對中文文本分類時,很關鍵的一個技術就是中文分詞。特徵粒度為詞粒度遠遠好於字粒度,其大部分分類演算法不考慮詞序信息,基於字粒度的損失了過多的n-gram信息。下面簡單總結一下中文分詞技術:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法 [1]。
1,基於字元串匹配的分詞方法:
過程:這是一種基於詞典的中文分詞,核心是首先建立統一的詞典表,當需要對一個句子進行分詞時,首先將句子拆分成多個部分,將每一個部分與字典一一對應,如果該詞語在詞典中,分詞成功,否則繼續拆分匹配直到成功。
核心: 字典,切分規則和匹配順序是核心。
分析:優點是速度快,時間復雜度可以保持在O(n),實現簡單,效果尚可;但對歧義和未登錄詞處理效果不佳。
2,基於理解的分詞方法:基於理解的分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。由於漢語語言知識的籠統、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。
3,基於統計的分詞方法:
過程:統計學認為分詞是一個概率最大化問題,即拆分句子,基於語料庫,統計相鄰的字組成的詞語出現的概率,相鄰的詞出現的次數多,就出現的概率大,按照概率值進行分詞,所以一個完整的語料庫很重要。
主要的統計模型有: N元文法模型(N-gram),隱馬爾可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),條件隨機場模型(Conditional Random Fields,CRF)等。
二、文本預處理:
1,分詞: 中文任務分詞必不可少,一般使用jieba分詞,工業界的翹楚。
2,去停用詞:建立停用詞字典,目前停用詞字典有2000個左右,停用詞主要包括一些副詞、形容詞及其一些連接詞。通過維護一個停用詞表,實際上是一個特徵提取的過程,本質 上是特徵選擇的一部分。
3,詞性標註: 在分詞後判斷詞性(動詞、名詞、形容詞、副詞…),在使用jieba分詞的時候設置參數
⑺ 分詞演算法是什麼
分詞演算法是文本挖掘的基礎,通常對整個模型的效果起著較大的決定作用。
分詞演算法常用的兩種運行方式:
1、用戶搜索及匹配。
例如:我們在網路搜索一個詞 「手機回收」,那麼網路會先把這個詞分為手機和回收兩個詞這個時候呢網路會先在庫中搜索手機這個詞然後進行第一輪的篩選。把網頁當中沒有手機這個詞的去除,只保留帶有手機這個詞的結果,之後再從已篩選出來的網頁中,篩選出帶有回收這個詞的頁面。然後在所得結果裡面根據頁面評分給用戶進行排序。
2、網頁主題計算
前面啟蒙博客也講過,網路蜘蛛只是一個機器,並不能向人一樣去思考,而在處理文章的時候,網路蜘蛛則會把文章也進行分詞去處理,如過文章里 手機 這個詞出現頻率比較多,也就是所說的關鍵詞密度,那麼這個頁面也就會定性為手機方面的文章。
搜索引擎是通過分詞演算法來計算網頁的,如果我們能夠合理地利用分詞演算法進行網頁布局,會讓網頁將會有一個很好的得分。
中文分詞演算法大概分為三大類:
第一類是基於字元串匹配,即掃描字元串,如果發現字元串的子串和詞典中的詞相同,就算匹配,比如機械分詞方法。這類分詞通常會加入一些啟發式規則,比如「正向/反向最大匹配」,「長詞優先」等。
第二類是基於統計以及機器學習的分詞方法,它們基於人工標注的詞性和統計特徵,對中文進行建模,即根據觀測到的數據(標注好的語料)對模型參數進行訓練,在分詞階段再通過模型計算各種分詞出現的概率,將概率最大的分詞結果作為最終結果。
常見的序列標注模型有HMM和CRF。這類分詞演算法能很好處理歧義和未登錄詞問題,效果比前一類效果好,但是需要大量的人工標注數據,以及較慢的分詞速度。
第三類是通過讓計算機模擬人對句子的理解,達到識別詞的效果,由於漢語語義的復雜性,難以將各種語言信息組織成機器能夠識別的形式,目前這種分詞系統還處於試驗階段。
⑻ NLP基礎知識和綜述
一種流行的自然語言處理庫、自帶語料庫、具有分類,分詞等很多功能,國外使用者居多,類似中文的jieba處理庫
為單詞序列分配概率的模型就叫做語言模型。
通俗來說, 語言模型就是這樣一個模型:對於任意的詞序列,它能夠計算出這個序列是一句話的概率。或者說語言模型能預測單詞序列的下一個詞是什麼。
** n-gram Language Models **
N-gram模型是一種典型的統計語言模型(Language Model,LM),統計語言模型是一個基於概率的判別模型.統計語言模型把語言(詞的序列)看作一個隨機事件,並賦予相應的概率來描述其屬於某種語言集合的可能性。給定一個詞彙集合 V,對於一個由 V 中的詞構成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,統計語言模型賦予這個序列一個概率P(S),來衡量S 符合自然語言的語法和語義規則的置信度。用一句簡單的話說,統計語言模型就是計算一個句子的概率大小的這種模型。
n-gram模型可以減輕單詞序列沒有在訓練集中出現過而引起的問題,即數據稀疏問題
n-gram模型問題
對於n-gram模型的問題,這兩頁ppt說的很明白
N-gram模型基於這樣一種假設,當前詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。這些概率可以通過直接從語料中統計N個詞同時出現的次數得到。常用的是二元的Bi-Gram(N=2)和三元的Tri-Gram(N=3).Bi-Gram所滿足的假設是馬爾科夫假設。
一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分別用公式表示如下:
Bi-Gram:P(T)=p(w1|begin) p(w2|w1) p(w3|w2)***p(wn|wn-1)
Tri-Gram:P(T)=p(w1|begin1,begin2) p(w2|w1,begin1) p(w3|w2w1)***p(wn|wn-1,wn-2)
注意上面概率的計算方法:P(w1|begin)=以w1為開頭的所有句子/句子總數;p(w2|w1)=w1,w2同時出現的次數/w1出現的次數。以此類推。
對於其中每項的計算舉個例子:
由上可見Bi-Gram計算公式中的begin一般都是加個<s>標簽。
N-gram存在的問題:
舉一個小數量的例子進行輔助說明:假設我們有一個語料庫(注意語料庫),如下:
老鼠真討厭,老鼠真丑,你愛老婆,我討厭老鼠。
想要預測「我愛老」這一句話的下一個字。我們分別通過 bigram 和 trigram 進行預測。
1)通過 bigram,便是要對 P(w|老)進行計算,經統計,「老鼠」出現了3次,「老婆」出現了1次,通過最大似然估計可以求得P(鼠|老)=0.75,P(婆|老)=0.25, 因此我們通過 bigram 預測出的整句話為: 我愛老鼠。
2)通過 trigram,便是要對便是要對 P(w|愛老)進行計算,經統計,僅「愛老婆」出現了1次,通過最大似然估計可以求得 P(婆|愛 老)=1,因此我們通過trigram 預測出的整句話為: 我愛老婆。顯然這種方式預測出的結果更加合理。
問題一:隨著 n 的提升,我們擁有了更多的前置信息量,可以更加准確地預測下一個詞。但這也帶來了一個問題,當N過大時很容易出現這樣的狀況:某些n-gram從未出現過, 導致很多預測概率結果為0, 這就是稀疏問題。 實際使用中往往僅使用 bigram 或 trigram 。(這個問題可以通過平滑來緩解參考: https://mp.weixin.qq.com/s/NvwB9H71JUivFyL_Or_ENA )
問題二:同時由於上個稀疏問題還導致N-gram無法獲得上下文的長時依賴。
問題三:n-gram 基於頻次進行統計,沒有足夠的泛化能力。
n-gram總結:統計語言模型就是計算一個句子的概率值大小,整句的概率就是各個詞出現概率的乘積,概率值越大表明該句子越合理。N-gram是典型的統計語言模型,它做出了一種假設,當前詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。它其中存在很多問題,再求每一個詞出現的概率時,隨著N的提升,能夠擁有更多的前置信息量,可以使得當前詞的預測更加准確,但是當N過大時會出現稀疏問題,導致很多詞的概率值為0,為解決這一問題,因此常用的為bigram 或 trigram,這就導致N-gram無法獲得上文的長時依賴。另一方面N-gram 只是基於頻次進行統計,沒有足夠的泛化能力。
神經網路語言模型
2003年 Bengio 提出,神經網路語言模型( neural network language model, NNLM)的思想是提出詞向量的概念,代替 ngram 使用離散變數(高維),採用連續變數(具有一定維度的實數向量)來進行單詞的分布式表示,解決了維度爆炸的問題,同時通過詞向量可獲取詞之間的相似性。
結合下圖可知它所建立的語言模型的任務是根據窗口大小內的上文來預測下一個詞,因此從另一個角度看它就是一個使用神經網路編碼的n-gram模型。
它是一個最簡單的神經網路,僅由四層構成,輸入層、嵌入層、隱藏層、輸出層。(從另一個角度看它就是一個使用神經網路編碼的n-gram模型)
輸入是單詞序列的index序列,例如單詞『這』在字典(大小為∣V∣)中的index是10,單詞『是』的 index 是23,『測』的 index 是65,則句子「這是測試」通過『這是測』預測『試』,窗口大小內上文詞的index序列就是 10, 23, 65。嵌入層(Embedding)是一個大小為∣V∣×K的矩陣(注意:K的大小是自己設定的,這個矩陣相當於隨機初始化的詞向量,會在bp中進行更新,神經網路訓練完成之後這一部分就是詞向量),從中取出第10、23、65行向量拼成3×K的矩陣就是Embedding層的輸出了。隱層接受拼接後的Embedding層輸出作為輸入,以tanh為激活函數,最後送入帶softmax的輸出層,輸出概率,優化的目標是使得待預測詞其所對應的softmax值最大。
缺點:因為這是通過前饋神經網路來訓練語言模型,缺點顯而易見就是其中的參數過多計算量較大,同時softmax那部分計算量也過大。另一方面NNLM直觀上看就是使用神經網路編碼的 n-gram 模型,也無法解決長期依賴的問題。
RNNLM
它是通過RNN及其變種網路來訓練語言模型,任務是通過上文來預測下一個詞,它相比於NNLM的優勢在於所使用的為RNN,RNN在處理序列數據方面具有天然優勢, RNN 網路打破了上下文窗口的限制,使用隱藏層的狀態概括歷史全部語境信息,對比 NNLM 可以捕獲更長的依賴,在實驗中取得了更好的效果。RNNLM 超參數少,通用性更強;但由於 RNN 存在梯度彌散問題,使得其很難捕獲更長距離的依賴信息。
Word2vec中的CBOW 以及skip-gram,其中CBOW是通過窗口大小內的上下文預測中心詞,而skip-gram恰恰相反,是通過輸入的中心詞預測窗口大小內的上下文。
Glove 是屬於統計語言模型,通過統計學知識來訓練詞向量
ELMO 通過使用多層雙向的LSTM(一般都是使用兩層)來訓練語言模型,任務是利用上下文來預測當前詞,上文信息通過正向的LSTM獲得,下文信息通過反向的LSTM獲得,這種雙向是一種弱雙向性,因此獲得的不是真正的上下文信息。
GPT是通過Transformer來訓練語言模型,它所訓練的語言模型是單向的,通過上文來預測下一個單詞
BERT通過Transformer來訓練MLM這種真正意義上的雙向的語言模型,它所訓練的語言模型是根據上下文來預測當前詞。
以上部分的詳細介紹在NLP之預訓練篇中有講到
語言模型的評判指標
具體參考: https://blog.csdn.net/index20001/article/details/78884646
Perplexity可以認為是average branch factor(平均分支系數),即預測下一個詞時可以有多少種選擇。別人在作報告時說模型的PPL下降到90,可以直觀地理解為,在模型生成一句話時下一個詞有90個合理選擇,可選詞數越少,我們大致認為模型越准確。這樣也能解釋,為什麼PPL越小,模型越好。
一般用困惑度Perplexity(PPL)衡量語言模型的好壞,困惑度越小則模型生成一句話時下一個詞的可選擇性越少,句子越確定則語言模型越好。
簡單介紹
Word2vec是一種有效創建詞嵌入的方法,它自2013年以來就一直存在。但除了作為詞嵌入的方法之外,它的一些概念已經被證明可以有效地創建推薦引擎和理解時序數據。在商業的、非語言的任務中。
背景
由於任何兩個不同詞的one-hot向量的餘弦相似度都為0,多個不同詞之間的相似度難以通過onehot向量准確地體現出來。
word2vec⼯具的提出正是為了解決上⾯這個問題。它將每個詞表⽰成⼀個定⻓的向量,並使得這些向量能較好地表達不同詞之間的相似和類⽐關系。
word2vec模型
word2vec⼯具包含了兩個模型,即跳字模型(skip-gram)和連續詞袋模型(continuous bag of words,CBOW)。word2vec的input/output都是將單詞作為one-hot向量來表示,我們可以把word2vec認為是詞的無監督學習的降維過程。
MaxEnt 模型(最大熵模型): 可以使用任意的復雜相關特徵,在性能上最大熵分類器超過了 Byaes 分類器。但是,作為一種分類器模型,這兩種方法有一個共同的缺點:每個詞都是單獨進行分類的,標記(隱狀態)之間的關系無法得到充分利用,具有馬爾可夫鏈的 HMM 模型可以建立標記之間的馬爾可夫關聯性,這是最大熵模型所沒有的。
最大熵模型的優點:首先,最大熵統計模型獲得的是所有滿足約束條件的模型中信息熵極大的模型;其次,最大熵統計模型可以靈活地設置約束條件,通過約束條件的多少可以調節模型對未知數據的適應度和對已知數據的擬合程度;再次,它還能自然地解決統計模型中參數平滑的問題。
最大熵模型的不足:首先,最大熵統計模型中二值化特徵只是記錄特徵的出現是否,而文本分類需要知道特徵的強度,因此,它在分類方法中不是最優的;其次,由於演算法收斂的速度較慢,所以導致最大熵統計模型它的計算代價較大,時空開銷大;再次,數據稀疏問題比較嚴重。
CRF(conditional random field) 模型(條件隨機場模型):首先,CRF 在給定了觀察序列的情況下,對整個的序列的聯合概率有一個統一的指數模型。一個比較吸引人的特性是其為一個凸優化問題。其次,條件隨機場模型相比改進的隱馬爾可夫模型可以更好更多的利用待識別文本中所提供的上下文信息以得更好的實驗結果。並且有測試結果表明:在採用相同特徵集合的條件下,條件隨機域模型較其他概率模型有更好的性能表現。
CRF 可以用於構造在給定一組輸入隨機變數的條件下,另一組輸出隨機變數的條件概率分布模型。經常被用於序列標注,其中包括詞性標注,分詞,命名實體識別等領域。
建一個條件隨機場,我們首先要定義一個特徵函數集,每個特徵函數都以整個句子s,當前位置i,位置i和i-1的標簽為輸入。然後為每一個特徵函數賦予一個權重,然後針對每一個標注序列l,對所有的特徵函數加權求和,必要的話,可以把求和的值轉化為一個概率值。
CRF 具有很強的推理能力,並且能夠使用復雜、有重疊性和非獨立的特徵進行訓練和推理,能夠充分地利用上下文信息作為特徵,還可以任意地添加其他外部特徵,使得模型能夠 獲取的信息非常豐富。
CRF 模型的不足:首先,通過對基於 CRF 的結合多種特徵的方法識別英語命名實體的分析,發現在使用 CRF 方法的過程中,特徵的選擇和優化是影響結果的關鍵因素,特徵選擇問題的好與壞,直接決定了系統性能的高低。其次,訓練模型的時間比 MaxEnt 更長,且獲得的模型很大,在一般的 PC 機上無法運行。
潛在語義分析(Latent Semantic Analysis,LSA)模型
在潛在語義分析(LSA)模型首先給出了這樣一個 『『分布式假設」 :一個 單詞的屬性是由它所處的環境刻畫的。這也就意味著如果兩個單詞在含義上比較接近,那麼它們也會出現在相似的文本中,也就是說具有相似的上下文。
LSA模型在構建好了單詞-文檔矩陣之後,出於以下幾種可能的原因,我們會使用奇異值分解(Singular Value Decomposition,SVD) 的方法來尋找該矩陣的一個低階近似。
概率潛在語義分析(Probability Latent Semantic Analysis ,PLSA)模型
概率潛在語義分析(PLSA)模型其實是為了克服潛在語義分析(LSA)模型存在的一些缺點而被提出的。LSA 的一個根本問題在於,盡管我們可以把 U k 和 V k 的每一列都看成是一個話題,但是由於每一列的值都可以看成是幾乎沒有限制的實數值,因此我們無法去進一步解釋這些值到底是什麼意思,也更無法從概率的角度來理解這個模型。
PLSA模型則通過一個生成模型來為LSA賦予了概率意義上的解釋。該模型假設,每一篇文檔都包含一系列可能的潛在話題,文檔中的每一個單詞都不是憑空產生的,而是在這些潛在的話題的指引下通過一定的概率生成的。
在 PLSA 模型裡面,話題其實是一種單詞上的概率分布,每一個話題都代表著一個不同的單詞上的概率分布,而每個文檔又可以看成是話題上的概率分布。每篇文檔就是通過這樣一個兩層的概率分布生成的,這也正是PLSA 提出的生成模型的核心思想。
PLSA 通過下面這個式子對d和 w 的聯合分布進行了建模:
該模型中的 *z * 的數量是需要事先給定的一個超參數。需要注意的是,上面這 個式子裡面給出了 P (w, d ) 的兩種表達方式,在前一個式子里, *d * 和 w 都是在給定 *z * 的前提下通過條件概率生成出來的,它們的生成方式是相似的,因此是 『『對稱』』 的;在後一個式子里,首先給定 d ,然後根據 P ( z | d ) 生成可能的話題 z ,然後再根據 P (w| z ) 生成可能的單詞 w,由於在這個式子裡面單詞和文檔的生成並不相似, 所以是 『『非對稱』』 的。
上圖給出了 PLSA 模型中非對稱形式的 Plate Notation表示法。其中d表示 一篇文檔,z 表示由文檔生成的一個話題,w 表示由話題生成的一個單詞。 在這個模型中, d和w 是已經觀測到的變數,而z是未知的變數(代表潛在的話題)。
容易發現,對於一個新的文檔而言,我們無法得知它對應的 P ( d ) 究竟是什麼, 因此盡管 PLSA 模型在給定的文檔上是一個生成模型,它卻無法生成新的未知的文檔。該模型的另外的一個問題在於,隨著文檔數量的增加, P ( z | d ) 的參數也會隨著線性增加,這就導致無論有多少訓練數據,都容易導致模型的過擬合問題。這兩點成為了限制 PLSA 模型被更加廣泛使用的兩大缺陷。
潛在狄利克雷分配(Latent Dirichlet Analysis , LDA)模型
為了解決 PLSA 模型中出現的過擬合問題,潛在狄利克雷分配(LDA)模型被 Blei 等人提出,這個模型也成為了主題模型這個研究領域內應用最為廣泛的模 型。LDA就是在PLSA的基礎上加層貝葉斯框架,即LDA就是PLSA的貝葉斯版本(正因為LDA被貝葉斯化了,所以才需要考慮歷史先驗知識,才加的兩個先驗參數)。
從上一節我們可以看到,在 PLSA 這個模型里,對於一個未知的新文檔 d ,我們對於 P ( d ) 一無所知,而這個其實是不符合人的經驗的。或者說,它沒有去使用本來可以用到的信息,而這部分信息就是 LDA 中所謂的先驗信息。
具體來說,在 LDA 中,首先每一個文檔都被看成跟有限個給定話題中的每一個存在著或多或少的關聯性,而這種關聯性則是用話題上的概率分布來刻畫的, 這一點與 PLSA 其實是一致的。
但是在 LDA 模型中,每個文檔關於話題的概率分布都被賦予了一個先驗分布,這個先驗一般是用稀疏形式的狄利克雷分布表示的。 這種稀疏形式的狄利克雷先驗可以看成是編碼了人類的這樣一種先驗知識:一般而言,一篇文章的主題更有可能是集中於少數幾個話題上,而很少說在單獨一篇文章內同時在很多話題上都有所涉獵並且沒有明顯的重點。
此外,LDA 模型還對一個話題在所有單詞上的概率分布也賦予了一個稀疏形式的狄利克雷先驗,它的直觀解釋也是類似的:在一個單獨的話題中,多數情況是少部分(跟這個話題高度相關的)詞出現的頻率會很高,而其他的詞出現的頻率則明顯較低。這樣兩種先驗使得 LDA 模型能夠比 PLSA 更好地刻畫文檔-話題-單詞這三者的關系。
事實上,從 PLSA 的結果上來看,它實際上相當於把 LDA 模型中的先驗分布轉變為均勻分布,然後對所要求的參數求最大後驗估計(在先驗是均勻分布的前提下,這也等價於求參數的最大似然估計) ,而這也正反映出了一個較為合理的先驗對於建模是非常重要的。
分詞就是將連續的字序列按照一定的規范重新組合成詞序列的過程。
現有的分詞演算法可分為三大類:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。
按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。
中文分詞根據實現原理和特點,主要分為以下2個類別:
(1)基於詞典分詞演算法
也稱字元串匹配分詞演算法。該演算法是按照一定的策略將待匹配的字元串和一個已建立好的「充分大的」詞典中的詞進行匹配,若找到某個詞條,則說明匹配成功,識別了該詞。常見的基於詞典的分詞演算法分為以下幾種:正向最大匹配法、逆向最大匹配法和雙向匹配分詞法等。
基於詞典的分詞演算法是應用最廣泛、分詞速度最快的。很長一段時間內研究者都在對基於字元串匹配方法進行優化,比如最大長度設定、字元串存儲和查找方式以及對於詞表的組織結構,比如採用TRIE索引樹、哈希索引等。
(2)基於統計的機器學習演算法
這類目前常用的是演算法是HMM、CRF(條件隨機場)、SVM、深度學習等演算法,比如stanford、Hanlp分詞工具是基於CRF演算法。以CRF為例,基本思路是對漢字進行標注訓練,不僅考慮了詞語出現的頻率,還考慮上下文,具備較好的學習能力,因此其對歧義詞和未登錄詞的識別都具有良好的效果。
常見的分詞器都是使用機器學習演算法和詞典相結合,一方面能夠提高分詞准確率,另一方面能夠改善領域適應性。
隨著深度學習的興起,也出現了 基於神經網路的分詞器 ,例如有人員嘗試使用雙向LSTM+CRF實現分詞器, 其本質上是序列標注 ,所以有通用性,命名實體識別等都可以使用該模型,據報道其分詞器字元准確率可高達97.5%。演算法框架的思路與論文《Neural Architectures for Named Entity Recognition》類似,利用該框架可以實現中文分詞,如下圖所示:
首先對語料進行字元嵌入,將得到的特徵輸入給雙向LSTM,然後加一個CRF就得到標注結果。
目前中文分詞難點主要有三個:
1、分詞標准 :比如人名,在哈工大的標准中姓和名是分開的,但在Hanlp中是合在一起的。這需要根據不同的需求制定不同的分詞標准。
2、歧義 :對同一個待切分字元串存在多個分詞結果。
歧義又分為組合型歧義、交集型歧義和真歧義三種類型。
一般在搜索引擎中,構建索引時和查詢時會使用不同的分詞演算法。常用的方案是,在索引的時候使用細粒度的分詞以保證召回,在查詢的時候使用粗粒度的分詞以保證精度。
3、新詞 :也稱未被詞典收錄的詞,該問題的解決依賴於人們對分詞技術和漢語語言結構的進一步認識。
典型的文本分類過程可以分為三個步驟:
1. 文本表示(Text Representation)
這一過程的目的是把文本表示成分類器能夠處理的形式。最常用的方法是向量空間模型,即把文本集表示成詞-文檔矩陣,矩陣中每個元素代表了一個詞在相應文檔中的權重。選取哪些詞來代表一個文本,這個過程稱為特徵選擇。常見的特徵選擇方法有文檔頻率、信息增益、互信息、期望交叉熵等等。為了降低分類過程中的計算量,常常還需要進行降維處理,比如LSI。
2. 分類器構建(Classifier Construction)
這一步驟的目的是選擇或設計構建分類器的方法。不同的方法有各自的優缺點和適用條件,要根據問題的特點來選擇一個分類器。我們會在後面專門講述常用的方法。選定方法之後,在訓練集上為每個類別構建分類器,然後把分類器應用於測試集上,得到分類結果。
3. 效果評估(Classifier Evaluation)
在分類過程完成之後,需要對分類效果進行評估。評估過程應用於測試集(而不是訓練集)上的文本分類結果,常用的評估標准由IR領域繼承而來,包括查全率、查准率、F1值等等。
1. Rocchio方法
每一類確定一個中心點(centroid),計算待分類的文檔與各類代表元間的距離,並作為判定是否屬於該類的判據。Rocchio方法的特點是容易實現,效率高。缺點是受文本集分布的影響,比如計算出的中心點可能落在相應的類別之外。
2. 樸素貝葉斯(naïve bayes)方法
將概率論模型應用於文檔自動分類,是一種簡單有效的分類方法。使用貝葉斯公式,通過先驗概率和類別的條件概率來估計文檔對某一類別的後驗概率,以此實現對此文檔所屬類別的判斷。
3. K近鄰(K-Nearest Neightbers, KNN)方法
從訓練集中找出與待分類文檔最近的k個鄰居(文檔),根據這k個鄰居的類別來決定待分類文檔的類別。KNN方法的優點是不需要特徵選取和訓練,很容易處理類別數目多的情況,缺點之一是空間復雜度高。KNN方法得到的分類器是非線性分類器。
4. 支持向量機(SVM)方法
對於某個類別,找出一個分類面,使得這個類別的正例和反例落在這個分類面的兩側,而且這個分類面滿足:到最近的正例和反例的距離相等,而且是所有分類面中與正例(或反例)距離最大的一個分類面。SVM方法的優點是使用很少的訓練集,計算量小;缺點是太依賴於分類面附近的正例和反例的位置,具有較大的偏執。
文本聚類過程可以分為3個步驟:
1. 文本表示(Text Representation)
把文檔表示成聚類演算法可以處理的形式。所採用的技術請參見文本分類部分。
2. 聚類演算法選擇或設計(Clustering Algorithms)
演算法的選擇,往往伴隨著相似度計算方法的選擇。在文本挖掘中,最常用的相似度計算方法是餘弦相似度。聚類演算法有很多種,但是沒有一個通用的演算法可以解決所有的聚類問題。因此,需要認真研究要解決的問題的特點,以選擇合適的演算法。後面會有對各種文本聚類演算法的介紹。
3. 聚類評估(Clustering Evaluation)
選擇人工已經分好類或者做好標記的文檔集合作為測試集合,聚類結束後,將聚類結果與已有的人工分類結果進行比較。常用評測指標也是查全率、查准率及F1值。
1.層次聚類方法
層次聚類可以分為兩種:凝聚(agglomerative)層次聚類和劃分(divisive)層次聚類。凝聚方法把每個文本作為一個初始簇,經過不斷的合並過程,最後成為一個簇。劃分方法的過程正好與之相反。層次聚類可以得到層次化的聚類結果,但是計算復雜度比較高,不能處理大量的文檔。
2.劃分方法
k-means演算法是最常見的劃分方法。給定簇的個數k,選定k個文本分別作為k個初始簇,將其他的文本加入最近的簇中,並更新簇的中心點,然後再根據新的中心點對文本重新劃分;當簇不再變化時或經過一定次數的迭代之後,演算法停止。k-means演算法復雜度低,而且容易實現,但是對例外和雜訊文本比較敏感。另外一個問題是,沒有一個好的辦法確定k的取值。
3.基於密度的方法
為了發現任意形狀的聚類結果,提出了基於密度的方法。這類方法將簇看作是數據空間中被低密度區域分割開的高密度區域。常見的基於密度的方法有DBSCAN, OPTICS, DENCLUE等等。
4.神經網路方法
神經網路方法將每個簇描述為一個標本,標本作為聚類的"原型",不一定對應一個特定的數據,根據某些距離度量,新的對象被分配到與其最相似的簇中。比較著名的神經網路聚類演算法有:競爭學習(competitive learing)和自組織特徵映射(self-organizing map)[Kohonen, 1990]。神經網路的聚類方法需要較長的處理時間和復雜的數據復雜性,所以不適用於大型數據的聚類。