Here is a sample code that implements the three-layer hierarchy described in the evaluation paper:


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):
        # highest layer: user input
        characters, plot_outline, locations = self.middle_layer(central_conflict)
        script_text = self.bottom_layer(characters, plot_outline, locations)
        return script_text

    def middle_layer(self, central_conflict):
        # generate character descriptions
        characters = self.generate_characters()
        # generate plot outline and locations
        plot_outline, locations = self.generate_plot_outline(central_conflict)
        return characters, plot_outline, locations

    def bottom_layer(self, characters, plot_outline, locations):
        # generate character dialogue
        script_text = self.generate_dialogue(characters, plot_outline, locations)
        return script_text

    def generate_characters(self):
        prompt = "Generate a description of a character for a play or movie."
        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"Generate a plot outline for a play or movie with the central conflict: {central_conflict}"
        plot_outline = self.model(prompt, max_length=1024, num_return_sequences=1)[0].generated_text
        # extract locations from plot outline
        locations = self.extract_locations(plot_outline)
        return plot_outline, locations

    def extract_locations(self, plot_outline):
        # code to extract locations from plot outline
        locations = []
        # dummy code, replace with actual implementation
        locations.append("A quiet coffee shop")
        locations.append("A busy city street")
        return locations

    def generate_dialogue(self, characters, plot_outline, locations):
        prompt = f"Generate dialogue for a play or movie with the following characters: {characters} and plot outline: {plot_outline} and locations: {locations}"
        dialogue = self.model(prompt, max_length=1024, num_return_sequences=1)[0].generated_text
        return dialogue

if __name__ == "__main__":
    generator = ScriptGenerator()
    central_conflict = "Two estranged brothers must reunite to save their family business from financial ruin."
    script_text = generator.generate_script(central_conflict)
    print(script_text)


This code uses the Hugging Face Transformers library and a pre-trained language model checkpoint to generate script text. The functions are organized into three hierarchical layers, with the highest layer accepting a single sentence describing the central dramatic conflict, the middle layer generating character descriptions, a plot outline, and location descriptions, and the bottom layer generating character dialogue for the script.
นี่คือโค้ดตัวอย่างที่ใช้ลำดับชั้นสามชั้นที่อธิบายไว้ในรายงานการประเมิน: import Transformers import torch class ScriptGenerator: def __init__(self): self.model = Transformers.pipeline("text-generator", model="xlm- roberta-base") def create_script(self, central_conflict): # เลเยอร์สูงสุด: อักขระที่ผู้ใช้ป้อน, plot_outline, Location = self.middle_layer(central_conflict) script_text = self.bottom_layer(อักขระ, plot_outline, สถานที่) กลับ script_text def middle_layer(self, central_conflict): # สร้างคำอธิบายอักขระ character = self.generate_Characters() # สร้างโครงเรื่องและสถานที่ plot_outline, Location = self.generate_plot_outline(central_conflict) ส่งคืนอักขระ, plot_outline, ตำแหน่ง def Bottom_layer (ตัวเอง, ตัวละคร, plot_outline, สถานที่): # สร้าง บทสนทนาของตัวละคร script_text = self.generate_dialogue (ตัวละคร, plot_outline, สถานที่) กลับ 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 create_plot_outline(self, central_conflict): prompt = f"สร้างโครงเรื่องสำหรับละครหรือภาพยนตร์ที่มีความขัดแย้งส่วนกลาง: { central_conflict}" plot_outline = self.model(prompt, max_length=1024, num_return_sequences=1)[0].generated_text # แยกตำแหน่งจากตำแหน่งโครงร่างพล็อต = self.extract_locations(plot_outline) ส่งคืน plot_outline, ตำแหน่ง def extract_locations (self, plot_outline): # รหัสเพื่อแยกตำแหน่งออกจากตำแหน่งโครงร่างพล็อต = [] # รหัสจำลอง แทนที่ด้วยสถานที่ใช้งานจริง ผนวก ("ร้านกาแฟที่เงียบสงบ") places.append ("ถนนในเมืองที่พลุกพล่าน") คืนสถานที่ def Generate_dialogue (ตัวเอง ตัวละคร , plot_outline, location): prompt = f"สร้างบทสนทนาสำหรับละครหรือภาพยนตร์ด้วยตัวละครต่อไปนี้: {ตัวละคร} และโครงเรื่อง: {plot_outline} และตำแหน่ง: {locations}" บทสนทนา = self.model(prompt, max_length=1024 , num_return_sequences=1)[0].generated_text ส่งคืนบทสนทนาหาก __name__ == "__main__": Generator = ScriptGenerator() central_conflict = "พี่น้องสองคนที่ห่างเหินกันจะต้องกลับมารวมตัวกันอีกครั้งเพื่อช่วยธุรกิจครอบครัวของพวกเขาจากความหายนะทางการเงิน" script_text = Generator.generate_script(central_conflict) print(script_text) โค้ดนี้ใช้ไลบรารี Hugging Face Transformers และจุดตรวจสอบโมเดลภาษาที่ได้รับการฝึกอบรมล่วงหน้าเพื่อสร้างข้อความสคริปต์ ฟังก์ชั่นต่างๆ ถูกจัดเป็นสามชั้นตามลำดับชั้น โดยชั้นสูงสุดยอมรับประโยคเดียวที่อธิบายความขัดแย้งในละครส่วนกลาง ชั้นกลางที่สร้างคำอธิบายตัวละคร โครงเรื่อง และคำอธิบายสถานที่ และชั้นล่างสุดที่สร้างบทสนทนาของตัวละครสำหรับสคริปต์
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence