😸

ChatGPT初級者向け、GPT-4Vを使ってみよう

に公開

ChatGPT初級者向け、GPT-4Vを使ってみよう

目的

最近(というか、ここ半年以上)、ChatGPTや生成AIという言葉を見ない日はなく、私自身の仕事でも使うのが日常になっています。

そうなると、それが当たり前かと思っていたのですが、先日以前の会社の友人にあったら、「聞いたことはあるけど、使っていない」とか「会社で利用がNGになっている」のような話が大半でビックリしました。

ただ、最近出ている次のような記事を見ると、そちらが標準なのかなぁと思えてきました。

https://www.itmedia.co.jp/news/articles/2310/04/news175.html

https://xtech.nikkei.com/atcl/nxt/news/18/16063/

とはいえ、じゃあChatGPTなんて使わないでいいということはなく、使う人とそうでない人で大きな格差が出てきてしまうのではないかと思っています。(孫さんも言ってますが)

そこで、GPT-4に限らず、最近使えるようになったGPT-4VやDALL-E3などを含めて、こんな風に使うといいよ!というのを、数回に分けて実例を出してお話しできたらと思っています。

GPT-4Vって何?

GPT-4というのがChatGPTの最新バージョンで、大規模言語モデル(LLM:Large Language Model)の優秀さを見せつけてくれているものです。

GPT-4Vは、それが言語だけでなく大規模マルチモーダルモデル(LMM:Large Multimodal Model)として画像をもとに、生成AIを使うことができるようになっています。
今は画像だけですが、Multimodalなので、今後は音声とか動画とかも対応していくのでしょう。
(音声は出力だけは既にあるようです)

これらのサイトで、「これができる!」ということがまとまっているので、ぜひ見てみてください。(私の記事は、これの二番煎じですねw)
https://tech.isid.co.jp/entry/explaination_gpt4v
https://weel.co.jp/media/gpt-4v

GPT-4Vで手書き文字をOCRしてもらう

実現したいこと

GPT-4Vの中でも、画像をもとにデータ化するというのは、基本的な機能の1つかと思います。
今回は、その中でも手書き文字をOCRすることを試してみようと思います。

利用するデータ

お見せするのも恥ずかしいですが、今回は私自身の手書き文字を認識してもらおうと思います。

1行目は、日本語で普段書いているレベルの(汚)文字を書きました。
2行目は、それをさらに汚くした感じです。ギリギリ読めるでしょうか。
3行目は、英語で普段書いているレベルの(汚)文字を書きました。
4行目は、それをさらに汚くした感じです。ギリギリ読めるでしょうか。

これをChatGPTのGPT-4Vを用いて、データ化が簡単にできるのかを検証していきます。

検証

できること

まずは単純に、画像を渡して「この写真から文字を読み取ってください」としてみました。そこででてきたのが、次の通りです。

おお、結構読み取ってくれています。
特に英語は完璧ですね。「How will be tomorrow?」なんて、手書きの文字崩れて"tomnorrw"みたいなスペルになってしまっているにも関わらず、ちゃんと読み取ってくれています。

日本語も、凡そ読み取れていますね。
”晴れる”の部分が、”どうなる”になっていますが、まあ意味合いはわかるし許容範囲化かと。

まだできないこと

次に、タスクリスト的なものを読み取ってもらいました。依頼文は同じで、「この写真から文字を読み取ってください」として出してもらった結果がこちらです。

全然違う!
京都、大阪、神戸ってどこの三都物語だ!?(谷村新司さんのご冥福をお祈りいたします)
そして、4番目が大分県。もはや、どう突っ込めばいいのかわからないですね。

その後、色々と「これは今日のタスクです」とか、「2行目は掃除です」とかヒントを出してみましたが、残念ながら全問正解どころか、1行も正しく予測することができませんでした。

ちなみに、以前の記事で、印刷された「排出量」という文字を読めずに「番号」と誤認していたような例もあるので、決して、私の字が汚いこと(だけ)が問題ではないはずです。

まとめ

手書き文字のOCRというのは、昔からあるテーマで、GPT-4Vが出たらぜひ試してみようと思っていました。
結果は、文章であれば普通に返してくれるが、単語レベルだと惨敗という結果でした。

