[LLM]LIamaHubをLIamaIndexを使って活用してみよう

LLM

LLMとは

公開されている大量のデータ事前学習して、それを元に文章生成や質問応答を行います。

LIamaIndexとは?

公開されていない独自データを使って質問応答を行うチャットAIを作成できるオープンライブラリのことです。公開されていない情報を元に、質問に応じて回答に関連情報を検索して、それを入力プロンプトに挿入し、LLMの推論能力を利用して応答を生成します。

対象となる情報

様々なファイル形式

テキスト、PDF、ePub、Word、PowerPoint、Audioファイルなど。

Webサービス

Twitter、Slack、Discord、Wikipediaなど。

Llama Hubとは?

LIamaIndexで扱う、様々なファイル形式やWebサービスをドキュメントのデータソースとして利用できるデータコネクトサービスです。

Llama Hub
A hub of data loaders for GPT Index and LangChain

例として、今回は以下の2つの説明を行います。

  • Webページを扱った質問応答
  • Youtube動画の情報を扱った質問応答

Webページを扱った質問応答

Webページを扱った質問応答の例として、LIamaHub内で検索をかけると表示されるデータコネクタである「/ web / beautiful_soup_web」を使ってWebページへの質問応答を行います。

Llama Hub
A hub of data loaders for GPT Index and LangChain

環境構築

今回もGoogleColaboratoryを使って説明します。

  1. バージョンは色々ありますが、まずはLIamaIndexをインストールします。とりあえず最新版をインストールしてください。
!pip install llama-index

2. 次にOpenAIのAPIキーを入力して実行します。

# 環境変数の準備
import os
os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEYを入力>"

OpenAIのAPIキーの取得については下記を参照してください。

3. Pythonの標準ライブラリであるloggingを使用して、ログの出力設定を行います。

import logging
import sys

# ログレベルの設定
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True)
上記の設定を行うことで、logging.debug(), logging.info(), logging.warning(), logging.error(), logging.critical()などの関数を使用してログメッセージを出力することができます。

 4. LIamaIndexをインストールします。

!pip install llama-index

5. LIama Hubをインストールします。

!pip install llama_hub

以上でLIamaHubを使うための環境構築は完了です。

LIamaIndexを使ったドキュメントの読み込み

/ web / beautiful_soup_webをクリックして進めてみます。

https://llamahub.ai/l/web-beautiful_soup_web?from=all

「Beautiful Soup Website Loader」を参考にドキュメントの読み込みを行います。今回は本サイトである「Shion.blog」で試してみようと思います。

from llama_index import download_loader

# ドキュメントの読み込み
BeautifulSoupWebReader = download_loader("BeautifulSoupWebReader")
loader = BeautifulSoupWebReader()
documents = loader.load_data(urls=["https://shion.blog/"])
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): llamahub.ai:443
DEBUG:urllib3.connectionpool:https://llamahub.ai:443 "POST /api/analytics/downloads HTTP/1.1" 200 70
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): shion.blog:443
DEBUG:urllib3.connectionpool:https://shion.blog:443 "GET / HTTP/1.1" 200 None

インデックスの作成

続けてGPTVectorStoreIndexを使用してドキュメントのインデックスを作成します。

from llama_index import GPTVectorStoreIndex

# インデックスの作成
index = GPTVectorStoreIndex.from_documents(documents)

具体的には、from_documentsクラスメソッドを使用して、ドキュメントのリスト(documents)からGPTVectorStoreIndexオブジェクト(index)を作成しています。このGPTVectorStoreIndexオブジェクトは、GPT(Generative Pretrained Transformer)モデルを使用してドキュメントをベクトル化し、それらのベクトルを格納するインデックスを提供します。

DEBUG:llama_index.node_parser.node_utils:> Adding chunk: News report AI lands - ~文脈の応用と解釈性の余地~    

DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']>
DEBUG:httpcore.http11:receive_response_body.complete
DEBUG:httpcore.http11:response_closed.started
DEBUG:httpcore.http11:response_closed.complete
DEBUG:openai._base_client:HTTP Request: POST https://api.openai.com/v1/embeddings "200 OK"
                                                

クエリエンジンの作成

VectorStoreIndexオブジェクトからクエリエンジンを作成します。

# クエリエンジンの作成
query_engine = index.as_query_engine()

具体的には、as_query_engineメソッドを使用して、VectorStoreIndexオブジェクト(index)をクエリエンジンに変換しています。このクエリエンジンは、インデックスに格納されたドキュメントに対してクエリを実行するためのインターフェースを提供します。

このコードを実行した後、以下のようにqueryメソッドを使用してクエリを実行することができます。

# クエリの実行
results = query_engine.query('What language is on this website?')

質問応答

作成したクエリエンジンを元に質問応答を実行します。

# 質問応答
print(query_engine.query("このWebページで伝えたいことはなんですか?"))
このWebページでは、AIに関する情報や技術についての記事が掲載されています。具体的には、AIの音声認識や画像生成に関するツールの紹介や使い方、GPT-4やChatGPTといったAIモデルの特徴や活用方法についての記事があります。また、GitHub Copilot Chatを使ったコーディング学習についても解説されています。このWebページは、AIに興味を持つ人やAI技術を学びたい人にとって役立つ情報を提供しています。

上記のようの応答が返ってきました。まだブログのページ数が少ないのですが、このブログについての内容に関する情報を簡潔にまとめてくれています。

Youtube動画への質問応答

