最近,北大開源了一箇中文分詞工具包,它在多個分詞資料集上都有非常高的分詞準確率。其中廣泛使用的結巴分詞誤差率高達 18.55% 和 20.42,而北大的 pkuseg 只有 3.25% 與 4.32%。
pkuseg 是由北京大學語言計算與機器學習研究組研製推出的一套全新的中文分詞工具包。它簡單易用,支援多領域分詞,在不同領域的資料上都大幅提高了分詞的準確率。
專案地址:https://github.com/lancopku/PKUSeg-python
pkuseg 具有如下幾個特點:
高分詞準確率:相比於其他的分詞工具包,該工具包在不同領域的資料上都大幅提高了分詞的準確度。根據北大研究組的測試結果,pkuseg 分別在示例資料集(MSRA 和 CTB8)上降低了 79.33% 和 63.67% 的分詞錯誤率。
多領域分詞:研究組訓練了多種不同領域的分詞模型。根據待分詞的領域特點,使用者可以自由地選擇不同的模型。
支援使用者自訓練模型:支援使用者使用全新的標註資料進行訓練。
此外,作者們還選擇 THULAC、結巴分詞等國內代表分詞工具包與 pkuseg 做效能比較。他們選擇 Linux 作為測試環境,在新聞資料(MSRA)和混合型文字(CTB8)資料上對不同工具包進行了準確率測試。此外,測試使用的是第二屆國際漢語分詞評測比賽提供的分詞評價指令碼。評測結果如下:
我們可以看到,最廣泛使用的結巴分詞準確率最低,清華構建的 THULAC 分詞準確率也沒有它高。當然,pkuseg 是在這些資料集上訓練的,因此它在這些任務上的準確率也會更高一些。
預訓練模型
分詞模式下,使用者需要載入預訓練好的模型。研究組提供了三種在不同型別資料上訓練得到的模型,根據具體需要,使用者可以選擇不同的預訓練模型。以下是對預訓練模型的說明:
MSRA:在 MSRA(新聞語料)上訓練的模型。新版本程式碼採用的是此模型。
CTB8:在 CTB8(新聞文字及網路文字的混合型語料)上訓練的模型。
WEIBO:在微博(網路文字語料)上訓練的模型。
其中,MSRA 資料由第二屆國際漢語分詞評測比賽提供,CTB8 資料由 LDC 提供,WEIBO 資料由 NLPCC 分詞比賽提供。在 GitHub 專案中,這三個預訓練模型都提供了下載地址。
安裝與使用
pkuseg 的安裝非常簡單,我們可以使用 pip 安裝,也可以直接從 GitHub 下載:
- pip install pkuseg
使用 pkuseg 實現分詞也很簡單,基本上和其它分詞庫的用法都差不多:
- '''程式碼示例1: 使用預設模型及預設詞典分詞'''
- import pkuseg
- #以預設配置載入模型
- seg = pkuseg.pkuseg()
- #進行分詞
- text = seg.cut('我愛北京天安門')
- print(text)
- '''程式碼示例2: 設定使用者自定義詞典'''
- import pkuseg
- #希望分詞時使用者詞典中的詞固定不分開
- lexicon = ['北京大學', '北京天安門']
- #載入模型,給定使用者詞典
- seg = pkuseg.pkuseg(user_dict=lexicon)
- text = seg.cut('我愛北京天安門')
- print(text)
- '''程式碼示例3'''
- import pkuseg
- #假設使用者已經下載好了ctb8的模型並放在了'./ctb8'目錄下,通過設定model_name載入該模型
- seg = pkuseg.pkuseg(model_name='./ctb8')
- text = seg.cut('我愛北京天安門')
- print(text)
對於大型文字資料集,如果需要快速分詞的話,我們也可以採用多執行緒的方式:
- '''程式碼示例4'''
- import pkuseg
- #對input.txt的檔案分詞輸出到output.txt中,使用預設模型和詞典,開20個程序
- pkuseg.test('input.txt', 'output.txt', nthread=20)
最後,pkuseg 還能重新訓練一個分詞模型:
- '''程式碼示例5'''
- import pkuseg
- #訓練檔案為'msr_training.utf8',測試檔案為'msr_test_gold.utf8',模型存到'./models'目錄下,開20個程序訓練模型
- pkuseg.train('msr_training.utf8', 'msr_test_gold.utf8', './models', nthread=20)
這些都是 GitHub 上的示例,詳細的內容請參考 GitHub 專案,例如引數說明和參考論文等。