文章なら上手くいくというのは、文章をしっかりと読み取ってOCRしているのではなく、「学習の結果として予測している」ためと考えられます。

もう少し詳しくいうと、正しく読み取れた文章の中で「今日はいい天気ですね」というのがありましたが、「今日は」という文字があると、次にどういう候補が来るのが文章として一般的化を学習した結果から考え、その中で最も適切なものを返してくれているという仕組みです。

そのために、「明日はどうなるでしょうか?」のような正しく文字を読み取れていないのに、文意としては間違っていないものが出力されたと想定されます。

一方で、今日のタスクリストは、単語の羅列で前後の文脈があるわけではないので、予測することが非常に難しいんですね。
ですので、予測ができなかったのではないかと考えられます。

この辺り、まだまだ生成AIの得手不得手がある部分かなと思いますので、それらを理解した上で使いこなすことが必要になってきますね。

GPT-4Vにプログラミングをしてもらう

実現したいこと

元々、GPT-4では(3.5でも)要望に合わせて、プログラム作成をすることができるというのが、多くの利用シーンとして言われてきました。
さらに、Advanced Data Analysisの機能を使えば、CSVを読み込んで必要な集計を実施してくれるということも可能でした。

私の業務の1つであるSQLやPythonでの集計とかも簡単に実装してくれちゃって、結構自分の仕事の感じたものです。

であれば、GPT-4Vと組み合わせるともっと面白いことができるのではということで、画像の表データをもとに、SQLを用いた集計ができるのかを検証します。

利用するデータ

出典:https://www.city.chiba.jp/sogoseisaku/sogoseisaku/kikaku/tokei/jinkou.html

これをChatGPTのGPT-4Vを用いて、プログラム作成・さらに集計ができるのかを検証していきます。

検証

SQLを作成してみる

画像を渡して「表は千葉市の市・区ごとの推計人口です。千葉市を除いた、区ごとの人口について、総数と男・女のそれぞれの平均値を求めるための、SQLを作成、実際に算出してください。」としてみました。そこででてきたのが、次の通りです。

テーブル名や、変数名を定義した上で、千葉市を除いて、平均値を出すSQLを作成してくれています。
おお、完璧と思ったのですが、実はこれって画像なくても出せちゃいますね。

最後に、「具体的な数字については、このSQLを実際のデータベース環境で実行する必要があります。」と言われてしまいました。算出はできないのでしょうか。。。

平均値を出してみる

改めて「ありがとうございます。上記のテーブルデータをもとに、千葉市を除いた、区ごとの人口について、総数と男・女のそれぞれの平均値を求めるための、SQLを作成し、実際に算出してください。」と指示を出してみると、しっかりと計算してくれました。

が、平均値を出すときには、四則演算をしだした(苦笑)

SQLで

まとめ

ちゃんとChatGPT内でプログラムを実行してやろうとすると、
⓵数表の画像を渡して、データ化してもらう。

※ここの市・区の名前が、東京23区になってしまっていますね。やはり、どうしても日本語の認識は難しいようですね。

このデータをテキストエディタに貼り付けて、test.txtとして保存しておきます。

⓶このデータを、Advanced Data Analysisモードにした、GPT-4にアップロードして、「このTSVデータをもとに、区ごとの人口について、総数と男・女のそれぞれの平均値を求めるための、SQLを作成し、実際に算出してください。」と指示します。

おお、ちゃんと結果が出ていますね。

ちなみに、生成してくれたプログラムは次の通りです。
Pythonの環境内で、SQLiteのデータベースを用いて集計してくれていますね。

import sqlite3

# Connect to an in-memory SQLite database
conn = sqlite3.connect(":memory:")
cur = conn.cursor()

# Create a table
cur.execute("""
CREATE TABLE population (
    district TEXT,
    total INTEGER,
    male INTEGER,
    female INTEGER,
    monthly_change INTEGER,
    yearly_change INTEGER,
    households INTEGER
)
""")