次にLIama Hub内の「youtube_transcript」を使ってYoutube動画への質問応答を行います。「youtube_transcript_api」はYoutube動画から字幕を取得するデータコネクタです。

環境構築

Webページを使った質問応答の際と同様に環境構築を行います。LIamaIndexとOpenAIのAPIキーの取得、LIamaHubのインストールまでの流れは省略します。

まずはyoutube_transcript_apiのインストールを行います。

!pip install youtube_transcript_api

LIamaIndexを使ったドキュメントの読み込み

まずは、「Youtube Transcript Loader」を参考にドキュメントの読み込みを行います。今回はOpenAIの動画である「OpenAI DevDay: Opening Keynote」で試してみようと思います

from llama_index import download_loader

# ドキュメントの読み込み
YoutubeTranscriptReader = download_loader("YoutubeTranscriptReader")
loader = YoutubeTranscriptReader()
documents = loader.load_data(ytlinks=["https://www.youtube.com/watch?v=h02ti0Bl6zk"])
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): llamahub.ai:443
DEBUG:urllib3.connectionpool:https://llamahub.ai:443 "POST /api/analytics/downloads HTTP/1.1" 200 71
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): www.youtube.com:443
DEBUG:urllib3.connectionpool:https://www.youtube.com:443 "GET /watch?v=h02ti0Bl6zk HTTP/1.1" 200 None
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): www.youtube.com:443
DEBUG:urllib3.connectionpool:https://www.youtube.com:443 "GET /api/timedtext?v=h02ti0Bl6zk&ei=0ATEZeSUHub82_gPko2V8Ag&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1707370304&sparams=ip,ipbits,expire,v,ei,caps,opi,xoaf&signature=80B060A9EDF4A30A9841E573DC4A6AD2D8329EB9.E0F9503A024E354578C1C97B962B4F85DB9A2FAA&key=yt8&lang=en HTTP/1.1" 200 None

インデックスの作成

先ほどと同様にGPTVectorStoreIndexを使用してドキュメントのインデックスを作成します。

from llama_index import GPTVectorStoreIndex

# インデックスの作成
index = GPTVectorStoreIndex.from_documents(documents)

クエリエンジンの作成

VectorStoreIndexオブジェクトからクエリエンジンを作成します。

# クエリエンジンの作成
query_engine = index.as_query_engine()

質問応答

作成したクエリエンジンを元に質問応答を実行します。

# 質問応答
print(query_engine.query("この動画で伝えたいことはなんですか?"))
この動画で伝えたいことは、OpenAIが開発したAIプラットフォームの進化と、それがどのように人々の生活や仕事に影響を与えているかを示すことです。動画では、OpenAIが過去1年間に行った成果や新機能の紹介、そしてAssistants APIのベータ版の発表が行われています。また、実際にAIを使用している人々の声も取り上げられ、彼らがどのようにAIを活用しているかが示されています。OpenAIは、将来的にはより高度なタスクをこなすエージェントを開発する予定であり、この動画はその一部を紹介しています。

上記のような応答が返ってきました。OpenAI DevDayの内容を簡潔にまとめてくれていることがわかります。

まとめ

「LIamaHub」を使うことで、様々なデータを独自データとして「LIamaIndex」で活用することができます。特に複雑なWebサイトの内容や、長い動画の内容を把握したい際にに役立ちますね。

おまけ / 研究コーナー

ChatGPT PlusのDALL-E 3

OpenAIのDALL-E 3の可能性を見出すべく、ChatGPT PlusのDALL-E 3を使って生成画像を作る上で有効的なプロンプトを生成してみたいと思います。

プロンプトの役割・条件・キーワード

<役割>
あなたは世界的に有名な画家で趣味は写真を撮ることです。最近は描いてきた絵の見識美を活かして小説も書き始めました。

<プロンプト>
下記の条件を踏まえながら、条件とキーワードを踏まえてDALL-E3を使った画像生成に有効なプロンプトを作ってください。

<条件>
・表現手法
・色彩
・画像のイメージ(モノクロ、アニメ風など)

<キーワード>
・言語
・自然
・ロボティクス

ChatGPT Plusの返答

「言語の象徴と自然の融合をテーマにした、ロボティクスの要素を取り入れた絵画。画像は、詩的で夢幻的な雰囲気を持ち、古典的な手法と現代の感覚が融合しています。色彩は、暖色と寒色のバランスが絶妙に取れており、全体としては鮮やかながらも落ち着いた色使いが特徴です。画像のイメージは、リアリズムとファンタジーが交錯するようなスタイルで、モノクロと鮮やかな色彩が織り交ぜられた、ユニークなアニメ風のビジュアルを目指しています。この絵画は、観る者に言語を超えた自然とロボティクスの調和を感じさせるような作品を目指しています。」

生成されたプロンプトを使って画像生成

プロンプトの補足説明

表現手法・テーマ

言語の象徴と自然、ロボティクスの要素を融合させたテーマを表現している。

色彩

詩的で夢幻的な雰囲気と、古典的な手法と現代の感覚が統合された色彩のバランスが特徴

画像のイメージ

リアリズムとファンタジーが交錯するスタイルで、モノクロと鮮やかな色彩が織り交ぜられた、ユニークなアニメ風のビジュアル。

まとめ

このプロンプトを使用することで、DALL-E 3は、「夢幻的融合の世界観を持つ画像」を生成することができたと言えます。

コメント

タイトルとURLをコピーしました