👀

GPT4-Vision-APIのあれこれ

2023/12/10に公開

なにを話すか

はじめまして、清水れみおと申します。
この記事はLLM Advent Calendar 2023の12月10日のアドベントカレンダー記事となります。

今回はOpenAIのGPT4-Vision-APIについて自分が感じた内容を書いていきます。
OpenAIのDevDayの当日(2023年11月7日)にStreamlitでデモを作ったり
次の日にZennで記事を書いたりと、日本の中ではGPT4-Vision-APIについて割りと詳しい側の部類なのかと思ってます。
その中でこれ面白いのでは?という内容を2点書かせて頂きます。


動画+音声じゃないと理解できないマルチモーダルAIの凄さ

以下のシュールなお笑い動画をLLMはお笑いポイントを認識できるのか
これはAIの進化の1ページかもしれません・・・

https://www.youtube.com/watch?v=JPY62bzT-rc

Whisperだけ

繰り返しのやりとりをしているところが面白いというちょっと主としている部分とは違う認識

GPT4-Visionだけ

※勝手になんか画像生成している

何が起きているのかはもっと情報がないと理解できない

Whisper+GPT4-Vision(本来はそれぞれのタイムスタンプを同期させるべき)

このシュールなお笑いを確実に理解している

音声だけでも、画面だけでも理解できないが
両方を同時にGPT4に与えるとそれを理解できる

マルチモーダルはすごい!!

リアルタイムだと勝手に現実という時間の流れがそれぞれの情報について
タイムスタンプを同期させるので、あまり情報を同期させるということが重要視されていませんが

過去についてはタイムスタンプなどで情報同期させないとマルチモーダルLLMは理解できない

逆にタイムスタンプを同期させるということを前提知識に踏まえておけば人間と同じ用に過去の事象も複数の情報や視点から理解できることがわかりました。

個人的にはこれは人間に1歩近づいたと言えると勝手に思っています


GPT4-Visionのプロンプトによる結果の違い

以下のスイカゲームの公式サイトの動画をVisionAPIを使って説明させます。
https://www.aladdinx.jp/pages/suika-game

VisionAPIのプロンプトの違いでどのように出力が変わっていくのかを調べました。

プロンプト①

普通にVisionとして説明させます。

prompt="どのような状態なのかを理解し特徴などを日本語で説明してください。"

プロンプト①の結果

これはパズルゲームのスクリーンショットで、フルーツを題材としたカラフルなデザインが特徴です。画面の中央にはガラスの容器があり、その中にさまざまな表情を持つフルーツのキャラクターが充填されています。プレイヤーの目的は、同じ種類のフルーツをタッチして連結させ、点数を獲得しながら容器の中を整理していくことでしょう。

フルーツのキャラクターにはレモン、ライム、イチゴ、スイカなどが描かれており、ポップで愛らしい表情をしています。右上には次に現れるフルーツが表示されており、左下にはスコアとベストスコア、どのフリック操作(水平か垂直か)が可能かを示すアイコンがあります。また、現在の進行状況に合わせてステージレベルも表示され、プレイの進行と共にレベルが上がる様子が伺えます。

プレイヤーは戦略的にフルーツを組み合わせて、高得点を目指したり、ゲームオーバーにならないようにスペースを上手く管理したりする必要があるでしょう。このようなゲームは反応速度だけでなく、パズル解決能力も養うことができるため、子供から大人まで幅広い年齢層に楽しめる内容となっています。

ある程度は理解してますが、スイカゲームというものを知らない人の見解のように見えます。

プロンプト②

スイカゲームのWikipediaの情報をプロンプトに追加して、ゲームという前提知識も一緒にいれます。
https://ja.wikipedia.org/wiki/スイカゲーム

prompt='''
以下はこのゲームについての説明が記載された文章です。
下記内容を踏まえて、このゲームについて詳しく日本語で説明してください。

<ゲーム説明>
ゲームシステム
プレイヤーは、任意のタイミングでフルーツを1つずつ落とし積み上げていく。フルーツは物理演算によって転がり、同じ種類のフルーツ同士が触れると接触位置を起点に一段階大きなフルーツに変化する。これを繰り返してフルーツを大きくしていき、点数が最も高いスイカを作ることを目指す。積み上げたフルーツが箱から溢れるとゲームオーバーになる[4][3]。他の落ちものパズルとは異なり制限時間は存在しないが、一方でプレイヤーはフルーツを落とす位置を慎重に考えなければならない[4]。ゲームメディアPolygonは「テトリスと2048を混ぜたようなもの」と形容している[5]。

『合成大西瓜』のフルーツの変化順は、「ブドウ→サクランボ→ミカン→レモン→キウイ→トマト→桃→パイナップル→ココナッツ→スイカ→大スイカで、大スイカを完成させるとファンファーレが鳴る。落下フルーツは、レモン以下の4種類からランダムで選ばれる。一方、Nintendo Switch版『スイカゲーム』のフルーツの変化順は、「サクランボ→イチゴ→ブドウ→デコポン→柿→リンゴ→梨→桃→パイナップル→メロン→スイカ」で、スイカ同士をくっつけると消滅する。落下するフルーツは、「サクランボ、イチゴ、ブドウ、デコポン、柿」の5種類からランダムで選ばれる。

点数はフルーツを落としただけでは増加せず、フルーツ同士をくっつけてより大きなフルーツに変化させないと増加しない。

Aladdin Xはプロジェクター製品用とNintendo Switch用の2種類の『スイカゲーム』を提供しているが、Switch版ではフルーツの重さ、加点方法、スイカ同士が接触した際の仕様が異なる[6]。GAME Watch、Polygonは、Switch版ではスコア3000点を超すことが1つの目標であると述べている[7][5]。
'''

