2023.12.18

GPT-4 Turbo with Vision と Streamlit で画像解説アプリ(&文章要約 with 音声)を作ってみた (1) 実践利用編

はじめに

こんにちは、グループ研究開発本部・AI研究室のT.I.です。さて、前回のBlogでGPT-4 Turbo with VisionのAPIの使い方を紹介しました。これらはJupyter Notebookでの実行でしたが、今回はStreamlit (https://streamlit.io/)で簡単な解説アプリを作ってみたいと思います。 Streamlitは、Pythonでデータ分析するWebアプリケーションを簡単に作って共有できるフレームワークです。 LLMを使うChatアプリやデータの可視化などさまざまなアプリを作ることができます。

欲しい機能

さて、前回の実験で分かったように、GPT-4 Turbo with Visionは画像を分析して文章を生成することができます。しかし、その性能はまだまだ不十分で正確な数値の読み取りなどは難しいです、また生成AI特有の勝手に尤もらしい内容(Hallucination)を出力するので、注意が必要です。したがって出力した文章を修正することを前提に設計します。また、プロンプトの入力も可能にしますが、定型作業するためのテンプレートも選べるようにします。入力画像については、前回に紹介したようにURLからとファイルをアップロードする両方の形式をサポートします。また、OpenAI APIを使うと音声の合成もできます。いちいちレポートを読みげるのも面倒ですよね、音声を合成して代わりに読み上げてもらいましょう。

以上の仕様を整理すると、以下のようになります。
  • プロンプトはテンプレートから選択
  • プロンプトは更に修正可能
  • 画像の入力はURLとファイルアップロードの両方をサポート
  • GPTの出力結果を追加修正が可能
  • ついでに音声合成
では、こんな感じでとりあえず動くものをミニマムに作ってみましょう。

…(以下略)できました。


名付けて Data-Oriented Linguistic Lens 略してDOLLです。

時々、間違ったり変なことを言ったりもしますが、温かい目で見守りましょう。



具体的なコードの実装については、後編に回してまずは具体的にこのアプリの使用例を紹介します。

(喋る)画像解説(+文章要約)アプリを使ってみた

このアプリの基本的な利用手順は以下のような手順になります。
  1. プロンプトをテンプレートから選択
  2. 画像ファイルをアップロード(URLも可)
  3. プロンプトを修正
  4. 原稿を生成
  5. 原稿の内容を確認・修正
  6. Previewで再度、内容の確認
  7. 結果をコピー
  8. 必要なら音声を合成
具体的な使い方は以下の動画をご覧ください。 なお、各種設定、テンプレートの変更や生成する音声の変更などは、サイドバーの設定から変更できます。プロンプトのテンプレートはテキストファイルで指定のフォルダに配置するだけですので、利用者のニーズに合わせて簡単に追加できます。動画を見ればお気づきかと思いますが、時間がかかる処理などは再生速度を編集して調整してあります。実際に生成に要した時間などは、アプリ上の表示で確認できます。生成される文章量にもよりますが、20秒前後で結果が出力されます。運次第ですが、ほとんど修正する必要がない場合なら1分もかからずにレポート用の文章ができる計算となります。



なお、以下の様に解説音声も生成できます。十分に聞き取れますが、日本語に微調整されていないので、ちょっと発音には違和感がありますね。また、漢字の読みも時々間違えているので、その点も注意が必要です。


グラフの解説その1

さて、最初のお題はこちらのグラフです。


prompt

あなたはデータサイエンティストです。添付のグラフに関して簡単な解説をしてください。

# 出力フォーマット
– グラフの解説
– まとめ
– ポイント

# 補足
– Adelieはアデリーペンギン、Chinstrapはヒゲペンギンと訳してください
– 横軸はクチバシの長さ、縦軸はクチバシの厚みです

結果

## グラフの解説

このグラフは、アデリーペンギンとヒゲペンギンのクチバシの長さと厚みの関係を示した散布図です。横軸はクチバシの長さをミリメートル単位で、縦軸はクチバシの厚みをミリメートル単位で表しています。グラフ内の青色の部分にはアデリーペンギンのデータが円形のマークで、赤色の部分にはヒゲペンギンのデータが三角形のマークでプロットされています。

## まとめ

アデリーペンギンは、クチバシの長さが比較的短い傾向にあります。一方で、ヒゲペンギンはクチバシが長い範囲に分布していることが確認できます。

## ポイント

– クチバシの長さが約40mm以下のデータポイントは、ほぼアデリーペンギンのものとされています。
– アデリーペンギンとヒゲペンギンのデータは、クチバシの長さと厚みに関してある程度の重なりがありますが、大きな傾向としては明確に異なっています。
– グラフ中央を斜めに走る境界線は、この二種類のペンギンをクチバシの特徴によって区分けするための基準を示唆しており、これを使って種別を予測することが可能です。



解説音声


グラフの解説その2

さて、次のお題はこちらのグラフです。


prompt

あなたはデータサイエンティストです。添付のグラフに関して簡単な解説をしてください。

# 出力フォーマット
– グラフの解説
– まとめ
– 各々の観測手法による系外惑星までの距離の範囲(ex. 100~1,000)をMarkdown形式の表として出力
– ポイント

結果

### グラフの解説

添付されたグラフは、様々な観測方法によって検出された系外惑星の距離を示した箱ひげ図です。縦軸には観測手法が、横軸には対数スケールで距離(単位はわかりませんが、通常は光年またはパーセクで示されます)が表示されています。箱ひげ図の「箱」の部分は第一四分位数(Q1、箱の下端)と第三四分位数(Q3、箱の上端)を、内側の線は中央値(メディアン)を示しています。ひげの部分はデータの範囲として表示されています。

### まとめ

このグラフから、様々な観測手法によって検出可能な系外惑星の距離には大きなバリエーションがあることが読み取れます。たとえば、視線速度法(Radial Velocity)やトランジット法(Transit)で検出される惑星は比較的近距離に集中しているのに対し、マイクロレンジング(Microlensing)やパルサー時間法(Pulsar Timing)ではより遠距離の惑星が検出されています。

### 各々の観測手法による系外惑星までの距離の範囲

| 方法 | 距離の範囲 |
|————————-|————-|
| 視線速度法 (Radial Velocity) | 〜10^2 |
| イメージング (Imaging) | 〜10^2 |
| 日食タイミング変動 (Eclipse Timing Variations) | 10^2 – 10^3 |
| トランジット (Transit) | 10^2-10^3 |
| アストロメトリ (Astrometry) | 10^1 – 10^2 |
| トランジットタイミング変動 (Transit Timing Variations) | ~10^3 |
| 軌道光度変動 (Orbital Brightness Modulation) | ~10^3 |
| マイクロレンジング (Microlensing) | 10^3 – 10^4 |
| パルサー時間法 (Pulsar Timing) | 10^3 |
| 脈動タイミング変動 (Pulsation Timing Variations) | NA |

### ポイント

– 観測手法によって検出可能な距離の範囲が異なります。
– 近い系外惑星を見つけるためには視線速度法(Radial Velocity)やImagingがよく使われます。
– 遠距離の惑星を検出するにはマイクロレンジングやパルサー時間法などが適しています。
– この情報は、観測方法の選択やそれぞれの手法の限界を理解するのに役立ちます。

あ、修正ミスが残ってる。。。このようにテーブルに書き出すような枠を人が書き起こすのは面倒ですが、GPTなら簡単に作ってくれます。 (Blogでは、markdownが整形されてませんが、アプリ上は正しく表示されています。)GPTは正確な数値の読み取りなどは苦手ですが、そこは人がサポートして補完することで、GPT 4 Turbo with Visionの出力をより有効に活用することができます。



解説音声


論文の要約

いろいろとグラフの解説を生成して気がついたのですが、あれ、文章要約などの面倒な定型作業もこのアプリにやらせたらいいんじゃない?と思いました。 そこで、文章入力の機能も追加、それに対応したプロンプトテンプレートを簡単に作ってみました。

例えば、このような専門的な研究内容(参考:Generation of a p16 Reporter Mouse and its Use to Characterize and Target p16high Cells In Vivo, Cell Metabolism, Cell Metabolism, 32(5), 814-828.)についても、以下のように解説してくれます。

なお、ChatGPTのよくある利用例の1つとしてpdfの要約が紹介されることが多いですが、そもそも学術論文にはアブストラクト(要約)が冒頭にあります。GPTに要約させるよりも、それを素直に読むほうが確実で正確です。英語で難しい、専門用語が分からない、といった場合に、今回紹介するようなアブストラクトを入力する方法は有効です。ただし、要約は本質的に解像度を落とすことですので、研究内容をちゃんと理解するには本文を読む必要があります。

入力文章

Cell senescence plays a key role in age-associated organ dysfunction, but the in vivo pathogenesis is largely unclear. Here, we generated a p16-CreERT2-tdTomato mouse model to analyze the in vivo characteristics of p16high cells at a single-cell level. We found tdTomato-positive p16high cells detectable in all organs, which were enriched with age. We also found that these cells failed to proliferate and had half-lives ranging from 2.6 to 4.2 months, depending on the tissue examined. Single-cell transcriptomics in the liver and kidneys revealed that p16high cells were present in various cell types, though most dominant in hepatic endothelium and in renal proximal and distal tubule epithelia, and that these cells exhibited heterogeneous senescence-associated phenotypes. Further, elimination of p16high cells ameliorated nonalcoholic steatohepatitis-related hepatic lipidosis and immune cell infiltration. Our new mouse model and single-cell analysis provide a powerful resource to enable the discovery of previously unidentified senescence functions in vivo.

prompt

あなたは、入力された論文のアブストラクトを日本語に翻訳し、その内容を解説するアプリです。
入力した英語のアブストラクトを一度日本語訳し、その後、高校生でも分かるように簡単に要約してください。
最後に論文のポイントをまとめてください。

# 出力フォーマット
– アブストラクトの日本語訳
– 要約
– 論文のポイント

結果

– アブストラクトの日本語訳
細胞性老化は、年齢に関連する臓器機能の低下において重要な役割を果たしていますが、体内での病因はほとんど明らかにされていません。ここで、私たちはp16-CreERT2-tdTomatoマウスモデルを生成し、シングルセルレベルで体内のp16high細胞の特徴を分析しました。全ての臓器でtdTomato-陽性のp16high細胞を検出し、これらの細胞は年齢と共に豊富になることを見つけました。また、これらの細胞は増殖できず、組織によっては2.6から4.2ヶ月の半減期を持っていることが分かりました。肝臓と腎臓でのシングルセルトランスクリプトミクスは、p16high細胞が様々な細胞タイプに存在しており、特に肝臓内皮細胞と腎臓近位および遠位尿細管上皮細胞で最も顕著であること、およびこれらの細胞が異質な老化関連表現型を示していることを明らかにしました。さらに、p16high細胞の除去は、非アルコール性脂肪肝炎関連の肝脂肪症と免疫細胞の浸潤を改善しました。私たちの新しいマウスモデルとシングルセル分析は、体内で以前に特定されなかった老化機能の発見を可能にする強力なリソースを提供します。

– 要約
研究者たちは、生体内でp16という遺伝子を高発現する細胞(p16high細胞)の特性を単一細胞レベルで分析できる新しいマウスモデルを作りました。彼らは、マウスの全臓器において年齢とともに増加するこれらの細胞が見つかり、それらが増殖することができず、生存期間が2.6から4.2ヶ月であることを発見しました。また、これらの細胞は肝臓や腎臓の様々な細胞タイプに存在し、老化に関連するさまざまな特性を持っていることを明らかにしました。p16high細胞を除去することで、非アルコール性脂肪肝炎に関連する肝臓の問題と免疫細胞の浸潤が改善されました。このマウスモデルと分析方法により、私たちは生体内での細胞老化の新たな機能を発見する手がかりを得ることができます。

– 論文のポイント
1. p16high細胞を体内で追跡できる新しいマウスモデルが開発された。
2. p16high細胞は全臓器に存在し、歳をとるにつれて増加し、増殖能力がないことが確認された。
3. マウスの肝臓と腎臓のp16high細胞は、シングルセル解析により、細胞タイプが多様であり、老化に関連する様々な表現型を持つことが判明した。
4. p16high細胞の除去は肝臓の健康を改善する可能性があることが示された。

ざっとみたところ大きな問題はなさそうだったので、出力結果をそのまま使いました。GPTは文章をざっくりふんわり言い換えるのは便利ですね。この種の要約のポイントは対象のレベルを具体的に指定することです。長い文章が生成されるかと期待して、max tokensを増やしてみましたが、そこまで必要なかったですね。



解説音声


イラストの解説

更に、データサイエンティストの業務だけではなく、プロンプトを差し替えることで、グラフの解説に限らずに様々なことに応用できそうです。 試しに、イラストの解説をしてもらってみましょう。

お題はこちらの前回のBlogで作ったイメージ図です。


prompt

あなたはイラストレーターです。
このイラストに対して美術的なポイントを簡単に解説してください。
解説は非専門家でもわかりやすいようにお願いします。
解説の後に重要な事項についてポイントを提示してください。

# 出力形式
– イラストの解説
– イラストの表現のポイント

結果

– イラストの解説
このイラストは、機械的な要素を持つキャラクターを描いています。その目は人間のような感情を表現しているかのように見えますが、赤いサイバネティックな目と多くのメカニカルなデテールは彼らが人造的な存在であることを強調しています。ヘッドフォンや顔に見られる精密なスクリューやパネルは、高度な技術を想起させます。背景はボケており、キャラクターが鮮明に浮かび上がり、見る者の視線を引きつける効果を生み出しています。全体として、この作品は人間と機械が融合した独特の美しさを持って表現されています。

– イラストの表現のポイント
1. コントラスト: 人間的な要素と機械的な要素が混在していることで、キャラクターの中にある対比が視覚的な興味を引き起こします。
2. カラーパレット: 肌のようなソフトな質感と冷たい金属の質感が使い分けられ、暖かい色と寒色系の色が巧みにバランスしています。
3. ライティング: 光と影の使用は、形状やテクスチャに深みを与え、立体感を強調しています。また、目の光はキャラクターに生命を与える要素となっています。
4. ボケた背景(ボケ効果): 背景のボケにより、キャラクターが際立ち、立体的に感じられると同時に、観る者の注意を中心に集中させます。

うーん、言われるとそうかなぁという感じですが、まあ参考程度に聞いておきましょう。



解説音声


まとめ

以上で、GPT-4 Turbo with Visionを使ったアプリを作って利用してみました。Blogの前編として実際の利用例、そして後編では、Streamlitで具体的な実装を紹介しました。Streamlitは、簡単にWebアプリを作ることができるので、とても便利でした。 GPTsで同じようなことはもちろん可能ですが、ノーコードの場合、アプリの管理やバージョンコントロールなどの面で、非常に不便です。このようにコードで管理していれば簡単に複製や修正が可能です。また、APIを使うことにより入力データを学習に使われないので、安心して使うことができますね。つい先日知ったのですが、ChatGPTのSettings-Data controls-Chat history & trainingをオフにすると問答無用でMy GPTsも利用が不可能になります。

更に、ChatGPT Plusは、月額$20必要ですが、今回のようにAPIを利用した場合、gpt-4-1106-vision-preview(gpt-4-1106-preview)は、inputでは、$0.01/1K tokens, outputでは$0.03/1K tokensです(2023/12/17時点)。画像に関しても別途必要みたいですが、1080×1080 pixels で、$0.00765なので、outputのコストと比較すると少ないです。今回の実験では、1回あたり両方とも1K tokens程度だったので、$0.05ぐらいのコストでしょうか(そのチェックのためもあって使用したtokenを出力するようにしました)、ざっくりですが400回ぐらい使えば、ChatGPT Plusの月額分になります。で、それほど頻繁に使うかと言われると、週1回の報告に高々数枚のグラフの解説する程度なので、失敗した場合も考えて週10回、1ヶ月で40回ぐらい使うとして、$2ぐらいのコストになります。文章要約だけでしたら、GPT-3.5 Turbo(gpt-3.5-turbo-1106で、input $0.0010/1K tokens, output $0.0020/1K tokens)を利用するなら更に安く済ませることも可能です。Chatではなく、簡単なルールに従った出力をさせるだけのMy GPTsを作るぐらいなら、このアプリで済ませるほうがお手軽でプロンプトの切り替えも簡単ですね。

今回のアプリは、MVPとして必要最低限の機能のみに限定していましたが、もう少し使いやすく色々と改良を加えていきたいですね。そもそも利用しているAPIやmodelもpreview版な感じなので、今後のOpenAIのアップデートに対応しないといけません。

正直、グラフの解説内容に関しては、見れば直ちに分かる内容が出てくるだけで特に目新しいものではありません。ただ、それらの情報を言語化して、毎度それを解説することは、なかなか面倒です(いや本当に)。グラフの解説や報告などは、定型作業になりがちですが、GPTを使うことで、その負担を軽減できそうです。ただし、生成結果のチェックは欠かせませんし、プロンプトも曖昧さがないように注意も必要です。GPTで楽ができる作業はどんどんGPTにやらせて、人間はより重要な作業に集中できるようになるといいですね。ちなみに今回のBlogのコードの作成や記事の作成にはGitHub Copilotを利用しました。コードの開発だけではなく、Blogの文章も途中でCopilotが補完・提案してくれるのでとても楽ができます。

追記:今回のデモ動画は一発撮りで作りましたが、生成AIの性質上、同じ画像・プロンプトであっても毎回、結果が異なります。それ自体は新しい視点からの意見として面白いのですが、それをチェックして修正する作業となると何が出てくるか予想できないだけあってかなり大変でした(何回も撮り直したものもあります)。ですが、後で動画を編集するなら最初から切り貼りして作ればよかったと終わってから気がつきました。次回からはそうします。

グループ研究開発本部 AI研究開発室では、データサイエンティスト/機械学習エンジニアを募集しています。ビッグデータの解析業務などAI研究開発室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。皆さんのご応募をお待ちしています。

参考資料

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ

関連記事