ChatGPTでChatGPTの本を書く

ChatGPTのしくみがわかる本

『図解即戦力 ChatGPTのしくみと技術がこれ1冊でしっかりわかる教科書』カバー画像

サイボウズ・ラボの中谷と申します。このたび図解即戦力 ChatGPTのしくみと技術がこれ1冊でしっかりわかる教科書⁠以下「本書⁠⁠)という本を書きました。

本書はChatGPTの使い方よりも、ChatGPTの仕組みに重点を置いています。ChatGPTを実現する大規模言語モデル(Large Language Model、以降LLM)や、最も重要な要素技術の注意機構(アテンション)だけでなく、機械学習や自然言語処理といったAIの基盤技術、Unicodeや浮動小数点数といった情報処理の基礎まで広くカバーしています。

これまでAIに興味を持つのは専門家かそれに近い人ばかりであり、そうした関連知識を前提としても問題ありませんでした。しかし現在は、IT関係以外の会社や、IT技術者ではない営業や人事といった職種の人までAI技術に興味津々、ChatGPTやLLMなどを使ってこれまでできなかったことをしたい!と積極的です。本書の表紙には「すべてのITエンジニアのための必読書」とありますが、そういったITエンジニアではない人たちにもAIの仕組みや裏側を理解して使ってもらえる本になっています。

当初は限られた人のものだったコンピュータやインターネットも、その中身や技術を特に理解していなくても、今では当たり前のように使いこなせますよね。同じように、いずれはLLMなどのAI技術も詳しい知識がなくても自然に使えるようになるでしょうし、AIの民主化(本書54節)はそれを加速してくれます。しかし、IT技術の理解があればスマートフォンなどももっとうまく使えるように、AIを支える技術やインフラの基盤についての理解は、AIを他の人よりうまく使うための鍵になるでしょう。特に今このタイミングでAIに取り組むなら、その部分の差はより大きな効果となるでしょう。

ChatGPTで効率的に書籍を書くには?

さて、話は変わって。本書では扱わなかった「ChatGPTの使い方の一例」「今後注目されるLLMの応用」について2回にわたって紹介してみたいと思います。

第1回の今回は本書の執筆にAIをどのように用いたか、実際にどういうことに使えて、どういう工夫が必要だったか、という話をします。本書はChatGPTの本ですから、執筆にChatGPTを活用するのはむしろ正義ですよね! 前著(⁠わけがわかる機械学習 ─ 現実の問題を解くために、しくみを理解する⁠)の執筆当時は今のような高精度なLLMがまだ存在しなかったので、おかげでAI有り無しの違いを実感しました。

書籍のようなまとまった量の文書でもAIでラクラク完成!と夢見る人も多いでしょう。実際、LLMの登場によって執筆作業は格段に楽になりました。ただし、⁠すべてAIにお任せ!」というわけにはいきません。AIが大いに助けになる部分と、変わらず人力メインな部分が存在します。

文書の執筆は以下の3つの段階に大きく分かれます。

  1. 執筆 - ゼロから文章を書き始める
  2. 推敲 - 書いた文章をブラッシュアップし、分量などを調整する
  3. 校正 - 内容の誤りや誤字脱字などのチェックを行う

順番にChatGPTをどのように活用できるものなのか、見ていきます。

LLMによる執筆の課題

まず、執筆段階でLLMを活用することについて考えてみましょう。たしかに、ChatGPTに「ChatGPTの入門書の構成を考えて、目次を書き出して」と依頼し、その目次に沿って各セクションの内容を生成させれば、短時間で書籍の3分の1程度の文章ができあがります。一見便利ですが、あたりさわりのない情報の羅列でしかなく、⁠これじゃない」と感じてしまうでしょう。

それでも執筆の段階でLLMをどうにかして使いたいなら、解決すべき問題点がいくつかあります。

  1. (a) 内容のコントロールが難しい
  2. (b) 生成された文章が不自然

(a)については、プロンプトで読者層や扱うテーマなどを具体的に指定したり、対話的に修正の方向を伝えたりすることで、短文ならある程度のコントロールができます。しかし、長さが数ページ分に増えただけでもかなり面倒になりますし、書籍レベルの長さとなると不可能に近いくらい難しいです。

試行錯誤する中で多少なりともうまくいきそうに思えたアプローチは、扱いたいテーマの情報や自分が書いた文章やフレーズなどの断片を大量に用意してコンテキストとして提供しつつ、それをリライトするように指示することです。完成品の文章の8~9割の素材を用意すると、かなりイメージに近い出力が得られます。

そんなに多くの素材を用意しなければならないなら、自分で書くのと変わらないと思うかもしれませんが、この素材は完璧でなくても良く、⁠質より量」を重視して、とにかくアイデアや情報を多く集めることが重要です。たとえば、メモやキーワード、箇条書きのアイデアなど、断片的な内容でかまいません。未完成でも十分な量の素材があれば、それをLLMにリライトさせることで、行間を補足して、自分の意図に近いテーマの文章を書かせられる可能性が高まります。

