Java 使用多个模型进行实体提取-OpenNLP

Java 使用多个模型进行实体提取-OpenNLP,java,machine-learning,nlp,opennlp,uima,Java,Machine Learning,Nlp,Opennlp,Uima,我有两个模型文件:1)en-polities-ner.bin 2)en-engineers-ner.bin 现在,有没有一种方法可以将这两个模型添加到单个NameFinderME对象中。使用这两个模型的解决方法可能是创建两个NameFinderME对象并对其进行迭代以提取实体,但我不想这样做。换句话说,您要求的是将两个模型合并为一个模型的方法。据我所知(我不是这方面的专家),这对于统计NLP模型通常是不可能的 我看到的将两个模型组合成一个模型的唯一机会是,以某种方式获得用于训练两个模型的两个训练

我有两个模型文件:1)en-polities-ner.bin 2)en-engineers-ner.bin


现在,有没有一种方法可以将这两个模型添加到单个NameFinderME对象中。使用这两个模型的解决方法可能是创建两个NameFinderME对象并对其进行迭代以提取实体,但我不想这样做。

换句话说,您要求的是将两个模型合并为一个模型的方法。据我所知(我不是这方面的专家),这对于统计NLP模型通常是不可能的

我看到的将两个模型组合成一个模型的唯一机会是,以某种方式获得用于训练两个模型的两个训练数据集,然后从组合的训练集中重新训练一个新模型


如果您没有访问培训集的权限,您当然没有选择。但即使你有,我也不认为这种方法比仅仅使用两个
NameFinder
s有什么根本优势。

换句话说,你想要的是一种将两个模型组合成一个模型的方法。据我所知(我不是这方面的专家),这对于统计NLP模型通常是不可能的

我看到的将两个模型组合成一个模型的唯一机会是,以某种方式获得用于训练两个模型的两个训练数据集,然后从组合的训练集中重新训练一个新模型

如果您没有访问培训集的权限,您当然没有选择。但即使您有,我也不认为这种方法比仅使用两个
名称查找器有什么根本优势。

这本书:

NameFinderME[]finders=新的NameFinderME[3];
字符串[]名称={“人”、“地点”、“日期”};
对于(int mi=0;mi
}

书中:

NameFinderME[]finders=新的NameFinderME[3];
字符串[]名称={“人”、“地点”、“日期”};
对于(int mi=0;mi

}

我的想法是,如果我没有任何选项将两个模型组合为一个,我可以将一个模型传递给NameFinder(实例),将另一个模型传递给其他NameFinder(实例)。现在我加载了两个模型,现在我将把输入传递给第一个NameFinder,它将识别在第一个模型中训练的实体,我也可以把输入传递给第二个NameFinder,让实体在第二个模型中训练。我想的是,如果我没有任何选项将两个模型组合为一个,我可以把一个模型传递给NameFinder(实例)和另一个模型到其他NameFinder(实例).所以现在我加载了两个模型,现在我将把输入传递给第一个NameFinder,它将识别在第一个模型中训练的实体,我也可以把输入传递给第二个NameFinder,以获得在第二个模型中训练的实体。这正是问题作者明确没有要求的。这正是问题作者所说的明确地说,没有要求。
NameFinderME[] finders = new NameFinderME[3];
    String[] names = {"person", "location", "date"};
    for (int mi = 0; mi < names.length; mi++) {
      finders[mi] = new NameFinderME(new TokenNameFinderModel(
          new FileInputStream(
              new File(modelDir, "en-ner-" + names[mi] + ".bin")
          )));