OpenNLP的性能明显低于我测试过的其他文档分类器,所以在我放弃它之前,我决定确保我在玩所有的刻度盘和旋钮。对我来说最突出的一件事是OpenNLP,它可以非常快地训练我的模型(大约1.2秒)。我使用过的其他NLP工具可能需要几分钟甚至几个小时的训练。我的培训档案中有大约12k条记录。
我试图将迭代次数从10次增加到10000次,不幸的是,它似乎对训练时间或准确性没有任何影响。
奇怪的是OpenNLP的文档中关于训练持续时间的陈述如下:“现在可能是巡航到Hulu或其他地方的好时机,因为如果您有一个大型训练集,这可能需要一段时间”。这让我觉得我做错了什么。
int TRAINING_ITERATIONS = 10000;
InputStreamFactory dataIn = new MarkableFileInputStreamFactory(new File(dataSetFileName));
ObjectStream<String> lineStream = new PlainTextByLineStream(dataIn, "UTF-8");
ObjectStream<DocumentSample> sampleStream = new DocumentSampleStream(lineStream);
// define the training parameters
TrainingParameters params = new TrainingParameters();
params.put(TrainingParameters.ITERATIONS_PARAM, TRAINING_ITERATIONS+"");
params.put(TrainingParameters.CUTOFF_PARAM, 0+"");
params.put(AbstractTrainer.ALGORITHM_PARAM, NaiveBayesTrainer.NAIVE_BAYES_VALUE);
FeatureGenerator[] featureGenerators = { new NGramFeatureGenerator(1,1),
new NGramFeatureGenerator(2,3) };
DoccatFactory factory = new DoccatFactory(featureGenerators);
// create a model from training data
StopWatch stopWatch = new StopWatch();
// Start the watch, do some task and stop the watch.
stopWatch.start();
model = DocumentCategorizerME.train("en", sampleStream, params, factory);
stopWatch.stop();
System.out.println("Training Time: " + stopWatch.getTime()+"ms"); // finishes in 1.2 second!!!
这是我得到的结果
Indexing events with TwoPass using cutoff of 0
Computing event counts... done. 2407 events
Indexing... done.
Collecting events... Done indexing in 0.84 s.
Incorporating indexed data for training...
done.
Number of Event Tokens: 2407
Number of Outcomes: 12
Number of Predicates: 44219
Computing model parameters...
Stats: (455/2407) 0.18903199002908183
...done.
Training Time: 1241ms
迭代参数有什么作用吗?
好吧,我想出来了,朴素贝叶斯是一个非常快速的算法,因为它没有优化步骤。迭代次数参数实际上没有太多作用。如果你使用其中的任何其他训练算法,训练确实需要很长时间。令人惊讶的是,对于我的数据集,其他算法也会导致更差的准确性,尽管我对它进行了数小时的训练。
我试图用下面的代码训练模型,但我一直在方法上收到错误,它告诉我将更改为。为什么?
我正在尝试使用OpenNLP对发票进行分类。根据它的描述,我将它分为两类。我已经建立了一个包含20K描述的培训文件,并将每个描述标记到正确的类中。 培训数据如下所示(第一列是代码,我将其用作类,第二列是发票描述): 使用OpenNLP的Document分类器,我实现了98.5%的正确率。但是,为了提高效率,我取了错误的分类文档并用它来扩展训练数据。 例如,当我第一次运行它时,“MOTONETA I
我遵循的留档。我能够理解句子检测、标记器、名称查找器。但是我被分类器卡住了。原因是,我不明白,如何创建分类模型。 我确实明白我需要创建一个文件。格式非常清楚,它需要是一个类别空间和一个单行文档。以扩展名保存文件。 所以我创建了以下文件: 我给这个命令- Opennlp DoccatTrainer模型en-doccat.binlang en数据en-doccat.train编码UTF-8 它开始做某
译者:bat67 最新版会在译者仓库首先同步。 目前为止,我们以及看到了如何定义网络,计算损失,并更新网络的权重。 现在可能会想, 数据呢? 通常来说,当必须处理图像、文本、音频或视频数据时,可以使用python标准库将数据加载到numpy数组里。然后将这个数组转化成torch.*Tensor。 对于图片,有Pillow,OpenCV等包可以使用 对于音频,有scipy和librosa等包可以使用
我训练OpenNLP NER模型来检测一个新实体,但当我使用这个模型时,我遇到了以下异常: 我使用的是OpenNLP 1.6.0版,源代码如下: 谁能帮我解决这个问题。。
我正在尝试使用opennlp处理文档分类器。但是我对训练文件有困难。当opennlp读取文件时,我收到以下错误: 我的培训文件如下所示: 我没有得到我可能错过的东西。