🗂

ColabからVertex AI / GeminiをつかってPDFを要約する

2024/08/06に公開

Google Cloud Next Tokyo 24に参加してきました。いろんなことが聞けて良かったです。開発頑張ろうと思いました。特に進展の速い生成AI領域では、めちゃいいものが出ていてもそれを知らないなんてことがあるので、ああいうイベントに参加するのはマストだなと思いました。あと、クラウドの進化も早いので情報収集に参加はマストですね(動画が公開されてても見ないことが多いので)。

この記事では、google ColabからVertex AI => Geminiにグーグルドライブに入ったPDFを渡すってことをやってみます(ついでに画像も)。

利用環境:
python 3.10.12
vertexai 1.60.0

ColabでVertex AIを使う

npaka さんのこの記事を参考にさせていただきました。

https://note.com/npaka/n/nca618fd69536

詳細はnpakaさんの記事をご参考ください。簡単にどうするかは次の通りです。

  1. Google Cloud のコンソールにアクセス
  2. サービスアカウントを新たに作成する(ロール Vertex AI 管理者)
  3. サービスアカウントキーを作成し、それを使う。

設定のコードは次のような感じです。

import os
import vertexai
from vertexai.generative_models import GenerativeModel, Part

json_path = 'sample.json'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = json_path
vertexai.init()

はい。環境設定が出来ました。ちょっと、使えるか試してみましょう。最近めちゃ暑いので、どうやったら一日が楽しくなるかを、gemini-1.5-flash に聞いてみます。

model_name = 'gemini-1.5-flash'
model = GenerativeModel(model_name=model_name)
res = model.generate_content(
    '気候変動で凄く暑い夏の一日を過ごしています。其の一日をどう過ごすと楽しいでしょう?とびっきりのアイデアを3つ作ってください。'
)

出てきたアイデアは次のような感じでした。思った以上にリア充やな・・・。うらやましい。

print(res.text)
## とびっきりの夏の一日、暑さなんて吹っ飛ぶ!

猛暑の一日を楽しく過ごすアイデア、3つご紹介します!

**1. 水上アクティビティで涼をとって冒険!**

* **川下り・SUPヨガで自然と一体に!:**  清流を下るスリル満点の川下りや、水面でヨガを楽しむSUPヨガは、涼しい風を感じながらアクティブに過ごせる最高の体験です。
* **水上アスレチックで子供も大人も夢中!:**  水に浮かぶ遊具で思いっきり体を動かせる水上アスレチックは、子供も大人も楽しめる人気のスポットです。
* **ビーチでまったりサンセット鑑賞!:**  夕暮れ時のビーチで、穏やかな波の音を聞きながら美しいサンセットを眺める。日中の暑さも忘れさせてくれる、最高のひとときです。

**2. 都会のオアシスで涼を求めてリフレッシュ!**

* **美術館・博物館でアートに触れて心を豊かに!:**  冷房完備の美術館や博物館で、芸術作品鑑賞に没頭すれば、暑さも忘れて時間を忘れられます。
* **図書館で読書三昧!:**  静かな図書館で、涼しい空気を楽しみながら読書に集中。読書好きな人には最高の過ごし方です。
* **屋内プールで水遊び!:**  都会のオアシス、屋内プールで水遊びを満喫すれば、涼しさだけでなく、運動不足解消にも効果あり!

**3. 夜の涼しさを楽しむナイトイベント!**

* **ナイトプールで幻想的な空間を楽しむ!:**  夜はライトアップされたプールで、音楽やお酒を楽しみながら特別な時間を過ごしましょう。
* **ビアガーデンで夜風を感じながら美味しいビール!:**  開放的なビアガーデンで、美味しいビールを飲みながら仲間と語り合う。夏の夜を満喫できる定番イベントです。
* **花火大会で夏の夜空を彩る!:**  夜空に打ち上げられる花火は、暑さを忘れさせてくれる最高のエンターテイメントです。

これらのアイデアを参考に、自分にとって最高の夏の過ごし方をみつけてくださいね!

PDFを読み込んでみる

続いて、Gemini君にPDFを読んでもらいます。参考にしたのは次のドキュメントです。ちなみにいろいろとドキュメントを読んでいると、英語の方が新しい場合があったりするので、英語をチラ見しながらがよさそうに感じました。

https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/document-understanding

さて今回まとめてもらうのは、オークツリーキャピタルのハワードマークスさんのMEMO FROM HAWARD MARKSの最新号The Folly of Certaintyです。昨日、おとといの株価の下落の凄さから、ちょっと最近マークス先生がなんて言ってるか調べておこうと思った次第です。ちなみにハワードマークス先生はディストレス投資の凄い人です。

https://www.oaktreecapital.com/insights/memo/the-folly-of-certainty

このPDFをグーグルドライブに入れて、そこからGeminiに概要をまとめてもらいます。コードは次のような感じです。

with open(pdf_path, 'rb') as pdf_file:
    pdf_data = pdf_file.read()
pdf_data = Part.from_data(pdf_data,  "application/pdf")
res = model.generate_content(
    [pdf_data, 'あなたは金融のプロフェッショナルです。レポートの重要なポイントを抜き出し、マークダウン形式でまとめてください']
)

コードを解説しておくと、PDFデータを読み込み、Part の from_data に渡します。そして、PDFとプロンプトをリストに入れて、モデルに渡します。そうするとまとめてくれたものが返ってきます。(今回はこれをやる際に読もうと思って手元にあったのがこのファイルだったので要約してもらったが、その内容がこの記事の本質ではないので、そこは省略。ちなみに、このレポートは経済などを考えたい人は読んで損なしです。)

なるほど。簡単にPDFの要約も作れました。

画像も読み込んでみる

ついでにグーグルドライブに入れた画像も読み込みます。やり方は、PDFとほぼ同じで行けました。

with open(image_path, 'rb') as image_file:
    image_data = image_file.read()
img_file = Part.from_data(image_data, 'image/png')
res = model.generate_content(
    [img_file, '写真を撮っている人の目線で、画像の状況を解説してください。']
)

まとめ

以上のような感じで、Google Colab+Vertex AI+Gemini でPDFと画像を読み込み、まとめを作ってもらったり、解説してもらったりしてみました。

追記

PDFのファイルサイズはと質問いただきました。最大30MB, ページ数の上限は300ページのようです。

ドキュメントより
https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/document-understanding?hl=ja

Discussion