日々ろぐ

人に優しく٩( 'ω' )و

AI Builder でフォーム処理の読み取り精度を上げるためにやったこと

タイトルの通り。

AI Builder は Microsoft Power Platform においてAIモデルを提供する機能です。
その中にある フォーム処理AIモデル を使ってドキュメントの読み取りをしたいと思い立ったわけでございます。
ただ、モデル作成時において日本語の読み取り精度が悪く、トレーニングに少し苦労したので、その時に試した方法をまとめておきます。

ちなみに、今回作成したドキュメントはこちらのテンプレートを利用させて頂きました。

template.the-board.jp

先に言いたいこと

英語でトレーニングしたほうがいい。以上。

...日本語の読み取り精度がまだまだ厳しいのが現状のようです。
やったことを下につらつらと書いていきます。

まずは日本語でトレーニングしてみる

今回は適当に作った発注書の読み取りモデルで考えていきます。

f:id:massyuu-d:20211020173956p:plain:h300

こんな感じの発注書を作って読み取らせようとすると...

f:id:massyuu-d:20211020175236p:plain

読み取れないんですよ。
日付や金額などの数値は簡単に読み取り候補に挙がるんですが、日本語の部分は選択肢にすら入らない状態です。
時折読み取れる場合もあるんですが、どういう理由で読み取れるのかは分からない...
これではトレーニング自体が出来ないですね...

かろうじて読み取れるパターンを何枚か駆使して、なんとかトレーニングをしたモデルを作成しました。
さて、そのモデルで別のドキュメントを読み取らせようとすると...

f:id:massyuu-d:20211021105057p:plain

件名や支払い条件など、やはり読み取れない箇所が多いですね。

f:id:massyuu-d:20211021105217p:plain

信頼度スコアも結構低いです。
まぁ、トレーニング時点でドキュメントが読み込めてないのだから、そりゃそうなるよなぁという感想です。

ここでふと、公式ドキュメントを眺めていると事前構築済みAIモデルというものを見つけました。

docs.microsoft.com

その中には今回試したいことと似ている請求書や領収書の処理モデルがあったのですが、対応言語はいずれも英語。
日本語よりは英語の方が読み取りやすいんだろうな...ということは、英語で学習させた方が読み取り精度はあがるのかな?

英語でトレーニングする

というわけで、Google翻訳を駆使して適当な英語の発注書を作成します。

作成したドキュメントをトレーニングに使ってみます。

f:id:massyuu-d:20211021110740p:plain

英語だと問題なく読み取れますね。
日本語だと読み取れなかった場所のテキストもしっかり読み取れるようになっています。

では、このトレーニングを経て作成されたモデルに日本語の発注書を読み込ませてみると...

f:id:massyuu-d:20211021110835p:plain

しっかり読み取れている!!

f:id:massyuu-d:20211021110949p:plain

読み取り箇所については問題なく、前のモデルで信頼度スコアが低かった箇所も改善されています。

f:id:massyuu-d:20211021111128p:plain

会社印と被っている箇所は少し信頼度スコアが低かったですが、結果として出されているテキストはあっています。
(それでもスコアが55%出ている)

ということは、この フォーム処理AIモデル においてはトレーニングの言語自体は大きな問題にならないのでは...!?

少し考察

先述の通り、ドキュメントが読み取れずにトレーニングそのものがうまくできないという問題は、ドキュメントを英語で書くことで回避できると考えられます。
そして、英語でトレーニングをしたモデルに日本語のドキュメントを読み取らせたとしても、高い精度で読み取りが可能になっています。
読み取った結果に対しても、高い信頼度スコアを出していました。

これらの結果から、 フォーム処理AIモデル においては

  • 言語そのものの処理に重きを置いていないのではないか
  • このモデルではテキストの位置情報を主に学習しているのではないか

と僕は考えています。

そして、言語そのものの処理は別のモデル(おそらくCognitive Services?)で行っているんだろうなーと想像しています。

まとめ

レーニングのためのドキュメントが読み込めないのは問題外なので、トレーニングは読み取りやすい言語(ここでは英語)で行う方がよさそうです。
ただし、そうして作成したモデルが高い精度で読み取りを行ったとしても、信頼度スコアのばらつきは出てくるでしょうし、結果に対してのバリデーションは必須ですね。
いずれにせよ、こうして作成したモデルでドキュメント管理が少しでも楽になればよいなーと思っています。

とりあえず今日はここまで。