中文分詞指的是將一段文字拆分為一系列單詞的過程,這些單詞順序拼接後等於原文本。中文分詞操作是中文資訊處理的第一站,中文分詞效果的好壞直接影響後續自然語言處理任務。在中文分詞任務中,一般使用在標準資料集上詞語級別的精準率、召回率以及f1值來衡量分詞器的準確程度,這三種指標通常用於衡量分類器的準確程度。不過想要理解這三個指標,首先要理解什麼是混淆矩陣。
在分類任務中每個樣本都有相應的真實值以及演算法**的**值。具體在二分類任務中,兩個不同類別值分為0和1,可以使用正類負類也可以直接將類別用0和1的數值來表示,比如樣本的真實值為1表示樣本的真實類別為類別1。還需要注意,通常將我們關注的事件表示為類別1,比如在癌症**中我們更關注受試者有沒有患有癌症,因此將患有癌症的受試者表示為類別1,沒有患有癌症的受試者表示為類別0。
二分類任務中樣本的真實值和演算法的**值兩兩組合共有四種情況,所有的樣本屬於四種情況中的任意一種情況,具體將四種情況通過**展示,**中的元素值就為符合對應組合條件的樣本總數。
兩兩組合的四種情況
其中行代表真實值,列代表**值,0代表negative負類,1代表positive正類。上面的**就是混淆矩陣的基本框架,混淆矩陣為四種情況分別命名。
二分類的混淆矩陣
上面**就是機器學習中的混淆矩陣,用來衡量分類結果的混淆程度。不過這裡需要注意幾點:
下面來看乙個簡單的小例子,以癌症**為例。假設現在一共有1000名受試者,假設有乙個模型演算法對這1000名受試者**是否患有癌症。演算法對1000名受試者進行**後的混淆矩陣如下所示。
癌症**的混淆矩陣
對於上面的混淆矩陣,其中:
有了混淆矩陣,精準率、召回率和f1值這三個指標就能夠確定了。
精準率(precision,簡稱p值)指的是演算法**為1並且**正確的樣本個數(
召回率(recall,簡稱r值)指的是演算法**為1並且**正確的樣本個數(
精準率越高,分類演算法越會將更有把握的樣本分類為1。召回率越高,分類演算法越會將沒有把握的樣本分類為1。顯然精準率和召回率是相互矛盾相互制衡的兩個指標。精準率高往往召回率比較低,召回率高往往精準率比較低。
當然在一些任務中也會尋找精準率和召回率這兩個指標之間的平衡,因此需要乙個綜合性的指標來衡量,比如使用精準率和召回率的調和平均的f1值。f1值能夠兼顧精準率和召回率兩個指標,f1值的具體公式如下所示。
由於f1值的本質是計算精準率和召回率的調和平均值,因此只有精準率和召回率兩個指標同時比較高的時候,f1值才會比較高:
有了精準率、召回率以及f1值的計算方式,接下來通過上面的癌症**系統的混淆矩陣來計算精準率、召回率以及f1值。
癌症**的混淆矩陣
有了混淆矩陣中的元素值,計算精準率、召回率以及f1值就變得非常容易。這也是為什麼說有了混淆矩陣,精準率、召回率以及f1值這三個指標就基本確定的原因。
由於f1值的本質就是計算精準率p和召回率r的調和平均值,因此有了精準率和召回率,自然可以求出f1值,因此接下來主要介紹如何計算中文分詞的精準率和召回率。
混淆矩陣是計算精準率和召回率的關鍵所在,因此有了混淆矩陣中的具體元素值,接下來只需要相應的代入精準率和召回率的計算公式中。前面介紹的混淆矩陣是由分類問題引出的,並且真實的樣本個數和**的樣本個數相等,而中文分詞是乙個分塊任務(chunking),並且標準答案的分詞和中文分詞演算法**分詞結果的單詞數不一定相等,以"結婚的和尚未結婚的"為例,標準答案為"結婚 的 和尚未 結婚 的"一共6個單詞,使用正向最長匹配演算法為"結婚 的 和尚 未結婚 的"一共5個單詞。
如果想要計算中文分詞中的精準率和召回率需要解決兩個問題:
如何將中文分詞的分塊問題轉換為分類問題對於長度為n的字串,分詞結果為一系列單詞。每個單詞按它在文字中起始位置可以記作區間
,其中
分類問題中的真實值對映成中文分詞中的標準分詞結果,而**值對映到分詞演算法**的分詞結果。
依然以"結婚的和尚未結婚的"為例,將標準答案以及分詞演算法**的分詞結果轉換為區間集合的形式:
分塊問題轉換為分類問題
將標準分詞結果和分詞演算法**的分詞結果對映到混淆矩陣中。
中文分詞已知的資訊
不論是標準分詞還是分詞演算法**的分詞結果中負類(值為0)的區間有很多種情況,推導出所有可能的情況非常繁瑣,而且沒有必要,因為精準率、召回率的計算恰好只需要混淆矩陣中的第二行第二列的資訊。
如何對映到混淆矩陣中原始混淆矩陣中的元素表示滿足對應條件的樣本個數,而我們現在僅僅有由區間構成的集合。這裡可以將集合中的每乙個區間元素都認為是乙個單獨的樣本標籤,每乙個區間元素都代表乙個單獨的樣本,雖然這些樣本標籤值不相同,但是它們所代表的都是正類1。比如集合,集合中一共有四個元素所以有4個樣本,樣本1的標籤值為[1, 2],樣本2的標籤值為[3, 3]等,雖然這些標籤值不相同,但是表示的都是正類。
集合 中的元素代表所有真實為正類的樣本集合,因此所有標準分詞的正類
,其中
表示集合中的元素個數。同理集合
中的元素代表所有分詞演算法**為正類的樣本集合,因此所有分詞演算法**為正類
有了 和
的值,回顧一下計算精準率和召回率的公式,此時精準率和召回率的分母有了,只需要計算出精準率和召回率相同的分子
值。表示真實值為1並且演算法**為1的樣本個數。由於將集合中的區間元素看成單獨的樣本,所以只需要找到那些既在集合
中又在集合
中的區間元素,即
,因此
綜上,中文分詞下的精準率和召回率的計算公式如下:
依然以"結婚的和尚未結婚的"為例,計算在中文分詞下的精準率、召回率以及f1值。
中文分詞下的三個集合
此時精準率、召回率以及f1值為:
當然這僅僅是一條測試文字,如果有多條測試文字只需將結果累加到集合中,最後計算一次精準率和召回率即可。
比如現在有兩條測試文字:
此時的中文分詞演算法的精準率、召回率以及f1值為:
參考:1. 《自然語言處理入門》
中文分詞的方法
中文分詞主要有兩個類別 本別是基於字詞典分詞演算法和基於統計的機器學習演算法,下面依次介紹這兩種方法。也稱字串匹配分詞演算法。該演算法是按照一定的策略將待匹配的字串和乙個已建立好的 充分大的 詞典中的詞進行匹配,若找到某個詞條,則說明匹配成功,識別了該詞。常見的基於詞典的分詞演算法分為以下幾種 正向...
asp 的中文分詞
a程式設計客棧 日本是中國的乙個省 我們美麗中國的張家界!b 中國,我們,張家界,日本,美國,蘋果 b split b,a split a,for k 0 to ubound a s n fo程式設計客棧r i 0 to ubound b if instr a k b i 0 then s s in...
Lucene 中文分詞的理解
中文與西方文字不同,西方文字如英文的單詞間有空格作為分隔,計算機很容易把乙個個詞分開。而中文句子裡的之間沒有分隔,要把中文句子拆分成詞就需要使用中文分詞技術。由於全文索引採用的是倒排索引技術,所以分詞的效果直接決定了搜尋的效果。目前的中文分詞技術主要有 n元切分 最長匹配 最大壓縮 統計語言模型等方...