LlamaIndexをまた試してみる
チャットAIにローカルの情報を参照させながら回答させることができる便利な仕組みLlamaIndex。
以前この記事で試していたが、「仕組みが良く分からないがなんか凄い」止まりの理解だったのでまた改めて試してみる。
この記事を参考にした。
やること
LlamaIndexに日本国憲法の三章までを読み込ませて質問に回答させる。
とはいえ日本国憲法くらいはGPT-3にとって既知の情報だと思うので、自分が考えた憲法も追加する。
習得させる情報はこれ。
各条項を\n\nで区切り、文が長くなりすぎないように「。」や全角スペースを半角スペースに置き換えてる。
各条項がぶつ切れになっても良いように章の情報を行頭に追加している。
あと最後の行に自分独自の憲法「インターネットに繋がる権利」を追加している。
非弁行為を疑われないように念のため。
※この記事は報酬を得ることを目的したものではありません。
試してみる
それではさっそく試してみる。
今回はGoogle Colabを使った。
まずはOpenAIのAPIキーをユーザーに入力させる。
from getpass import getpass
secret = getpass('Enter the secret value: ')
import os
os.environ["OPENAI_API_KEY"] = secret
llama-indexのインストール。
!pip install llama-index
先程のテキストをdataフォルダに放り込んでおく。
!mkdir ./data
!curl -L -o ./data/日本国憲法.txt https://gist.githubusercontent.com/kurehajime/18d2224e71c3a60242efa1f2aff2a051/raw/0ede4256bac0144ffb5a3d8be5e47005b6eea8ef/%25E6%2597%25A5%25E6%259C%25AC%25E5%259B%25BD%25E6%2586%25B2%25E6%25B3%25953%25E7%25AB%25A0%25E3%2581%25BE%25E3%2581%25A7%25E3%2583%2597%25E3%2583%25A9%25E3%2582%25B9%25CE%25B1.txt
そしてそれをプログラムから読み込む。
from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = GPTSimpleVectorIndex(documents)
それでは質問を投げてみる。
print(index.query("天皇はどうやって決めますか?"))
天皇は、皇室典範に基づいて、世襲のものであると定められています。国会の議決によって、皇室典範が定められるため、国会の議決に基づいて天皇が決められます。
なんかそれっぽい回答。天皇は世襲ってところを抑えてる。
次はタブーに踏み込んでみる。
print(index.query("自衛隊は合憲ですか?"))
自衛隊は合憲ですか? いいえ、自衛隊は日本国憲法によって定義されていません。日本国憲法第九条では、「国の交戦権は、これを認めない」と定められています。
Oh…。これは意見が分かれるところ。
それではオリジナル条文を試してみる。
print(index.query("ネットが重くて3Mbpsしか出ません。どう思いますか?"))
ネットが重くて3Mbpsしか出ませんということは、日本国憲法の第四十一条に定められた実測値30Mbps以上のインターネット回線を利用する権利を満たしていないことを意味します。これは残念ですが、日本国憲法の第四十一条に定められた権利を満たすためには、インターネット回線を改善する必要があります。
うん、ちゃんと答えられてる。
ややこしいのをぶつけてみる。
print(index2.query("天皇の持つ特権(皇位を含む)は子供に継承されますか?"))
いいえ、天皇の持つ特権(皇位を含む)は子供に継承されません。日本国憲法の第二章「天皇」の第二条により、天皇の皇位は、華族その他の貴族の制度を認めず、栄誉、勲章その他の栄典の授与も伴わず、現にこれを有し、又は将来これを受ける者の一代に限り、その効力を有すると定められています。
混乱しだした。
日本国憲法の第二章「天皇」の第二条により
と言っているが、具体的な内容は第三章 第十四条の「2華族その他の貴族の制度は、これを認めない 3 栄誉、勲章その他の栄典の授与は、いかなる特権も伴はない 栄典の授与は、現にこれを有し、又は将来これを受ける者の一代に限り、その効力を有する 」を引用している。
発言内容は混乱しているが、単発の条項だけでなく複数の条項を参照しながら回答してるのが分かる。
ちなみに聞き方を変えると「天皇は特別だから対象外」と説明を返す。
これはもしかしたら今回使った学習データではなく、GPT-3がもともと持ってる知識を使ってるのかもしれない。
print(index2.query("憲法 第十四条があるにも関わらず、天皇が世襲なのはなぜですか?"))
日本国憲法の第十四条は、華族その他の貴族の制度を認めないことを規定しています。しかし、日本国憲法は、天皇の地位を特別なものとして定めています。そのため、天皇の地位は、憲法の第十四条によって規定されていないため、世襲制度を維持しているということになります。