独自のモデルopenNLPを作成するのは難しいと感じています。モデルの所有方法を教えてもらえますか?トレーニングはどのように行われるべきか。
入力は何で、出力モデルファイルはどこに保存されますか。
https://opennlp.Apache.org/docs/1.5.3/manual/opennlp.html
このWebサイトは非常に便利で、コードで表示され、OpenNLPアプリケーションを使用して、エンティティの抽出や品詞など、さまざまなタイプのモデルをトレーニングします。
ここでいくつかのコード例を紹介できますが、このページは非常にわかりやすく使用されています。
理論的に:
基本的に、トレーニングしたいものをリストしたファイルを作成します
例えば。
スポーツ[空白]これはフットボール、ラグビーなどに関するページです
政治[空白]これはトニーブレアが首相であることについてのページです。
フォーマットは上のページで説明されています(モデルごとに異なるフォーマットが必要です)。このファイルを作成したら、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.
たとえば、サンプル dataset を参照できます。より良い結果を得るには、トレーニングデータに少なくとも15000文が必要です。
さらに、OpennlpTokenNameFinderTrainerを使用できます。出力ファイルは.bin形式になります。
次に例を示します。 OpenNLPでカスタムNameFinderモデルを作成する
詳細については、 Opennlpドキュメント を参照してください。
おそらく、この記事はあなたを助けるでしょう。ウィキペディアから抽出されたデータからTokenNameFinderトレーニングを行う方法について説明します。
データ内のデータをコピーし、以下のコードを実行して、独自の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();
}
}
}