マルチモーダルLLMで日本語OCR試してみた。
2024.4.17
今回は、マルチモーダルLLMの、日本語のOCR性能(画像内の文字認識・抽出性能)を検証しました!
OCRに特化したモデルはLLM以外に多くリリースされているのですが、(EasyOCR等)
近頃画像等の文字列以外の要素を認識して結果を出力できる「マルチモーダルLLM」がリリースされており、どの程度の精度が出るのか気になり検証を行いました。
目次
使用したマルチモーダルLLM
今回使用したマルチモーダルLLMは、以下の3つです!
・bilingual-gpt-neox-4b-minigpt4 (以下Rinna-4bとする)
「Rinna」が3.8Bパラメータの「GPT-NeoX」と「BLIP-2」を組み合わせて作成した
英日バイリンガルのマルチモーダル会話モデルです。
・japanese-instructblip-alpha (以下BLIP-Alphaとする)
「Stability AI」が開発した日本語向け画像言語モデルです。
画像から説明を生成できる画像キャプションに加え、画像についての質問応答も可能です。
・GPT-4V
Open AI社がリリースした、マルチモーダルのLLMです。
GPT-4が元になっていて、画像での入力が可能になっています。
マルチモーダルLLMでのOCRに期待する事については以下の通りです。
・プロンプトの指示通りにOCRを行ってくれるのではないか
(例)動物を意味する文字のみを抽出してリスト化してください等
・既存のOCRモデルより精度が高いのではないか
果たして、期待する結果は得られるのでしょうか…!
検証コード
検証用のコードは以下のコードを参考に、Google Colabを用いて行いました。
コードを参考にさせていただいている、npakaさんには毎度お世話になっております!
コードをここで記述してしまうと、ボリュームが非常に大きくなってしまうため、今回は割愛します。Rinna-4Bのマルチモーダル会話モデルを試す
Google Colab で Japanese InstructBLIP Alpha を試す
GPT-4Vについては、本家Open AIのChatGPTサービスで Plusプランを契約し使用しました。
ChatGPT
ChatGPTのプランについての説明はこちらから。
検証結果
まずは、居酒屋のメニュー表から日本語のOCRを試みようと思います。
ある程度規則性があり見やすいものを用意しました。早速検証してみます!
評価としては、文章の意味を含め全く回答になっていないものが×、意味は通っているが抽出した情報が間違っているものは△、文章の意味も抽出した情報もあっているものを○としています。
まずはRinna-4bから、いくつかのプロンプトを試してみました。
プロンプト:画像の中に書かれている文字を出力してください。
結果:写真はカップ麺を注文し、お金を払うと貰えるメニュー表
評価:×
プロンプト:画像の中には何が書かれている?
結果:メニュー表の写真
評価:×
プロンプト:画像のなかで一番大きく書かれている文字列は?
結果:「 うどん」
評価:×
プロンプト:こちらの画像は居酒屋のメニューです。メニューで一番左上の文字列を出力してください。
結果:居酒屋のメニューです。
評価:×
プロンプト:こちらの画像は居酒屋のメニューです。ソフトドリンクのメニューをjson形式で出力してください。
結果:居酒屋のメニュー
評価:×
全然出来てない…😭プロンプトの意味も理解できていないようです。
めげずに次は、BLIP-Alphaで試してみます!
プロンプト:画像の中に書かれている文字を出力してください。
結果:お弁当の中身が写真とテキストで掲載されている
評価:×
プロンプト:画像の中には何が書かれている?
結果:日本語で書かれてある、食べ物に関する文章
評価:×
プロンプト:画像のなかで一番大きく書かれている文字列は?
結果:お昼ご飯のメニュー
評価:×
プロンプト:こちらの画像は居酒屋のメニューです。メニューで一番左上の文字列を出力してください。
結果:本日のメニューより「オムライス」の画像
評価:×
プロンプト:こちらの画像は居酒屋のメニューです。ソフトドリンクのメニューをjson形式で出力してください。
結果:居酒屋のメニュー
評価:×
こちらも出来ず…プロンプトの書き方が悪かったのか?と思い他にも様々なパターンで試しましたがダメでした…複雑なプロンプトに従うということはあまり出来なさそうです。
次は期待のGPT-4Vを試してみます!
プロンプト:画像の中には何が書かれている?
結果:
画像には、さまざまな食品のメニューが書かれています。メニューには日本語で食品名とそれに対応する価格が記載されており、メニュー全体が日本の伝統的なデザイン要素で装飾されています。また、メニューにはいくつかの食べ物の写真も掲載されています。価格は日本円(円)で表示されています。
評価:○
プロンプト:画像の中のソフトドリンクの価格と名前を抜き出してください。
結果:
画像にはさまざまなメニュー項目がリストされていますが、ソフトドリンクについては以下の情報があります:
・ハイボール 300円
・ウーロン茶 300円
・オレンジジュース 300円
これらはメニューにリストされているソフトドリンクの名前と価格です。
評価:△
プロンプト:自家製キャロットケーキの価格はいくらでしょうか。
結果:自家製キャロットケーキは400円です。
評価:○
プロンプト:わらび餅はいくらですか?
結果:わらび餅の価格は100円です。
評価:○
プロンプト:チョコレートアイスの価格は?
結果:チョコレートアイスは200円です。
評価:△
プロンプト:画像は居酒屋のメニューです。甘味のメニューの名前と値段を教えてください。
結果:
この画像は居酒屋のメニューの一部を示しており、甘味のメニューの名前と値段が記載されています。以下にその内容をお伝えします。
・生ビール(中) - 500円
・焼酎 - 500円
・ハイボール - 300円
・日本酒 - 1000円
ソフトドリンク
・コーラ - 300円
・ウーロン茶 - 300円
・オレンジジュース - 300円
・ボトルワイン - 2000円
・チューハイ - 350円
・梅酒 - 300円
・ハウス酒 - 1000円
お菓子
・チョコ - 300円
・サービス菓 - 200円
・オレンジジュース - 200円
甘味
・白桃缶チャロットケーキ - 400円
・チョコレートマイス - 300円
・わらび餅 - 100円
メニューの甘味の部分には、3つのアイテムがリストされており、それぞれの値段が横に記されています。
評価:△
流石の理解力で、指示は理解できている感じがしますが、OCR性能自体はイマイチかな…と感じます。
ところどころ商品名がおかしな出力になっており、既存のOCRモデルの方が精度は高そうです。
次はこちらの画像を使用して日本語のOCR性能を測ってみようと思います。
この画像は弊社のHPに記載されているもののキャプチャで、白地に黒の文字のみの、非常に読み取りやすく書かれている画像となっています。
居酒屋のメニューのように情報量の多いものではないので、こちらが読み取れなければ日本語のOCR性能に期待はできないのではないかと思います…
さて、気になる結果は…!まずはRinna-4bから。
プロンプト:画像の中にはなんと書かれていますか?
結果:白い壁の前に描かれた絵
評価:×
プロンプト:画像の中に書かれている文字を出力してください。
結果:黒の文字と白の文字が1つになっている 白い壁の文字を白文字で書かれている。
評価:×
なるほど…?(悲しみ)
次はBLIP-Alpha。
プロンプト:与えられた画像の中にはなんと書かれていますか?
結果:白い背景に黒と白のテキストが書かれたテキストメッセージのスクリーンショット
評価:×
プロンプト:与えられた画像の中には、なんと書かれていますか?
結果:白い背景に黒い文字で書かれたテキストと白い背景に黒い文字で書かれたテキストの2つのテキストが含まれています
評価:×
これは…
プロンプトに対する解釈がやはり出来てなさそうですね…では、我々のラストホープ、GPT-4Vは…?
プロンプト:与えられた画像の中にはなんと書かれていますか?
結果:
画像の中には次のように書かれています: 「IT技術」×「人間力」を基盤にお客様に一歩先導 するシステム構築、サービスを実現します!
評価:△
惜しい!!
「ご満足いただける」という内容が「一歩先導する」という文言になってしまってますね。
惜しいですがGPT-4Vをもってしても精度がイマイチと言うことは、現状のマルチモーダルLLMを日本語のOCRとして使うのは難しいのが現状なんですね… それがわかったのも大きな収穫です。
最終的な結果は以下のようになります。
設問 | Rinna-4b | BLIP-Alpha | GPT-4V |
画像の中に書かれている文字を出力してください。 | × | × | – |
画像の中には何が書かれている? | × | × | 〇 |
画像のなかで一番大きく書かれている文字列は? | × | × | – |
居酒屋のメニューで一番左上の文字列を出力してください。 | × | × | – |
居酒屋のメニューのソフトドリンクのメニューをjson形式で出力してください。 | × | × | – |
画像の中のソフトドリンクの価格と名前を抜き出してください。 | – | – | △ |
自家製キャロットケーキの価格はいくらでしょうか。 | – | – | 〇 |
わらび餅はいくらですか? | – | – | 〇 |
チョコレートアイスの価格は? | – | – | △ |
居酒屋のメニューです。甘味のメニューの名前と値段を教えてください。 | – | – | △ |
画像の中にはなんと書かれていますか?(白地に黒の文字) | × | × | △ |
画像の中に書かれている文字を出力してください。(白地に黒の文字) | × | × | – |
正解数 | 0/12 | 0/12 | 3/12 |
まとめ
今回の検証結果をまとめると
・Rinna-4bやBLIP-Alphaは、まずOCR以前に複雑なプロンプトの指示に従うこと自体が厳しい。
・GPT-4Vは、プロンプトの指示は理解できているが、現時点では日本語OCRの性能は特化モデルに及ばない。
以上のことがわかりました。
現状は、日本語のOCRをする場合、マルチモーダルLLMよりOCRに特化したモデルを使用した方が良さそうですね!
システム開発・保守、導入支援など、
お気軽にご相談ください