Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How I Automated Document Insights Using AWS Textract, Bedrock, and QuickSight

2025年09月13日に「Dev.to」が公開したITニュース「How I Automated Document Insights Using AWS Textract, Bedrock, and QuickSight」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

AWS Textract, Bedrock, QuickSightを使い、スキャンされた書類から自動でテキスト抽出、主要情報の要約、構造化データ変換、ダッシュボードでの可視化を実現するワークフローを構築した。手作業を大幅に削減し、迅速なデータ分析を可能にするシステム構築の手順を紹介している。

ITニュース解説

この解説では、スキャンされた請求書やPDFのような非構造化データから、必要な情報を自動的に抽出し、要約し、最終的に視覚化されたダッシュボードで分析できるようにする一連のAWSワークフロー構築方法を説明する。手作業で書類を読み込み、データを抽出する手間を省き、より効率的なデータ処理を実現するためのシステムである。

まず、AWS環境を適切に設定する。システム全体で利用するAWSサービス(S3、Textract、Bedrock、QuickSight)がすべて利用可能な単一のAWSリージョンを選択することが重要だ。これにより、異なるリージョン間でのデータ転送にかかるコストや遅延を回避できる。次に、ドキュメントを保存するためのS3バケットを作成する。このバケットは、第三者からの不正アクセスを防ぐために「パブリックアクセスをブロック」設定を有効にし、誤ってデータを削除したり変更したりした際に復旧できるよう「バージョニング」を有効にする。データの暗号化には顧客管理型のKMSキーを使い、監査証跡を残せるようにする。また、データのライフサイクルルールを設定し、古いデータや一時的なファイルを適切なストレージクラスに移動させたり、自動的に削除したりすることでコストを最適化する。S3バケット内のフォルダ構造も、生データ、Textractの出力、抽出されたデータ、要約、最終処理済みデータ、ログといったように明確に分割することで、管理しやすくスケーラブルな構成にする。

次に、AWSサービス間のアクセス権限を管理するIAMロールを、Textract、Bedrock、QuickSightの各サービスに個別に作成し、それぞれ必要な最小限の権限のみを付与する。例えば、TextractがS3からファイルを読み込み、KMSで暗号化されたデータにアクセスできるよう、S3のGetObject権限やKMSの復号権限を与える。KMSキーポリシーも、これらのIAMロールがキーを利用できるように明示的に設定する必要がある。これは、IAMポリシーだけでは不十分な場合にアクセス拒否エラーを防ぐためである。さらに、セキュリティとパフォーマンスを向上させるため、VPCインターフェースエンドポイント(PrivateLink)を設定し、AWSトラフィックがインターネットを経由せずプライベートネットワーク内を流れるようにする。Amazon BedrockとAmazon QuickSightのサービス利用を開始する前に、それぞれのコンソールでアクセスを有効にし、QuickSightがS3バケットにアクセスできる権限を付与する。最後に、予想外のコスト発生を防ぐため、AWS Budgetsを設定して費用のしきい値を超えた場合に通知を受け取れるようにし、S3やLambdaの操作ログをCloudTrailやCloudWatch Logsで記録することで、システムの監査と監視を徹底する。ファイル形式は、Textractの入力としてPDF、JPEG、PNGなどを受け入れ、出力はQuickSightが扱いやすいCSVや、大規模データに適したParquet形式を推奨する。

データ抽出の中心となるのがAmazon Textractである。Textractは、スキャンされたドキュメントから文字を検出するOCR機能、一般的なフォームやテーブルを分析する機能、そして請求書や領収書に特化したAnalyzeExpense機能を提供する。特に請求書の場合は、AnalyzeExpenseを使うことで「ベンダー名」「合計金額」「日付」といったフィールドが正規化された形で高精度に抽出できるため、まずこれを試すべきだ。ドキュメントのページ数が多い場合や、処理が非同期で行われる場合はStartDocumentAnalysisとGetDocumentAnalysisの非同期APIを使用し、少量のドキュメントやテスト目的ではAnalyzeDocumentの同期APIを使用する。Textractの精度を高めるためには、入力ドキュメントの前処理が非常に重要である。スキャン画像の歪みを補正したり、ノイズを除去したり、コントラストを調整したりすることで、抽出精度が格段に向上する。抽出されたTextractの生JSONレスポンスは、必ずS3の専用フォルダに保存し、後から解析をやり直せるようにしておく。Textractが各フィールドに付与する「信頼度スコア」は、データの品質を判断する上で重要であり、信頼度が低いフィールドは手動レビューが必要なものとしてフラグ付けする。

Textractから得られた生データは、次に構造化されたデータ(CSVやJSON)に変換される。このステップでは、抽出されたデータのクレンジングと正規化が主な作業となる。空白の除去や大文字・小文字の統一、様々な表記のキー(例: "invoice no", "inv #" を "invoice_number" にマッピング)を標準的な形式に正規化する。日付はISO-8601形式(YYYY-MM-DD)に統一し、数値や通貨は桁区切りを削除し、小数点や通貨記号を正規化する。この際、Textractの信頼度スコアを保持し、特定の閾値(例えば80%)を下回るフィールドには「要レビュー」フラグを立てることで、手動での確認が必要な箇所を明確にする。最終的な出力は、分析やダッシュボード作成に適した「ワイド形式」のCSVファイルを目指す。これには、「請求書番号」「日付」「ベンダー名」「合計金額」「支払い期限」といった主要なフィールドが1行にまとめられ、Bedrockからの要約データと結合できるよう「doc_id」などのキーを含む。サブ合計と税金の合計が総額と一致するか、支払い期限が請求書日付よりも後であるかといったデータ整合性チェックも行い、不一致があれば「要レビュー」フラグを立てる。最終的に、処理されたCSVファイルはS3の「processed/wide/」フォルダに保存される。

