GPT-4 Turbo with Visionを使えばOCRの工程が不要になりました
こんにちは!PharmaXエンジニアリング責任者の上野(@ueeeeniki
)です。
PharmaX2023年アドベントカレンダーの前夜祭と題して、フライングで発信していきます!
今回は、2023年11月6日に行われたOpenAI DevDeyで発表されたGPT-4 Turbo with vision APIについての記事です。
PharmaXのユースケースでは、GPT-4 Turbo with visionを使うことでOCRの工程が不要になり、アプリケーションの構成が1ステップ分少なくなったという事例紹介になります。
実際にGPT-4 Turbo with visionでどのようなことができるのか気になっている方や、これまでOCRを使ってアプリケーションを作ってきた方の参考になると嬉しいです。
GPT-4 Turbo with visionとは?
GPT-4 Turbo with visionは、2023/11/6のDevDayでpreview版が発表されたOpenAIの新しいマルチモーダルモデルです。画像を認識して、その画像の説明などをモデル名は、gpt-4-vision-previewという名前でAPIで指定することが可能です。
もともと、GPT-4Vという名前で、2023年9月25日からChatGPT内で使えるようになった画像認識機能がAPIでも使えるようになったというイメージです。
しかし、GPT-4 Turbo with visionを使う上では注意点もいくつかあるので、こちらの記事『GPT-4 TurboとGPT-4 Turbo with visionを使う上での注意点』も参考にしてください。最低限押さえておいていただきたいのは、GPT-4 TurboとGPT-4 Turbo with visionは別物であるということです。ここを勘違いしてしまうと、後の話がよく分からなくなってしまうので注意が必要です。
今回、GPT-4 Turbo with visionによってGPTがマルチモーダル化したことによって、これまで請求書や契約書等をOCRをして文字を読み取り、GPTに解釈をさせていたようなユースケースで、OCRのステップが不要になるのでは?と言われていました。
少なくともPharmaXのユースケースでは、実際にOCRの工程は不要になりました。他のユースケースにも十分通じる話ではないかと思うので、今回の結果をシェアしたいと思います。
PharmaXでOCRを利用していたユースケース
PharmaXでは、『[LLM PoC]LLMによる疑義照会の半自動化PoC』や『[LLM PoC]Whisper + GPT-4で服薬指導の音声から薬歴内容を自動生成させることに成功しました』の記事中でも触れているように処方せんの内容を読み取って、医薬品の処方情報を抽出および構造化するということを行っています。
処方せんと聞いてピンとくる方ばかりではないと思いますが、処方せんとは下の添付画像のようなもので、病院やクリニックで医師に診断されるともらうことのできる紙です。
薬局に行って、この紙を薬剤師さんに渡すと、引き換えに医療用医薬品を購入することが可能です。
大事なのは、画像内の赤枠の欄で、ここにその人に処方される医薬品名や1日の服用数、服用タイミング、合計の処方量などが記載されており、その内容に従って薬剤師が調剤※を行います。
欄の中には処方せんを発行するシステムごとに、下記のようなさまざまなフォーマットで処方情報が記載されています。
(※調剤とは「処方箋に基づいて医薬品をそろえ、患者に交付する業務」のことをいいます)
これら画像から、下記のようなJSON形式にするのがゴールです。
これまでは、以下のステップで処方情報の抽出および構造化を行っていました。
①:処方せん画像内の処方情報をOCRによってテキスト化する
②:①で抽出したテキストからGPTによって処方情報の構造化する
PharmaXでは、OCRにGoogleのDocument AIを使っていましたが、結論、GPT-4 Turbo with visionを使うことで、①のOCRで画像をテキスト化する工程は不要になりました。
また、次に説明するように、従来OCR工程で工夫が必要だった問題点にも悩まされることがなくなりました。
従来のOCR工程の問題点
処方せんは、下の画像のように1まとまりの情報が、離れたところに記載されていることも多いです。そのため、OCRで読み取った際に情報を分離して抽出してしまうことがありました。
本来は下図のような単位で抽出したいのにも関わらず、
下図のように分離して情報を抽出してしまうというようなイメージです。
これを防ぐためには、各OCRサービスでパラメータを調整する必要があります。
(もっとも、これは他の書類ではあまり起きない問題なのかもしれません。)
GPT-4 Turbo with visionを使った場合には、処方せんのような謎のフォーマットが多数存在する書類でも、情報の塊をいい感じに解釈してくれ、問題なく情報を抽出することができました。
GPT-4 Turbo with visionを使う上での注意点
そして、一番の問題点は、GPT-4 Turbo with visionでは、JSONモードが使用できないことです。そのため、下記のように出力され、必ずしもJSONのみを出力してくれるとは限りません。
APIの出力結果にこのように余分な言葉や文章が含まれてしまい、絶妙に扱いづらくなってしまいます。
これを防ぐために下記のような言葉をプロンプトに含めることは可能です。実際、私のテストでは、このように指示するだけでも望んだ通りJSONのみを返してくれるようになりました。
ただし、どこまで行ってもJSON形式で出力することを100%担保してくれるわけではないので、次に説明するようにGPT-4 Turbo with visionの後にGPT-4 TurboのJSONモードを挟むことで、JSON形式に変換されていることを100%担保することも可能です。
GPT-4 TurboのJSONモードを挟んでJSON形式で出力されることを担保することも可能
合計のステップ数は減りませんが、GPT-4 Turbo with visionで医薬品の情報を抽出した後にGPT-4 TurboのJSONモードを挟むことで、JSON形式で構造化されることを担保することは可能です。
下記のようなプロンプトでGPT-4 Turboにリクエストするイメージです。
もちろん、GPT-4 Turboを挟むことで、COR工程を削っても結局2ステップになってしまいます。もちろんAPIの利用料も余分にかかります。また、JSONモードによってJSON形式で出力されること自体は担保されていたとしても、内容が正確かどうかは別問題です。GPT-4 Turboがいくら賢いとはいえ、処理にAPIを1つ増やすことで、間違いが含まれる確率は当然高くなってしまいます。
しかし、GPT-4 TurboとGPT-4 Turbo with visionはいずれ統合されるという話もあるので、近い将来この工夫は必要なくなるとは思っています。
最後に
今回は、GPT-4 Turbo with visionの登場で、PharmaXでAIを活用しているアプリケーションでOCR工程が不要になった話をしてきました。
この結果は、PharmaXのような医療系スタートアップ以外でも十分通じる話ではないかと思います。請求書や契約書などでは、処方せんに比べて一般名詞も多いでしょうから、GPT-4 Turbo with visionのみで十分必要な情報の抽出が可能ではないかと推測しています。
また、GPT-4 Turbo with visionではJSONモードが使えないことから、GPT-4 TurboのJSONモードを最後に挟んで、JSON形式で出力されることを担保するというアイディアについても有効性を検証しました。
今回の記事が、OCRを使ったアプリケーションを作っている方や、GPT-4 Turbo with visionを使ってみたいと考えている方の参考になると嬉しいです。
OpenAI DevDay後のアプリケーション開発の現場でどのような嬉しいポイントや困りポイントが合ったのかをシェアする下記のような勉強会も行います。ご興味のある方は是非ご参加ください!
みなさんのLLMライフがより快適になることを祈っています!