我是opennlp新手,需要帮助来定制解析器
我已经使用了带有预训练模型的opennlp解析器en-pos-maxtent.bin用相应的语音部分标记新的原始英语句子,现在我想自定义标签。
例句:狗跳过墙。
使用en-pos-maxtent.bin进行POS标记后,结果将是
狗-NNP
跳跃-VBD
超过-在
The-DT
wall-NN
但是我想训练我自己的模型并用我的自定义标签标记单词,例如
狗-罪犯
跳-ACT
在OTH
其他的
墙-OBJ
其中PERP、ACT、OTH、OBJ是适合我需要的标签。这可能吗?
我检查了他们留档的部分,他们给出了训练模型并在以后使用它的代码,代码是这样的
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) {
// Failed to read or parse training data, training failed
e.printStackTrace();
}
我不明白这个“en-pos.train”是什么?
这个文件的格式是什么?我们可以在这里指定自定义标签吗?或者这个文件到底是什么?
任何帮助都将不胜感激
谢谢
下面是一个详细的教程,包含完整的代码:
https://dataturks.com/blog/opennlp-pos-tagger-training-java-example.php
根据您的域,您可以自动或手动构建数据集。手动构建这样的数据集可能非常痛苦,POS tagger等工具可以帮助简化这个过程。
训练数据格式
培训数据作为文本文件传递,其中每行是一个数据项。每行中的每个单词都应该以“word_LABEL”这样的格式进行标记,单词和标签名称之间用下划线“_”分隔。
anki_Brand overdrive_Brand
just_ModelName dance_ModelName 2018_ModelName
aoc_Brand 27"_ScreenSize monitor_Category
horizon_ModelName zero_ModelName dawn_ModelName
cm_Unknown 700_Unknown modem_Category
computer_Category
Train model
这里的重要类是POSModel,它保存了实际的模型。我们使用类POSTaggerME来进行模型构建。下面是从训练数据文件构建模型的代码
public POSModel train(String filepath) {
POSModel model = null;
TrainingParameters parameters = TrainingParameters.defaultParams();
parameters.put(TrainingParameters.ITERATIONS_PARAM, "100");
try {
try (InputStream dataIn = new FileInputStream(filepath)) {
ObjectStream<String> lineStream = new PlainTextByLineStream(new InputStreamFactory() {
@Override
public InputStream createInputStream() throws IOException {
return dataIn;
}
}, StandardCharsets.UTF_8);
ObjectStream<POSSample> sampleStream = new WordTagSampleStream(lineStream);
model = POSTaggerME.train("en", sampleStream, parameters, new POSTaggerFactory());
return model;
}
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
使用模型进行标记。
最后,我们可以看到该模型如何用于标记不可见的查询:
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);
}
}
记录在http://opennlp.apache.org/documentation/manual/opennlp.html#tools.postagger.training-每行一句话,单词与标签之间用下划线隔开:
About_IN 10_CD Euro_NNP ,_, I_PRP reckon_VBP ._.
That_DT sounds_VBZ good_JJ ._.
我发现很难创建自己的openNLP模型。谁能告诉我,如何拥有自己的模型。培训应该如何进行。 输入应该是什么,输出模型文件将存储在哪里。
我的要求是像这样分析句子。“给我找一本饥饿的潮汐书。”或者“饥饿的潮水或破碎的镜子,哪一个更好。”饥饿的潮汐和破碎的镜子是书的名字,为此我需要创建一个自定义模型,在给定的令牌数组中找到书的标题。因此,稍后我可以根据给定的句子创建一个查询。请让我知道我如何做到这一点,或者如果有任何其他方法来分析这样的句子。
我可能需要为OpenNLP创建一个自定义训练集,这将需要我手动注释很多条目。 为了让事情变得更容易,GUI解决方案可能是最好的主意(手动编写注释标签并不酷),我刚刚发现了看起来像我需要的BRAT。 BRAT可以导出带注释的文件(. ann),但我在OpenNLP的手册中没有找到任何对该文件类型的引用,我不确定这是否可行。 我想做的是从BRAT导出这个带注释的文件并使用它来训练OpenNLP的模型,
问题内容: 我必须用很多空手和当地的术语来分析非正式的英语文本。因此,我正在考虑为斯坦福标签创建模型。 如何为斯坦福标记者创建自己的标记语料库集以进行培训? 语料库的语法是什么?我的语料库应该达到多长时间才能达到理想的性能? 问题答案: 要训练PoS标记器,请参阅此邮件列表帖子,该帖子也包含在MaxentTagger类的JavaDocs中。 edu.stanford.nlp.tagger.ma
编辑1:主要的问题是在训练完一个NER模型后,我将它应用到令牌上。因此,它不会识别“轮滑”,因为在代币中,它们以“轮滑”和“滑冰”的形式出现,而NER模型现在无法识别这个爱好。
我刚开始使用OpenNLP。我需要创建一个简单的训练模型来识别名称实体。