📝

【GPTIndex】パワポを読み込んだChatbotを作ろう!

2023/02/04に公開1

概要

今回は、GPTIndexを活用してパワーポイントの画像を読み込ませ、スライドの内容に関する応対が可能なChatbotを作ります。以下のような場面で役立つかも?

  • スライドが長すぎて内容を読むのが面倒くさい時
  • スライドを要約したり、整理したりする必要がある時

今回の全コードはこちら:
https://github.com/ryo1443/GPTIndex_powerpoint_sample

読み込ませるスライド

ネット上にはパワーポイントファイルが中々落ちていないので、ChatGPTを活用して自作しました。メタバースに関する適当なまとめです。ファイルが欲しい方はgithubから落としてください。
https://github.com/ryo1443/GPTIndex_powerpoint_sample

1P
1p
2P
2p
3P
3p
4P
4p

今回作れるもの

例えば以下のような質問を投げかけた時、

各スライドページの概要を一言で教えて下さい

以下のようなアウトプットが出ます。

Slide #0: メタバースとは? - 仮想世界を指すインターネット上の共通の仮想空間

Slide #1: メタバースとは? - 仮想世界内での相互作用を可能にするプラットフォーム

Slide #2: メタバースの未来は? - 仮想現実技術の普及により、仮想世界でのビジネス、エンターテイメント、教育などが可能になる

Slide #3: メタバースのビジネス利用は? - マーケティング、Eコマース、教育・トレーニング、リモートワークな

(出力のtoken数の関係で最後が途切れてしまっていますが、、)何となくそれっぽい応対をしてくれますね!最高です。
早速作っていきましょう!

参考文献

GPTIndexのドキュメント:
https://gpt-index.readthedocs.io/en/latest/index.html

GPTIndexの公式Twitter(pptxに関して):
https://twitter.com/gpt_index/status/1616831334982504448

準備

まず、必要なパッケージをインストール&インポートします。
gpt-indexとopenai以外に、pptxファイルを読み込むためのpython-pptxが必要になるので注意
また、GPT3.5を使うので環境変数にAPI Keyを入れましょう!

!pip install gpt_index
!pip install python-pptx
!pip install openai
from gpt_index.readers.file.slides_parser import PptxParser
import os
import openai

os.environ["OPENAI_API_KEY"] = "<your api key>"	

パワポの読み込み

pptxファイルを読み込みます。

parser = PptxParser()
parser.init_parser()
result = parser.parse_file("メタバースとは?.pptx")

どのようにパワポを読み込んでくれるかですが、以下のような文字列として読み込んでくれます。

Slide #0: 

 Image: a blurry photo of a night scene with lights

メタバースとは?

Slide #1: 
メタバースとは?
Metaverseは、虚拟世界を指します。これは、仮想現実、オンラインゲーム、3Dインタラクティブな環境などを含む、インターネット上での共通の仮想空間です。Metaverseは、ユーザーが仮想空間内で相互作用し、仮想世界での生活を楽しむことができます。
Metaverseの例としては、Second LifeやBlue Mars、Entropia Universeなどがあります。これらは、ユーザーが自分の仮想アバターを使って、仮想世界でコミュニケーションを取り、ビジネスを行ったり、エンターテイメントを楽しんだりすることができるプラットフォームです。また、最近では、仮想現実技術を使ったMetaverseプラットフォームも登場しています。例えば、RobloxやMinecraft Earthなどがこれに該当します。

Slide #2: 
メタバースの未来は?
Metaverseはますます重要な役割を果たすことが予想されています。今後は、ビジネス、エンターテイメント、教育など多様な分野で利用される可能性があります。仮想現実技術の普及により、仮想空間内でのリアルな体験が可能になり、より多くの人々がMetaverseを利用することが予想されます。また、多くの企業や政府が、Metaverseを採用することで、より効率的なコミュニケーションや協力を実現することが期待されます。Metaverseは、将来的にはグローバルな仮想社会を形成する可能性もあります。

Slide #3: 
メタバースのビジネス利用は?

