免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
北大開源的 Python 分詞工具 pkuseg

送你十本Python電子書

文 | 皮乾東 推薦 | 編程派()

本部分內(nèi)容部分來(lái)自:https://github.com/lancopku/PKUSeg-python

1.前言

最近看到一些博文介紹了北大的一個(gè)開源的中文分詞工具包pkuseg。其中說(shuō)到,它在多個(gè)分詞數(shù)據(jù)集上都有非常高的分詞準(zhǔn)確率。我們所知道的,也經(jīng)常使用的結(jié)巴分詞誤差率高達(dá) 18.55% 和 20.42,而北大的 pkuseg 只有 3.25% 與 4.32%。

當(dāng)然還有其他的分詞工具,如:清華大學(xué)的THULAC,HanLp,pynlpir等工具。分詞的重要性不言而喻,在看到相關(guān)介紹后也在第一時(shí)間去嘗試一下,以下根據(jù)github開源信息做出實(shí)驗(yàn),其使用的語(yǔ)言是python。github地址為:https://github.com/lancopku/PKUSeg-python。

2.簡(jiǎn)介

pkuseg是由北京大學(xué)語(yǔ)言計(jì)算與機(jī)器學(xué)習(xí)研究組研制推出的一套全新的中文分詞工具包。pkuseg具有如下幾個(gè)特點(diǎn):

  1. 高分詞準(zhǔn)確率。相比于其他的分詞工具包,該工具包在不同領(lǐng)域的數(shù)據(jù)上都大幅提高了分詞的準(zhǔn)確度。根據(jù)測(cè)試結(jié)果,pkuseg分別在示例數(shù)據(jù)集(MSRA和CTB8)上降低了79.33%和63.67%的分詞錯(cuò)誤率。

  2. 多領(lǐng)域分詞。該分詞包訓(xùn)練了多種不同領(lǐng)域的分詞模型。根據(jù)待分詞的領(lǐng)域特點(diǎn),用戶可以自由地選擇不同的模型。

  3. 支持用戶自訓(xùn)練模型。支持用戶使用全新的標(biāo)注數(shù)據(jù)進(jìn)行訓(xùn)練。

3.工具使用

3.1安裝

方式1.程序包下載安裝

  1. pip install pkuseg

  2. 之后通過(guò)importpkuseg來(lái)引用

方式2.從github下載(需要下載模型文件)

  1. 將pkuseg文件放到目錄下,通過(guò)importpkuseg使用

  2. 模型需要下載或自己訓(xùn)練。

3.2代碼示例

1.使用默認(rèn)模型及默認(rèn)詞典分詞

在實(shí)際測(cè)試中,第一次加載模型時(shí)間比較長(zhǎng),并且分詞的結(jié)果也沒有給出各個(gè)詞語(yǔ)的詞性,如下圖:

2.設(shè)置用戶自定義詞典

在實(shí)際測(cè)試中,可以看出,自定義詞典確實(shí)起到作用,但是這個(gè)處理時(shí)間似乎有點(diǎn)小長(zhǎng),默認(rèn)詞典與自定義詞典比較,代碼如下

  1. importpkuseg

  2. lexicon = ['北京大學(xué)','北京天安門']#希望分詞時(shí)用戶詞典中的詞固定不分開

  3. segDefault = pkuseg.pkuseg#默認(rèn)分詞類型

  4. seg = pkuseg.pkuseg(user_dict=lexicon)#加載模型,給定用戶詞典

  5. textDefault = segDefault.cut('我愛北京天安門')#進(jìn)行分詞

  6. text = seg.cut('我愛北京天安門')#進(jìn)行分詞

  7. print(textDefault)

  8. print(text)

運(yùn)行結(jié)果如下:

  1. loading model

  2. finish

  3. loading model

  4. finish

  5. ['我','愛','北京','天安門']

  6. ['我','愛','北京天安門']

  7. [Finishedin40.2s]

3.模型訓(xùn)練

訓(xùn)練模型是需要解壓的,具體內(nèi)容可參考github上的內(nèi)容,其中代碼如下:

  1. importpkuseg

  2. seg = pkuseg.pkuseg(model_name='ctb8')#假設(shè)用戶已經(jīng)下載好了ctb8的模型并放在了'ctb8'目錄下,通過(guò)設(shè)置model_name加載該模型

  3. text = seg.cut('我愛北京天安門')#進(jìn)行分詞

  4. print(text)

