将实体添加到Stanford NLP NER分类器

时间:2018-06-07 17:25:06

标签: c# .net nlp stanford-nlp ner

我有一个非常简单的方法从字符串中提取名称,组织和位置。我正在使用.NET Nuget Libraries for Stanford NLP。看起来像这样。

CRFClassifier Classifier = CRFClassifier.getClassifier(StanfordNLPConfig.NER.ClassifierModel);

        List<IndexViewModel> ivms = new List<IndexViewModel>();

        try
        {
            foreach (List sentence in Classifier.classify(content).toArray())
            {
                NLPTranslator translator = new NLPTranslator();
                ivms.AddRange(translator.NERTranslate(sentence));
            }
        }
        catch (Exception ex)
        {
            throw ex;
            // Error silently
        }

        return ivms;

该模型是它附带的3class jar文件 - english.all.3class.distsim.crf.ser.gz。

这对我来说非常有效,但我想做的是与模型的接口,以便能够在我需要的时候添加到我自己的实体中,这看起来非常美国中心和我&#39;我希望能够建立自己的英国公司,地点等。

我是否有任何方式可以添加这些实体,因为我一直在阅读有关培训的内容,但您可能无法扩展模型,如果是这种情况,我可以将分类器组合并通过英国运行一个/美国等等。如果可能的话,我怎样才能真正制作自己的分类器,如果可能的话我想在.NET中制作这些分类器。

1 个答案:

答案 0 :(得分:0)

如果您想改变模型的工作方式,您需要提供培训数据并培训您自己的模型。出于许可原因,斯坦福不会分发公共模型所训练的数据,但您可以使用相同的功能。

您可以阅读有关如何训练模型here的内容,但不幸的是,说明的第一句话是:

  

培训自己的分类器的文档介于坏与不存在之间。

如果这是您第一次使用CRF,那么需要学习很多东西,但这是可以管理的。查看其他软件包(例如CRFSuiteCRF++)的文档可能会有所帮助 - 它们通常都使用基本相同的培训数据格式,并且在很多方面都相似。

另请注意,现有模型无法通过仅对新输入进行训练来扩展,系统也不会以这种方式设置。