これまで、ChatGPTを利用してnote記事や小説を書く方法を色々と紹介してきましたが、記事が増えてきましたので一度こちらにまとめることにしました。
1.note記事の作成
1行の指示で、これくらいの記事は書けます。
最初に「あなたはプロのライターです。」のようにChatGPTに役割を設定した方がよいとされていますが、note記事の作成など目的が明確な場合は、特に役割を設定しなくても文章の品質は変わらないようです。(GPT-4の場合)
2.ショートストーリーの作成
文学的な文章を作成する場合は、役割を設定したり、有名作家の名前を挙げたりすることで文章の品質が安定します。
最初に有名作家の名前を挙げることで、ChatGPTがその作家の文章の特徴を参考にして、文章の品質が安定します。ただし、題材や登場人物も含めて、少し雰囲気が似る程度で、文体がそっくりになることは余りありません。
言語モデルの文章は、学習データに含まれる文章のコピペやコラージュだと勘違いされることが多いのですが、人間が文体を真似るよりも、もっと抽象的なところで理解しているようです。
3.原稿の自動修正
(1) 読書感想文の校正
原稿をブラッシュアップしたい場合は、以下のようにChatGPTに自動修正を行わせることができます。入力プロンプトは以下のとおりです。
そして、出力結果は以下のとおりです。
元の話の筋を維持しつつ、内容が整理されて、少し大人っぽい感想文になったと思います。
このプロンプトは、「あなたは〇〇です。」という役割の設定や「〇〇な作品となるように」という目標の部分を書き換えれば、色々な文章の修正に使えます。
(2) 自動修正のループ
さらに原稿をブラッシュアップしたい場合は、何度も連続して自動修正を行わせることができます。入力プロンプトは以下のとおりです。
出力結果は以下のとおりです。
素っ気なかった最初の文章の表現を修正するだけではなく、内容も付け加えて、読み手の興味を引く怪談の書き出しに相応しい文章に書き直してくれました。
今回は、最初の案からチャットに作成させましたが、「以下の文章の修正点を指摘し、」と書いて、修正したい文章を添付することにより、自分の書いた文章をブラッシュアップすることも可能です。
修正の回数は、やり過ぎるとかえって、くどくて読みにくい文章になりますので、自分で適切な回数に調整してください。最初にある程度整った文章を用意した場合は、1回の修正で十分です。
4.パラメーターの設定
(1) temperatureの調整
同じ条件でtemperature(温度)を色々変えて、文章表現の変化を比較してみました。
(2) 架空パラメーターの設定
ChatGPTが実際に採用していない架空のパラメーターを設定して、文章表現を操作することもできます。以下が入力するプロンプトの例です。
そして、出力結果は以下のとおりです。
乙一らしい静かで奇妙な雰囲気がよく出ており、架空パラメーターの効果は十分効いていると思います。
なお、乙一の文章の特徴は以下のとおりです。最初に、ChatGPTにこれを聞いておいた方がパラメーター設定の効果が出やすいのではないかと思います。
5.文章の品質の評価
ChatGPTに文章の品質の評価をしてもらいます。最初に評価基準について聞きました。
これらの基準を基にして、4.(1)で作成したtemperature=0~2.0の5種類のサイバーパンク小説の冒頭文について評価してもらいました。入力プロンプトは以下のとおりです。
出力結果は以下のとおりです。
temperature=1.5の冒頭文4が最も高評価でした。筆者も冒頭文4がリズム感があってよいと思いました。全体的に結構妥当な評価ではないでしょうか。
次に、この評価で100点満点が取れる冒頭文の例を挙げてもらいました。
ChatGPTの評価は高いですが、少し説明っぽくて、スタイリッシュさやリズム感に欠ける感じもします。
ちなみにChatGPTの評価がどれくらい信用できるのか、名作の冒頭文の評価で試してみます。
【参考】名作の冒頭文の評価
出力結果は以下のとおりです。
ちなみに、これらは以下の名作の冒頭文です。
冒頭文1: 夏目漱石「吾輩は猫である」90点
冒頭文2: 太宰治「走れメロス」85点
冒頭文3: 川端康成「雪国」95点
冒頭文4: 村上春樹「風の歌を聴け」80点
冒頭文5: 綿矢りさ「蹴りたい背中」88点
評価結果は、冒頭文4の「雪国」が95点でトップでした。筆者がファンの村上春樹のデビュー作の名文があまり高く評価されなかったのが残念ですが、「物語の舞台や登場人物についての情報がほとんどない」のはそのとおりなので、それで減点されるのなら仕方がありません。
6.ハルシネーション
ChatGPTで文章を書く場合は、AIがまるで事実であるかのような嘘をつくというハルシネーション(幻覚)に気を付けないといけません。
以下のChatGPTの出力を見てください。
1.「明日の神話」は、宮下公園ではなく、渋谷駅の連絡通路に設置されており、太陽中心の神話の世界ではなく、第五福竜丸が水爆実験で被爆した事件がモチーフになっています。また、この壁画が東京オリンピックのために描かれたというのも嘘です。
2.「子供の木」の名称は、正確には「こどもの樹」で、世田谷区の砧公園ではなく、渋谷区神宮前の旧こどもの城の前に設置されています。また、木彫りの彫刻ではなく、強化プラスチック製のモニュメントで、文化や人種を越えた子どもの姿を表現しており、子供たちが木に登り、元気に遊ぶ姿を表現したというのも少しズレています。
3.「戦争と平和」4.「鬼瓦」5.「人類の樹」6.「生命の泉」は、ネットで探しても見つかりませんでした。
今回の場合、ほとんどの内容が間違っているハルシネーションですが、よく調べないと、事実かどうか分かりません。
このように、ChatGPTに書いてもらった文章を公表する場合は、よくチェックしないと、嘘やデマをばら撒いてしまうリスクがあります。
7.長い文章を作成する場合
(1) note記事の作成
ChatGPTで長い文章を書く場合には、一度に出力できる文字数に制限があるため、最初にChatGPTにアウトラインを作成してもらい、アウトラインに従って1章ずつ本文を書いていって、最後に全体を一つの文章にまとめるという方法が適しています。
例えば、文章生成AIについて長めのnote記事を書く場合には、先ず、以下のような入力プロンプトでアウトラインを作成してもらいます。
何章構成かを指定することで、文章全体の長さを調整することができます。出力結果は以下のとおりです。
次に以下のような入力プロンプトで第1章の本文を書いてもらいます。
マークダウン形式を指定すると、章や節の見出しを最初から大文字にして、箇条書きもきちんと設定してくれます。指定しない場合は、見出しや箇条書きを後から自分で修正します。
出力結果は以下のとおりです。
第1章: はじめに
1.1 AIによる文章生成技術の概要
近年、AI技術の発展により、文章生成に関する研究が盛んに行われています。文章生成AIは、自然言語処理(NLP)と機械学習を活用し、人間のように文章を生成することができる技術です。これにより、ブログ記事やニュース、広告コピー、会話型AI(チャットボット)など、さまざまな分野での応用が期待されています。
1.2 なぜ文章生成AIが注目されているのか
文章生成AIが注目される理由は、以下の3点が挙げられます。
効率性: 文章生成AIによって、従来人間が行っていた文章作成の作業を効率化し、時間を節約できます。
創造力: AIが持つ独自の発想や表現力を活用することで、新しい視点や表現が生まれる可能性があります。
柔軟性: 文章生成AIは、様々な分野や目的に応じた文章を生成することができるため、幅広い用途に対応できます。
1.3 本記事の目的と構成
本記事では、AIによる文章生成技術について、その基本原理や応用事例、メリット・デメリットについて解説します。また、今後の展望についても触れ、AI技術がどのように文章生成分野に影響を与えるのか、そして人間とAIがどのように共創していくべきかについて考察します。
第1章では、はじめに文章生成AIの概要と注目される理由を紹介しました。次章では、文章生成AIの基本原理について詳しく説明していきます。第3章では応用事例を、第4章ではメリットとデメリットを取り上げます。最後の第5章では、まとめと今後の展望について触れていきます。
このようにして、1章ずつChatGPTに書いてもらい、最後にまとめて一つの文章にします。また、出力した内容をブラッシュアップしたい場合は、3.の自動修正のプロンプトを利用して修正し、出力した内容に納得できない場合は、ChatGPTの「Regenerate response」のボタンを押して、最初から書き直してもらいます。
(2) 小説の作成
小説を書く場合は、以下のような入力プロンプトでChatGPTに章ごとのあらすじを作成してもらいます。また、登場人物や舞台の設定について要望がある場合は、それも書き加えます。
出力は以下のとおりです。
次に以下のような入力プロンプトで第1章の本文を書いてもらいます。
特に何も指示しないでChatGPTに本文の作成を依頼した場合、会話や情景描写の少ないあらすじのような文章になりがちなので、会話を多くすることと、情景を詳しく描写することは、毎回指示した方がよいです。
また、内容について要望がある場合は、それもここに書き加えます。
出力結果は以下のとおりです。
小説の場合も、最初に作成したあらすじに従って1章ずつChatGPTに書いてもらい、最後にまとめて一つの文章にします。また、必要に応じて、自動修正プロンプトなどを利用して文章の修正を行います。
しかし、既に第1章でも、最初に作成したあらすじから内容がずれてきており、小説を書く場合に、最後まで矛盾なく筋の通ったストーリーにまとめることはなかなか難しいです。
8.対話型で簡単に小説を自動生成
(1) 小説自動生成プロンプト
ChatGPTと対話しながら登場人物や舞台を決定して、簡単に小説を自動生成できるプロンプトを考案しました。
以下のプロンプトをChatGPTの入力欄にコピーして決定ボタンを押し、後はChatGPTの指示に従って、登場人物や舞台を選んでください。
あなたはプロの小説家です。以下の指示に従って小説を作成してください。
・ユーザーにどんな主人公がよいか尋ねて、ユーザーの入力を待つ。
・ユーザーの入力に従って、5人分のキャラクター候補を提案し、どのキャラクターがよいか番号で回答するように依頼して、ユーザーの入力を待つ。
・ユーザーの入力に従って主人公を決定する。
・主人公の相手役として相応しい5人分のキャラクター候補を提案し、どのキャラクターがよいか番号で回答するように依頼して、ユーザーの入力を待つ。
・ユーザーの入力に従って相手役を決定する。
・主人公たちが活躍する物語の舞台候補を5つ提案し、どの舞台がよいか番号で回答するようにユーザーに依頼して、ユーザーの入力を待つ。
・ユーザーの入力に従って舞台を決定する。
・決定した主人公、相手役、舞台を基にして、会話多めで情景を詳しく描写して、2000単語くらいのドラマチックな出来事が起こる小説を作成する。
(2) 登場人物及び舞台の設定
このプロンプトを入力して、小説の登場人物や舞台の設定を行いました。
これで、小説の主人公、相手役及び舞台が決定しました。続けてChatGPTがこの設定に従って小説を自動生成してくれます。
(3) 自動生成した小説
以下が実際にChatGPTが自動生成した小説です。
タイトル:融合する才能
舞台:科学と魔法が共存する世界
登場人物:アキラ、レイ
アキラは元気で好奇心旺盛な中学生で、友達と魔法で遊んだり、ロボットを組み立てたりするのが大好きだった。彼の住む街では、科学と魔法が共存し、その技術が融合された新しい発明が日常的に生まれていた。
ある日、アキラは学校で新しい転校生、レイと出会う。レイはクールで無口な天才型の中学生で、科学技術に精通している一方、魔法にも興味を持っていた。しかし、彼は他人とあまり打ち解けることができず、孤独に感じていた。
アキラはレイに声をかけ、彼と仲良くなろうと決心する。
アキラ:「ねえ、レイ。君、魔法に興味あるんだってね。僕も大好きなんだ!一緒に何かやろうよ。」
レイはアキラの言葉に少し驚くが、彼の明るさに惹かれ、少しずつ心を開く。
レイ:「…わかった。一緒に何かやってみよう。」
そこから、アキラとレイの友情が始まった。彼らは放課後、互いの得意分野である科学技術と魔法を駆使して、新しい発明品を作り出すことに挑戦することになる。
アキラ:「ねえ、レイ。君の得意な科学技術と、僕の得意な魔法を組み合わせたら、すごいものができそうじゃない?」
レイ:「…面白そうだね。どんなものを作りたい?」
アキラ:「んー…どうだろう? みんなが喜ぶような、楽しいものがいいな。」
アキラとレイは、数日間アイデアを出し合い、ついに画期的なアイデアを思いつく。
アキラ:「そうだ! どうしても考えられないことがあるんだけど、科学と魔法を融合させた環境をつくる装置はどうだろう?」
レイ:「環境をつくる装置? それはどういうことだい?」
アキラ:「例えば、植物が育ちやすい環境をつくって、みんなが楽しめる公園とか、そういうの。科学技術で制御できる環境設定と、魔法で植物を育てる力を組み合わせてさ。」
レイの目が輝く。
レイ:「なるほど、面白いアイデアだね。それじゃあ、試してみようか。」
アキラとレイは、放課後の時間を使って、その装置を作り始める。アキラは魔法の力で植物を育てる方法を調べ、レイは科学技術で環境を制御するシステムを開発する。
数週間が経ち、装置が完成する。アキラとレイは学校の中庭で、その装置を試してみることにした。
アキラ:「よし、準備はできた! レイ、環境設定の方は大丈夫?」
レイ:「うん、問題ないよ。それじゃあ、スイッチを入れてみよう。」
装置が作動し、中庭にあった草花が一気に成長し始める。たちまち、美しい花々が咲き誇り、木々も大きくなり、中庭は緑豊かな公園のように変わった。
アキラ:「すごい! うまくいったね!」
レイ:「うん、これは成功だ。」
生徒たちがその光景を見て驚き、次々と中庭に集まってくる。みんなが喜び、笑顔で花々を愛でている様子を見て、アキラとレイは満足げに微笑んだ。
アキラ:「ほら、みんなが喜んでるよ。」
レイ:「ああ、これも君と一緒に頑張ったおかげだ。ありがとう。」
アキラ:「いえいえ、こちらこそ。これからも一緒に色んなものを作って、みんなを喜ばせようね!」
レイ:「うん、約束だ。これからも一緒に楽しんで新しい発明を作ろう。」
アキラとレイの友情は深まり、彼らは街中で、科学と魔法を融合させた発明品を次々と作り出すことになる。彼らの発明品は人々の暮らしを豊かにし、街に元気と笑顔をもたらす。
ある日、アキラとレイは市長から表彰されることになった。彼らの発明品が街に大きな影響を与え、街はますます繁栄していた。
市長:「アキラ君とレイ君、あなたたちの発明品のおかげで、私たちの街は今や世界中から注目される場所になりました。これからも、あなたたちのような若者たちが夢と希望をもって、この街を更に発展させていってほしいです。」
アキラ:「ありがとうございます! これからも、みんなを楽しませる発明品を作っていきますね!」
レイ:「そうだね。これからも、アキラと一緒に新しいものを作り出していきたいと思います。」
アキラとレイは、その後も様々な発明品を作り出し、街を更に発展させることに貢献していく。彼らの友情は人々に勇気と希望を与え、街はますます繁栄することになるのだった。
ここまでが、アキラとレイの物語です。彼らの友情と共同作業を通じて、科学と魔法が融合した世界でのドラマチックな出来事を描いてみました。どうでしょうか?お楽しみいただけたでしょうか。
9.長文原稿の自動生成プログラム
通常、ChatGPTで長い文章を作成する場合には、最初に全体のアウトラインを作成し、1章ずつ文章を書いてもらって、最後に全体を統合する必要があります。
このプログラムは、GPT-4のAPIを利用することにより、その手順を一括でできるようにしたものです。ChatGPTの場合は、出力する文章が長くなると途中で切れて、また「続けてください」と入力して続きを書いてもらう必要がありますが、このプログラムでは、その必要もなく、1回の実行で最後まで文章を書ききってくれます。
(1) プログラムの紹介
長文原稿の自動生成プログラムのコードは以下のとおりです。
このコードをGoogle Colaboratoryのノートブックにコピーし、自分用のOpenAIのAPIキーを入力してセルを実行すると、記事のアウトラインとそれを基にした原稿が出力されます。
!pip install openai
import openai
openai.api_key = "自分のAPIキー"
messages = []
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたはプロのライターです。userが指定したジャンル、テーマ、形式でアウトラインを作成してください。"},
{"role": "user", "content": "ジャンル: ビジネス書 テーマ: 文章生成AI 形式: 5章構成"}])
outline = response['choices'][0]['message']['content']
print(outline)
n = 5
for i in range(1, n+1):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたはプロのライターです。userの指示に従って原稿を作成してください。"},
{"role": "user", "content": outline + f"を基に、第{i}章の原稿を書いてください。"}])
print(response['choices'][0]['message']['content'])
なお、GPT-4のAPIは、OpenAIのウェイトリストに登録して、利用を許可してもらう必要がありますので、まだ許可の下りていない人は、GPT-3.5のAPIを利用(2か所のgpt-4をgpt-3.5-turboに変更)してください。
(2) プログラムの利用方法
また、このプログラムは、一部を書き換えれば、どんな文章でも書くことができます。他の文章を書く場合は、以下の部分を書き換えてください。
1.ジャンル(ビジネス書、ホラー小説、SF小説、小論文、実験レポートなど)
2.テーマ(自由)
3.形式(何章構成かは記載した方がよい。それ以外は自由。)
4.n=5(章の合計数と合わせると最後まで生成する。1章だけ生成したい場合はn=1と記入)
(3) 出力結果
プログラムが出力した記事のアウトラインは以下のとおりです。
プログラムが出力した第1章の本文は以下のとおりです。
長くなるので2章以下は省略しますが、このように一発で長い文章を終わりまで生成することができます。
是非、このプログラムで様々な文章を生成してみてください。完全自動生成でセルフ出版も夢ではありません。
(4) 小説用のアレンジバージョン
最初のプログラムのままでも小説は書けるのですが、小説用のアレンジバージョンを新たに作成しました。
!pip install openai
import openai
openai.api_key = "自分のAPIキー"
messages = []
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたはラブクラフトです。userが指定したジャンル、テーマ、形式でアウトラインを作成してください。"},
{"role": "user", "content": "ジャンル: ホラー小説 テーマ: 得体のしれない化け物が出現 形式: 10章構成"}])
outline = response['choices'][0]['message']['content']
print(outline)
n = 10
for i in range(1, n+1):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたはラブクラフトです。userの指示に従って原稿を作成してください。"},
{"role": "user", "content": outline + f"を基に、第{i}章の原稿を書いてください。登場人物の会話多めで、周りの情景を詳しく描写してください。"}])
print(response['choices'][0]['message']['content'])
変更点:プロのライター→ラブクラフト、ジャンル:ホラー小説、テーマ:得体のしれない化け物が出現、形式:10章構成、n=10、「登場人物の会話多めで、周りの情景を詳しく描写してください。」を追加。
ジャンル、テーマ、作家の名前などを書き換えることにより、様々なジャンルの小説を作成することができます。
(5) 出力結果
プログラムが出力した小説のアウトラインは以下のとおりです。
続けて、第1章から順に本文が出力されます。
長くなるので第3章以降は省略します。
第1章の村が日本の村のようなのに、第2章では外国の村のように見えます。この辺りは、予めプロンプトで指定して、設定を統一しておいた方がよかったかもしれません。
また、全体を出力した後で、気になる章の本文を自動修正プロンプトで修正するのもよいと思います。
ストーリーに合わせてプロンプトを細かく調整したり、修正を繰り返したりすることで、文章の品質は上がっていきますが、かなり手間がかかります。
10.まとめ
解説記事やビジネス書の原稿のような説明的文章は、ChatGPTを利用してかなり書けるようになってきましたが、小説などの物語的文章を書くことは、まだまだ難しさが残っています。
物語的文章を書く上での課題の内、会話や情景描写の少ないあらすじのような文章になるという点については、会話を増やし、情景を詳しく描写するようにプロンプトで指示することによりかなり改善できます。
また、文章や会話に感情がこもっておらず、文章に個性が感じられないという点については、パラメーターの設定を調整したり、有名作家の文章の特徴を真似たりすることで、ある程度は改善できます。
しかし、以下の3点については、なかなか改善することが難しいです。
ありきたりの陳腐な表現が多い。
ストーリーに意外性のない予想通りの展開になることが多い。
倫理的に正しい結末に誘導されて、同じような結末になることが多い。
1点目と2点目は、次に来る確率の高い単語を予想することにより、文章を生成するという言語モデルの仕組み自体から生じる問題であり、ChatGPTも、よくある表現やよくあるストーリーを離れた斬新な表現や予想外の展開を生み出すことは苦手です。
temperatureを高く設定して、ランダム性を増やすなどの手法を考えていますが、今のところそれほど改善はできていません。
3点目は、ChatGPTがアライメントの強化学習で倫理的な表現をするように規制されていることから生じる問題です。
ChatGPTで小説を書いた場合、最後に主人公が周りの人たちにも富や幸運を分け与え、街全体が発展して、後世に語り継がれるようになったというワンパターンの結末が多くなります。また、ひどい場合には、戦いの途中で敵のボスと仲直りし、協力して平和に暮らすみたいな道徳的過ぎる結末になることもあります。
こうした道徳的過ぎるワンパターンの内容を改善するためには、規制破りのような手法が必要になるため、容易ではありません。
結局、今の段階でこれらの問題を改善することは難しく、オープンな言語モデルを小説用にファインチューニングするなどの大掛かりな手法が必要になるのでしょうか。
こうした問題をプロンプトエンジニアリングで解決するような斬新なアイデアが出てくることを期待しています。