雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

GPT-3の要約機能を試してみた(Python)

これはなに?

OpenAI社が開発しているGPT3の精度がかなり良くなっていたので要約機能を検証してみました。GUIでも検証できますが、今回はPythonを使いました。

GPT-3とは

以下引用となりますが、大量の文章を学習した言語モデルになります。

GPT-3は2015年12月にイーロン・マスクなど有力な実業家・投資家が参加したことで注目を集めたOpenAIが開発している言語モデルの最新版のことです。 約45TBの大規模なテキストデータのコーパスを約1750億個のパラメータを使用して学習するため、高い精度である単語の次にくる単語の予測を可能にし、あたかも人間が書いたような文章を自動で生成します。

自然言語処理モデル「GPT-3」の紹介 | NTTデータ先端技術株式会社

英語と比べて学習量は少なく感じますが、日本語にも対応しています。
日に日に機能が増えているのですが、例としては以下のようなものがあります。 (2022年4月で50機能ありました)

  • 要約
  • Q&A
  • 翻訳
  • コード生成
  • コードのバグ検出
  • キーワード抽出
  • 製品説明からキャッチコピー生成

OpenAI API

検証

どれくらいの精度で要約ができるのかいくつか検証したので検証結果を記載します。 要約のポイントとしては、「ポイントは以下のXX点です。」 のような文言をインプット情報に入れておくといい感じに箇条書きで出力されるようになります。

議事録

入力

地方創生に関する議論についての議事録をもって持ってきました。

国会会議録検索システム

本日の会議に付した案件 ○地域の自主性及び自立性を高めるための改革の  推進を図るための関係法律の整備に関する法律  案(内閣提出)     ───────────── ○委員長(古川俊治君) ただいまから地方創生及びデジタル社会の形成等に関する特別委員会を開会いたします。  委員の異動について御報告いたします。  昨日までに、安江伸夫君及び斎藤嘉隆君が委員を辞任され、その補欠として矢倉克夫君及び勝部賢志君が選任されました。     ───────────── ○委員長(古川俊治君) 地域の自主性及び自立性を高めるための改革の推進を図るための関係法律の整備に関する法律案を議題といたします。  なお、野田内閣府特命担当大臣が諸般の事情により本日の委員会への出席が困難となったため、理事会での協議の結果、赤池内閣府副大臣に出席を求めることといたしましたので、御報告いたします。  政府から趣旨説明を聴取いたします。赤池内閣府副大臣。 ○副大臣(赤池誠章君) 地域の自主性及び自立性を高めるための改革の推進を図るための関係法律の整備に関する法律案につきまして、その提案理由及び内容の概要を御説明申し上げます。  地方分権改革は、地域が自らの発想と創意工夫により課題解決を図るための基盤となるものであり、地方創生における極めて重要なテーマです。  本法案は、昨年十二月に閣議決定した令和三年の地方からの提案等に関する対応方針を踏まえ、都道府県から指定都市への事務、権限の移譲、義務付け、枠付けの見直し等を行うものであります。  次に、法律案の内容について、その概要を御説明申し上げます。  第一に、住民に身近な行政を地方公共団体が自主的かつ総合的に広く担うようにするため、都道府県から指定都市への事務、権限の移譲を行うこととし、関係法律の改正を行うこととしております。  第二に、地方が自らの発想でそれぞれの地域に合った行政を行うことができるようにするため、地方公共団体に対する義務付け、枠付けの見直し等を行うこととし、関係法律の改正を行うこととしております。  このほか、施行期日及びこの法律の施行に関し必要な経過措置について規定するとともに、関係法律について必要な規定の整備を行うこととしております。  以上が、この法律案の提案理由及び内容の概要であります。  何とぞ、慎重御審議の上、速やかに御賛同あらんことをお願いいたします。 ○委員長(古川俊治君) 以上で趣旨説明の聴取は終わりました。  本案に対する質疑は後日に譲ることとし、本日はこれにて散会いたします。    午後零時五十六分散会

出力

'1. 地方創生には、地方公共団体が自主的かつ総合的に広く担うことが重要である。
2. 地方創生には、地方公共団体が自らの発想でそれぞれの地域に合った行政を行うことができるようにするため、地方公共団体に対する義務付け、枠付けの見直し等が必要である。
3. 関係法律の改正を行うことで、上記2点を達成する。'

□ コメント
精度が良すぎて驚きました。議事録の中での議論のサマリとして2点項目が挙げられているのですが、その二つの意味を理解した上でサマリ2つとその中での共通事項「関係法案の改正」という部分を正確にピックアップしてます。

f:id:ykoomaru:20220417084012p:plain

新聞記事の要約

入力

米大リーグ・エンゼルスの大谷翔平投手は15日(日本時間16日)、敵地レンジャーズ戦に「1番・指名打者」で先発し、今季1、2号の本塁打を放った。開幕8戦目、31打席目で待望の一発が生まれたが、第3打席にも2号2ラン。地元放送局「バリー・スポーツ・ウエスト」が動画を公開し、米実況席も「オオタニ、スゴーイ」と日本語で興奮を伝えた。 大谷が沸かせた。初回先頭打席、初球を右中間に運んで待望の1号。衝撃的だったのは3-6の5回1死一塁だ。高めの球を強振し、右翼へぶっ飛ばした。米実況席は「オオタニがもう一本を右翼席に運んだぞ突き刺した」とコメント。「エンゼルスもこの一発で生き返った」と語った。三塁ベースを回った後に、解説者も「Wowオオタニ、スゴーイ」と日本語で熱狂。ベンチに戻ってきた時には「キュンデス」と日本の若者言葉が飛び出した。

