在線演示:http://118.25.42.251:7777/fenci?type=mine&text=南京市長(zhǎng)蒞臨指導(dǎo)捧毛,大家熱烈歡迎观堂。公交車中將禁止吃東西!
一呀忧、源程序下載
以上文件夾中师痕,我們只需要保留.py文件即可(為防止我的權(quán)重文件和你的語料、模型不匹配而账,只保留py文件即可)胰坟。
二、模塊安裝
python3.5
pip install keras==2.0.6
keras_contrib==2.0.8 【pip install git+https://www.github.com/keras-team/keras-contrib.git】
pip install gensim
如有其它模塊缺失泞辐,可自行百度安裝腕铸。
三、訓(xùn)練語料格式及存儲(chǔ)
py文件的當(dāng)前路徑铛碑,新建corpus文件夾,該文件夾作為語料存儲(chǔ)根路徑虽界。
corpus下汽烦,我們按文件夾存放子語料,比如我的子語料如下:
其中莉御,conll_little是conll2012語料的一個(gè)領(lǐng)域(我后面又上傳了conll2012全部領(lǐng)域撇吞,建議先使用conll_little將模型調(diào)試成功,再使用conll2012_all加入corpus中訓(xùn)練)礁叔,law_100是法律文書語料牍颈;
子語料(例如law_100)下,按文件存放相關(guān)子文件:
其中琅关,每個(gè)文件中內(nèi)容為如下格式(例如 4.txt)煮岁,空格將詞隔開:
四、詞向量訓(xùn)練
python embedding_model.py ? // word2vec的相關(guān)參數(shù)可調(diào)控涣易,我設(shè)的100維詞向量画机。
程序運(yùn)行完,將會(huì)得到兩個(gè)詞向量文件(.m和.txt文件)新症,如下:
其中步氏,.m文件是給程序(模型)使用的,.txt是為了可視化徒爹,我們自己看的荚醒。
五芋类、測(cè)試文件
py文件的當(dāng)前路徑下,新建test_documents文件夾界阁,作為測(cè)試文件的根路徑侯繁。
test_documents文件夾下,我放置了一個(gè)test_1的文件夾铺董,test_1文件夾下存放需要分詞的文件(33.txt和88.txt)巫击。
33.txt中文本格式如下,為待分詞文本精续。
以上是測(cè)試文本的介紹坝锰,這部分自由度較高,可以等模型訓(xùn)練好后自行安排重付。
六顷级、模型訓(xùn)練
我們?cè)?bilstm_cnn_crf.py中,將 is_train設(shè)為1(訓(xùn)練)确垫,將 nb_epoch設(shè)為10弓颈。
(網(wǎng)絡(luò)的一些參數(shù)可以自行定位到程序中修改,如batch_size删掀、nb_epoch翔冀、optimizer等)
python bisltm_cnn_crf.py ? // ?如不出錯(cuò),如下圖披泪,則訓(xùn)練初步成功
訓(xùn)練時(shí)間跟語料多少纤子、迭代次數(shù)有關(guān)。
七款票、性能評(píng)測(cè)
按文件分詞為上述函數(shù)控硼,其中第一個(gè)路徑是待分詞文本(test_1)、第二個(gè)路徑是分詞后文本(test_1_mine艾少,該文件夾會(huì)自動(dòng)生成卡乾,保存分詞結(jié)果)
socre.py 程序可以通過輸入兩個(gè)文件名,計(jì)算(P缚够、R幔妨、F和ERR)
如下,比較預(yù)測(cè)的33.txt和標(biāo)準(zhǔn)文件中33.txt潮瓶,得到該文件的一些分詞性能指標(biāo)陶冷。
python score.py
八、使用我的權(quán)值文件
以上執(zhí)行完毯辅,你將會(huì)生成你的權(quán)值文件埂伦,模型性能的好壞取決于訓(xùn)練語料的多少。
在my_weights文件夾下思恐,有我預(yù)訓(xùn)練的權(quán)值文件(conll2012+law_100)沾谜,性能不一定最優(yōu)膊毁,僅供參考。
1. 刪除py文件當(dāng)前位置的其它權(quán)值文件基跑,只保留py文件和文件夾(conll2012_test_gold是conll測(cè)試文件的gold文件)
將my_weights下的3個(gè)文件copy到py文件當(dāng)前位置婚温。
將bilstm_cnn_crf.py中is_train設(shè)為0
修改fenci_by_file函數(shù)的兩個(gè)路徑,對(duì)conll2012_test_raw進(jìn)行分詞
其中媳否,test_documents/conll2012_test_raw/bc_conll_testing.utf8文件部分如下:
python bilstm_cnn_crf.py ?
運(yùn)行結(jié)束后栅螟,test_documents下將出現(xiàn)conll2012_test_mine文件夾,其下6個(gè)文件對(duì)應(yīng)于test_documents/conll2012_test_raw下6個(gè)文件的分詞結(jié)果篱竭。
其中力图,test_documents/conll2012_test_mine/bc_conll_testing.utf8部分如下:
為了驗(yàn)證分詞模型性能,我們比較test_documents/conll2012_test_mine下的6個(gè)測(cè)試結(jié)果文件和conll2012_test_gold下的6個(gè)黃金結(jié)果文件掺逼。
修改score.py中文件的路徑
分別測(cè)試conll2012的6個(gè)領(lǐng)域測(cè)試集的分詞性能吃媒,結(jié)果如下(結(jié)果還將就,說明模型work):
bc領(lǐng)域:
bn領(lǐng)域:
mz領(lǐng)域:
nw領(lǐng)域:
tc領(lǐng)域:
wb領(lǐng)域:
以上6個(gè)領(lǐng)域的測(cè)試性能F值均能達(dá)到0.91以上吕喘,說明模型訓(xùn)練還算成功赘那。
此外,為進(jìn)一步提高性能氯质,需要進(jìn)行一些參數(shù)的調(diào)整(如學(xué)習(xí)率募舟、優(yōu)化器等),或增加訓(xùn)練次數(shù)(本文不做探究闻察,僅提供一個(gè)Demo)胃珍。
此外,以上是將6個(gè)不同領(lǐng)域的訓(xùn)練語料一起訓(xùn)練蜓陌、最后再測(cè)試,可能存在領(lǐng)域適應(yīng)性問題吩蔑,分開訓(xùn)練钮热、分開測(cè)試或許結(jié)果更優(yōu)。
九烛芬、一些問題
1. 本文訓(xùn)練時(shí)將文件按幾個(gè)常見的標(biāo)點(diǎn)隔開(隧期,。赘娄;)仆潮,模型的輸入長(zhǎng)度maxlen以訓(xùn)練集中句子的最大長(zhǎng)度決定。測(cè)試時(shí)句子按標(biāo)點(diǎn)(遣臼,性置。!揍堰;鹏浅?)隔開嗅义,之所以多加了幾個(gè)標(biāo)點(diǎn),是為了盡量將句子切分的較短隐砸,不然測(cè)試時(shí)句子長(zhǎng)度大于maxlen,將會(huì)被截?cái)嘀耄畔G失。這里我感覺處理的不夠好季希,如果遇到奇怪的文本(例如沒有標(biāo)點(diǎn)褪那,句子又很長(zhǎng)),信息將會(huì)只保留maxlen長(zhǎng)度。
2. 測(cè)試時(shí)式塌,讀入一個(gè)測(cè)試文件博敬,本程序?qū)葱羞M(jìn)行分詞,將行l(wèi)ine輸送給word_seg_by_sentences函數(shù)珊搀,該函數(shù)再將line按標(biāo)點(diǎn)切分冶忱,組合成句子集的向量表示,輸送給模型進(jìn)行預(yù)測(cè)(分詞)境析,最后再拼接還原成分詞后的line囚枪。這里運(yùn)行效率較低,可以將一個(gè)文檔的所有文本按標(biāo)點(diǎn)切分劳淆,組合成向量链沼,輸送給模型預(yù)測(cè)。
3. 程序?qū)懙娜哂嗯嫱摇㈦s亂括勺! 講解寫了一晚上,效率太低曲掰,心累疾捍,還望點(diǎn)贊支持~~~。
......
以上問題由于時(shí)間問題栏妖,不做修復(fù)乱豆。如有其它問題,可告知吊趾,共同思考宛裕。