【问题标题】:Training models using openNLP maxent使用 openNLP maxent 训练模型
【发布时间】:2014-09-13 20:42:14
【问题描述】:

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

【问题讨论】:

  • 这篇文章应该对stackoverflow.com/questions/24381095/…有帮助
  • 谢谢。能否也告诉我如何将 eHOST 注释转换为 openNLP 格式?
  • 对不起,我不知道...从未与 ehost 合作过。但我的直觉告诉我,如果 ehost 格式可以用正则表达式或其他东西解析,你应该能够将这些标签转换为 opennlp 标签

标签: java machine-learning classification 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);

【讨论】:

  • 您能提供详细的实现示例吗?以及训练数据集和模型。你也可以帮助解决这个问题stackoverflow.com/questions/36032808/…
  • OpenNLP Maxent 分类器需要一个文本输入文件,其格式如下:(1) 每行单个样本,(2) 每个特征用空格分隔,(3) 写为“key=价值”。在代码中查看我的示例 sn -p "// Example: ..."
  • @ViliamSimko valueresult 必须是数字或者它们也可以是任何字符串(没有空格)?
  • @Sheng 值可以是任意字符串。我曾经使用过这样的示例:wprefix:4=borr sppos=NNP pos=:
  • @ViliamSimko 谢谢!你能回答我的另一个问题吗? stackoverflow.com/questions/45149041/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多