OpenNLPを使用して請求書を分類しようとしています。その説明に基づいて私はそれを2つのクラスに分類します。私は、20Kの記述で訓練ファイルを構築し、それぞれを正しいクラスにタグ付けしました。OpenNLPドキュメント分類のトレーニング
トレーニングデータ(最初の列は、私はクラスとして使用することは、コードであり、2番目の列は、請求書の記述である)のように見える:
OpenNLPからDocumentCategorizerを使用85171231 IPHONE 5S CINZA ESPACIAL 16GB (ME432BZA)
85171231 Galaxy S6 SM-G920I
85171231 motorola - MOTO G5 XT1672
00000000 MOTONETA ITALIKA AT110
00000000 CJ BOX UNIBOX MOLA 138X57X188 VINHO
、Iは98.5%を達成しました正確さしかし、効率性を向上させるために、間違った分類された文書を取り、それを使用してトレーニングデータを拡張しました。
たとえば、私が最初に実行したとき、「MOTONETA ITALIKA AT110」は「85171231」と分類されました。最初の試合には「MOTONETA ITALIKA AT110」が分類されていなかったので、大丈夫です。だから、 "MOTONETA ITALIKA AT110"を明示的に "00000000"とタグ付けして分類器を教えました。
しかし、OpenNLPは、トレーニングデータに "000000"の明示マップが含まれていても、それを再び "85171231"と分類するようにしています。
私の質問は:私はOpenNLPライトを教えていますか?どのように効率を上げるのですか?
私が使用しているコードは次のとおりです。デフォルトで
MarkableFileInputStreamFactory dataIn = new MarkableFileInputStreamFactory("data.train");
ObjectStream<String> lineStream = new PlainTextByLineStream(dataIn, StandardCharsets.UTF_8);
ObjectStream<DocumentSample> sampleStream = new DocumentSampleStream(lineStream);
TrainingParameters params = new TrainingParameters();
params.put(TrainingParameters.ITERATIONS_PARAM, "100");
params.put(TrainingParameters.CUTOFF_PARAM, "0");
DoccatModel model = DocumentCategorizerME.train("pt", sampleStream, params, new DoccatFactory());
DocumentCategorizer doccat = new DocumentCategorizerME(model);
double[] aProbs = doccat.categorize("MOTONETA ITALIKA AT110".replaceAll("[^A-Za-z0-9 ]", " ").split(" "));
doccat.getBestCategory(aProbs);