プロンプト②の結果

このゲームは、フルーツを落として積み上げ、同じ種類のフルーツが触れ合うと合成されて大きなフルーツに変化するパズルゲームです。物理演算に基づいた動きでフルーツが箱の中で転がります。目的は最も高得点のスイカを作り出すことですが、積み上げたフルーツが箱から溢れるとゲームオーバーとなります。制限時間はなく、戦略的にフルーツを落とす位置を考えながらプレイします。

フルーツの変化順はゲームによって異なり、例えば『合成大西瓜』では「ブドウ→サクランボ→ミカン→レモン→キウイ…」と続き、大スイカを完成させるとファンファーレが鳴ります。落下するフルーツはレモン以下の種類からランダムに選ばれます。別のバージョンであるNintendo Switch版『スイカゲーム』ではフルーツの変化順や落下するフルーツの種類が異なります。

点数は単純にフルーツを落としただけでは増えず、フルーツ同士を合成して大きくすることでのみ増加します。Aladdin Xはプロジェクター製品用とNintendo Switch用の2種類の『スイカゲーム』を提供し、Switch版ではフルーツの重さ、加点方法、スイカ同士が接触した際の仕様が異なります。また、スコア3000点を超えることが1つの目標とされています。

wikiの内容に少し引っ張られていますが、ゲームの動作を具体的に説明しています。

このように、プロンプトの内容によって、GPT-4 Visionが生成する説明は異なります。
プロンプト①では、画像の視覚的な特徴に基づいてゲームの概要を説明しました。
一方、プロンプト②では、提供されたゲームの説明文を基に、より詳細なゲームのメカニクスと戦略について説明しました。

ふとロールをつけたらどんな感じになるのか気になったので試してみた

プロンプト③

prompt='''
#役割
あなたはゲーム開発者です。

#条件
回答は日本語で出力すること

#目的
この動画のゲームがどのようなゲームか、ゲーム開発者の目線で説明してください。
また、どの点が優れているかも説明してください。

'''

プロンプト③の結果

こちらの動画に映っているゲームは、パズルゲームの一種で、カラフルなフルーツキャラクターをそれぞれ同じ種類同士で組み合わせて消していくタイプのゲームのようです。プレイヤーは画面の中央に配置されたガラス容器に、タイミングよくフルーツを落としていきます。容器の外周を回る次のフルーツの列から選択し、容器内のフルーツと同種類で隣接するように落とすことで、フルーツたちを消すことができる仕組みになっているようです。

各フルーツキャラクターは、表情を持っており、とてもキュートなデザインです。プレイ中にはフルーツが成長する様子や、消滅する際のアニメーションがあり、それがゲームの魅力を高めています。また、スコアやベストスコアの表示、連鎖を起こした際の特別効果なども見受けられます。

このゲームの優れている点としては、シンプルながら奥深いゲーム性、視覚的に魅力的なフルーツキャラクターのデザイン、直感的な操作性、そしてプレイヤーが直面する「どのフルーツをどのタイミングで落とすか」という戦略的な判断を要求される点が挙げられます。ゲームの色使いや音楽が、穏やかでポジティブな雰囲気を演出しており、幅広い年齢層のプレイヤーに楽しんでもらえそうな内容になっています。

プロンプト①とあまり変わらない結果となりました。
visionは役割をもたせるプロンプトはあまり効果がなさそうですね。

プロンプトで観点を変えさせる

今回みたいにWikipediaの情報であったり、論文の内容などをプロンプトに入れておくと、
それを前提知識とした観点で画像や動画の説明をしてくれます。
これは色々と応用例があると思っていますので、Visionにおけるプロンプトエンジニアリングも今後発展するのではと感じています。


GPT4VisionAPIでの動画入力のやり方

過去に記事を上げたのでそちらを参照していただければ
どんな処理をしているのかと、Streamlitでサクッと試すことができます。

https://zenn.dev/olemi/articles/752d205987cb87

おしり

Discussion