斯坦福 NLP 工具如何训练中文分割器模型

Posted

技术标签:

【中文标题】斯坦福 NLP 工具如何训练中文分割器模型【英文标题】:How to train a Chinese segmenter model by Stanford NLP Tools 【发布时间】:2015-02-03 15:29:35 【问题描述】:

我是斯坦福 CoreNLP 工具的新手。现在我没有得到很好的中文分段结果,所以我想改变Segmenter的粒度。我想我可以通过训练自己的听写来做到这一点。

我下载了trainSegmenter-20080521文件,然后关注trainSegmenter-20080521/README.txt

这是 README.txt:

Sat Jun 21 00:57:22 2008
Author: Pi-Chuan Chang

Here's a documentation of how to train and test the segmenter on specific split 
range of the CTB data.

The following steps assumes you have 3 files defining the ranges of train/dev/test.
They should be named as "ctb6.train", "ctb6.dev", "ctb6.test" respectively.
The format should be like:
      chtb_0003.fid
      chtb_0015.fid
      ...

[STEP 1] change the CTB6 path in the Makefile:
      CTB6=/afs/ir/data/linguistic-data/Chinese-Treebank/6/

[STEP 2] download and uncompress the lastest segmenter from:
      http://nlp.stanford.edu/software/stanford-chinese-segmenter-2008-05-21.tar.gz
and change this path in the Makefile to your local path:
      SEGMENTER=/tmp/stanford-chinese-segmenter-2008-05-21/

[STEP 3] simply type:
      make all
You can also split down into these sub-steps:
      make internaldict # make internal dictionaries for affixation feaetures
      make data         # make datasets
      make traintest    # train & test the CRF segmenter

但是我还是有一些问题:

    训练文件的格式是什么,train/dev/test各自是干什么用的?

    chtb_0003.fidchtb_0015.fid等是什么?

    Makefile中的CTB6 path是什么,看来我应该把变量CTB6改成/afs/ir/data/linguistic-data/Chinese-Treebank/6/。但它在那里很远,似乎不是一个有效的子路径。

顺便说一句,有很多属性应该设置为特殊需求,例如sighanPostProcessingserDictionary

有没有什么地方我可以得到所有这些属性及其解释?

我现在所能做的就是阅读源代码,例如,edu.stanford.nlp.sequences.SeqClassifierFlags.java,但我仍然对这些属性标志感到困惑。

非常感谢任何人的帮助。

【问题讨论】:

【参考方案1】:

我会忽略那个自述文件。里面的信息已经过时了。

最近的解释在这里:

http://nlp.stanford.edu/software/segmenter-faq.shtml

预期的输入格式是每行一个句子,每行包含已分段的文本。如果您从解析树中获取分段数据,则有一些工具可以将解析树转换为分段文本。

如果有特定的句子没有正确切分,可能是因为它使用的是 CTB 切分标准,而您更喜欢不同的句子。也可能是因为分词器不知道的单词。如果您将遵循 CTB 分词标准的例句发送给 java-nlp-user,这些未知词最终会进入分词器的训练数据中。

【讨论】:

【参考方案2】:

也许联系 Pi-Cuan Chang 是您获得最终答案的最佳选择,但我确实对此进行了一些调查。尽我所能回答您的问题:

    train/dev/test 集的格式为中文树库格式;我收集的是第 6 版:https://catalog.ldc.upenn.edu/LDC2007T36

    *.fid 文件看起来像是句子的解析树。格式如下(注意我的文本编辑器没有正确显示汉字):

    XIN19981227.00181998-12-27日期> 标题> ((IP-HLN (NP-SBJ (NP-PN (NR )) (ADJP (JJ )) (NP (NN ) (NN ))) (VP (VV ) (NP-OBJ (PU ) (NN ) (NN ) (PU ))))) 标题>

    ((FRAG (NR ) (NR ) (新台币 ) (NT ) (NN ) (PU ) (NN ) (NR ) (NR ) (PU ))) ...

    自述文件中给出的路径是斯坦福机器上的本地路径。这将不是正确的路径。您应该将其更改为本地内容,然后将树库 (https://catalog.ldc.upenn.edu/LDC2007T36) 放在那里。请注意,您需要 LDC 许可证!

【讨论】:

非常感谢@gaborangeli 的回答,为了训练中文Segmenter Model,事情可能和你说的一样。你对运行斯坦福 CoreNLP 工具的标志有什么想法吗?我尽了最大的努力,但仍然对这些正在运行的标志了解甚少。

以上是关于斯坦福 NLP 工具如何训练中文分割器模型的主要内容,如果未能解决你的问题,请参考以下文章

斯坦福 NLP 工具和大量文本

斯坦福NLP课程 | 第10讲

斯坦福 stanford coreNLP 中的PCFG parser-lexparser

斯坦福 stanford coreNLP 中的PCFG parser-lexparser

斯坦福的nlp学习

如何抑制斯坦福 NLP ColumnDataClassifier.makeClassifier() 函数的标准输出