# Insert data into the table
for line in lines[1:]:  # Skip the header
    data = line.strip().split("\t")
    cur.execute("INSERT INTO population VALUES (?, ?, ?, ?, ?, ?, ?)", data)

# Commit the changes
conn.commit()

GPT-4Vでどこまで正確なプロンプトが作成できるのか実験

実現したいこと

画像生成のDALL・E3とGPT-4Vを組み合わせて、同じ画像をどの程度再現できるのかを検証してみます。
これができると、同じ画像を改変していくことで、動きを持たせたりシリーズ化したりと、活用の幅が広がりそうです。

そこで、今回は実験として、画像とプロンプトを今後に生成しながら、どの程度までいくと元の情報が欠落していくのかを検証します。

実験結果

まず、「犬と猫が遊んでいる画像。日本のアニメーションっぽく。」という日本語で、DALL・E3にイメージをつくってもらいました。

これを、GPT-4Vで、「Please make a prompt to create this image.」と、プロンプトを作成してもらいます。

"""
Illustration of a playful dog chasing a cat with large expressive eyes, reminiscent of a scene from a Japanese anime. They are in a park with a pond and koi fish swimming.
"""

再度、このプロンプトをDALL・E3で流します。4つイメージが出ますが、そのうち最も近いイメージかは私の方で判断してみます。

ちょっと、犬猫が占める比率が小さくなりましたが、まだまだ情報は残っていますね。
とはいえ、最初の日本のアニメーションっぽさがちょっと抜けていますね。最初のものと同じ絵柄とは言いづらい感じです。

それを、改めて、GPT-4Vでプロンプト化。

"""
Create a vibrant and detailed illustration set in a serene Japanese garden. The background should feature lush greenery, a traditional wooden pagoda, and a stone bridge arching over a tranquil pond filled with lively orange koi fish. In the forefront, illustrate a cheerful dog with big expressive eyes, floppy ears, and a joyful demeanor, playfully sticking out its tongue. Beside the dog, depict a cute kitten with multicolored fur, oversized bright yellow eyes, and a playful yet curious expression. The dog and the kitten should appear as if they are excitedly exploring the garden, capturing a moment of innocent wonder and adventure
"""

大分、プロンプトが長くなりました。

これでDALL・E3で画像を作成すると。

犬が子犬に、猫が見切れてきました。(ほかの画像だと、猫がいないケースも)

そのプロンプトは次の通り。

"""
Create a vibrant and detailed illustration that captures the essence of a serene Japanese garden. The setting should be surrounded by lush greenery with varying shades of trees and bushes, forming a backdrop of a cascading waterfall. A traditional Japanese pagoda stands majestically to the left, surrounded by vividly colored flowers like cherry blossoms and chrysanthemums.

In the center foreground, construct a wooden arched bridge over a crystal-clear pond filled with orange koi fish playfully swimming around. The water should have a hint of reflection of the surrounding nature.

On the right side, feature a cheerful and animated puppy with large, expressive eyes and a wagging tongue. The puppy is accompanied by an adorable kitten with striking eyes, looking curiously at its surroundings. Both the puppy and kitten should emanate a sense of joy and wonder.

The overall tone of the illustration should be whimsical, colorful, and inviting, making viewers wish they could step into this picturesque world.
"""

長い。。。

そして、画像化すると。
ついに、猫がいなくなってしまいました。プロンプトには、「Both the puppy and kitten should emanate a sense of joy and wonder.」とあるので、猫が書かれているんですけどね。

犬も急にピレネー犬みたいな、真っ白な感じの子になりましたね。

プロンプトを改めてみると、背景の情報が多いんですよね。
もしかしたら、その情報を減らして、より犬猫の情報を詳しく聞くといいのかもしれませんね。

GPT-4Vにテーブルデータを読み取ってもらう

実現したいこと

GPT-4Vの中でも、画像をもとにデータ化するというのは、基本的な機能の1つかと思います。
今回は、その中でも数表の画像を基にデータ化するということを検証したいと思います。

利用するデータ

東京都のオープンデータのうち、八王子市の下水道使用料早見表というデータがありますが、CSVファイルではなくPDFで提供されています。(が、今回は画像として使います)

