AIで小説を要約してみた

  • 鰺坂誠也 (あじさか せいや)
    • 職業: フルスタック風エンジニア
    • 好きなもの: 😺🖥
    • 嫌いなもの: npm i -g

背景:読書でよくあるやつ

  • 読書中
    • 登場人物を忘れる「だれコイツ?」
    • キーとなるできごとを忘れる
      • 特に日をまたいで読むと…
  • 読了後
    • タイトルだけでは内容を思い出せない
    • 小説内の「あの場面」を探すのが大変

→ 登場人物一覧が全ての小説に欲しい!

なにをしたか

  • 小説を要約させ、登場人物やあらすじなどのまとめを生成

前提:OCRで本をテキスト化済み

OCR済み書籍が沢山ある

  • YomiToku(AIベースOCR)を使用
  • 縦書き/横書き自動判別が完璧
  • 本文以外(柱など)を簡単に除外できる
  • Google Cloud の約1/100のコスト
  • 1070頁を約12分で処理 (RX7900XTX)

→ 低コストで大量の書籍を処理可能

どうやって処理したか

安価なモデルはコンテキストが小さい → 分割して処理

分割処理の3ステップ:

  1. チャンク化: 指定ページ数ごとに分割(オーバーラップあり)
  2. チャンクごとに要約: JSON形式で構造化
  3. 全体の統合: 全チャンクの要約から作品概要を生成

ステップ1: チャンク化

文章の途中で切れないように、少し頁をオーバラップさせる

  • チャンク1 = 頁1 〜50
  • チャンク2 = 頁45〜95
  • チャンク3 = 頁90〜140
  • チャンク4 = 頁135〜160

160 頁の書籍を、5 頁オーバーラップで 4 チャンクに分割

ステップ2+3: チャンクごとに要約

処理の流れ:

  • 前チャンクの要約を引き継ぐ
  • 文脈を維持しながら処理
  • 最後の要約から作品概要を生成

JSON構造化のポイント

各チャンクで以下を抽出:

  • 登場人物の特徴+関係
  • プロットの時系列
  • 舞台設定(時代/場所)
  • 重要シーンや象徴・伏線

→ 文脈を維持し、人物情報を蓄積するための情報を構造化

どれくらいかかった?

使用モデル: GPT-4o mini

コスト

  • 入力 0.15 USD / 出力 0.60 USD
    • 1M トークンあたり
  • 128,000 context window

実際の処理例

  • 『よもつひらさか』(今邑彩、約400ページ)
    • 約3.8円で要約完了 (7.5分)
  • 『鉄鼠の檻』(京極夏彦、約1400ページ)
    • 約13.9円で要約完了 (37分)

→ 平均 約10円/1000ページ

やってみてわかったこと(良い点)

  • 登場人物の情報整理に向いている
    • 小説では情報が細切れで提供される
    • AIが散らばった情報をまとめてくれる
  • 途中の要約だけ見ればネタバレを避けられる
    • チャンク毎に処理しているので、途中の要約が存在する!
  • 思い出すきっかけになる

やってみてわかったこと(課題)

  • 短編集には向いてない
    • 事前に短編ごとに分割が必要
  • AI要約の限界
    • 未確定の内容を断定的に書く
    • あらすじの誤読もある
    • トリッキーな設定に弱い
      • 二重人格を「双子」と認識など

今後やってみたいこと

  • ミステリで犯人当て
    • 例: 途中まで読んだ状態でAIに推理させる
  • 小説への質問機能を作りたい
    • 例: この登場人物の初登場はいつ?

おまけ1: Yomitoku の珍誤読取

原文(京極夏彦「魍魎の匣」)
「オカルトとは本来<隠された>と云う意味だと云われる。《中略》当初は、オカルトサイエンスと呼ばれた」

読み取り結果
「大阪府大阪市西淀川区西条1丁目10番2号-100万円以上のお店で、お店はmorenのアクリエンスと呼ばれた。」

→ この読取結果を見て、原文が予測できるヤツは人間ではない
(バージョンアップしたので試したら、正しく読み取れた)

おまけ2: 実際の要約例