斯坦福 post-tagger 增量训练

Stanford pos-tagger incremental training

我们使用 Stanford CoreNLP 已有一段时间了,大多数时候它都能提供正确的结果。

但是对于某些句子,依存分析结果是乱七八糟的。正如我们所观察到的,其中一些错误是由 POS 标记问题引起的,例如I really like this restaurant. 中的单词 likeVery affordable and excellent ambient!

中的单词 ambient

是的,我们正在处理用户评论,这些评论可能与 Stanford CoreNLP 中的训练语料库的措辞略有不同,因此我们正在考虑自己注释一些文本并与现有模型混合。对于 NER,我们已经有了自己的特殊 NE 模型,但对于 POS 标记和依赖项解析,我们一无所知。

谁能提供一些建议?

最好的办法是使用 CoNLL-U 数据。

这里有英语树库:https://universaldependencies.org/

这里有我们训练的各种词性模型的属性文件示例(也在模型罐中):

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 列,而 XPOS 标签在第 4 列。UPOS 对所有语言都是通用的,XPOS 是细粒度的,特定语言。

-cPOS 标志将告诉训练过程使用列索引 3 中的 UPOS 标记。如果您不添加此标志,它将默认使用列索引 4 作为在示例命令中。

如果您使用来自 GitHub 的 Stanford CoreNLP 的最新代码,此命令应该可以使用 CoNLL-U 数据正确训练模型。如果您使用的是 3.9.2 中的代码,则需要确保将数据从 CoNLL-U 转换为 CoNLL-X。 CoNLL-X 是一种较旧的样式,不包含有关多词标记的信息。

此外,为了让您的模型发挥最佳性能,您需要确保在整个应用程序中使用与训练数据一致的标记化。