見ていただくと分かりますが、表が長いので50ごとに折り返しているんですよね。
こういうのって人間が見ると当たり前のように読めるのですが、データとして扱おうとするとコピーしたりとかも大変ですよね。

これをChatGPTのGPT-4Vを用いて、データ化が簡単にできるのかを検証していきます。

検証

初期レベル

まずは単純に、画像を渡して「添付画像の表から、CSVファイルを作成してください」としてみました。そこででてきたのが、次の通りです。

画像を読み取っているためか、処理時間は通常のChatGPTとの会話よりは時間がかかりますが、自動で動いているのでひとまず目をつむりましょう。

見た感じ数値に誤りはなさそうで、しっかりと出力してくれています。

一方で、課題もあります。ざっと今回ので私の理想と異なったのは次の4点です。

  • CSV化なので、データとして欲しかった
  • 表が長いと省略されてしまう(場合によっては途中で、エラーになることも)
  • 日本語のヘッダーが「排出量」が「番号」になっているなど、正しく出せていない
  • CSV形式で出してくれているので、列の区切りと数値のカンマが混同する

依頼の仕方を工夫をしてみよう

では、課題があるからChatGPTや生成AIが使えないのかというとそうではないです。これは私の依頼の仕方が悪いんです。

自分が、これを誰かにやってもらおうとすると最低限、部下の能力に合わせて次くらいの説明は必要ですよね。

添付画像の表から、CSVファイルを作成してください
区切り文字は、カンマではなくタブにしてください
表が長いので、まずは頭から50行をだしてください

さらに、続きを求めれば、同じ元の画像データから作ってくれます。

続いて、51行目から100行目をお願いします

(出力結果は省略)

列数にもよりますが、50~100行くらいで試してみて、今回の表だとできる範囲を見極めた上で依頼するとよいでしょう。
今回のデータはシンプルだったので、100行でも問題なく出せました。

それでもできなかったこと

CSV化なので、データとして欲しかった

これは明確にできませんと言われてしまいました。テキストでコピーして、CSV化を手動でするという作業は必要になりそうです。

CSVファイルとして生成することは直接的にはできませんが、完全なCSV形式のデータを生成し、提示することはできます。

日本語のヘッダーが「排出量」が「番号」になっているなど、正しく出せていない

ここは、現状のGPT-4Vの課題かなと思っています。
モデルの特徴上、文章を読み解くことはできるのですが、単品で出ている単語を正しく出すことは、まだまだ苦手なようです。(英語や数値はできるので、やはりこれは学習対象の差かと)

まとめ

表の画像を、CSVデータ化するという単純かつ面倒なタスクでしたが、GPT-4Vはしっかりとやり遂げてくれました。

まだまだ課題は多いですが、これだけでも十分価値があるように感じます。
とはいえ、別の事例だと読み取った数値が間違っていた(桁が多いと間違う?)こともあったようなので、そこは要注意ですね。

GPT-4Vで画像を深く分析してみる

実現したいこと

GPT-4Vの画像分析として、ポインティングという技術が紹介されています。
画像中に「ここ」と指すと、しっかりと認識して説明してくれる技術のようなのですが、実際に試してみたいと思います。

利用するデータ

ここでは、事前に用意された画像ではなく、私が撮影した画像で検証してみます。
これは、先日参加したAI・人工知能EXPOの写真です。

AI・人工知能EXPO

これは、ポインティングがない状態ですが、これをGPT-4Vで「これはなんの写真でしょうか?日本語で回答してください。」とすると、次のようなアウトプットがでます。

この写真は、屋内の展示会または商業見本市の様子を捉えたものです。天井が高く、多数のブースや展示スペースが設置されており、各々の企業や団体が製品やサービスを紹介している様子が見受けられます。ブースの一部には「AI」という文字が見えるため、おそらく人工知能に関連する技術展示会の可能性が高いです。また、「デジタルトランスフォーメーションEXPO」というバナーも見えるため、デジタル変革に焦点を当てたイベントの可能性もあります。

