gpt4 book ai didi

java - 自定义模型训练 opennlp

转载 作者:行者123 更新时间:2023-12-02 10:39:31 24 4
gpt4 key购买 nike

您好,已经引用过 this , this , thisthis但仍然发现构建自定义名称查找器模型很困难..这是代码:

public class CustomClassifierTrainer {

private static final TokenNameFinderFactory TokenNameFinderFactory = null;
static String onlpModelPath = "/Users/user/eclipse-workspace/openNLP/OpenNLP_models/en-ner-asiannames.bin";
// training data set
static String trainingDataFilePath = "/Users/user/eclipse-workspace/openNLP/trainingData/asiannames.txt";

public static void main(String[] args) throws IOException {

Charset charset = Charset.forName("UTF-8");

ObjectStream<String> lineStream =
new PlainTextByLineStream(new FileInputStream(trainingDataFilePath), charset);

ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);

TokenNameFinderModel model;

try {
model = NameFinderME.train("en", "asian.person", sampleStream, TrainingParameters.defaultParams(),
TokenNameFinderFactory nameFinderFactory);
}
finally {
sampleStream.close();
}

BufferedOutputStream modelOut = null;
try {
modelOut = new BufferedOutputStream(new FileOutputStream(onlpModelPath));
model.serialize(modelOut);
} finally {
if (modelOut != null)
modelOut.close();
}



}

}

尝试执行行时不断收到错误:

ObjectStream<String> lineStream = new PlainTextByLineStream(new FileInputStream(trainingDataFilePath), charset);

要求我转换参数 1. 当我将其更改为

ObjectStream<String> lineStream = new PlainTextByLineStream((InputStreamFactory) new FileInputStream(trainingDataFilePath), charset);

然后我收到一个运行时错误,提示您无法转换此内容。这是我转换时的错误 Exception in thread "main" java.lang.ClassCastException: class java.io.FileInputStream cannot be cast to class opennlp.tools.util.InputStreamFactory (java.io.FileInputStream is in module java.base of loader 'bootstrap'; opennlp.tools.util.InputStreamFactory is in unnamed module of loader 'app')
at openNLP.CustomClassifierTrainer.main(CustomClassifierTrainer.java:35)

第二期位于以下行:

try {
model = NameFinderME.train("en", "asian.person", sampleStream, TrainingParameters.defaultParams(),
TokenNameFinderFactory nameFinderFactory);
}

给出语法错误。不知道这里出了什么问题。任何帮助将不胜感激,因为我已经尝试了上述链接上的所有代码片段。

问候,

最佳答案

第一个错误:您的方法需要一个InputStreamFactory。您正在尝试传递输入流。输入流不是输入流工厂。就像披萨不是汽车一样。

如果有人(编译器)向你要一辆汽车,而你给了他一个披萨,他将无法开车。通过告诉他“相信我,这个披萨是一辆汽车”(这就是选角的作用)来假装披萨是一辆汽车并不能解决问题。

所以你需要实际传递一个InputStreamFactory。查看此接口(interface)的 javadoc,您将看到它有一个方法 createInputStream(),该方法不接受任何参数,并且应该创建并返回一个 InputStream。

因此,有效值是

() -> new FileInputStream(trainingDataFilePath)

即一个 lambda,它不接受任何输入并创建一个新的输入流,因此可以推断出一个 InputStreamFactory。

第二个错误更简单:调用方法时不应该指定参数的类型。仅当定义方法时。所以

NameFinderME.train("en", 
"asian.person",
sampleStream,
TrainingParameters.defaultParams(),
TokenNameFinderFactory nameFinderFactory);

应该是

NameFinderME.train("en", 
"asian.person",
sampleStream,
TrainingParameters.defaultParams(),
nameFinderFactory);

用更简单的东西练习来学习 Java 语法。学习阅读错误消息而不是忽略它们,并阅读您正在使用的类的 javadoc。这很关键。

关于java - 自定义模型训练 opennlp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53030193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com