斯坦福 post-tagger 增量训练
Stanford pos-tagger incremental training
我们使用 Stanford CoreNLP 已有一段时间了,大多数时候它都能提供正确的结果。
但是对于某些句子,依存分析结果是乱七八糟的。正如我们所观察到的,其中一些错误是由 POS 标记问题引起的,例如I really like this restaurant.
中的单词 like
或 Very 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 是一种较旧的样式,不包含有关多词标记的信息。
此外,为了让您的模型发挥最佳性能,您需要确保在整个应用程序中使用与训练数据一致的标记化。
我们使用 Stanford CoreNLP 已有一段时间了,大多数时候它都能提供正确的结果。
但是对于某些句子,依存分析结果是乱七八糟的。正如我们所观察到的,其中一些错误是由 POS 标记问题引起的,例如I really like this restaurant.
中的单词 like
或 Very 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 是一种较旧的样式,不包含有关多词标记的信息。
此外,为了让您的模型发挥最佳性能,您需要确保在整个应用程序中使用与训练数据一致的标记化。