25
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ChatGPT関連】(Llama を使って)簡単Webページ要約

Last updated at Posted at 2023-04-10

はじめに

OpenAIのGPTを使ったチャットボットを簡単に作成できる「LlamaIndex」を用いて、
テンプレート(プロンプト)を使ったWebページの要約を簡単に生成する方法
を整理しました。
モチベーションとして、Webページを読み込んでindexを作成しQueryに直接文字列を指定するサンプルはネット上にありましたが、テンプレートを活用するサンプルがなかったため独自に作成して検証してみました。

この方法を使えばテンプレートに渡すキーワードを変えるだけで様々な処理ができるようになると思います。

なお、動作確認はGoogleコラボを使いGPT3.5で検証しました。

以下に順を追って説明します。

必要なライブラリィのインストール

!pip install llama-index
!pip install langchain
!pip install openai

OpenAI APIキーの設定

払い出したAPIキーを設定します(APIキーの払い出しがされてない場合、払い出し方法は他の記事に任せます)。

%env OPENAI_API_KEY=APIキーを設定してください

テンプレートの設定

langchainPromptTemplateを使ってテンプレートの設定します(テンプレートは今回のWebページ要約用のサンプルです。キーワードとしてnum:生成する要約数action:要約に含めて欲しい観点を起動時に指定可能にしました)。

from langchain import PromptTemplate

template = """ このデータの要約を{num}個作成してください。
それぞれの要約は日本語で100文字以上200文字以内で作成してください。 
また、要約には{action}を入れてください。 
"""

prompt = PromptTemplate(
    input_variables=["num", "action"],
    template = template,
)

GPTの環境設定

デフォルトでは出力トークンが短く出力が途切れてしまう場合があるので、ServiceContextを使って出力トークン数を2048に拡大します。

from llama_index import LLMPredictor, ServiceContext, PromptHelper
from langchain import OpenAI

# define LLM
max_input_size = 4096
num_output = 2048  #2048に拡大
max_chunk_overlap = 20
prompt_helper = PromptHelper(max_input_size, num_output, max_chunk_overlap)
llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, max_tokens=2048))
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper)

Webページを読み込んでindexを作成

今回は、大谷翔平さんのWikiぺディアの記事を見込んでみます。

from llama_index import GPTSimpleVectorIndex
from llama_index.readers import BeautifulSoupWebReader

documents = BeautifulSoupWebReader().load_data(urls=["https://ja.wikipedia.org/wiki/%E5%A4%A7%E8%B0%B7%E7%BF%94%E5%B9%B3"])
index = GPTSimpleVectorIndex.from_documents(documents,  service_context=service_context) 

要約の実行

これで準備ができましたので、要約を実行します。
生成する要約数を num=3、要約に含めて欲しい観点を action=経歴や活動内容として実行してみます。

answer = index.query(prompt.format(num=3, action="経歴や活動内容"))
print(answer)

以下の結果が出力されました。それなりに要約されていると思います。

1. 大谷翔平はプロ野球選手であり現在はMLBのロサンゼルスエンゼルスに所属しています2011年以降歴代の新語流行語大賞の受賞者に選ばれたこともあります2020年には全米最優秀アスリート賞を受賞しさらにはNPBの最優秀選手最多勝利最優秀防御率最高勝率MLBのルーキーオブイヤーアメリカンリーグMVPシルバースラッガー賞受賞者など多くの賞を受賞しています

2. 大谷翔平はプロ野球選手として活躍しています2011年以降歴代の新語流行語大賞の受賞者に選ばれたこともありますその中でも2020年にはリアル二刀流/ショータイムが受賞しましたまた2020年には全米最優秀アスリート賞を受賞しNPBのオールスターゲーム選出選手オールMLBチーム選出選手WBSCプレミア12日本代表選手2015 WBSCプレミア12選手ワールドベースボールクラシック日本代表選手ワールドベースボールクラシック優勝選手2023 ワールドベースボールクラシック選手など多くの賞を受賞しています

3. 大谷翔平は1994年生まれの岩手県出身の野球選手ですプロ野球選手として活躍しており2011年以降歴代の新語流行語大賞の受賞者に選ばれたこともありますその中でも2020年にはリアル二刀流/ショータイムが受賞しましたまた2020年には全米最優秀アスリート賞を受賞しMLBのロサンゼルスエンゼルスに所属していますさらにスポーツに関する日本のギネス世界記録保持者野球に関するギネス世界記録保持者ホリプロ21世紀日本の人物21世紀のスポーツ選手など多くの賞を受賞しています

おわりに

簡単にWebページを読み込んでテンプレートで指示した処理が行えることが確認出来ました。応用として読み込むWebページを変えて色々な選手のサマリを作成したり、テンプレートを変えることで様々な処理が行えると思います。

誤りや認識違いがあればご指摘ください。順次ブラッシュアップしていきます。

25
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?