請求書自動化サービスで使われている技術ご紹介(第2回)

前回のお話の続きで、このサービスのエンジンとなるGoogle社のDocument AIのプロセッサのお話しです。

実はこの作業を始めたのが、2023年8月で、ChatGPTは既に使用可能な状態でしたが、その時は単純にAPIの使用方法がよく分からなかったこと、GoogleAPIはその前から学習していて、ある程度使い方が分かっていたため、最初はchatGPTを使わずに進めようと思いました。

まずはgoolgeAPI+私の考案した独自ルールで請求書情報を取り出せるのではと思いDocument AIに用意されているいくつかのプロセッサを試してみました。

ここでお断りしておかなければいけませんが、何しろ1人でやっているので結果の整理ができていません。ですので、いちいちその時のテスト結果をご紹介することができません。

あくまでも私の環境でのお話しとご理解下さい。

テスト用のデータには大きく分けて2種類を使用しました。

いわゆる「標準的なフォーマット」の請求書(表があり、明細、個数、金額が並ぶ形式)とスーパーのレジで受け取る「レシート」のタイプです。

主に試したのはDocumentOCRとForm Parserで、その他にもExpense Parser、Invoice Parserも試しましたが、結果的にForm Parserを使用することにしました。

その理由は、読み取り結果を「ある程度構造化して」出力してくれることでした。

特に明細欄の表形式の個所の前には、

Table with X columns and Y rows:

というラベルを書き出してくれ、このフォーマットで読み取り結果を用意してくれるので(注:Xには列数Yには行数の数字が入る)プログラムで処理するのに便利でした。

DocumentOCRにはこのような機能は無く、単純に読み取った文字列を改行キーで区切って出力するだけです。その代わり(なのかどうかわかりませんが)使用料金はForm Parserが1,000 ページあたり $65に対し、Document OCRが1,000 ページあたり $1.5です。

このFormParserでの読み取り+独自ルールで苦労したのが、予想通り「独自ルール」の個所です。

分かっていたつもりなのですが、レシート、請求書は発行元の会社毎にそのフォーマットが異なります。それでも「ある程度は定型だから」と思っていましたが、やはり目標となる値の取得のためにどんどんロジックが必要となり、テストを繰り返し修正・追加を重ねました。

これを繰り返していて不安になったのが、「エンドレスの開発」でした。新しいフォームの請求書、領収書の処理のためにどんどん新しいコードを追加し、ある時には、新しく追加したコードのために、以前作成した仕組みとの整合性が取れなくなり例外処理を加えることになり、我ながら「これ何時になったら終わるのか?」という不安が増してきました。

それで、11月の後半にふと、「ChatGPT」だったらどうなるだろうと思い、ネットで調べたりChatGPTに聞いたりして、ChatGPTのAPIを試してみました。

その結果少し驚いたのですが、結構な精度で欲しいデータを取得できることが分かりました。

次回以降で解説しますが、私が一番びっくりしたのは、DocumentOCRとChatGPTの組み合わせでも結構な精度で請求書の要素を返してくれることでした。

当初DocumentOCRは単純に文字列を返すだけで、「これをChatGPTの入力にして大丈夫かな?」と言う心配がありましたが、思った以上にChatGPTの精度が高かったわけです。しかも信頼性や座標の情報は必要ないので、課金対象となる「トークン」のサイズもそれほど大きくなりません。

そこで、「自分で考えた請求書からの要素取り出しルールを作るのでなく、基本全てChatGPTに任せよう」と決め、GoogleOCRとchatGPTによる請求書データ自動取り出し用の仕組みの核ができました。

次回はさらにディープな内容で、使用しているAPIや仕組みについてさらに詳しく書いてみたいと思います。

Follow me!