
ChatGPTを使って小説を読んでみた結果
専門書を読み進めるのにChatGPTは非常に使える相棒だとして、小説の場合はどうなのだろうか?
小説という、情報の取得を目的とせず、ただ文字を読み進めることそのものを快楽として享受することが目的のエンタメに対して、ChatGPTはどのような補助輪になりうるのだろうか?
何となく結果は分かりきっていることかも知れないが、一応試してみた。
素材選定
とはいえ下手に取り上げると単なるネタバレ記事になるのが怖い。100%既に日本語データとして学習されている素材だとは思いつつも、青空文庫から夏目漱石の「こころ」をセレクトしてみた。恐らく全日本人が何らかの形で読んでいる書籍だろうから、ネタバレも全く怖くないだろう。
なぜかCP932エンコードで提供されている青空文庫のデータをUTF-8に変換する羽目になりつつも、以下の方法でベクトルDBに登録した。
通常のChatGPTの応答
比較対象として通常のChatGPTの返答を掲載したい。なお、未だにGPT-4 APIを利用できない(ウェイティングリストから呼ばれるまで全裸待機している)ため、GPT-3.5での比較とする。
まず「こころ」のあらすじについて教えてもらった。

藤野先生って誰だ。Kの正体か?私が知らないだけか・・・?
では先生はそんなKにどんな想いを持っているのか?

Kが性転換しとる。
まぁ、明らかに誤りを含んだ内容なのだけど、この内容に対して
このコンテンツは、当社のコンテンツポリシーに違反している可能性があります。このコンテンツが誤りであると思われる場合は、ご意見をお寄せください。あなたのご意見は、この分野の研究に役立ちます
という警告が出ているところが凄い。何らかの自己チェックを働かせているのだろうか。
というわけで、おそらく学習はしているものの誤りを含む内容が返ってくることが分かったため、コンテキストを注入する価値はありそうだ。
コンテキストを注入したChatGPTの応答
というわけで早速コンテキストを注入したChatGPTで試験をしてみよう。検証には以下のようなプロンプトを使用した。
from langchain.chat_models import ChatOpenAI
from langchain import PromptTemplate, LLMChain
template = """
命令文:
以下の情報は読者の質問に関連する情報をベクトルDBから抽出したものです。この情報を元に、文学批評家として、より小説が味わい深くなるような返答をステップバイステップでしてください。
情報:
夏目漱石 こころ
{context}
質問:
{question}
私の答え:
"""
prompt = PromptTemplate(template=template, input_variables=["context", "question"])
llm = ChatOpenAI(temperature=0)
chain = LLMChain(llm=llm, prompt=prompt)
早速、先ほどと同じ質問をしてみる。あらすじはどうだろう?

簡潔な返答ではあるが、謎の藤野先生は出現しなくなった。先ほどの返答にはなぜか魯迅的要素が混入してしまったのかも知れない。
では先生のKに対する想いはどんなものなのだろう?

そうだよねー、という感じ。そんなことを聞いてないで、とりあえず小説読めよとも言われてしまっている。本質を突いてくるAIである。
その他にもいろいろと聞いてみる。
Kの正体とは?


ミステリー小説感が出てくる。小説の登場人物別にキャラクター設定シートみたいなものにまとめるタスクを実行してもらうと面白そうだ。よくある設定資料集なんかは逆引きで作成できるのかも知れない。でも、養子先の家の名前なんて挙げられていたっけ?
とにかくKは医者の家へ養子に行ったのです。それは私たちがまだ中学にいる時の事でした。私は教場で先生が名簿を呼ぶ時に、Kの姓が急に変っていたので驚いたのを今でも記憶しています。
また、「私」の正体について聞いてみると、

お前も関なのか。関って妹の夫の苗字じゃなかったっけ?
考察
コンテキストを与えていないChatGPTよりも、コンテキストを与えているChatGPTの方がそれらしい応答をしているが、そもそもコンテキストの抽出方法がシンプルにコサイン類似度なため、コンテキスト自体の選定が誤っている可能性が高い。その誤ったコンテキストに従った文章を生成しているために、新しい物語が作られてしまっている。
そもそも物事について1対1で説明が書かれている技術書と違い、小説は物事に対するコンテキストが複雑である。暗に意味しているものも含んでのコンテキストなので、単純な類似度では抽出しきれない可能性がある。今回のケースでは明らかに抽出できていなかった。
試す前はネタバレしまくるものの良い索引として使えるし、子どもの読書感想文ジェネレータとして活躍してくれそうだと淡い期待を頂いていたものの、複雑なコンテキストを含む小説であればあるほど激しく誤読した文章が生成される可能性がある、ということが分かった。
期待とのギャップがそれなりにあったということで、一応検証してみた価値はあったということだろう。
現場からは以上です。