ChatGPTで請求書をやってみました
最近よく見る、「ChatGPTで請求書を!」ってのをやってみました。
実は、弊社の請求書では、そこそこ上手いこといってたんですよ。
普段はNodejsを使ってるんで、「pdf-parse + ChatGPT」な環境で、解析はgpt-3.5-turboまかせで構築していました。
調子に乗って、知り合いの会社さんの請求書をやってみたところ・・・・真っ白!!!!
何が悪いんだろと調べてみたところ、pdf-parseからの出力が改行コードしか出ていない!
来てみたところ、某販売管理システムから出力した請求書とのこと。
どうやら、PDFファイルにフォントデータが含まれていない模様。。pdf-parseは対応していないようなんです。困った。。。
って、ことでここから再構築が始まりましたぁ〜!!!
結果的には良かった面もありますけどね(^^;
OCRとの格闘
OCRライブラリを選定する必要があります。
ネタとしてPDFの請求書をJPEGに変換して準備しました。業務的に考えると、この手間はあり得んのですがそれは置いといて。。
まずは”tesseract.js”を試してみました。
実は以前「インボイスのあとしまつ」で試したことがあります。
このときの評価としてはNGでした。とくに、下線やら枠で囲われていると全然抽出できませんでした。
今回、どうかなぁと試したのですが、やはり同じ。。
ノートに書いた文章なんかだときれいに抽出してはくれるんですが。。。
次に試したのがPaddle。
これ、実は一つ困ったことがありました。
基本、Pythonで使うことが前提になっているようです。
Nodejsの資料もあるんですが、Paddleをサーバーとして動かしといて、API経由でアクセスする。そんな感じに見えます。
まぁ、どうこう言っても仕方ないので、まずはPythonの環境を作って動かしてみました。
結果的には・・・いまいちでした。
取り上げられている記事を見ると、結構期待してたんですが。
それと、今のバージョンは日本語フォントを別途準備しなくてもよくなっていました。
最後に試したのがGoogle Document AI。
こちらの方はPDFをBASE64に変換して食わせています。
こちらは流石に全部引っ張ってきてくれています。
有料サービスなので、ちょっと戸惑ってたんですが、安いしまずはこれを使うこととしました。
プロセッサーとしては、”Form Parser”を使っています。eu, usとなっているのですが、日本語もバッチリ対応してます。
”Invoice Parser”も試してみたのですが、日本語がだめでした(^^;
こちらが日本語使えるようになったら、こっちだけも試してみたいです。
Document AI使ってよかったこと
金額の検出で使うようになったことです。
元々の計画では請求金額なんかもChatGPTで抽出するつもりだったんですが、どうしても抽出ミスが発生していました。
DocumentAIでは、枠で囲われていたとしても、ほぼ確実にタイトルと金額をセットで抽出してくれます。
例えば、「”請求額” : 10,222」なんて形です。
タイトルと金額が横並びでも上下になっていても、関係なく抽出してくれています。
ChatGPTのほうには、会社名の抽出に専念をしてもらうことにしました。
動作が軽くなったせいか、こちらのほうも、かなり高精度に会社名を抽出してくれるようになりました。
Document AIでいまいちだったこと
Paddleもそうなんですが、DocumentAIでも文字列の座標が抽出できます。
座標情報を使えば、ChatGPTに請求書の構造が指示できます。
ところが改行文字で確実にセパレートしてくれないんです。。。
座標があって文字列があるんですが、文字列の中に改行文字が残っているケースがあるんですね。
なんとかできないかとやってみたのですが、現状では諦めました。
幸い、ChatGPTでの会社名などの抽出精度がかなり上がったんで、今のところ保留としています。
ChatGPTも語らねば。。。
タイトルが「ChatGPTと請求書」なので、ChatGPTも語らねば。。。
といっても、金額をDocumentAIを頼ることになったんで、
・会社名を抽出してください
・自社名は無視してね
程度になっています(^^;
WebUI+ChatGPT4だとChatGPTだけで抽出できたんですが、APIではPDFをアップロードがだめなんですよねぇ。。
費用は結構するし、回数の制限はあるし。。で、3.5を使い始めました。
それと、処理時間が30秒〜50秒とそこそこ時間がかかります。
5枚とかだったら、ドキドキしながら画面を見つめててもいいんですが、50枚とかなるとブラウザがタイム・アウトします。
それの対応として、スキャン用に子プロセスを生成して処理をして、終わったらメールで知らせるなんてこともしています。
現状
費用のことを記載しておきます。(1ドル140円として)
・GPTの費用
今のところトークン数の平均としては入力が1150トークン、出力が155トークンぐらいです。
『gpt-3.5-turbo-1106』モデルだと入力は1000トークンあたり、0.0010ドル、出力は1000トークンあたり、0.002ドル(1000トークンあたり約0.28円)
1枚スキャンするとして
入力:1150 x 0.001 / 1000 * 140 = 0.16円
出力: 155 x 0.002 / 1000 * 140 = 0.045円
合計:0.2円
『gpt-3.5-turbo-0125』モデルだと出力は1000トークンあたり、0.0015ドル(1000トークンあたり約0.21円)になります。
・Google Document AIの費用
Formパーサーの場合で、1~5,000,000 ページ以上/月で1,000 ページあたり65ドル。
1ページあたり0.065ドル→約9.1円
ま、そういうことで現状約9.3円で抽出しています。
最後に
Formパーサーでなく、普通のOCRプロセサを使うと 1,000 ページあたり $1.5になります。
なんとなんと、1/60の費用になります。
ランニング費用を考えると、できればFormパーサは使いたくないわけです。
3.5だけで金額関連も抽出できるように考えていく必要があります。。