(b)の「文章が不自然」という指摘は意外に思われるかもしれません。ChatGPTを始めとした今のLLMは、かなり自然な文章を生成するという定評がありますからね。たしかに短く形式的な文章についてはLLMの出力のままで十分役に立ちます。特に誰が書いても同じようになる定型的な文章なら完全に実用的と言えるでしょう。

しかし書籍ほど長い文章になると、複数回に分けて生成した文章をつなげることになります。すると、文章スタイルの一貫性の点で不自然さが目につき始めます。さらに「自分が書いた文章として出すのに自然か?」という問題もあります。個人的には、自分が書いた文章とLLMの出力した文章を混ぜて一緒にすると、LLMの担当部分が浮き上がって見えるほどの不自然さを感じてしまいました。⁠自分が書いた文章の言語モデル」の存在を感じてちょっと嬉しくなりましたが(本書24節「言語モデル⁠⁠、LLMを執筆に使うにあたっては深刻な問題です。

LLMによる執筆サポートの試み

これらの問題を完全に解決するのは難しいですが、試した範囲で一番うまくいったのは、自分の過去の文章をサンプルとして提供し、⁠このスタイルで書いてほしい」と指示する方法です。

つまり(a)と(b)の対策をあわせると、例えば次のようなプロンプトで執筆を指示します。

リライトが必要な文章と、参考にするサンプル文章を提供します。サンプル文章の書き方、スタイル、構成、論調、例の出し方に基づき、指定された文章を以下の条件で再構成してください。

- 初心者が理解しやすい内容にしてください。専門用語には簡潔な説明を追加し、複雑な概念は適切な例を用いて説明してください。
- 提供された素材はアトランダムな部分が含まれるため、順序や内容の流れを適切に整理してください。情報が欠落しないようにしつつ、読みやすく再編成してください。
- 文体、語調はサンプル文章に合わせ、読者に親しみやすいものにしてください。
- 指定された文章にある全ての情報を残す必要はありませんが、内容をなるべく維持し、過度に削ることのないようにしてください。

以下がリライトが必要な文章です。

----
【素材をできるだけ多く】
----

これ以降がサンプルの文章です。

----
【例文をできるだけ多く】
----

ここまでやってようやく使えそうな文章が出てくる(ことがある)という感じです。それでは全然使い物にはならないと言いたくなりますが、実は意外な局面でこのアプローチのお世話になったりもしました。

長い期間にわたって1冊の本を書くとなると、どうしても筆が止まってしまうスランプの時期もありました。時間をかけられるなら思う存分悩めばいいですが、ChatGPTの本という題材だとスピードも重要です。そういうとき、次の手順でChatGPTに原稿の素案のようなものを書かせたりしていました。

  1. 書きかけの文章からLLMに質問リストを考えさせる
  2. その質問に口頭で答えて録音、テキストに書き起こし
  3. 元の文章と書き起こしを素材とし、上のプロンプトで文章を生成

書き起こしはOpenAI Whisperなどで行いますが、音声認識ミスや表記揺れはある程度発生してしまいます。しかし上でも述べたように、コンテキストにする素材は「質より量」なので、多少間違っていても大丈夫です。

こうして書かせたものをそのまま採用することはさすがにできませんでしたが、⁠なるほど、こういう書き方もあるか」と参考にして、止まっていた筆をなんとか動かす効果はありました。もう少しプロンプトや手順を作り込めば、いいところまでいけるのではないかと思わせてくれるポテンシャルは感じています。

LLMによる推敲と校正

一転して、推敲の段階ではLLMは大変役立ちます。推敲してほしい文章そのものが素材とサンプルを兼ねていて、LLMが必要とするコンテキストが揃っているからです。後で追加情報が必要になるパターンも紹介しますが、基本的にはプロンプトを頑張るだけで良い感じの推敲を行えます。

例えば本書の推敲では以下のようなプロンプトを使っていました。

あなたは優秀で親切な編集者です。以下のルールに従って初心者向けの大規模言語モデルの解説文書の推敲を行ってください。

* 文書はマークダウン形式です。架空の文章を推敲せず、必ず元の文書を参照して推敲してください。
* 必ず推敲を具体的に行ってください。明示的に指示された場合を除いて、全体のまとめや総評、構造の分析などは一切不要です。
* 内容や記述・構成などに間違いやわかりにくい所があれば具体的に指摘し、その部分について文書のスタイルは変えずに書き換え案を出してください。
* 書き換え案は、必ず書き換え前の文章と書き換え後の文章を併記してください。書き換えの必要がないことの言及は不要です。
* フォーマルな表現への書き換えは不要です。短く易しい表現が好ましいです。
* 親しみやすさのために、多少の口語的表現は許容します。ただ、読みにくさや馴れ馴れしさにつながると考えられる場合は、その旨を指摘し書き換え案を出してください。
* 文書が長くて一度に推敲できない場合は、節ごとに分けて推敲してください。部分的に推敲を行った場合は、回答の末尾で「続きを推敲しますか?」と尋ねてください。
* 書くべき知識の欠落や、事実に反する記述があれば指摘してください。
* ⦅~⦆は脚注を表します。組版時にその部分は切り離されて、そのページの下部に挿入されます。
* "■" や "■参照" は TODO を表しています。基本的には無視して構いませんが、そこに入れるべき適切な知識や文章が存在する場合はそれを具体的に指摘してください。最終的に追記されることは決まっているので、"■" の箇所に補足や明記すべきというだけの指摘は不要です。
* 表記ゆれは、明らかに問題があるもの以外は無視して大丈夫です。
* 出力は常に日本語にしてください。
* 不明な点があれば質問してください。

ChatGPTを使うときのコツを紹介する書籍やブログにはこうしたプロンプトが数多く紹介されていますので、それらを持ってきて使うのでももちろん構いませんが、自分用にカスタマイズするのがおすすめです。上のプロンプトも最初は「推敲して」のみだったものを徐々に育てていくことで、ここまで大きくなったものです。

ChatGPTやClaudeなど多くのチャットAIツールでは過去の発言を編集できますので(編集できるのは最後の発言だけの場合もあります⁠⁠、望ましい出力になるようにプロンプトの指示を追加や調整することでカスタマイズできます。イメージとしては、新人アルバイトに何度も指示を出し直しては、その結果を見て、⁠ごめん、さっきの違った。今度はこっちの指示で最初からやり直して」と言う感じです。人間相手にこれをやったらパワハラまっしぐらですが、ChatGPTなら問題ありません。

むしろ望ましくない出力に対し、会話の続きとして修正指示を出すより、前の発言を編集して指示を出し直すほうがLLMの負荷は低いかもしれません。チャットの会話履歴全体はLLMに改めて入力し直されるため、望ましくない出力も改めてもう一度LLMに入力されるからです。そうすると処理時間も延びますし(最近のプロンプトキャッシュという技術によって事情は変わってきたかもしれません⁠⁠、LLMの注意機構(アテンション)が望ましくない出力にヒットしてしまう確率もゼロではありません。

執筆には文章の圧縮も重要

また、紙の書籍や論文のように紙幅に制限がある文書の場合は、文章を短く圧縮する必要が発生することもあります。例えば本書が属する「図解即戦力」というシリーズでは、各節は必ず右側のページでキレイに終わらないといけないという強めの縛りがあったため、文章の長さの調整は死活問題でした。1行減らすくらいならおおむね難しくはありませんが、5行削らないといけないような場合もあったりしてなかなか大変でした。

またそうした制限がないブログなどの記事でも、文章の圧縮は有効です。同じ内容の文章なら短いほうが基本的にはわかりやすい(読むコストが低い)からです。文章のリズムや強調などもありますから絶対ではありませんが。

これもLLMに手伝わせましょう。原稿を書いていると、どうしても自分の文章に対する愛着が湧いたり、苦労して書いたから削りたくない気持ちに勝てなかったりします。しかし短くできないと思っていた文章でも、試しにLLMに短縮させてみると、⁠LLMが容赦なく削った文章でも、伝えたいことはちゃんと伝わっているな……」と感じることも少なからずありました。LLMによって、自分の判断では短縮する候補から除外するような文章でも、試しに短く書き直してみることが簡単にできるようになって、効率が格段に上がりました。もしLLMを使わなければ、文章圧縮にはもっと時間がかかり、出版も少なくとも1ヶ月は遅れていたかもしれません。

文章圧縮のプロンプトは「この文を意味と口調を変えずに短い文章にしてください」など、簡単なもので大丈夫です。ただLLMは本当に容赦なく削ってきて、重要な情報がゴッソリ落ちたり、文の意味が変わったりと、必ずしも納得の行く出力が得られるわけではありません。しかし、文章圧縮は例えば2ページの文章の中から2行短くすれば良い、といった作業なので、そのうち良い出力がいくつかあれば満点でなくてもOKなのです。

LLMが苦手とする校正を行う方法

最後に、文章の間違いを見つける校正をLLMに手伝わせましょう。実はLLMはその仕組み上、校正のような「文章全体をまんべんなく見る」作業が苦手です。そんな校正作業でも、⁠数打ちゃ当たる」作戦、つまり再生成(ChatGPT等の再生成ボタンを何度も押す、APIなら同じプロンプトで複数回呼び出す)を何度か繰り返すという単純な方法である程度解決できます。詳しくは以下のブログ記事をご覧ください。

まとめ

書籍のような大きめの文書を執筆する際もLLMは役立ちます。ただし、執筆の段階ごとに作業の種類が大きく変わり、LLMの適用しやすさや、適切なプロンプトも変わってきます。

次回は、本書で触れられなかった「AIエージェント」とその開発ツールについて解説します。非ITエンジニアがAI開発するときの福音となりうると思われますが、直近でも大きな発展と変化が見られることや、用語に混乱が見られる話などを紹介します。

おすすめ記事

記事・ニュース一覧