系统相关
首页 > 系统相关> > java-使用openNLP maxent的训练模型

java-使用openNLP maxent的训练模型

作者:互联网

我有黄金数据,在其中注释了几个文档中的所有房间号.我想使用openNLP来训练一个使用此数据并对房间号进行分类的模型.我被困在哪里开始.我阅读了openNLP maxent文档,看了opennlp.tools中的示例,现在看了opennlp.tools.ml.maxent-似乎这是我应该使用的东西,但我仍然不知道如何使用.有人可以给我一些有关如何使用openNLP maxent以及从何开始的基本想法吗?任何帮助将不胜感激.

解决方法:

这是一个最小的工作示例,演示了OpenNLP Maxent API的用法.

它包括以下内容:

>从文件中存储的数据训练maxent模型.
>将经过训练的模型存储到文件中.
>从文件中加载经过训练的模型.
>使用模型进行分类.
>注意:结果是每个训练样本中的第一要素
>注意:这些值可以是任意字符串,例如xyz = s0methIng

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.GZIPInputStream;

import opennlp.maxent.GIS;
import opennlp.maxent.io.GISModelReader;
import opennlp.maxent.io.SuffixSensitiveGISModelWriter;
import opennlp.model.AbstractModel;
import opennlp.model.AbstractModelWriter;
import opennlp.model.DataIndexer;
import opennlp.model.DataReader;
import opennlp.model.FileEventStream;
import opennlp.model.MaxentModel;
import opennlp.model.OnePassDataIndexer;
import opennlp.model.PlainTextFileDataReader;

...

String trainingFileName = "training-file.txt";
String modelFileName = "trained-model.maxent.gz";

// Training a model from data stored in a file.
// The training file contains one training sample per line.
// Outcome (result) is the first element on each line.
// Example:
// result=1 a=1 b=1
// result=0 a=0 b=1
// ...
DataIndexer indexer = new OnePassDataIndexer( new FileEventStream(trainingFileName)); 
MaxentModel trainedMaxentModel = GIS.trainModel(100, indexer); // 100 iterations

// Storing the trained model into a file for later use (gzipped)
File outFile = new File(modelFileName);
AbstractModelWriter writer = new SuffixSensitiveGISModelWriter((AbstractModel) trainedMaxentModel, outFile);
writer.persist();

// Loading the gzipped model from a file
FileInputStream inputStream = new FileInputStream(modelFileName);
InputStream decodedInputStream = new GZIPInputStream(inputStream);
DataReader modelReader = new PlainTextFileDataReader(decodedInputStream);
MaxentModel loadedMaxentModel = new GISModelReader(modelReader).getModel();

// Now predicting the outcome using the loaded model
String[] context = {"a=1", "b=0"};
double[] outcomeProbs = loadedMaxentModel.eval(context);
String outcome = loadedMaxentModel.getBestOutcome(outcomeProbs);

标签:machine-learning,classification,opennlp,java,maxent
来源: https://codeday.me/bug/20191029/1959092.html