0

我们使用斯坦福 CoreNLP 已经有一段时间了,而且大部分时间它都能提供正确的结果。

但是对于某些句子,依赖解析结果会混乱。正如我们所观察到的,其中一些错误是由 POS 标记问题引起的,例如单词likeinI really like this restaurant.或单词ambientinVery affordable and excellent ambient!

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

任何人都可以提供任何建议吗?

4

1 回答 1

1

最好的办法是使用 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 是一种较旧的样式,不包含有关多词标记的信息。

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

于 2019-08-10T02:48:08.710 回答