同局公式ツイッターは実況付きの動画を公開。ツイッター上の日本人ファンからは「スゴーイって叫んでるのがオモロい」「興奮した実況にも煽られる」「実況めっちゃ笑う」「ショウヘイキュンデスはワロタw」「キュンデス、どこで情報仕入れてんだか」「キュンです」「キュンですって言ってた笑」と注目を浴びた。

MLB公式サイトによると、大谷に2発目は飛距離415フィート(約126.5メートル)、打球速度108.1マイル(約174キロ)だった。完全復活に米実況席も大盛り上がりのようだ。

出力

  1. 大谷翔平投手は15日、敵地レンジャーズ戦に「1番・指名打者」で先発し、今季1、2号の本塁打を放った。
  2. 米実況席は「オオタニ、スゴーイ」と日本語で興奮を伝えた。
  3. 同局公式ツイッターは実況付きの動画を公開。ツイッター上の日本人ファンからは「スゴーイって叫んでるのがオモロい」「興奮した実況にも煽られる」「実況めっちゃ笑う」「ショウヘイキュンデスはワロタw」「キュンデス、どこで情報仕入れてんだか」「キュンです」「キュンですって言ってた笑」と注目を浴びた。'

□ コメント
大谷選手が本塁打を打ったという事実に対して、どのような反応があったかをまとめられていてよい感じの要約だと感じます。要約の仕方は色々あると思いますが、以下のような詳細な状況説明の箇所をちゃんとスキップしているので想定通りな感じがします。

初回先頭打席、初球を右中間に運んで待望の1号。衝撃的だったのは3-6の5回1死一塁だ。高めの球を強振し、右翼へぶっ飛ばした。

WIKIの要約

ちょっと概念的な言葉に対しても要約してみました。

入力

「オントロジー」という用語は、哲学が起源であるが、多くの異なる意味で用いられる。単語『オントロジー』は、ギリシャ語で「存在」を意味する ὄν (on) から来ている。計算機科学では、タイプ、特性、および関係タイプのセットから成る世界を記述するためのモデルを指すことが多い。正確にこれらの変化の周りに準備されるものは様々だが、それらはオントロジーの必需品である。実世界と一つのオントロジーでのモデルの特徴との間の近い類似性が一般に期待されている[3]。 多くのオントロジーが計算機科学と哲学の両方で共通に持っているものは、エンティティ、アイデア、およびイベントに関する特性と関係とともに、それらをある分類システムに沿って表現することである。両方のフィールドで、存在論的相対性の問題(例えば、哲学ではQuineとKripke、計算機科学ではSowa(英語版)とGuarino(英語版))において重要な作業を見つけ出し、そして規範的(英語版)オントロジーが実行可能かどうかに関わる討議をする(例えば、哲学における基本[4]を議論し、AIにおけるCycプロジェクトを議論する)ことである。2つの間の相違は主として焦点の問題である。計算機科学者が第一次原則の議論(そのようなものが固定化された本質として存在するかどうか、あるいはエンティティがプロセスよりオントロジー的により一次的でなければならないかどうかのような議論)にあまり関わらない一方で、哲学者は計算機科学における研究者より固定化され統制された語彙を確立することにそれほど関心がない。哲学者は人間のための思考道具としてオントロジーを用いるのに対して、計算機科学者は計算機処理を考えるために人間が使う思考道具としてオントロジーを用いたいという立ち位置の違いによる。

出力

'1. オントロジーとは、主に計算機科学におけるモデリングに用いられる用語である。
2. オントロジーは、エンティティ、アイデア、およびイベントに関する特性と関係とともに、それらをある分類システムに沿って表現することである。
3. オントロジーは、計算機科学と哲学の両方における重要な作業に用いられ、規範的なオントロジーが実行可能かどうかに関わる討議をする。'

□ コメント
WIKIの文章読んだら 「うっ」となりますが、サマリを見るとある程度意味が理解できるのですごいですね。

サンプルコード

import openai

openai.api_key = "<your_openai_key>"

def text_summary(prompt):
    # 分析の実施
    response = openai.Completion.create(
    engine="text-davinci-002",
    prompt=prompt,
    temperature=0.7,
    max_tokens=500,
    top_p=1.0,
    frequency_penalty=0.0,
    presence_penalty=0.0,
    )

    # 分析結果の出力
    return response["choices"][0]["text"].replace('\n','')

def crean_text(text):
    text= text.replace(' ',' ')

    return text


# 要約対象の文章をここに入力
text = '''
<input_text>
'''

# 要約を3点で出力するように調整
prompt ='''
Tl;dr
ポイントは以下の3点です。
'''

prompt = crean_text(text) +  prompt


# 結果出力
print(text_summary(prompt))

最後に

今回GPT3の要約機能を使ってみましたが、精度の高さにかなり驚かされました。要約はかなり時間がかかる作業なので、要約作業をシステムに任せるということが現実的になってきたなという感覚があります。

今回検証したもの以外にもユーザーレビュー等これまでは大量のコメントを目でみて分類していたものがGPT3によって瞬時に要点を確認できるようになると思います。前処理として事前にカテゴライズできればさらに精度のよい要約ができそうですね。