重新加载StanfordCoreNLP管道的CRF NER模型

时间:2016-10-04 11:18:52

标签: stanford-nlp

我正在制作一个用于构建CRF NER模型的Web应用程序(GUI),而不是手动循环CSV文件。当用户收集许多培训文件时,他应该能够生成一个新模型并进行尝试 我遇到的问题是重新加载模型。当我为管道分配一个新值时,比如

pipeline = new StanfordCoreNLP(props)

模型保持不变。我试图用

清除注释池
StanfordCoreNLP.clearAnnotatorPool()

但没有任何改变。这有可能吗,或者我每次都必须重新启动整个应用程序才能使其工作?

编辑(澄清):

我在同一个课程中有两种方法:nerString()train()。像这样:

class NerService {

  private var pipeline: StanfordCoreNLP = null

  loadPipelines()

  private def loadPipelines(): Unit = {

    val props = new Properties()
    props.setProperty("tokenize.class", "BosnianTokenizer")
    props.setProperty("ner.model", "conf/NER/classifiers/ner-ba-model.ser.gz") // NER CRF model
    props.setProperty("ner.useSUTime", "false")    
    props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner")

    pipeline = new StanfordCoreNLP(propsNER)    
  }

  def nerString(tekst: String): List[TokenNER] = {
    val document = new Annotation(tekst)
    pipeline.annotate(document)
    ...
  }

  /////////////// train new NER model ///////////////////////
  private val trainProps = StringUtils.propFileToProperties("conf/NER/classifiers/ner-ba-training.prop")
  private val serializeTo = "conf/NER/classifiers/ner-ba-model.ser.gz" // save at location...
  private val inputDir = new File("conf/NER/classifiers/input")
  private val fileFilter = new WildcardFileFilter("*.tsv")
  private val dirFilter = TrueFileFilter.TRUE

  def train(): Unit = {
    val allFiles = FileUtils.listFiles(inputDir, fileFilter, dirFilter).asScala
    val trainFileList = allFiles.map(_.getPath).mkString(",")
    trainProps.setProperty("trainFileList", trainFileList)
    val flags = new SeqClassifierFlags(trainProps)

    val crf = new CRFClassifier[CoreLabel](flags)    
    crf.train()    
    crf.serializeClassifier(serializeTo)

    loadPipelines()
  }
}

loadPipelines()用于在创建新NER模型时重新分配管道 我怎么知道模型没有更新?我有一个手动包含的文本,看看有没有它的区别..

0 个答案:

没有答案