Apache打开NLP POS错误标记

时间:2016-11-06 13:43:29

标签: machine-learning nlp stanford-nlp text-classification

我使用过Stanford NLP但是由于他们的许可条款更严格(尽管它被称为GPL,它只能用于非营利项目),我正在评估Apache Open NLP。

我尝试了一个基本的样本测试,发现Open NLP中的词性标记错误。 例如:像“load”这样的单词,“loading”被标记为NN,因为它们实际上是动词。

有人遇到过这个问题吗?我检查了Open NLP字典,发现很少有动词标记为NN

示例代码

InputStream inputStream = getClass().getResourceAsStream("/opennlp/en-pos-maxent.bin");
        System.out.println(" inputStream " + inputStream);

        POSModel posModel = null;
        try {
            posModel = new POSModel(inputStream);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        POSTaggerME posTaggerME = new POSTaggerME(posModel);

        String whitespaceTokenizerLine[] = WhitespaceTokenizer.INSTANCE.tokenize("Chair damaged during loading:");

        String[] tags = posTaggerME.tag(whitespaceTokenizerLine);


        IntStream.range(0, tags.length).forEach(i -> System.out.println(" POS " + tags[i]));

1 个答案:

答案 0 :(得分:-1)

这是可能的,因为OpenNLP不保证100%的准确性。因为它使用预测方法。它预测结果看特征。这意味着pos标记。它看起来应该是单词附近的pos标签的关系检测。因此,所有预测都取决于您的训练数据集。要获得良好的训练数据集,您需要在训练数据集中拥有15,000行。没有其他替代选择。 您正在使用由Apache开发人员培训的预训练模型测试您的句子。因此,用于训练预训练模型的数据和数据可能会出现不匹配的结果。因此,我建议您使用您的数据训练新模型。这会导致预测概率增加。

注意:查看有关如何训练新模型的文档。它解释得很好。