NLP之CRF分词训练(六)
?
分三步
1、先分詞
2、做BEMS標注,同時做詞性標注
3、訓練模型
?
1、對語料進行分詞
拿到測試部的語料或者其他渠道的語料,先對語料進行分詞,我剛剛開始是用NS分詞的,等CRF模型訓練好后,可以直接用CRF進行分詞,分完詞后要人工核對分詞結果,將分詞分得不正確的地方修改好
2、標注詞性,標注BEMS
BEMS所說是中科院的提出一種標注,也有說BEIS的,hanlp用的是BEMS
B:開始
E:結束
M/I:中間
S:單獨
BEMS標注已經寫了一個方法generateCRF在SegAndSave.class中。
詞性標注只能人工標注了。
?
3、訓練
安裝CRF++
./configure
make
make install
cd /CRF++-0.58/example/seg
執行crf++的crf_learn指令
../../crf_learn -f 3 -c 4.0 template train.data model -t
產生的model.txt就是我們要的文件,model二進制文件hanlp運行不起來
eg: 我想聽周杰倫的夜曲
1)分詞:我 想聽 周杰倫 的 夜曲
2)BEMS和詞性標注(每列用\t分隔開,一般鍵入tab鍵,windows的tab似乎有問題,可以參考用SegAndSave.class的generateSeg方法):
分詞標注
我 S
想 B
聽 E
周 B
杰 M
倫 E
的 S
夜 B
曲 E
注:周杰倫的詞性標注存在爭議,周杰倫作為一個整體是nr,但 “周” “杰” “倫” 分別應該標注為什么詞性,我還不確定。
分詞和詞性同時標注(CRF只預測一列。通常做法是將詞性附加在BMES后面:B_nr)
我 S_rr
想 B_v
聽 E_v
周 B_nr
杰 M_nr
倫 E_rn
的 S_ude1
夜 B_nz
曲 E_nz
3)../../crf_learn -f 3 -c 4.0 template train.data model -t
template用的是例子自帶的特征模板,對這個我還不會制作,先用著
train.data是我們上面整理好的語料
model是我們訓練好的模型文件(二進制名稱)
-t生成model.txt文本模型文件(這個就是我們要的模型了,直接copy到hanlp中使用即可)
?
mark
用43萬個句子的語料(約25M,約100個句式)訓練了一個音樂的CRF分詞模型,在本地用虛擬機,開9個G的內存,跑了90分鐘才訓練好一個模型,但分詞的效果并沒有達到想要的效果;本想增大語料(對語料進行復制)以加強每種句式的概率,但發現僅僅是復制一次,即約50M,86萬個句子,開了10個G也跑不起來,只能作罷。
總的來說,CRF能考慮每個字詞的上下文,然后進行分詞,這樣的分詞是很合理的,我認為這里的模型分詞的結果不理想和音樂的歌名、歌手等專有名詞本身沒有規律所造成的,也就是說CRF學習到的規律本身就是不正確的。對于音樂這些語料,我覺得已經不適用CRF來分詞,反而用字典分詞達到的效果要好得多,也易于控制。
如果要對類似音樂這種語料進行分詞,可以這樣做
1)先按正常句子做出分詞,即不切分出歌名
比如播放2002年的第一場雪,切分成“播放 2002年 ?的 第一場 雪”
2)通過自定義字典識別出“2002年的第一場雪”這首歌
“播放 2002年 ?的 第一場 雪”-->“播放 2002年的第一場雪”
轉載于:https://www.cnblogs.com/hx78/p/7309482.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的NLP之CRF分词训练(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 慢动作输出Linux命令结果并用彩色显示
- 下一篇: 历史性胜利!纽约曼哈顿充电站数量超过加油