独自のモデル openNLP を作成するのは難しいと感じています。モデルの所有方法を教えてください。トレーニングはどのように行うべきか。
何を入力し、出力モデル ファイルをどこに保存するか。
https://opennlp.apache.org/docs/1.5.3/manual/opennlp.html
この Web サイトは非常に便利で、コードと OpenNLP アプリケーションを使用して、エンティティ抽出や品詞などのさまざまなタイプのモデルをトレーニングすることが示されています。
ここでいくつかのコード例を示すことができますが、このページは非常に使いやすいです。
理論的には:
基本的に、トレーニングしたいものをリストしたファイルを作成します
例えば。
スポーツ [空白] サッカー、ラグビーなどに関するページです。
Politics [whitespace] これはトニー・ブレアが首相になったことについてのページです。
形式は上記のページに記載されています (各モデルは異なる形式を想定しています)。このファイルを作成したら、API または opennlp アプリケーション (コマンド ライン経由) で実行すると、.bin ファイルが生成されます。この .bin ファイルを取得したら、それをモデルにロードして使用を開始できます (上記の Web サイトの API に従って)。
まず、必要なエンティティでデータをトレーニングする必要があります。
文は改行文字 (\n) で区切る必要があります。値は、タグとスペース文字で区切る必要があります。
たとえば、医療エンティティ モデルを作成する場合、データは次のようになります。
<START:medicine> Augmentin-Duo <END> is a penicillin antibiotic that contains two medicines - <START:medicine> amoxicillin trihydrate <END> and
<START:medicine> potassium clavulanate <END>. They work together to kill certain types of bacteria and are used to treat certain types of bacterial infections.
たとえば、サンプルデータセットを参照できます。より良い結果を得るには、トレーニング データに少なくとも 15000 文が必要です。
さらに、Opennlp TokenNameFinderTrainer を使用できます。出力ファイルは .bin 形式になります。
以下に例を示します: OpenNLP でカスタム NameFinder モデルを作成する
詳細については、Opennlp のドキュメントを参照してください。
おそらく、この記事はあなたを助けるでしょう。ウィキペディアから抽出したデータからTokenNameFinderトレーニングを行う方法について説明しています...
data のデータをコピーし、以下のコードを実行して、独自の mymodel.bin を取得します。
public class Training {
static String onlpModelPath = "mymodel.bin";
// training data set
static String trainingDataFilePath = "data.txt";
public static void main(String[] args) throws IOException {
Charset charset = Charset.forName("UTF-8");
ObjectStream<String> lineStream = new PlainTextByLineStream(
new FileInputStream(trainingDataFilePath), charset);
ObjectStream<NameSample> sampleStream = new NameSampleDataStream(
lineStream);
TokenNameFinderModel model = null;
HashMap<String, Object> mp = new HashMap<String, Object>();
try {
// model = NameFinderME.train("en","drugs", sampleStream, Collections.<String,Object>emptyMap(),100,4) ;
model= NameFinderME.train("en", "drugs", sampleStream, Collections. emptyMap());
} finally {
sampleStream.close();
}
BufferedOutputStream modelOut = null;
try {
modelOut = new BufferedOutputStream(new FileOutputStream(onlpModelPath));
model.serialize(modelOut);
} finally {
if (modelOut != null)
modelOut.close();
}
}
}