Amazon Textract

機械学習を使って文書からテキスト、手書き文字、テーブル、フォームのキーバリューペアを自動抽出する文書解析サービス

概要

Amazon Textract は、スキャンされた文書、PDF、画像からテキストと構造化データを自動的に抽出する機械学習サービスです。単純な OCR (光学文字認識) を超え、テーブルの行列構造、フォームのラベルと値の対応関係、署名の検出、手書き文字の認識を行います。請求書や領収書に特化した AnalyzeExpense API、身分証明書に特化した AnalyzeID API、融資関連文書に特化した AnalyzeLending API など、業務文書に最適化された専用 API も提供しています。

OCR を超える構造化データ抽出の仕組み

従来の OCR はページ上のテキストを上から下、左から右に読み取るだけで、テーブルの行列関係やフォームのラベルと値の対応は認識できません。Textract はページのレイアウトを解析し、テキストブロック間の空間的な関係性を理解した上でデータを抽出します。DetectDocumentText API は純粋なテキスト抽出で、行 (LINE) と単語 (WORD) の階層構造で結果を返します。AnalyzeDocument API はテーブル (TABLE)、フォーム (FORMS)、レイアウト (LAYOUT)、署名 (SIGNATURES) の検出に対応し、テーブルではセルの行番号・列番号・結合情報まで構造化して返します。フォーム抽出では「氏名: 山田太郎」のようなキーバリューペアを自動的に対応付けます。信頼度スコア (Confidence) が各抽出結果に付与されるため、スコアが低い結果を人間のレビューに回すワークフローを構築できます。日本語の認識精度は英語に比べて低い傾向があり、特に手書きの日本語は認識率が大きく下がるため、事前にサンプル文書でテストすることが重要です。

非同期処理と大量文書パイプラインの設計

Textract には同期 API と非同期 API の 2 種類があります。同期 API は単一ページの画像 (JPEG/PNG) に対してリアルタイムで結果を返しますが、複数ページの PDF には対応していません。非同期 API (StartDocumentTextDetection / StartDocumentAnalysis) は S3 上の複数ページ PDF を処理でき、最大 3,000 ページまで対応します。処理完了は SNS トピックへの通知で検知し、GetDocumentTextDetection / GetDocumentAnalysis で結果を取得します。大量文書の処理パイプラインでは、S3 へのアップロードをトリガーに Lambda で Textract の非同期 API を呼び出し、SNS 通知を受けた別の Lambda で結果を取得・後処理する構成が標準です。Textract にはリージョンごとの同時処理数制限 (デフォルトで非同期ジョブ 25 件) があるため、大量文書を一度に投入する場合は SQS キューで流量制御する必要があります。抽出結果の後処理では、Amazon Comprehend と組み合わせて固有表現 (人名、組織名、日付、金額) を自動分類したり、Amazon Augmented AI (A2I) で人間のレビューワークフローを組み込んだりするパターンが実用的です。

業務文書特化 API と精度向上のテクニック

AnalyzeExpense API は請求書と領収書に特化しており、ベンダー名、請求日、合計金額、税額、明細行 (品目名、数量、単価、小計) を標準化されたフィールドとして抽出します。汎用の AnalyzeDocument API で同じ文書を処理するよりも、フィールドの認識精度と構造化の品質が大幅に向上します。AnalyzeID API は運転免許証やパスポートから、氏名、生年月日、住所、文書番号、有効期限を抽出します。KYC (本人確認) プロセスの自動化に直結する機能です。精度向上のテクニックとして、入力画像の品質が最も重要です。解像度は 150 DPI 以上、傾き補正済み、コントラストが十分な画像を入力すると認識精度が向上します。Textract のカスタムクエリ機能 (Queries) を使えば、「請求番号は何ですか」「支払期限はいつですか」のような自然言語の質問を投げて、文書から特定の情報をピンポイントで抽出することも可能です。料金はページ単位の従量課金で、DetectDocumentText が 1,000 ページあたり 1.50 USD、AnalyzeDocument (テーブル+フォーム) が 1,000 ページあたり 65 USD と、機能によって大きく異なります。

共有するXB!