2013年3月4日星期一

使用stanford segmenter

1) 下载 http://nlp.stanford.edu/software/segmenter.shtml 当前最新版本为
1.6.72012-11-11. 大小为200M+, 其中的中文训练数据ctb.gz和pku.gz占了大概200M. 
将jar -xf stanford-segmenter-1.6.7-sources.jar 解压的文件夹放入src文件夹中.
用ant编译, 得到classes/文件夹

(jar xf stanford-segmenter-1.6.7-sources.jar
 mkdir src
 mv edu src/edu
 ant
 jar cvf seg.jar -C classes/ .)
这样生成新的seg.jar文件


2) 训练
  从ctb6.0中抽取了数据(train/test/deve按xue cl 08划分, train/test/deve:23420/2796/2079句)
  ctb_v6/data/utf8/bracketed/chtb_3095.fid的第89行((WHNP-4改为(CP (WHNP-4, 同时将第91行最前面的CP去除, 该句子为((IP (NP (CP (CP (IP (NP (NN 地方)(NN 当局))(VP (ADVP (AD 正在))(VP (VV 组织))))(DEC 的)))(ADJP (JJ 紧急))(NP (NN 求援)))(PU ,)(ADVP (AD 但是))(PP (P 据)(NP (NN 报道)))(PU ,)(NP (CP (CP (IP (VP (QP (CD 1多))(VP (VA 深))))(DEC 的)))(NP (NN 大雪)))(VP (PP (P 给)(NP (NN 求援)(NN 工作)))(VP (VV 造成)(AS 了)(NP (CP (CP (IP (VP (ADVP (AD 极))(VP (VA 大))))(DEC 的)))(NP (NN 困难)))))(PU 。)))

下载http://nlp.stanford.edu/software/trainSegmenter-20080521.tar.gz
大小为100M, 其中包括了中文ctb6.0的数据.
1) 准备 ctb6.train, ctb6.dev, and ctb6.test (需要按照ctb6.0的格式来准备, 会用到postagged信息)
2) 修改Makefile里面的
CTB6=/path/to/ctb6.0/
SEGMENTER=/path/to/stanford-chinese-segmenter-2012-11-11/
修改time java6 --> time java
3) make all
如果在第三步出错 可查看logs/ctb6.err
在8g内存机器上, 大概需要1个小时.

在Makefile里发现在训练的时候需要用到-serDictionary $(SEGMENTER)/data/dict-chris6.ser.gz
不知道dict-chris6.ser.gz内容是什么, 但应该不是从我提供的训练集中得到的...
(如果忽略这个东西, 把训练生成的mode/ctb6.ser.gz移到stanford-segmenter-2012-11-11/data/下, 去 替换ctb6.gz(还未试过))

没有评论: