human
評価ペーパー「脚本と言語モデルを使用する脚本と劇場スクリプト」に基づいてPythonコードを生成し、Huggingface Transformer Library、利用可能な大手言語モデルの事前処理チェックポイント、Pythonを使用します。関数は、抽象化の3つの階層層に分割する必要があります。

最高のレイヤーはユーザー入力であり、中央の劇的な対立を説明する単一の文です。
中間層は、文字の説明、プロットアウトライン（対応する場所と一緒に高レベルのシーンの説明のシーケンス）、および場所の説明を生成します。
最下層は、スクリプトのテキストの生成された文字ダイアログです。
gpt
以下は、評価論文で述べられている3層階層を実装したサンプルコードである：

```
import transformers
import torch

class ScriptGenerator:
    def __init__(self)：
        self.model = transformers.pipeline("text-generation", model="xlm-roberta-base")

    def generate_script(self, central_conflict)：
        # 最上位レイヤ：ユーザー入力
        文字, plot_outline, location = self.middle_layer(central_conflict)
        script_text = self.bottom_layer(characters, plot_outline, locations)
        return script_text

    def middle_layer(self, central_conflict)：
        # キャラクターの説明を生成する
        characters = self.generate_characters()
        # プロットのアウトラインと場所を生成する
        plot_outline, locations = self.generate_plot_outline(central_conflict)
        return characters, plot_outline, locations

    def bottom_layer(self, characters, plot_outline, locations)：
        # キャラクターの台詞を生成する
        script_text = self.generate_dialogue(characters, plot_outline, locations)
        return script_text

    def generate_characters(self)：
        prompt = "演劇や映画のキャラクターの説明を生成する"
        character_description = self.model(prompt, max_length=1024, num_return_sequences=1)[0].generated_text
        return character_description

    def generate_plot_outline(self, central_conflict)：
        prompt = f"{central_conflict}という中心的な対立を持つ演劇または映画のプロットアウトラインを生成する"
        plot_outline = self.model(prompt, max_length=1024, num_return_sequences=1)[0].generated_text
        # プロットアウトラインから位置を抽出
        location = self.extract_locations(plot_outline)
        return plot_outline, locations

    def extract_locations(self, plot_outline)：
        # プロットアウトラインから位置を抽出するコード
        location = [] # ダミーコード。
        # 実際の実装に置き換える
        location.append("A quiet coffee shop")
        locations.append("A busy city street")
        return locations

    def generate_dialogue(self, characters, plot_outline, locations)：
        prompt = f "次の登場人物で、演劇か映画の台詞を生成してください：{characters}とプロットのアウトライン：{plot_outline}と location：{場所}"
        dialogue = self.model(prompt, max_length=1024, num_return_sequences=1)[0].generated_text
        return dialogue

if __name__ == "__main__"：
    generator = ScriptGenerator()
    central_conflict = "離ればなれになった2人の兄弟は、家業を財政破綻から救うために再会しなければならない。"
    script_text = generator.generate_script(central_conflict)
    print(script_text)
```

このコードでは、Hugging Face Transformersライブラリと、事前に訓練された言語モデルのチェックポイントを使用して、スクリプト・テキストを生成しています。関数は3つの階層に編成されており、最上位層はドラマの中心となる葛藤を説明する1文を受け入れ、中間層はキャラクターの説明、プロットの概要、場所の説明を生成し、最下層はスクリプトのキャラクターのセリフを生成します。
human
自分でモデルを訓練する必要がありますか、それともすでに訓練されていることができますか？
gpt
コードは、事前に訓練されたモデルを使用します。