23

独自のモデル openNLP を作成するのは難しいと感じています。モデルの所有方法を教えてください。トレーニングはどのように行うべきか。

何を入力し、出力モデル ファイルをどこに保存するか。

4

4 に答える 4

9

https://opennlp.apache.org/docs/1.5.3/manual/opennlp.html

この Web サイトは非常に便利で、コードと OpenNLP アプリケーションを使用して、エンティティ抽出や品詞などのさまざまなタイプのモデルをトレーニングすることが示されています。

ここでいくつかのコード例を示すことができますが、このページは非常に使いやすいです。

理論的には:

基本的に、トレーニングしたいものをリストしたファイルを作成します

例えば。

スポーツ [空白] サッカー、ラグビーなどに関するページです。

Politics [whitespace] これはトニー・ブレアが首相になったことについてのページです。

形式は上記のページに記載されています (各モデルは異なる形式を想定しています)。このファイルを作成したら、API または opennlp アプリケーション (コマンド ライン経由) で実行すると、.bin ファイルが生成されます。この .bin ファイルを取得したら、それをモデルにロードして使用を開始できます (上記の Web サイトの API に従って)。

于 2013-10-28T15:57:38.457 に答える
5

まず、必要なエンティティでデータをトレーニングする必要があります。

文は改行文字 (\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 のドキュメントを参照してください。

于 2016-06-08T07:27:13.600 に答える
2

おそらく、この記事はあなたを助けるでしょう。ウィキペディアから抽出したデータからTokenNameFinderトレーニングを行う方法について説明しています...

于 2012-06-27T14:16:12.777 に答える
1

data のデータをコピーし、以下のコードを実行して、独自の mymodel.bin を取得します。

データを参照できます= https://github.com/mccraigmccraig/opennlp/blob/master/src/test/resources/opennlp/tools/namefind/AnnotatedSentencesWithTypes.txt

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();
                       }
       }
}
于 2016-09-21T13:33:28.637 に答える