図面読み取りに革命!生成AIが生産性を加速させる【データ利活用の道具箱 #13】
はじめに
最近、生成AI(生成モデルを用いた人工知能)の進化が目覚ましく、皆さんの周りでもよく話題に上がっていると思います。
特に自然言語処理や画像認識、画像生成で高い精度を出しており、多くの業界で実際に活用され始めています。
例えば多様な設備を扱う製造業や建設業では、図面に描かれた設備間の流れや関係性を読み取って追跡するのに苦労することが多いですが、まだ生成AIの導入は進んでいません。
現状図面の読み取りには、OCR(光学文字認識)や専用の解析ソフトウェアを利用することが一般的です。しかし、これらの方法には課題もあります。
手書きの図面や複雑な凡例(表)は正確に読み取ることが難しい
機器や計器が大量に書き込まれており、見たいものだけに絞って情報の流れを辿るのに膨大な時間と労力を必要とする
手書きの図面は人が確認せざるを得ないケースが多く、人的ミスが発生しやすい
高精度の画像認識が期待できる生成AIがこうした領域でも成果を出せることが分かれば、現場の生産性を大きく向上させられる可能性があります。
私は普段AIやデータ分析などを専門とした仕事をしていて、過去には画像認識に関するプロジェクトにも多く携わってきました。
先日、システム開発プロジェクトに参加している同僚から、製造業のお客様向けに配管図読み取り機能を開発したい相談がありました。そこで、生成AIによって高精度で柔軟な図面読み取りが可能になるかどうか、一緒に検証することにしました。
具体的には、以下の二つの要望をもらいました。
読み取り機能への生成AI活用の可能性を見極めるため、生成AIで実現できる範囲をクイックに確かめたい
プロンプトやモデルを調整することで、将来的な精度向上が見込めるか知りたい
本記事は、私が実際に行った検証方法と、その結果をまとめています。同じように図面の読み取りに悩んでいる方のヒントになれば幸いです。
検証したいこと
今回は図1のような配管図のpdfを生成AIモデルで読み取り、設備の名称や設備間の繋がりを読み取る精度を確かめます。
また、読み取った結果を様々な施策に適用できるように、応用の効くアウトプットができることも確認します。
以下の画像は読み取りに用いる配管図(イメージ画像)です。
具体的には、以下の3つが実現できることを確認します。
検証項目1. 配管図の主要な部分(槽やホッパーなど)の接続を検知できる
検証項目2. 複雑な弁の情報や設備の名称を正確に検知できる
検証項目3. 読み取った結果を任意のJSON形式で出力できる
様々な施策に適用できるよう、応用の効くアウトプットにします
{
"equipments": [
{
"equipment_number": "xxxxxx",
"equipment_name": "M剤計量ホッパー",
"description": "",
"connections": {
"child": [
{
"equipment_number": "E1",
"equipment_name": "ボール弁"
}
これらはいずれも、配管図の読み取りとその活用において基本的なことであり、最低限実現するべき項目になります。
業務等で実利用できるレベルまで求めると、もっと多くの検証項目が必要ですが、今回は上記3つの検証項目に留めてクイックに検証を進めます。
検証の進め方
検証は以下の4つのステップで進めます。
検証ステップ① 初期検証および検証モデルの決定
初版のプロンプトで図面を読み取り、精度を確かめます。
このときいくつかの生成AIモデルを試し、図面の読み取りに最適なモデルを決定します。
決定したモデルに絞って、後述の検証ステップを進めていきます。
設備の名称や設備間の繋がりを検知できる精度を確認し、初版の品質を評価します。(検証項目1、2)
また、読み取り結果を任意のフォーマットで出力できるかも確かめます。(検証項目3)
検証ステップ② プロンプト改善方針決定
初期検証の結果から課題を特定し、それを解決するためにすべきことの仮説を立てます。
検証ステップ③ プロンプト改善
ステップ2で設定した仮説に基づいて、検証項目1,2,3それぞれを実現するために最適なプロンプトを模索します。
検証ステップ④ プロンプト改善の結果評価
最後に、3つの検証項目がどれだけ達成されていたかを確認します。
今回の活動だけで高精度を目指すのではなく、今後改善を繰り返すことで、業務利用できるような精度が実現できるか可能性を確認します。
そのため、全体を通してなるべくクイックに検証を進めて、その判断が早期にできるよう努めます。
検証ステップ① 初期検証および検証モデルの決定
初めに作ったプロンプトを初版とし、この時点でどの程度図面を読み取れるのか確かめます。
初版のプロンプト
### 前提
あなたは配管図のpdfを読み取って、読み取った情報を機械が処理できるようにデータを整形する仕事についています。
機械に読み取らせる情報はjsonです。そのため各設備の名前や繋がりを読み取って、その情報を後述のjsonフォーマットに合わせて整えてください。
### 読み取り方
添付した「サンプル_配管図.pdf」にて、読み取り方を伝えます。
右上のチラー1から出ている線を確認すると、原料タンクAと原料タンクBに繋がっていることが分かります。
このように主要な設備からどこに向かって線が引かれているかを読み取ってください。
### 問い
サンプルのpdf画像とサンプルを読み取った結果のjsonの一部は、「サンプル_配管図.pdf」と後続の ### jsonフォーマット にて記載してあります。
それを参考に、「配管図.pdf」を読んで、同じようなjsonの形にフォーマットしてください。
### jsonフォーマット
{
"equipments": [
{
"equipment_number": "",
"equipment_name": "チラー1",
"description": "",
"connections": {
"child": [{"equipment_number": "", "equipment_name": "原料タンクA"},{"equipment_number": "", "equipment_name": "原料タンクB"}]
}
},
{
"equipment_number": "",
"equipment_name": "チラー2",
"description": "",
"connections": {
"child": [{"equipment_number": "", "equipment_name": "混合タンク"}]
}}
,
{
"equipment_number": "",
"equipment_name": "貯蔵タンクA",
"description": "",
"connections": {
"child": [{"equipment_number": "", "equipment_name": "原料タンクA"}]
}
}
]
}
今回は、簡単に環境を用意できたChatGPTとGeminiから以下のモデルを3種類選びました。
ChatGPT4o
OpenAIが提供する、汎用的な生成AIモデル (2024/7/30 時点での最新)Gemini-1.5-pro-001
Googleが提供する、汎用的な生成AIモデル(2024/7/30 時点での最新)Gemini-1.0-pro-vision-001
Googleが提供する、画像認識やPDF読み取りに特化したモデル(2024/2/15 リリース)
以下の配管図の画像が、読み込ませる対象の図面です。
3つのモデルを使って検証した結果を以下の表にまとめます。
ChatGPT4o
設備間の繋がりは20%程度しか読み取れませんでした。また文字が小さい設備の名称や複雑な弁の繋がりなどもほとんど読み込めませんでした。Gemini-1.5-pro-001
ChatGPT4oよりも高い精度で配管図の設備間の繋がりを読み取ることができました。読み取り結果も問題なく、任意の形式で出力できていました。
設備の名称や複雑な弁などの情報は、ChatGPT4o同様にうまく捉えることができませんでしたが、それでもベースとなる認識精度が高いためChatGPT4oより精度が高いと評価できます。Gemini-1.0-pro-vision-001
画像やpdf読み取りに特化しているとはいえ、モデル自体が少し古いせいか、Gemini-1.5-pro-001と比べると読み取り精度は落ちました。
なお、どのモデルを使ったとしても、サンプルの出力フォーマットをプロンプトに組み込むことで、JSON形式での出力はできました。
これらの結果より、初期検証の時点では生成AIのモデルの優位性は、Gemini-1.5-pro-001>Gemini-1.0-pro-vision-001>= ChatGPT4oとなり、Gemini-pro1.5-pro-001が最も高精度で、設備間の繋がりを掴むのに優れていることが分かりました。
検証ステップ② プロンプト改善方針決定
ここから、最も精度の高かったGemini-pro1.5-001に絞って検証を続けます。
初期検証の段階では、検証項目3の「読み取った結果を任意のJSON形式で出力できる」点はクリアできていましたが、検証項目1と2に関しては以下の課題が残っていました。
課題1:簡単な設備の接続パターンでも、読み込めていないケースがある
課題2:調合槽→弁→弁→調合槽などの、弁から弁へ接続されている難しいパターンなどは、図面の情報がかなり小さく複雑なため、読み取れない
課題3:計器やバルブなどの設備の詳細情報を取得できていない
そこで、課題を解決するための以下の仮説を設定しました。
仮説1. 具体的な例を示して設備間の流れの見方を生成AIに教えれば、読み取り結果が安定するのではないか
仮説2. 弁→弁というパターンがあることを明記すれば、複雑なパターンでも読み取れるのではないか
仮説3. 名称と図面中の記号が一緒に含まれている記号表をプロンプトに添付すれば、参考情報として生成AIが利用するのではないか
検証ステップ③ プロンプトの改善
ステップ②で設定した仮説を踏まえて、プロンプトを改善します。
先に改善したプロンプトのサンプルをお見せします。
仮説3つを踏まえて改善したプロンプトの一部(サンプル)
### 前提
あなたは配管図のpdfを読み取って、読み取った情報を機械が処理できるようにデータを整形する仕事についています。
機械に読み取らせる情報はjsonです。そのため各設備の名前や繋がりを読み取って、その情報を後述のjsonフォーマットに合わせて整えてください。
### 読み取り方
添付した「配管図.pdf」と「記号表.pdf」にて、読み取り方を伝えます。
まず「配管図.pdf」の上下を見ると表形式のデータがいくつかあります。
それらの表のデータは配管図に記載されている主要な設備に関する情報で、例えば設備の名称や容量、材質などの情報が含まれています。
そのような表に記載されている設備がpdf中でバルブやセンサーを経由して黒い矢印で接続されています。
基本的には設備1からバルブ1、バルブ1から設備2という流れが一般的ですが、設備1からバルブ1、バルブ1からバルブ2、バルブ2から設備2となることもあります。
表に書かれているすべての設備について、どのように接続されているかの繋がりを### jsonフォーマットを参考にまとめてください。
またバルブなどは番号が振られていないため、異なる設備であっても設備名が同じで異なるものと認識できません。
そのような場合は、ダミーの番号を割り振るようにして違いが分かるようにしてください。
なお、「記号表.pdf」には各設備の間に繋がれているバルブに関する情報がまとまっています。
設備の間のバルブがどのような種類のものかは記号表を参考にしてください。
### 問い
サンプルのpdfとそれを一部読み取った結果のjsonは、「配管図.pdf」と後続の ### jsonフォーマット にて記載してあります。
それを参考に、「配管図.pdf」を読んで、同じようにjsonの形にフォーマットしてください。
equipment_numberやequipment_nameが分からない場合は、空欄のままで構いません。
### jsonフォーマット
{
"equipments": [
{
~省略~
対策1 設備間の流れの見方を具体的にプロンプトに追加する
具体的な例を示して設備間の流れの見方を説明すれば、読み取り結果が安定するのではないか (仮説1)
変更箇所
添付した「配管図.pdf」と「記号表.pdf」にて、読み取り方を伝えます。
まず「配管図.pdf」の上下を見ると表形式のデータがいくつかあります。
その表は配管図に記載されている主要な設備に関する情報で、例えば設備の名称や容量、材質などの情報が含まれています。
表に記載されているそれらの設備がpdf中でバルブやセンサーを経由して黒い矢印で接続されています。
具体的な配管図を添付しながら、上記のように読み取り方をプロンプトに記載したところ、生成AIの読み取り方が一定になり、簡単な設備の繋がりを取りこぼすことが減りました。
※まず「配管図.pdf」の上下を見ると表形式のデータがいくつかあります。とありますが、今回載せているサンプル画像には表は含まれていません。
対策2 弁→弁の情報をプロンプトに追加する
弁→弁というパターンがあることを明記すれば、複雑なパターンでも読み取れるのではないか (仮説2)
変更箇所
基本的には設備1からバルブ1、バルブ1から設備2という流れが一般的ですが、
設備1からバルブ1、バルブ1からバルブ2、バルブ2から設備2となることもあります。
次に弁から弁に繋がっている情報を正確に読み取るため、上記のようにプロンプト内に明示的に弁→弁というパターンがあることを追記しました。
(※プロンプト内ではバルブと記載)
その結果、弁→弁という複雑なパターンでも流れを確実に捉えることができ、この時点で精度は70%程度まで上昇させることができました。
対策3 参考情報として記号表をプロンプトに添付する
名称と図面中の記号が一緒に含まれている記号表をプロンプトに添付すれば、生成AIが参考情報として利用するのではないか (仮説3)
変更箇所
表に書かれているすべての設備について、どのように接続されているかの繋がりを### jsonフォーマットを参考にまとめてください。
〜中略〜
なお、「記号表.pdf」には各設備の間に繋がれているバルブに関する情報がまとまっています。
設備の間のバルブがどのような種類のものかは記号表を参考にしてください。
表に記載されている設備の情報をもとに配管図を読み取るようにプロンプトを修正し、さらに記号表も組み込みました。
その結果、図面中の記号と合致する設備の名称を一定の精度で読み取ることができました。
それでもかなり文字が小さい設備の名前などは読み取れないこともありましたが、「名前が分からないものは空欄で良い」とプロンプトに入れたことによって、ハルシネーション(注1)を大きく防ぐことができました。
※注1: ハルシネーション:生成AIが実際には存在しない情報や事実に基づかない内容を誤って生成してしまう現象
検証ステップ④ プロンプト改善の結果評価
最後に、検証項目ごとに評価をまとめます。
検証項目1. 配管図の主要な部分(槽やホッパーなど)の接続を検知できる
初期検証の段階である程度読み取れていましたが、生成AI特有の揺らぎもありました。これに対してプロンプト内に読み取り方を明確に組み込むことで、安定して読み取り精度約80%を実現できました。
検証項目2. 複雑な弁の情報や設備の名称を正確に検知できる
最後まで頭を悩ませた部分でしたが、複雑な弁の情報や設備の名称を読み取れるよう、記号表を添付したり、弁~弁という特定のパターンを明示的にプロンプトに書き込むことで精度約60%を実現できました。
検証項目3. 読み取った結果を任意のJSON形式で出力できる
初期検証の段階からほとんど実現できていて、最終版のプロンプトでも狙い通りの形式で出力できました。
これらの結果は、読み取り機能への生成AI活用の可能性を見極める上で、期待以上のものでした。相談を持ち掛けてきた同僚にも見てもらったところ、目視で一つ一つ見ていかなくても、瞬時にこれだけの精度を実現できたため、図面読み取りの省力化の観点で将来性を感じてもらえたようでした。
将来的には実業務においても、図面読み取りを行う際に生成AIを活用できそうという意見をいただきました。
生成AIによる図面読み取りが実現できる可能性は見出せました。今回はクイックに進めましたが、実際に業務に適用する際にはモデル自体のチューニングを行ったり、プロンプトのカスタマイズを行うことで、更なる精度向上を図る必要があります。
まとめ
今回の検証では、生成AIを用いた配管図の読み取りという、あまり注目されていない領域にチャレンジしました。
図面ごとの差異があるのでプロンプトの微調整は必要ですが、安定した精度を保てるプロンプトを作れたことは一つの成果だと考えています。
再現性も確認できたので、今回の検証結果を実際のプロジェクトにも適用することはできそうです。
今回は製造業などで使う図面の読み取り、という具体的なテーマでの生成AI活用を試みましたが、実は他のテーマにも応用できる可能性があります。
要は「複雑なビジュアルデータを解析して、構造的な情報に変換する」という技術なので、例えば医療業界において、MRIやCTスキャンなどの医療画像を解析し、病変や異常を構造化されたデータとして抽出することで、診断のスピードと精度が向上します。これにより、医師の負担を軽減し、より迅速な治療判断が可能となるかもしれません。
今回の検証を通じて、AI技術の新たな可能性を発見することができました。この知見が、読者の皆様のプロジェクトや日々の業務に新しいインスピレーションを提供できたなら幸いです。
おわりに
この「データ利活用の道具箱」では、データ利活用を推進したり、データをもっと活用したいと奮闘している皆さんに役立つ情報をnoteで発信しています。ぜひ他の記事もご覧ください!
ウルシステムズでは「現場で使える!コンサル道具箱」でご紹介したコンテンツにまつわる知見・経験豊富なコンサルタントが多数在籍しております。ぜひお気軽にご相談ください。