- 分類データベースの作成
- 文書の分類
シナリオの実装
このトピックで紹介するコード サンプルは、Windows 専用です。
ステップ 1. ABBYY FineReader Engine のロード
ステップ 1. ABBYY FineReader Engine のロード
ABBYY FineReader Engine の使用を開始するには、Engine オブジェクトを作成する必要があります。Engine オブジェクトは、ABBYY FineReader Engine のオブジェクト階層における最上位のオブジェクトであり、さまざまなグローバル設定、一部の処理メソッド、および他のオブジェクトを作成するためのメソッドを提供します。Engine オブジェクトを作成するには、InitializeEngine 関数を使用できます。Engine オブジェクトをロードするその他の方法 (Win) も参照してください。
C#
ステップ 2. ClassificationEngine の作成
ステップ 2. ClassificationEngine の作成
他の Classification API オブジェクトのファクトリとして機能する ClassificationEngine オブジェクトを作成します。Engine オブジェクトの CreateClassificationEngine メソッドを使用します。
C#
ステップ 3. 分類オブジェクトの準備
ステップ 3. 分類オブジェクトの準備
トレーニング メソッドと分類メソッドでは、ドキュメントまたはページから作成される特殊な種類のオブジェクトである ClassificationObject を使用します。このオブジェクトには、分類に必要なすべての情報が含まれます。分類シナリオで使用するドキュメントを準備するには、次の手順を実行します。
- 処理対象の画像を読み込みます。方法はいくつかあります。たとえば、Engine オブジェクトの CreateFRDocument メソッドを使って FRDocument オブジェクトを作成し、次に AddImageFile メソッドを使って、ファイルから作成した FRDocument オブジェクトに画像を追加できます。
- テキスト特徴を考慮するタイプの分類器 (CT_Combined、CT_Text) をトレーニングまたは使用する場合は、まず任意の使いやすい方法でドキュメントを認識します。ここでは、FRDocument オブジェクトの Analyze メソッドと Recognize メソッドを使用します。分類ではドキュメント合成は不要です。
分類自体では並列処理はサポートされていませんが、Windows および Linux でドキュメントを事前認識する際には並列処理が必要になる場合があります。分類するドキュメント数が多い場合は、Batch Processor または Parallel Processing with ABBYY FineReader Engine で説明されている他の並列処理方法の使用をお勧めします。
- ClassificationEngine オブジェクトの CreateObjectFromDocument メソッドを使用して、ドキュメントの最初のページの情報を含む ClassificationObject を作成します。ドキュメント内の別のページを使用する必要がある場合は、CreateObjectFromPage メソッドを呼び出します。
- ClassificationObject の Description プロパティは、既定では空です。必要に応じて、このプロパティに適切な説明を設定します。
認識済みのドキュメントまたはページに、認識されたテキストがまったく含まれないことがあります (たとえば、誤って空白ページを使用した場合など) 。この場合、その ClassificationObject はテキスト特徴を必要とする分類器には使用できません。確認のために SuitableClassifiers プロパティを使用できます。
C#
ステップ 4. トレーニングデータセットの作成
ステップ 4. トレーニングデータセットの作成
複数の種類の文書を区別する分類器をトレーニングするには、各種類のサンプルを含む分類済みのデータセットが必要です。このデータセットの作成と管理には、TrainingData オブジェクトを使用します。
- ClassificationEngine オブジェクトの CreateTrainingData メソッドを使用して、空のオブジェクトを作成します。
- Categories プロパティからカテゴリのコレクションにアクセスします。
- 分類対象の文書タイプごとにカテゴリを追加するため、Categories オブジェクトの AddNew メソッドを複数回使用します。このメソッドは、入力パラメーターとしてカテゴリラベルを表す string を受け取ります。ラベルは分類メソッドによって返されるため、カテゴリセット内で一意である必要があります。
- 新しく追加した各 Category オブジェクトについて、Objects プロパティを使用して分類オブジェクトのコレクションを開きます。IClassificationObjects::Add メソッドを使用して、このカテゴリに対応する分類オブジェクトを追加します。
カテゴリを空のままにしてはいけません。トレーニングには、当然ながら少なくとも 2 つのカテゴリが必要です。 - これでトレーニングデータセットの設定は完了ですが、後で使えるようにディスク上のファイルに保存しておくとよいでしょう。たとえば、トレーニング済みモデルの精度が十分でないことが分かり、品質向上のためにデータを追加または修正したい場合です。TrainingData オブジェクトには SaveToFile メソッドが用意されています。
C#
ステップ 5. 分類モデルの学習
ステップ 5. 分類モデルの学習
モデルトレーニングの機能は、Trainer オブジェクトによって提供されます。このオブジェクトを作成するには、ClassificationEngine オブジェクトの CreateTrainer メソッドを使用します。これには、分類器の種類とトレーニング手順に関するすべての設定が、TrainingParams と ValidationParams という2つのサブオブジェクトに含まれています。必要な設定を確認し、対応するプロパティを変更してください。ITrainingResult::Model プロパティを使用すると、トレーニング済みの分類モデルにアクセスできます。SaveToFile メソッドでファイルに保存するか、そのまま直接使用してドキュメントを分類することができます (手順6に進んでください) 。
- 分類器の種類 (ITrainingParams::ClassifierType) を指定します。この設定では、カテゴリを割り当てる際に文書のどの特徴を考慮するかを決定します。対象となるのは、画像の特性、認識されたテキストの内容、またはその両方です。テキストの内容を使用する種類を選択する場合は、トレーニングデータセット内のすべての分類オブジェクトが、事前に認識処理された文書から作成されていることを確認してください。
- トレーニングモード (ITrainingParams::TrainingMode) 。この設定では、トレーニングプロセスで高い適合率 (選択された要素のうち、正しいものがどれだけあるか) 、高い再現率 (正しい要素のうち、どれだけ選択されるか) 、またはその両者のバランスのいずれを重視するかを決定します。
- k 分割交差検証を使用するかどうか (IValidationParams::ShouldPerformValidation) 。トレーニングサンプルが十分に大きくない場合は、交差検証の使用を推奨します。これにより、同じサンプルを異なる分割で使って複数のモデルを学習し、その中から最適なものを選択できるためです。分類済みデータが大量にある場合は、検証を無効にしてトレーニングサンプル全体でモデルを学習させ、その後、分類メソッド (ステップ 6) を使用して別のサンプルでモデルをテストし、パフォーマンススコアを利用者側で計算するほうがよい場合があります。
- k 分割交差検証のパラメータ: 学習サンプルの分割数 (IValidationParams::FoldsCount) と、反復回数 (IValidationParams::RepeatCount) 。各反復において学習セットに必要なオブジェクト数は、テキスト分類器では 4 以上、複合分類器では 8 以上である点に注意してください。学習サンプルに十分な数のオブジェクトが含まれていることを確認してください。
Linux および Windows では、IMultiProcessingParams::MultiProcessingMode の値にかかわらず、モデルのトレーニングと分類は逐次モードで実行されます。
C#
ステップ 6. 文書の分類
ステップ 6. 文書の分類
学習済みモデルを分類に使用するには、次の手順を実行します。
- モデルが現在読み込まれていない場合は、ClassificationEngine オブジェクトの CreateModelFromFile メソッドを呼び出して、ディスク上のファイルからモデルを読み込みます。
- ステップ 3 で説明したとおりに、分類対象の文書から分類オブジェクトを準備します。
- 各分類オブジェクトについて、ClassificationObject を入力パラメーターとして指定し、Model オブジェクトの Classify メソッドを呼び出します。このメソッドは ClassificationResult オブジェクトのコレクションを返し、各オブジェクトにはカテゴリラベルとそのカテゴリに属する確率が含まれます。結果は確率の高い順に並べ替えられます。結果を取得し、その確率値が許容できるレベルかどうかを確認してください。
分類器がカテゴリを割り当てられなかった場合は、結果コレクションではなく null が返されます。
モデルの学習と分類は、IMultiProcessingParams::MultiProcessingMode の値に関係なく、Linux および Windows では逐次モードで実行されます。
C#
ステップ 7. ABBYY FineReader Engine のアンロード
ステップ 7. ABBYY FineReader Engine のアンロード
ABBYY FineReader Engine の使用を終えたら、Engine オブジェクトをアンロードする必要があります。これを行うには、エクスポートされた関数 DeinitializeEngine を使用します。
C#
必要なリソース
追加の最適化
- Engine の読み込み - Windows のみ
- Engine オブジェクトを読み込むさまざまな方法
Engine オブジェクトの読み込み方法を詳しく説明します。 - マルチスレッド サーバー アプリケーションで ABBYY FineReader Engine を使用する
サーバー アプリケーションで FineReader Engine を使用する際の注意点や特有の事項について説明します。
- Engine オブジェクトを読み込むさまざまな方法
- 認識 - Linux および Windows 向け
- ABBYY FineReader Engine での並列処理
テキスト特徴を持つ分類器用に認識済みの文書やページをすばやく準備するには、認識では並列処理を使用し、分類時にはマルチプロセッシングを無効にします。
- ABBYY FineReader Engine での並列処理
