我正在制作一个用于构建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模型时重新分配管道
我怎么知道模型没有更新?我有一个手动包含的文本,看看有没有它的区别..