さらに、Amazon Bedrockを使用してドキュメントの要約を作成する。Bedrockには、Textractで抽出した「請求書番号」や「ベンダー名」といった構造化された事実データと、ドキュメントのページヘッダー、合計金額周辺のテキスト、主要な明細行など、厳選されたテキストをインプットとして渡す。個人を特定できる情報(PII)は最小限に抑えるか、匿名化する。Bedrockには、特定のJSONスキーマに従った出力を求めるプロンプトを作成し、モデルが提供された情報のみを使い、新しい情報を生成しないように厳しく指示する。これにより、一貫した形式で、かつ信頼性の高い要約結果を得られる。ClaudeやMistralといったモデルを使い、温度(temperature)のような生成パラメータを低く設定することで、より事実に基づいた安定した出力を促す。長文のドキュメントの場合には、ドキュメントをページごとに分割して個別に要約し、その後にそれらを統合する「Map/Reduce」のような戦略を用いることで、モデルのトークン制限を回避しつつ、全体を正確に要約できる。Bedrockから得られたJSON形式の要約結果は、S3の「summaries/」フォルダに保存され、ダッシュボードでの視覚化に活用される。

最終的に整形されたデータは、S3の「processed/」フォルダに、さらに細分化されたフォルダ構造(例: wide/, kv/, tables/, expense/, summaries/, parquet/)で保存する。これにより、データがどのように処理されたか、どの段階のデータであるかが一目でわかるようになる。大規模なデータセットの場合や、Amazon Athenaと組み合わせて使用する場合には、Parquet形式で保存し、年、月、日などでパーティショニングすることで、クエリ性能とコスト効率を高めることができる。データ書き込みの際には、「アトミック書き込みパターン」を推奨する。これは、まず一時的なステージング領域にファイルを書き込み、内容を検証してから、最終的な保存場所へコピーするという方法で、書き込み途中の破損したファイルを誤って利用してしまうリスクを避ける。ファイルには適切なContent-Typeやサーバーサイド暗号化(SSE-KMS)を設定し、データセット名やドキュメントIDなどの有用なタグを付与することで、管理と検索を容易にする。データ整合性チェックも重要で、最終ファイルが正しいスキーマを持ち、期待される行数を含み、データ型が適切であるかを確認する。さらに、S3のライフサイクルルールを設定し、データの保存期間やストレージクラスを自動的に管理することで、コストを最適化しつつ、必要なデータの可用性を維持する。新しいデータがS3に保存された際に、EventBridgeを通じてQuickSightのデータセットを自動的に更新するような仕組みを導入することも可能である。

最後に、Amazon QuickSightを使ってダッシュボードを作成する。QuickSightとS3の連携には、S3のCSVファイルを直接読み込む方法と、Amazon Athenaを介してParquetファイルを読み込む方法がある。データ量が少ない場合はCSV直接読み込みで十分だが、データ量が増えたり、複雑なクエリが必要になったりする場合は、AthenaとParquetの組み合わせが推奨される。データセットの準備画面では、各カラムを適切なデータ型(テキスト、日付、数値など)にマッピングし、「月」「年」「期限切れ」のような計算フィールドを追加することで、より深い分析が可能になる。ダッシュボードでは、「ベンダー別合計金額(上位N件)」「月ごとの請求書合計金額の推移」「平均処理時間」といった主要な指標を視覚化し、ドキュメントの処理状況や財務状況を一目で把握できるようにする。さらに、日付範囲、ベンダー名、要レビューフラグなどのフィルターやコントロールを追加することで、ユーザーがインタラクティブにデータを探索できるようにする。QuickSightにはSPICE(Super-fast, Parallel, In-memory Calculation Engine)と呼ばれるインメモリエンジンがあり、これを活用することでダッシュボードの表示速度を向上させられるが、データ容量に制限があるため、大規模データにはDirect QueryでAthenaを利用するのが適している。ダッシュボードのデータ更新は、S3からの自動リフレッシュや、Athenaテーブルの更新と連携して定期的に行う設定が必要だ。作成したダッシュボードは、必要に応じて他のユーザーやグループと共有し、行レベルセキュリティ(RLS)を設定することで、各ユーザーが見られるデータを制限できる。

このように、AWS Textract、Bedrock、そしてQuickSightを組み合わせることで、手作業に頼っていたドキュメントからのデータ抽出と分析を完全に自動化し、経営判断に役立つインサイトを迅速に得られるようになる。これは、請求書だけでなく、契約書、学術論文、医療記録など、様々なドキュメント処理に応用可能であり、大幅な業務効率化とコスト削減に繋がる強力なソリューションである。

関連コンテンツ

関連IT用語