我正在尝试训练opennlp POS标记器,它会根据我的特定词汇标记句子中的单词。例如:
正常的POS标记后:
句子:NodeManager / NNP失败/ VBD到/ TO启动/ VB / DT服务器/ NN
使用我的pos标记模型后:
句子:NodeManager / AGENT失败/ OTHER到/ OTHER启动/ OTHER其他服务器/ OBJECT
其中AGENT,OTHER,OBJECT是我定义的标签。
所以基本上我正在定义自己的标签字典。并希望POS标签使用我的模型。
我已经检查了apache文档中的这个
我找到了以下代码
POSModel model = null;
InputStream dataIn = null;
try {
dataIn = new FileInputStream("en-pos.train");
ObjectStream<String> lineStream = new PlainTextByLineStream(dataIn, "UTF-8");
ObjectStream<POSSample> sampleStream = new WordTagSampleStream(lineStream);
model = POSTaggerME.train("en", sampleStream, TrainingParameters.defaultParams(), null, null);
}
catch(IOException e)
{
e.printStackTrace();
}
finally {
if (dataIn != null) {
try {
dataIn.close();
}
catch (IOException e) {
// Not an issue, training already finished.
// The exception should be logged and investigated
// if part of a production system.
e.printStackTrace();
}
}
}
这里当他们打开FileInputStream到en-pos.train时,我猜这个en-pos.train是一个.bin文件,就像他们以前用过的所有文件一样,但只是它是自定义的。有人可以告诉我如何获取.bin文件吗?
或者en-pos.train在哪里?到底是什么?如何创造它?
我提取了他们通常使用的bin文件
烯POS-maxent.bin。它有xml文件,我们在其中定义标签字典,模型文件和属性文件。我根据自己的需要更改了它们,但我的问题是从内容生成.bin文件。
答案 0 :(得分:1)
http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.postagger.training.tool
看看这里,您可以通过opennlp应用程序直接创建bin文件,命令在网站上给出。
答案 1 :(得分:0)
这很简单:
培训自己的模型后,将其转储到文件中(随意调用):
public void writeToFile(POSModel model, String modelOutpath) {
try (OutputStream modelOut = new BufferedOutputStream(new FileOutputStream(modelOutpath))) {
model.serialize(modelOut);
}
catch (Exception e) {
e.printStackTrace();
}
}
然后加载文件,如下所示:
public POSModel getModel(String modelPath) {
try {
try (InputStream modelIn = new FileInputStream(modelPath)) {
POSModel model = new POSModel(modelIn);
return model;
}
}
catch (Exception e) {
e.printStackTrace();
}
return model;
}
现在您可以使用加载的模型并进行标记。
public void doTagging(POSModel model, String input) {
input = input.trim();
POSTaggerME tagger = new POSTaggerME(model);
Sequence[] sequences = tagger.topKSequences(input.split(" "));
for (Sequence s : sequences) {
List<String> tags = s.getOutcomes();
System.out.println(Arrays.asList(input.split(" ")) +" =>" + tags);
}
}
这是一个详细的教程,其中包含有关如何训练和使用您自己的基于Open NLP的POS标记器的完整代码:
https://dataturks.com/blog/opennlp-pos-tagger-training-java-example.php
答案 2 :(得分:-1)
我认为“en-pos.train”是包含训练集的输入文件。 http://opennlp.apache.org/documentation/manual/opennlp.html文档中提到的培训集是:
About_IN 10_CD Euro_NNP,_,I_PRP reckon_VBP ._。 That_DT sounds_VBZ good_JJ ._。