最好的办法是使用 CoNLL-U 数据。
这里有英文树库:https ://universaldependencies.org/
我们在此处训练的各种词性模型的属性文件示例(也在模型 jar 中):
https://github.com/stanfordnlp/CoreNLP/tree/master/scripts/pos-tagger
这是一个示例词性训练命令:
java -Xmx10g edu.stanford.nlp.tagger.maxent.MaxentTagger -props custom.props
请注意,您希望使用此格式来指定用于训练和评估 CoNLL-U 文件的文件:
trainFile = format=TSV,wordColumn=1,tagColumn=3,/path/to/train.conllu
在这里,您指定使用制表符分隔的文件(每行有一个标记,换行为空行),并且您要说明哪些列分别代表单词和标签。
下面是一个训练依赖解析器的示例命令:
java edu.stanford.nlp.parser.nndep.DependencyParser -Xmx10g -trainFile <trainPath> -devFile <devPath> -embedFile <wordEmbeddingFile> -embeddingSize <wordEmbeddingDimensionality> -model nndep.model.txt.gz
要注意的一件事是UPOS
标签和XPOS
标签的概念。UPOS
标记应位于第 3 列,而标记位于第4XPOS
列。UPOS
它们对所有语言都是通用的,它们XPOS
是细粒度的和特定于语言的。
该-cPOS
标志将告诉训练过程使用UPOS
列索引 3 中的标签。如果您不添加此标志,它将默认使用列索引 4,如示例命令中所示。
如果您使用来自 GitHub 的 Stanford CoreNLP 的最新代码,此命令应该可以正常工作并使用 CoNLL-U 数据训练模型。如果您使用 3.9.2 中的代码,则需要确保将数据从 CoNLL-U 转换为 CoNLL-X。CoNLL-X 是一种较旧的样式,不包含有关多词标记的信息。
此外,为了让您的模型发挥最佳性能,您需要确保在整个应用程序中使用与训练数据一致的标记化。