2013年10月7日 星期一

[文字雲] 中文分詞的方法有哪些?

完全是誤打誤撞。

原先我的研究是依照某人喜愛的文章的標籤,推斷他有可能喜愛的文章。而其中,標籤的給定,是所謂的工人智慧,也就是使用者自行貼上所認定的標籤文字。前述的標籤文字,也就是在圖書領域或自然語言領域所謂的關鍵字。

原本我對於關鍵字是沒有需要去研究的,在工人智慧標籤的領域中,這是人的工作。但是在標籤的領域中,的確有著由電腦分析文章後給予關鍵字當做標籤的系統存在。也因此當我不小心誤入這個網站(http://blog.timc.idv.tw/posts/wordcloud/),我以為,我就可以提供自動給予標籤建議的功能,這在一個標籤系統中,是有效降低使用者心智負擔,提高使用者經驗的一種做法。

其中,文章詞頻分析,該「文字雲」的做法是用標準的 N-gram。因為中文很開心的是詞性變化與字無關,同時使用上,名詞、動詞、形容詞…等的字數也不會太長。我很開心的就拿來用了。當然我先把他的程式改寫成 python。我把我手邊有的財經資料文章試跑看看,我取到 8-gram,結果得到的是以下的結果,看來切的不是很好。

 

公司,839
新細明體,819
細明體,685
不適用,673
仟元,512
報導,507
億元,492
證交所重大訊息公,456
交所重大訊息公告,456
記者,447
精實新聞,447
事實發生日,286
本公司,197
美元,189
公司名稱,187
其他應敘明事項,174
發生緣由,166
與公司關係,163
個月,163
億美元,158
相互持股比例,153
不過,133
輸入本公司或子公,132
請輸入本公司或子,132
入本公司或子公司,132
科技股份有限公司,128

我很好奇,大家的自動詞頻統計的中文分詞是怎麼做到的?拜請 google 大神,得知台灣目前似乎只有中研院有公開研究成果可看(http://ckipsvr.iis.sinica.edu.tw/),另外有的是拿別人已經做好的詞庫或自己調整過的詞庫做比對。除了台灣的研究,在 google 找到的多是大陸的研究,而我的入門磚選擇的是一篇論文「中文分詞算法概述」(連結)。(我隱約地感覺到,台灣叫斷詞,大陸叫分詞。我不太確定兩邊的專有名詞用的是哪一個)。我最愛的就是這一種論文,它可以快速了解目前該領域的現況,對於初學者最好了!

一個題外話,文章中引言的第一句:

自然语言处理是人工智能的一个重要分支。中文分词是中文自然语言处理的一项基础性工作,也是中文信息处理的一个重要问题。

在我認為中文分詞若是採用詞庫為基礎,建詞庫除了用專人建出來之外,大可以使用搜尋引擎的輸入關鍵字或標籤系統的標籤來組合成詞庫,這是利用工人智慧的好範例。中文分詞是一個基礎工作,很可惜的這種基礎工作現在台灣很難 google 到(不在前幾頁)。

回主題,看完該論文之後快速整理中文分詞的做法如下:

  1. 基於字串比配的分詞方法:這種方法又叫「機械分詞方法」、「基於字典的分詞方法」。它是按照一定的策略將待分析的字串與足夠大的詞典進行比對。若在詞典中找到某個字串,就算比對成功(識別出一個詞)。這個方法有三個要素(1)分詞詞典、(2)文本掃描順序、(3)比對原則。文本掃描順序有:(1)正向順描、(2)逆向順描、(3)雙向掃描。比對原則有:(1)最大比對、(2)最小比對、(3)逐詞比對、(4)最佳比對。依照三個要素的排列組合,常常配對使用的方法是:(1)最大比對法(MM)、(2)逆向最大比對法(RMM)、(3)逐詞遍歷法、(4)設立切分標誌法、(5)最佳比對法。
  2. 基於理解的分詞方法:這種方法又叫「基於人工智慧的分詞方法」。在分詞的同時進行句法分析、語義分析,利用句法訊息和語義訊息處理岐義現象。通常包括三個部份:(1)分詞子系統、(2)句法語義子系統、(3)總控部份。基於理解的分詞方法主要有幾種實作:(1)專家系統分詞法、(2)神經網路分詞法、(3)神經網路專家系統整合式分詞法。
  3. 基於統計的分詞方法:這種方法的立論精神是:詞是穩定的組合,因此在文章中,相鄰的字同時出現的次數越高,越有可能構成一個詞。因此字與字相鄰出現的頻率可以反映成詞的可信度。可以從訓練的文章中,對於相鄰出現的字的組合的頻率進行統計,以決定是否為一個詞。這種方法又叫做無字典分詞法。這方法使用的統計模型有:(1)N元文法模型(N-gram)、(2)隱 Markov 模型、(3)最大熵模型。在實際應用上,常和「基於字典的分詞方法」結合,以獲得比對分詞法的高效率及無詞典分詞的可辨識生詞的優點。
  4. 基於語義的分詞方法:這個方法引入語義分析,對自然語言本身的語言訊息進行更多處理。如(1)擴充轉移網路法、(2)矩陣約束法。(這個方法在原文中說明就比較少,以致我看不太懂。第2大種的子項目中也有語義分析,不曉得指的是不是同一件事?)

根據以上的分類法,文字雲用的是 「3. 基於統計的分詞方法」中的 N-gram 方法。如果是拿以前的標籤系統,中文分詞不會有問題,因為整個系統的標籤就可以當做字典,拿來對文章做 N-gram 加上字典法,應該就很夠用了。但是,目前有收錄中文的標籤系統且資料(我只要標籤)有公開的,沒有!只好學文字雲的作者一下,自己用 N-gram 再加工。選擇 N-gram 只是因為隱 Markov 模型、最大熵模型我不曉得要怎麼把原理轉成實作。若有大德提點,則是非常感激不盡。

沒有留言:

張貼留言