{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/plotmachines-outline-conditioned-generation","title":"PlotMachines: Outline-Conditioned Generation with Dynamic Plot State Tracking","arxiv_id":"2004.14967","date":"2020-04-30","proceeding":"EMNLP 2020 11","authors":["Hannah Rashkin","Asli Celikyilmaz","Yejin Choi","Jianfeng Gao"],"abstract":"We propose the task of outline-conditioned story generation: given an outline as a set of phrases that describe key characters and events to appear in a story, the task is to generate a coherent narrative that is consistent with the provided outline. This task is challenging as the input only provides a rough sketch of the plot, and thus, models need to generate a story by interweaving the key points provided in the outline. This requires the model to keep track of the dynamic states of the latent plot, conditioning on the input outline while generating the full story. We present PlotMachines, a neural narrative model that learns to transform an outline into a coherent story by tracking the dynamic plot states. In addition, we enrich PlotMachines with high-level discourse structure so that the model can learn different writing styles corresponding to different parts of the narrative. Comprehensive experiments over three fiction and non-fiction datasets demonstrate that large-scale language models, such as GPT-2 and Grover, despite their impressive generation performance, are not sufficient in generating coherent narratives for the given outline, and dynamic plot state tracking is important for composing narratives with tighter, more consistent plots.","url_abs":"https://arxiv.org/abs/2004.14967v2","url_pdf":"https://arxiv.org/pdf/2004.14967v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"plotmachines-outline-conditioned-generation","repo_url":"https://github.com/hrashkin/plotmachines","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"plotmachines-outline-conditioned-generation","repo_url":"https://github.com/lourdescrivelli/plotmachines_sample","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"story-generation","task_name":"Story Generation"}],"methods":[{"method_slug":"adam","method_name":"Adam"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"attention-dropout","method_name":"Attention Dropout"},{"method_slug":"bpe","method_name":"BPE"},{"method_slug":"cosine-annealing","method_name":"Cosine Annealing"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"discriminative-fine-tuning","method_name":"Discriminative Fine-Tuning"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"gpt-2","method_name":"GPT-2"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"linear-warmup-with-cosine-annealing","method_name":"Linear Warmup With Cosine Annealing"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"weight-decay","method_name":"Weight Decay"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2004.14967","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2004.14967"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"deterministic:regex_extraction","url":"https://github.com/hrashkin/plotmachines","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/markriedl/WikiPlots","reach":{"status":"ok"}}],"summary":{"unverified":11},"by_repo_kind":{"official":{"samples":11,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"e5254f89c922b130","entry":"clean_top_features","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/preprocessing/extract_outlines.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/preprocessing/extract_outlines.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e5254f89c922b130"}},{"code_sha256_prefix":"6a513c34286196f4","entry":"format_text","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/model/eval_utils.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/model/eval_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6a513c34286196f4"}},{"code_sha256_prefix":"b24152fcf7367e21","entry":"generate_paragraph","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/model/generate_utils.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/model/generate_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b24152fcf7367e21"}},{"code_sha256_prefix":"7af03149f79091ab","entry":"get_fullstory_loader","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/model/data_loader.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/model/data_loader.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7af03149f79091ab"}},{"code_sha256_prefix":"7bbd968c32b606f8","entry":"get_paragraph_input_loader","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/model/data_loader.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/model/data_loader.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7bbd968c32b606f8"}},{"code_sha256_prefix":"7b3e0b9ace785681","entry":"get_paragraph_memory_input_loader","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/model/data_loader.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/model/data_loader.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7b3e0b9ace785681"}},{"code_sha256_prefix":"e50200dbeffa0133","entry":"patch_replication_callback","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/model/parallel.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/model/parallel.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e50200dbeffa0133"}},{"code_sha256_prefix":"0e25e46b2b194ec9","entry":"sorting","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/preprocessing/extract_outlines.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/preprocessing/extract_outlines.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0e25e46b2b194ec9"}},{"code_sha256_prefix":"4180ed5582c6b9e4","entry":"tfmclassifier","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/model/generate_stories.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/model/generate_stories.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4180ed5582c6b9e4"}},{"code_sha256_prefix":"07488921aa1474d5","entry":"toks_to_str","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/model/generate_utils.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/model/generate_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"07488921aa1474d5"}},{"code_sha256_prefix":"f0b738900bf46558","entry":"trim_body","repo":"hrashkin/plotmachines","repo_kind":"official","path":"src/preprocessing/extract_outlines.py","file_url":"https://github.com/hrashkin/plotmachines/blob/HEAD/src/preprocessing/extract_outlines.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f0b738900bf46558"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}