使用CRF++進行模型訓練

使用CRF++進行模型訓練

本機訓練:

使用以下命令:

nohup ./CRF++-0.58/crf_learn -f 10 -H 10 -e 0.0005 -m 300 data/template/template data/output/training_data_new.txt data/model/out_model -t > nohup.out 2>&1 &

  • template : 使用默認的模板,可以在CRF++-0.58/example/seg中找到
  • training_data.txt:即上步生成的訓練文件
  • model:生成的模型名稱
  • 其他參數:參見 http://taku910.github.io/crfpp/#source
    參數設置:
    -m,最大迭代d次數,默認爲10k,int
    -f,使用的feature最少出現次數,默認爲1,int
    -c,cost參數,CRFs超參,默認1.0,float。值越大,CRF越可能過擬合,用來平衡過擬合和低擬合情況,
    這個值得選取對模型有顯著影響(後續調優可以對這個值給予關注)。
    Note: You can find an optimal value by using held-out data or more general model selection method such as cross validation.
    -t,輸出文本模型
    -e,模型迭代訓練停止條件,爲loss變化率,默認0.0001
    -p,線程數量,默認爲自動檢測
    注意:模型訓練時間很長,且會打滿所有CPU,本機訓練時注意訓練文件不要太大(建議1w條以內)

預測

使用人工標註的數據data.test進行預測
./CRF++-0.58/crf_test -m data/model/model35 data/test_data/data.test.with_features.txt > data/test_data/data.test.out 2>&1
./CRF++-0.58/crf_test -m data/model/out_model data/test_data/data.test.correct.single_char_single_line_with_rulemodel_feature.txt > data/test_data/data.test_new.out 2>&1

內容:該工程源碼源於官方CRF++-0.58版本,官方原始的CRF++在訓練模型的時候會將第一列爲 \0 或 空格 或 \t 的行忽略掉,但我們需要第一列支持空格,所以修改了CRF++兩處源碼(feature_index.cpp 168行左右、tagger.cpp 368行左右),重新編譯了CRF++,這樣訓練模型的時候支持第一列是空格。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章