運(yùn)行結(jié)果:

  1. loading model

  2. finish

  3. ['我','愛','北京','天安門']

  4. [Finishedin24.6s]

4.對(duì)于大型文本數(shù)據(jù)集,如果需要快速分詞的話,我們也可以采用多線程的方式

讀取文件,并將分詞結(jié)果輸出到一個(gè)文件中,在進(jìn)行測(cè)試的時(shí)候,幾經(jīng)報(bào)錯(cuò),也可沒出結(jié)果,獲取我的系統(tǒng)配置有問(wèn)題,或者輸入文件有問(wèn)題,或者…這里就拋磚引玉,希望大牛能夠調(diào)出來(lái),代碼如下:

  1. importpkuseg

  2. #對(duì)input.txt的文件分詞輸出到output.txt中,使用默認(rèn)模型和詞典,開20個(gè)進(jìn)程

  3. pkuseg.test('input.txt','output.txt', nthread=20)

運(yùn)行結(jié)果:

  1. loading model

  2. finish

  3. Traceback(most recent calllast):

  4. File'<string>', line1,in<module>

  5. File'C:\Development\Python\Anaconda3\lib\multiprocessing\spawn.py', line105,inspawn_main

  6. exitcode = _main(fd)

  7. File, line114,in_main

  8. prepare(preparation_data)

  9. File, line225,inprepare

  10. _fixup_main_from_path(data['init_main_from_path'])

  11. File, line277,in_fixup_main_from_path

  12. run_name='__mp_main__')

  13. File'C:\Development\Python\Anaconda3\lib\runpy.py', line263,inrun_path

  14. pkg_name=pkg_name, script_name=fname)

  15. File, line96,in_run_module_code

  16. mod_name, mod_spec, pkg_name, script_name)

  17. File, line85,in_run_code

  18. exec(code, run_globals)

  19. File'C:\Users\JackPi\Desktop\test\pkusegtest\test.py', line10,in<module>

  20. pkuseg.test('input.txt','output.txt', nthread=20)

  21. File'C:\Development\Python\Anaconda3\lib\site-packages\pkuseg\__init__.py', line263,intest

  22. p.start

  23. File'C:\Development\Python\Anaconda3\lib\multiprocessing\process.py', line105,instart

  24. self._popen =self._Popen(self)

  25. File'C:\Development\Python\Anaconda3\lib\multiprocessing\context.py', line223,in_Popen

  26. return_default_context.get_context.Process._Popen(process_obj)

  27. File, line322,in_Popen

  28. returnPopen(process_obj)

  29. File'C:\Development\Python\Anaconda3\lib\multiprocessing\popen_spawn_win32.py', line33,in__init__

  30. prep_data = spawn.get_preparation_data(process_obj._name)

  31. File, line143,inget_preparation_data

  32. _check_not_importing_main

  33. File, line136,in_check_not_importing_main

  34. isnotgoing to be frozen to produce an executable.''')

  35. RuntimeError:

  36. An attempt has been made to start a new process before the

  37. current process has finished its bootstrapping phase.

  38. This probably means that you are not using fork to start your

  39. child processes and you have forgotten to use the proper idiom

  40. in the main module:

  41. if __name__ == '__main__':

  42. freeze_support

  43. ...

  44. The 'freeze_support' line can be omitted if the program

  45. is not going to be frozen to produce an executable.

  46. loading model

  47. finish

  48. Traceback (most recent call last):

  49. File 'C:\Users\JackPi\Desktop\test\pkusegtest\test.py', line 10, in <module>

  50. pkuseg.test('input.txt', 'output.txt', nthread=20)

  51. File 'C:\Development\Python\Anaconda3\lib\site-packages\pkuseg\__init__.py', line 263, in test

  52. p.start

  53. File 'C:\Development\Python\Anaconda3\lib\multiprocessing\process.py', line 105, in start

  54. self._popen = self._Popen(self)

  55. File 'C:\Development\Python\Anaconda3\lib\multiprocessing\context.py', line 223, in _Popen

  56. return _default_context.get_context.Process._Popen(process_obj)

  57. File 'C:\Development\Python\Anaconda3\lib\multiprocessing\context.py', line 322, in _Popen

  58. return Popen(process_obj)

  59. File 'C:\Development\Python\Anaconda3\lib\multiprocessing\popen_spawn_win32.py', line 65, in __init__

  60. reduction.dump(process_obj, to_child)

  61. File 'C:\Development\Python\Anaconda3\lib\multiprocessing\reduction.py', line 60, in dump

  62. ForkingPickler(file, protocol).dump(obj)

  63. BrokenPipeError: [Errno 32] Broken pipe

  64. [Finished in 42.5s]

其中的input.txt中的內(nèi)容為:

  1. 外星文明探索是一個(gè)很特殊的學(xué)科,它對(duì)研究者的人生觀影響很大。夜深人靜的時(shí)候,從耳機(jī)中聽著來(lái)自宇宙沒有生命的噪音,這噪音隱隱約約的,好像比那些星星還永恒;有時(shí)又覺得那聲音像大興安嶺的冬天里沒完沒了的寒風(fēng),讓我感到很冷,那種孤獨(dú)真是沒法形容。地球生命真的是宇宙中偶然里的偶然,人類是這空蕩蕩的大殿里唯一一只螞蟻。有時(shí)覺得生命真珍貴,一切都重如泰山;有時(shí)又覺得人是那么渺小,什么都不值一提。

5.重新訓(xùn)練一個(gè)分詞模型

  1. importpkuseg

  2. #訓(xùn)練文件為'msr_training.utf8',測(cè)試文件為'msr_test_gold.utf8',模型存到'./models'目錄下,開20個(gè)進(jìn)程訓(xùn)練模型

  3. pkuseg.train('msr_training.utf8','msr_test_gold.utf8','./models', nthread=20)

這里我就沒有去測(cè)試,感興趣的可以去嘗試一下。

6.參數(shù)說(shuō)明

  1. pkuseg.pkuseg(model_name='msra', user_dict='safe_lexicon')

  2. model_name 模型路徑。默認(rèn)是'msra'表示我們預(yù)訓(xùn)練好的模型(僅對(duì)pip下載的用戶)。用戶可以填自己下載或訓(xùn)練的模型所在的路徑如model_name='./models'。

  3. user_dict 設(shè)置用戶詞典。默認(rèn)為'safe_lexicon'表示我們提供的一個(gè)中文詞典(僅pip)。用戶可以傳入一個(gè)包含若干自定義單詞的迭代器。

  4. pkuseg.test(readFile, outputFile, model_name='msra', user_dict='safe_lexicon', nthread=10)

  5. readFile 輸入文件路徑

  6. outputFile 輸出文件路徑

  7. model_name 同pkuseg.pkuseg

  8. user_dict 同pkuseg.pkuseg

  9. nthread 測(cè)試時(shí)開的進(jìn)程數(shù)

  10. pkuseg.train(trainFile, testFile, savedir, nthread=10)

  11. trainFile 訓(xùn)練文件路徑

  12. testFile 測(cè)試文件路徑

  13. savedir 訓(xùn)練模型的保存路徑

  14. nthread 訓(xùn)練時(shí)開的進(jìn)程數(shù)

4 各類分詞工具包性能比較

在進(jìn)行比較之前需要說(shuō)明以下預(yù)訓(xùn)練模型

分詞模式下,用戶需要加載預(yù)訓(xùn)練好的模型。這里提供了三種在不同類型數(shù)據(jù)上訓(xùn)練得到的模型,根據(jù)具體需要,用戶可以選擇不同的預(yù)訓(xùn)練模型。以下是對(duì)預(yù)訓(xùn)練模型的說(shuō)明:

MSRA: 在MSRA(新聞?wù)Z料)上訓(xùn)練的模型。新版本代碼采用的是此模型。

CTB8: 在CTB8(新聞文本及網(wǎng)絡(luò)文本的混合型語(yǔ)料)上訓(xùn)練的模型。

WEIBO: 在微博(網(wǎng)絡(luò)文本語(yǔ)料)上訓(xùn)練的模型。

其中,MSRA數(shù)據(jù)由第二屆國(guó)際漢語(yǔ)分詞評(píng)測(cè)比賽提供,CTB8數(shù)據(jù)由LDC提供,WEIBO數(shù)據(jù)由NLPCC分詞比賽提供。

具體比較

官方數(shù)據(jù)中:在比較中選擇THULAC、結(jié)巴分詞等國(guó)內(nèi)代表分詞工具包與pkuseg做性能比較,測(cè)試環(huán)境選擇Linux,在新聞數(shù)據(jù)(MSRA)和混合型文本(CTB8)數(shù)據(jù)上對(duì)不同工具包進(jìn)行了準(zhǔn)確率測(cè)試(數(shù)據(jù)在github上,可下載)。該比較使用了第二屆國(guó)際漢語(yǔ)分詞評(píng)測(cè)比賽提供的分詞評(píng)價(jià)腳本。評(píng)測(cè)結(jié)果如下:

通過(guò)上面的數(shù)據(jù),可以說(shuō)明jieba分詞的準(zhǔn)確率最低,清華大學(xué)的THULAC的準(zhǔn)確率也沒有pkuseg高。但是,我們需要注意的是:北大的這個(gè)分詞工具是經(jīng)過(guò)這些數(shù)據(jù)訓(xùn)練出來(lái)的,準(zhǔn)確率高也是情理之中的事情。真正的好不好,就看使用者的反饋了。

5 相關(guān)論文及作者

1.論文

  • Xu Sun, Houfeng Wang, Wenjie Li. Fast Online Training with Frequency-Adaptive Learning Rates for Chinese Word Segmentation and New Word Detection. ACL. 253–262. 2012

  • Jingjing Xu, Xu Sun. Dependency-based Gated Recursive Neural Network for Chinese Word Segmentation. ACL 2016: 567-572

2.作者

Ruixuan Luo (羅睿軒), Jingjing Xu(許晶晶), Xu Sun (孫栩)

6 總結(jié)

從客觀來(lái)看,該工具還是存在缺點(diǎn)的,雖然官方給出的準(zhǔn)確率很高,但是在實(shí)際分詞過(guò)程中,花費(fèi)時(shí)間長(zhǎng),系統(tǒng)穩(wěn)定性低,分詞結(jié)果也不可以顯示分詞的詞性,綜合來(lái)講與當(dāng)前成熟的開源的分詞工具還是有一定的差距,但是也不否定該工具具有的亮點(diǎn),以及其非常高的準(zhǔn)確性。

分詞是自然語(yǔ)言處理中底層并且非常重要的一環(huán),當(dāng)前做得也是比較成熟了,但是也存在很多缺陷,也是一個(gè)研究的方向。個(gè)人認(rèn)為,真正做自然語(yǔ)言處理,到最后依然是需要回歸到語(yǔ)言到底是什么,語(yǔ)言是如何發(fā)出的,語(yǔ)言的發(fā)展等等,當(dāng)今基于統(tǒng)計(jì)的自然語(yǔ)言處理不容置疑也確實(shí)做出不錯(cuò)的成績(jī),但基本上都是基于語(yǔ)料的,模型訓(xùn)練的等等。在自然語(yǔ)言處理這一交叉學(xué)科上,其發(fā)展依然任重而道遠(yuǎn),不能一味地崇拜機(jī)器學(xué)習(xí),深度學(xué)習(xí),回歸語(yǔ)言本質(zhì),用數(shù)學(xué)的方式進(jìn)行處理也將會(huì)是未來(lái)研究的方向。

版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。

回復(fù)下方「關(guān)鍵詞」,獲取優(yōu)質(zhì)資源

回復(fù)關(guān)鍵詞「 pybook03」,立即獲取主頁(yè)君與小伙伴一起翻譯的《Think Python 2e》電子版

回復(fù)關(guān)鍵詞「入門資料」,立即獲取主頁(yè)君整理的 10 本 Python 入門書的電子版

回復(fù)關(guān)鍵詞「m」,立即獲取Python精選優(yōu)質(zhì)文章合集

回復(fù)關(guān)鍵詞「book 數(shù)字」,將數(shù)字替換成 0 及以上數(shù)字,有驚喜好禮哦~

題圖:pexels,CC0 授權(quán)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Horovod 分布式深度學(xué)習(xí)框架相關(guān)
八款中文詞性標(biāo)注工具使用及在線測(cè)試 | 我愛自然語(yǔ)言處理
手把手教你Python分詞工機(jī)具:安裝、使用和測(cè)試
Anaconda.anaconda_lib.workers.local_worker.LocalWorker object at 0x0000027B7733DEB8
Mac OS X 10.10安裝深度學(xué)習(xí)框架Caffe教程
深入理解Python中import機(jī)制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服