在Java程序中使用多个分类器

在Java程序中使用多个分类器,java,nlp,named-entity-recognition,Java,Nlp,Named Entity Recognition,我正在使用斯坦福命名实体识别系统来识别查询中的命名实体。 我发现其中一个分类器(english.all.3class.distsim.crf.ser.gz)比另一个分类器(english.muc.7class.distsim.crf.ser.gz)更能识别命名实体的人。而第二个分类器比第一个分类器更能识别组织命名实体。 问题是我如何修改我的代码以结合3class和7class分类器的性能。我的意思是如何结合第二行和第三行。下面是我的程序 public void main () { //S

我正在使用斯坦福命名实体识别系统来识别查询中的命名实体。 我发现其中一个分类器(english.all.3class.distsim.crf.ser.gz)比另一个分类器(english.muc.7class.distsim.crf.ser.gz)更能识别命名实体的人。而第二个分类器比第一个分类器更能识别组织命名实体。 问题是我如何修改我的代码以结合3class和7class分类器的性能。我的意思是如何结合第二行和第三行。下面是我的程序

public void main () {
    //String serializedClassifier = "classifiers/english.all.3class.distsim.crf.ser.gz";
    String serializedClassifier = "classifiers/english.muc.7class.distsim.crf.ser.gz";
    AbstractSequenceClassifier<CoreLabel> classifier = CRFClassifier.getClassifierNoExceptions                                  (serializedClassifier);
    //String s5 = "Access Team Microsoft";
    String s5 = " Victor Vianu";
    String ans4 = classifier.classifyToString(s5);
    System.out.println(ans4);
}
public void main(){
//String serializedClassifier=“classifiers/english.all.3class.distsim.crf.ser.gz”;
String serializedClassifier=“classifiers/english.muc.7class.distsim.crf.ser.gz”;
AbstractSequenceClassifier=CRFClassizer.getClassifierNoExceptions(serializedClassifier);
//String s5=“Access Team Microsoft”;
字符串s5=“Victor Vianu”;
字符串ans4=分类器。classifyToString(s5);
系统输出打印LN(ans4);
}

您实际上是在为分类任务重新表述一个常见的优化问题。可以组合来自不同命名实体识别器的输入,但不太可能在代码中这样做。在这种情况下,实际上您将编写规则集来表示一个注释对另一个注释的偏好。这样的规则集可能变得非常复杂,并且很难维护,即使您使用的是专门的框架


通常,使用两个输入以及人类执行的注释来训练额外的分类器。这被称为监督机器学习。如果您对这个主题感兴趣,可以看看Gate框架,它提供了一个相对温和的(GUI和大量可用的文档)文本工程和机器学习的介绍。您可能对关于设置机器学习的部分感兴趣:

一个想法是获取ner标记器(3类、7类等)的分数或置信度,并根据该分数为已识别为特定类型实体的每个标记选择一个或另一个分类器的结果

您可以通过创建一个。, List>results3ClassClassifier=3Class.classify(textWithInstances)

(您还可以获得7Class分类器的结果,) 然后您可以访问分数,例如:

     for (List<CoreLabel> sentence : results3ClassClassifier) {
          Triple<Counter<Integer>, Counter<Integer>, TwoDimensionalCounter<Integer, String>> scoresPerClass =  3Class.printProbsDocument(sentence);
//take score corresponding to a tagged token 
//put that in a set of scores to get later max confidence
    }
对于Victor Vianu(伟大的研究人员!)来说,这很简单,但对于鲜为人知的实体来说,可以获得信心这一事实在实践中很有用

Victor  null    O=0.011843980924431554  PERSON=0.9836181561256115   DATE=1.8909193023530869E-6  LOCATION=9.292607205855801E-5   ORGANIZATION=0.004434710463296233   PERCENT=1.168471927873708E-6    MONEY=3.925377823223501E-6  TIME=3.241645549570373E-6
Vianu   null    O=0.0019172569594321069 PERSON=0.9933531725355365   DATE=8.384789134033624E-6   LOCATION=2.134536699512499E-4   ORGANIZATION=0.004496303036216309   PERCENT=1.6256270957396572E-6   MONEY=7.507677140678878E-6  TIME=2.2957054950451435E-6