Тренировочные модели с использованием openNLP maxent
У меня есть золотые данные, где я аннотировал все номера комнат из нескольких документов. Я хочу использовать openNLP для обучения модели, которая использует эти данные и классифицировать номера комнат. Я застрял на том, с чего начать. Я прочитал документацию по openNLP maxent, посмотрел примеры в opennlp.tools и теперь смотрю на opennlp.tools.ml.maxent - кажется, что это то, что я должен использовать, но все же я понятия не имею, как его использовать. Может кто-нибудь дать мне базовую идею о том, как использовать OpenNLP Maxent и с чего начать? Любая помощь будет оценена.
1 ответ
Это минимальный рабочий пример, демонстрирующий использование 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);