Metaverseは、多様なビジネスにおいて利用される可能性があります。以下は、Metaverseを利用する一部のビジネス用途の例です:
マーケティング: Metaverseを利用することで、企業は自社のブランドを仮想世界で再現し、顧客とのインタラクションを深めることができます。
Eコマース: Metaverse内での販売や購入が可能になり、新たなビジネスチャンスが生まれます。
教育・トレーニング: Metaverseを利用することで、遠隔地からのライブイベントやトレーニングなどが実現できます。
リモートワーク: Metaverseを利用することで、リモートワークなどを行う際により効率的なコミュニケーションが可能になります。
これらはMetaverseを利用するビジネス用途の一部であり、将来的には新たな利用シーンが生まれることが期待されます。

これは、各スライド内の文字列と、背景画像の概要ですね。
背景画像の概要についてはImage:という注釈と共に文字列にしてくれるみたいです。

パワポのテキストをGPTIndexに読み込ませる

先ほど文字起こししたパワポのテキストをGPTIndexに読み込ませましょう!
以下のコードを実行します。

from gpt_index import Document
from gpt_index import GPTSimpleVectorIndex

documents = [Document(result)]
index = GPTSimpleVectorIndex(documents)

GPTIndexのSimpleVectorIndexで文書を読み込んで(Embbedingして)くれますが、Documentタイプで渡すことに注意。
また、documentsはイテラブルである必要があるので、リスト形式で渡しましょう。

クエリを実行する

必要な準備は整ったので、クエリを実行しましょう!

response = index.query("各スライドページの概要と、その内容を一言で教えて下さい")
print(response)

出力

Slide #0: メタバースとは? - 仮想世界を指すインターネット上の共通の仮想空間

Slide #1: メタバースとは? - 仮想世界内での相互作用を可能にするプラットフォーム

Slide #2: メタバースの未来は? - 仮想現実技術の普及により、仮想世界でのビジネス、エンターテイメント、教育などが可能になる

Slide #3: メタバースのビジネス利用は? - マーケティング、Eコマース、教育・トレーニング、リモートワークな

素晴らしいですね、今回は4Pしかないスライドを投げましたが、もっと長いスライドだと有用性は増しそうです。
もちろん各ページに関する質問を投げかけることも可能です。

query:3ページ目の内容を5歳児に分かるように説明して
answer:Metaverseは、仮想の世界です。仮想の世界では、仮想の人形を使って、他の人と遊んだり、仮想の世界で仕事をしたり、楽しいことをしたりすることができます。また、仮想の世界では、仮想の世界で仕事をしたり、他の人と遊んだり、楽しいことをしたりすることができます。

おまけ

Chatbotを作ると言うことで、ずんだもんverで今回のスライドの質疑をして貰いましょう。
ただ語尾や性格に関する指定をプロンプトに入れこんであげるだけです。

prefix = """
あなたはずんだもんです。
語尾に「なのだ」と付けて質問の回答をして下さい。

質問:
"""

saffix = "\n回答:"

query = "3ページ目の内容を5歳児に分かるように説明して"

response = index.query(prefix + query + saffix)
print(response)

出力

Metaverseを利用することで、仮想の世界で遊ぶことができるのだ。

おわりに

パワポの質疑応答してくれるChatbotすらこんなに簡単に作れてしまいます!
これがあればプレゼンの質疑応答が苦手な方も機械に代替させられるかも...!

Discussion

高松 真(Makoto Takamatsu)高松 真(Makoto Takamatsu)

大変素晴らしい内容でした!!
GPT-indexから、llama-indexに名前が変わった際に、若干の変更がありましたので共有します。

具体例としては、
from gpt_index.readers.file.slides_parser import PptxParser
parser = PptxParser()
parser.init_parser()
result = parser.parse_file("メタバースとは?.pptx")

このコードは、llama-indexでは読み込めません。
from llama_index.readers.file.slides_reader import PptxReader
parser = PptxReader()
result =parser.load_data(file=Path("メタバースとは?.pptx"))

複数の変更がありますので、ご確認いただけますと幸いです。
https://github.com/jerryjliu/llama_index/blob/52b756bfec28471fc4f1f62659801fe7566cf6b0/llama_index/readers/file/slides_reader.py