Document AI を利用して電気料金を分析できるようにしてみた
この記事は Google Cloud Japan Customer Engineer Advent Calendar 2020 の 4日目の記事です。
本記事ではGoogle Cloud のサービスの1つである Document AI の使い方についてご紹介します。
はじめに
今年の Next で発表された Document AI は非構造な文章(請求書、レシート、議事録、など)を分析するために、機械学習を用いて文章を整理する
サービスです。
この Document AI は大きく分けて3種類あります。
1つ目は汎用的な機械学習のモデルを利用したもので General Document AI です。
こちらは Google が用意したモデルを利用して、ユーザーのドキュメント分析を手助けします。
簡易的であるため、まずはこちらで試していただくことをおすすめします。
2つ目はカスタマイズした機械学習のモデルを利用したもので Custom Document AI (AutoML) です。
こちらは、予めユーザーが用意した文章データを利用して、文章の判定
及び抽出モデルを作成します。
オリジナルのフォーマットを利用したドキュメントを分析したい時に
おすすめします。
3つ目は特定のフォーマットに特化した機械学習のモデルを利用したもので Specialized Document AI です。
こちらは Google が用意した特定のドキュメントに特化したモデルを
お使いいただくことができます。
現在は、請求書、レシート、URLA(住宅ローンの申込書)、W2(源泉徴収票)などに対するモデルをプライベート ベータでご利用いただけます。
(対象となるドキュメント一覧はこちらで確認できます)
本日の内容
本日はこれを使って、請求書から電気料金を分析できるようにしてみます。
2016年度の電力の小売全面自由化によって、多くの企業様が電力の小売に参入されました。その結果、様々な電力プランが出てきました。
基本的に電力料金は、基本料金 + 従量料金で構成されていますが、
基本料金が0円の電力プランもあれば、従量料金が2段階の電力プランも
あります。
そのため自分の家庭で、いつどのくらいの電気を利用して、基本料金
従量料金にいくら払っているのかがわからないと、どの電力プランを
選択すればお得なのかが見えてこないかと思われます。
そこで、Document AI を利用して電力の明細書から、基本料金や
電力量料金などを抽出して、分析出来るようにしていきます。
STEP 0:
Document AI は、こちらから Web 上でテストが出来ます。
まずは、Web 上で出力した電気料金明細を取り込んでみます。
※個人情報の部分はマスキングしています。
なんとなく、Key Value で値が取れていそうということがわかりました。
この「ご使用量」、「基本料金」、「1段料金」、「2段料金」などが
分析に利用できそうです。
では次に、API で Document AI を利用できるようにしていきます。
STEP 1: Cloud Document AI API の有効化
Google Cloud コンソール、またはコマンドにて Document AI の API を
有効化します。
Google Cloud コンソールの場合、ナビゲーションメニューの API
ライブラリにて Document AI と検索し、以下を有効化します。
コマンドの場合には、以下を実行します。
gcloud services enable documentai.googleapis.com
STEP 2: 認証の設定
- コンソールで、[サービス アカウント キーの作成] ページに移動します。
- [サービス アカウント] リストから [新しいサービス アカウント] を選択します。
- [サービス アカウント名] フィールドに名前を入力します。
- [ロール] リストから、プロジェクト > オーナー を選択します。
注: [ロール] フィールドは、サービス アカウントがプロジェクト内のどのリソースにアクセスできるかに影響します。これらのロールは後で取り消すことも、追加のロールを付与することもできます。本番環境では、オーナー、編集者、閲覧者のロールを付与しないでください。詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。 - [作成] をクリックします。キーが含まれている JSON ファイルが
パソコンにダウンロードされます。 - gcloud コマンドが実行できる環境にて環境変数 GOOGLE_APPLICATION_CREDENTIALS を、サービス アカウント キーが含まれる JSON ファイルのパスに設定します。
この変数は現在のシェル セッションにのみ適用されるため
新しいセッションを開く場合は、環境変数を再度設定します。
例: Linux または macOS の場合export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
※[PATH] をサービス アカウント キーが含まれる JSON ファイルのパスに置き換えます。
STEP 3: Client Library のインストール
Java、 Node.js、 Python のどれかにて Document AI の Client Library を
インストールします。
例えば Python の場合には以下のようにしてインストールします。pip install --upgrade google-cloud-documentai
STEP 4: Google Cloud Storage へのドキュメントの保存
分析対象のドキュメントを Google Cloud Storage に保存します。
STEP 5: サンプルスクリプトの実行
本スクリプトをコピーして実行環境に保存します。
スクリプト内の project_id=’YOUR_PROJECT_ID’ の YOUR_PROJECT_ID を
プロジェクトのID に置き換え
input_uri=’gs://cloud-samples-data/documentai/invoice.pdf’ の
gs://cloud-samples-data/documentai/invoice.pdf を先程保存した
Google Cloud Storage のパスに置き換えます。
その後、スクリプトを実行すると以下のような形式で出力されます。
なんとなく文章は抽出されていそうですが、分析をするためのデータとしては整形が必要そうですので、key value で出力されるように少しスクリプトを修正します。
以下のようなカンマ区切りで出力されるように修正しました。
STEP 6: Google Cloud Storage への保存と BigQuery への取り込み
結果の出力先フォルダを Google Cloud Storage に作成し、以下のように
結果を保存します。
このまま BigQuery にデータを取り込んでも構わないのですが、データの整形が必要な場合には Dataflow や Dataprep を利用して、ETL 処理を掛けます。
私は、利用しなさそうな住所や氏名といった情報を Dataprep を利用して削除しました。
結果として BigQuery には以下のような形で保存されました。
あとは、単位を数値に直したり、カラム名を修正したりすれば分析に利用できそうです。データポータルを利用してグラフや表を作るのもいいかもしれません。
最後に
いかがだったでしょうか?
Document AI は新しいサービスで、これからもさらなる機能追加が見込まれますので要チェックしてもらえればと思います。