著者:
(1)PIOTR MIROWSKIとKORY W. MATHEWSON、DeepMind、英国、両著者は本研究に同等の貢献をした。
(2)ジェイレン・ピットマン、スタンフォード大学、米国およびディープマインド在籍時の研究
(3)リチャード・エヴァンス、ディープマインド、英国
A. 自動ストーリー生成と制御可能なストーリー生成に関する関連研究
B. PLAYS BY BOTSクリエイティブチームによる追加ディスカッション
統計言語モデル (言語モデル、または LM) は、以前のトークンのコンテキストを与えられたテキスト トークンの確率をモデル化します。トークンは、単語、文字、または文字バイグラムです。機械学習を使用して、LM は大規模なテキスト コーパスでトレーニングされ、条件付き確率分布を近似します。LM は、テキストの一部の尤度を計算し、テキスト プロンプトの続きとして新しいテキストを生成できます。テキスト生成は確率的であり、条件付き確率からのランダム サンプリングが行われます。異なるランダム シードは異なるランダム サンプルをもたらします。図 3 は、テキスト プロンプトを入力し、LM を使用して異なるテキスト サンプルを生成する例を示しています。
この研究では、700億のパラメータを持つニューラルネットワークとして表現され、MassiveTextデータセットの1.4TトークンでトレーニングされたChinchilla大規模言語モデル(LLM)[48]を採用しました。Raeら[84]が説明したように、そのコーパスには6億400万のMassiveWebドキュメント、400万冊の本、C4からの3億6100万の質問と回答、11億のニュース記事、1億4200万のGitHubコードエントリ、および600万のWikipedia記事が含まれています。GPT-3などの代替LLMを使用することもできます。[1]
このプロジェクトでは、必ずしも人間の介入を必要とせずに、長期的な意味の一貫性を示すテキスト全体を生成できるシステムを目指しています。ライターには、階層のあらゆるレベルでスクリプトを編集および変更することを推奨しています。ただし、長期的な意味の一貫性を実現するために、人間の介入は必要ありません。階層的手法では、人間の介入なしに、単一のログ ラインから妥当な長期的な一貫性を示すスクリプト全体を生成します。長期的な意味の一貫性を実現するためのアプローチは、ストーリーを階層的に生成することです。
私たちの物語生成は、抽象化の 3 つの階層レイヤーに分かれています。最上位レイヤーは、セクション 2 で定義したログ ラインです。これは、中心的な劇的な対立を説明する 1 つの文です。中間レイヤーには、キャラクターの説明、プロット アウトライン (一連の高レベルのシーンの説明と対応する場所)、および場所の説明が含まれます。最下位レイヤーは、スクリプトのテキストの実際のキャラクターのダイアログです。このように、各レイヤーの内容は、他のレイヤーの内容と一貫性があります。ここでの「一貫性」は、「統一された全体を形成する」ことを指し、LLM によって生成されたテキストに常識や論理的または感情的な一貫性があることを前提としていないことに注意してください。
図 1 に示すように、ストーリーはトップダウンで生成されます [93, 108, 113]。人間がログ ラインを提供すると、Dramantron は登場人物のリスト、次にプロット、そしてプロットで言及されている各場所の説明を生成します。登場人物、プロット、場所の説明はすべて、プロンプト チェーニング [118] によって有効化され、図 1 の図で説明されている因果関係に加えて、ログ ラインの仕様を満たしています。最後に、プロット アウトラインの各シーンについて、Dramantron は以前に生成されたシーン仕様を満たすダイアログを生成します。生成されたダイアログはまとめて追加され、最終的な出力が生成されます。この階層的な生成は、長期的な意味の一貫性を可能にするように設計されています。同様の、ただし逆の再帰タスク分解法を使用して、プロットの要約が生成されました [117]。プロットが抽象的なシーンの説明のシーケンスとして要約される中間層を組み込むことで、プロット全体が言語モデルのコンテキスト ウィンドウ内に収まるようになります。これにより、長期的な意味の一貫性に関する従来の制限が克服されます。私たちの手法により、最終シーンの要素がオープニングシーンで導入された要素に劇的な結末を与えることが可能になります[3]。また、生成されたストーリーが物語の流れに沿って進むことも可能になります(第2章を参照)。
Dramatron は、大規模言語モデルをガイドするために、いくつかのハードコードされたプロンプト (つまり、入力プレフィックス) を使用します。プロンプトエンジニアリングは、ユーザーが LLM を制御または影響を与える一般的な方法です [12]。各プロンプトには、望ましい出力の例がいくつかあります。これらはプレフィックスに含まれており、少数の例のみに適応することを、few-shot 学習と呼ぶことがあります。図 3 に示すように、プロンプトは、ユーザーが指定した入力や以前の LLM 世代の出力と連結されます。この方法はプロンプト連鎖 [118] と呼ばれ、アルゴリズムプロンプトの一種です [24]。階層の下位レベル (図 1 を参照) では、プロンプトは階層の上位レベルの出力と連鎖しています。
この研究では、主に 2 セットのプロンプトを使用しました。1 つはエウリピデスの古代ギリシャ悲劇「メディア」に基づくもので、もう 1 つは SF 映画に基づくものです。Dramatron の場合、各プロンプト セットは、1) タイトル プロンプト、2) キャラクター説明プロンプト、3) プロット プロンプト、4) 場所説明プロンプト、5) ダイアログ プロンプトで構成されています。各プロンプトがどのように設計されているかがわかるように、以下に簡単に説明します。詳細は付録 E を参照してください。
タイトル プロンプトは、ログ ラインからタイトルを生成するために使用されます。簡略化されたタイトル プロンプト、ユーザー指定のログ ライン、およびランダムにサンプリングされたタイトルを図 3 に示します。これは、指示 (既知の演劇および映画の脚本の代替タイトル、オリジナル タイトル、および説明的なタイトルの例) と例 (例 1. 古代ギリシャ悲劇 [...]。タイトル: In My Brother's Name) を含むプレフィックスを示しています。プレフィックスは次で終わります: 例 2. ユーザー入力のログ ライン (例: Grandma Phyllis と Grandpa Jim [...]) は、そのプレフィックスと、ログ ラインに一致するタイトルを生成するように LLM に促すタグ Title: に連結されます。いくつかの例から、LLM は関連するタイトルを生成し、タグを終了することを「学習」しました。キャラクター説明プロンプトは、ログ ラインからキャラクター名と説明を生成するために使用されます。プロット アウトライン プロンプトは、ログ ラインとキャラクターのリストをプロットに変換するために使用されます。このプロンプトは、少数ショット言語モデルに、1 文のログ ラインを一連のシーンの説明に変換するように促します。各シーンは高度に圧縮されており、場所の短縮名、物語アークにおけるシーンの位置を識別する物語要素 (セクション 2 を参照)、およびキャラクターの行動と発言の要約 (ナラティブ ビートと呼ばれることが多い) のみが記述されています[69]。注意点として、このプロンプトは、ドラマトロンによるシーンの表現方法に強い表現上の制約を課します。各シーンは、場所、物語要素識別子、およびビートで構成されます。場所の説明プロンプトは、場所の名前とログ ラインから詳細な風景の説明を生成するために使用されます。最後に、ダイアログ プロンプトは、ビート (シーンの概要)、シーンの場所の説明、シーンに関係する各キャラクターの説明、およびログ ライン (ストーリーの一貫性のため) をダイアログに変換するために使用されます。このプロンプトは、現在のシーンと以前のシーンの両方に対して生成されたシーン情報を使用します。
上で説明したように、少数のショット (つまり 1 ~ 4) のプロンプトとユーザー入力のログ ラインのみを使用して、トレーニング済みの LLM を活用して完全なスクリプトと脚本を生成します。付録 F に、生成された生の出力の例を示します。とはいえ、Dramantron は人間のライターの補助ツールとして、インタラクティブな共同執筆用に設計されています。Dramantron を使用した共同執筆は次のように進行します。ライターは、自分が書いたログ ラインから始めます。そのログ ラインを Dramatron に入力し、タイトル、キャラクター、プロットの概要、場所の説明、各シーンのダイアログを段階的に生成します。各ステップで、ライターは次の操作の 1 つまたは複数を必要な回数だけ実行できます。
• 新しい提案を生成します(つまり、同じプロンプトで LLM を再度実行します)。
• 典型的な「フラット」な LLM 生成と同様に、前の世代の終わりから生成を続けます。
• LLM によって生成された出力の一部またはすべてを手動で編集します。
さらに、ライターは Dramatron 階層内を前後に移動してこれらの操作を実行できます。たとえば、1) タイトルを生成、2) 新しいタイトルを生成、3) タイトルを編集、4) 登場人物のリストを生成、5) 登場人物の 1 人を削除して別の登場人物の説明を変更して登場人物を編集、6) プロットのアウトラインを生成、7) 物語アークの一部を削除してプロットを編集、8) 編集したプロットの続きを生成、9) 戻ってログ ラインを書き直す、などを実行できます。この共同執筆アプローチにより、人間と Dramatron の両方がスクリプトの執筆に貢献できます。これらの操作の後、人間の著者はさらに編集と書式設定を行ってスクリプトを完成させることができます。付録 G に、人間が編集したスクリプトの例を示します。
Dramatron のコードは Python で実装されており、ユーザー向けのインターフェースはテキストウィジェットを使用して Google Colab[4] で実装されており、対話的な編集が可能です。スクリプト生成には、いくつかの特別なマーカーを使用しています。は完全なシーケンス生成トークンの終了を表します。は生成された行の終了を示すトークンです。LLM に入力された特定のプロンプト (次のセクション 3.3 を参照) に対して、最大 511 個のテキスト トークンがサンプリングされました。出力の多様性を促すために Nucleus サンプリング [49] を使用し、上位 0.9 の確率質量と 1.0 のソフトマックス温度でトークンをサンプリングしました。最後に、ダイアログ生成のループを減らすために、生成されたテキストをブロック (2 つの空白行で区切られる) に分割し、各ブロックが 1 生成で何回出現するかをカウントする簡単な検出器を実装しました。固定しきい値 (例: 3 回) を超えると、LLM は乱数ジェネレーターで異なるシードを使用してトークンをサンプリングすることにより、新しい出力を生成します。
この論文はCC 4.0ライセンスの下でarxivで公開されています。
[1] アクセス先:https://openai.com/api/
[2] 例えば:https://theguardian.com/commentisfree/2020/sep/08/robot-wrote-this-article-gpt-3
[3] 例えばチェーホフの銃[27]を参照。
[4] https://colab.research.google.com/