「AI」という文字から、「人工知能に関連する技術展示会の可能性が高い」と、かなり確からしい回答をしてくれています。
「デジタルトランスフォーメーションEXPO」というのは、「デジタル人材育成支援EXPO」の部分を間違って読み取っているようですね。やはり、日本語の読み取りはまだまだですね。惜しい。

検証

さて、ここからがメインです。
写真に、矢印を入れてポインティングをしたのが次のものです。かなりのフリーハンドですが、①・②・③とそれぞれの矢印を入れました。

AI・人工知能EXPO

かなり適当な感じですが、これでいけるのでしょうか。

ポイント①

まず、①は「日本テレビ」のロゴですが、わかるのでしょうか?

うーん、残念。あまり、具体的な説明にはなっていないですね。
たしかに、展示ブースですが、それ以上は全く当たり障りのない内容でした。

改めて、①がロゴだとして聞いてみましょう。

一応、企業名の調べ方についての案を示してくれていますが、回答はやはり微妙ですね。
そもそも、①で指している部分を理解しているのかが、これではわかりません。

ポイント②

さて、気を取り直して②にいきましょう。
こちらは、先に②の数値と聞いてしまいましょう。

おお。かなり、しっかりと②で指している場所を理解して読み取ってくれていますね。
「30,000社」とあるので、社数と入れていただけるとより良かったですが、それはポインティングとはあまり関係ないので、ひとまずおいておきましょう。

とりあえず、フリーハンドで適当に書いた②と矢印で指している部分を、しっかりと理解して読み取ってくれていることがわかりました。

ポイント③

偶然じゃないことを確かめるためにも、もう1つ③を見てみましょう。
こちらも、③の文章として聞いてみましょう。

これは、すごい。しっかりと文章を画像からテキストに起こしてくれています。
別で検証した通り、日本語の読み取りは苦手ですが、英語での読み取りはかなり精度が高いですね。

しかも、「展示会でこのような問いを提示することは、訪問者の興味を引き、ディスカッションを誘発するための方法として一般的です。」といった解説までつけてくれています。

これを更に応用して、
「写真③の指す文章をもとに、よりAIの専門的な知識がない人でも興味を引くような文章の候補を考えてください。」といった、画像読み取りと、新たな文章生成の指示を同時に出したとすると。

写真の「③」で指されている「Can a Machine Be Intelligent?」という問いかけは、AIに関する興味を引くために用いられていますが、AIの専門的な知識がない人にも理解しやすく、興味を持ってもらうためには、もっと親しみやすく、日常生活に即した表現を用いることが効果的です。以下にいくつかの文章候補を提案します:

「あなたのスマートフォンは、あなたの次の一手を予測できるでしょうか?」
「ロボットはペットのように私たちの心を癒せるか?」
「未来のAIは、あなたのお気に入りのレシピを考え出せるかな?」
「機械にも"直感"はある?AIが判断を下す仕組みをのぞいてみよう!」
「音楽から絵画まで: AIはクリエイティブな才能を持つことができるのでしょうか?」
これらの文章は、AI技術がどのように日常生活に役立っているか、また将来的にどのような可能性を秘めているかに焦点を当てており、より幅広い聴衆に訴えかけることができるでしょう。

といった感じで、元の画像での内容と、こちらの指示の意図を踏まえつつ、いい感じの候補を出すところまでやってくれました。

まとめ

最後の方は、ポインティングの検証というよりも、GPT-4Vの機能の凄さを見せられただけでしたが、本当に的確な内容をアウトプットしてくれました。

改めて、今回検証した「ポインティング」という技術ですが、画像上にフリーハンドでも数値や矢印を入れると、それが指したものを把握し、適切なアウトプットにつなげることができました。

画像だけで考えると、元の写真に赤の要素が追加されただけなのですが、それを矢印や数値だと理解して、解釈してくれているのが、なぜなのか。
なかなかその裏付けの技術には理解が及ばないですが、凄さは実感しました。

これができると、例えば建物の画像を見せて、全体では異常が見つからなかったときに、人が「じゃあ、ここはどう?」とか気になる部分を示すと、より深掘りして分析してくれるみたいな。人とAIが協業するのにピッタリの形なのではないか、とか想像してみたりしました。

Discussion