似乎您想训练您的自定义NER模型。
这是带有完整代码的详细教程:
https://dataturks.com/blog/stanford-core-nlp-ner-training-java-example.php?s=so
训练数据格式
训练数据作为文本文件传递,其中每一行都是一对单词标签。该行中的每个单词都应以“ word \ tLABEL”之类的格式标记,该单词和标签名称由制表符'\ t'分隔。对于文本句子,我们应该将其分解为单词,然后在训练文件中为每个单词添加一行。为了标记下一行的开始,我们在训练文件中添加一个空行。
这是输入训练文件的示例:
hp Brand
spectre ModelName
x360 ModelName
home Category
theater Category
system 0
horizon ModelName
zero ModelName
dawn ModelName
ps4 0
根据您的域,您可以自动或手动构建此类数据集。手动建立这样的数据集可能非常痛苦,像NER注释工具之类的工具可以使过程变得更加容易。
火车模型
public void trainAndWrite(String modelOutPath, String prop, String trainingFilepath) {
Properties props = StringUtils.propFileToProperties(prop);
props.setProperty("serializeTo", modelOutPath);
//if input use that, else use from properties file.
if (trainingFilepath != null) {
props.setProperty("trainFile", trainingFilepath);
}
SeqClassifierFlags flags = new SeqClassifierFlags(props);
CRFClassifier<CoreLabel> crf = new CRFClassifier<>(flags);
crf.train();
crf.serializeClassifier(modelOutPath);
}
使用模型生成标签:
public void doTagging(CRFClassifier model, String input) {
input = input.trim();
System.out.println(input + "=>" + model.classifyToString(input));
}
希望这可以帮助。
0
我现在正在使用一些NLP库(stanford和nltk)Stanford,我看到了演示部分,但只是想问问是否有可能使用它来标识更多的实体类型。
因此,当前斯坦福NER系统(如演示所示)可以将实体识别为人(名称),组织或位置。但是公认的组织仅限于大学或一些大型组织。我想知道是否可以使用其API编写用于更多实体类型的程序,例如,如果我输入的是“ Apple”或“ Square”,它可以将其识别为公司。
我是否需要建立自己的训练数据集?
此外,如果我想提取实体及其之间的关系,我觉得我应该使用stanford依赖解析器。我的意思是,首先提取命名实体和其他标记为“名词”的部分,然后找到它们之间的关系。
我对么。
谢谢。