PROSECCO 2016: The Drax Team Report

I’m unaware of how to post PDFs, Powerpoint Presentations, or Spreadsheets on this blog. Here is our report. A PDF version and other resources are available upon request.

PROSECCO 2016: The Drax Team Report
Peter Hammar, Samarpan Rai, Alessandro Valitutti, Ben Gruber, Amit Kothiyal, and Paul Bodily

Our approach to the problem of generative creative narrative was to focus on the specific problem of generating narrative which follows a specific plot flow. For example, we may want to generate a narrative that follows the flow of a hero cycle in which the protagonist starts in a fairy neutral position, must pass through a low point, and then ultimately arrives in a high point. This emotional progression extends to the reader, creating a range of feelings that are what create an enjoyable, engaging narrative.

New Annotation of Data

To achieve this goal of creating narratives with plot flow, we needed to first have some idea of the polarity of potential actions which might occur with a protagonist. For example, “Character A loses a loved one” would be a negative action for Character A and “Character A overcomes Character B” would be a positive action for Character A and a negative for Character B. In the dataset given us all actions had one character as the subject and a second character as the object. Thus we labeled each action with the polar impact it would have on Character A and Character B. We used values ranging from -2 to 0 to 2 to denote actions ranging from negative to neutral to positive respectively. These annotations are housed in a new knowledge base which we have labeled “Draxberg’s Action Polarities”.

We also intended to have some notion of the polarity of the protagonists in our dataset. For example, “Mother Theresa” is generally viewed as a good person or a hero whereas “Saddam Hussein” is generally viewed as a bad person or a villain. We used values ranging from -1 to 0 to 1 to denote characters ranging from negative to neutral (which we tried to avoid where possible) to positive. To this end we added annotations to “Veale’s NOC List” which contains a list of characters from which our narratives select its characters.

These two additions to the existing knowledge (available upon request) base constitute one significant contribution from our research efforts. It should be added that these tasks were undertaken in collaboration with Team Stromberg which served to expedite the annotation process.

Narrative Generation

Given these added resources, our generative system proceeds as follows:

  1. Select a plot flow (e.g., for the hero cycle the plot flow might be [0, 1, -2, 2])
  2. Select an initial action whose polarity matches the first polarity in the plot flow
    Example: “preaches”
  3. Select a protagonist whose Category makes them a candidate for performing the initial action
    Example: “Mother Theresa” (whose category, “religious leader”, makes her a potential subject for “preaches”)
  4. Randomly select an opponent for the protagonist from the set of characters who EITHER
    A. Shares common either “Positive Talking Points” or “Negative Talking Points” elements with one of the characters listed as the protagonist’s opponents (as per “Veale’s The NOC List”) AND shares the same Category as one of the protagonist’s opponents OR
    B. Is portrayed by the same actor as portrays one of the characters listed as the protagonist’s opponents
    Example: “Saddam Hussein” (who shares common traits and Category with “Lucifer”, the latter being listed as an opponent of “Mother Theresa”)
  5. For each of the polarity values p in positions 2 to the end of the plot flow, select a pair of action m, a such that a taken from the “After Midpoint” category from “Veale’s script midpoints” matches the following criteria:
    A. The polarity of action a matches polarity p from the plot flow
    B. The action a is a consequence of the previously selected action (as per the value in the “Before Midpoint” category
  6. Having selected actions for each polarity in the profile, render each action using the values in “Veale’s idiomatic actions” associated with the key matching the selected action. For the first and last actions, use the values in “Veale’s initial bookend actions” and “Veale’s closing bookend actions” respectively. Also add (with some randomness) appropriate linking prepositions between rendered actions, as found in “Veale’s action pairs”.
  7. For each idiomatic rendering of an action, substitute the name of the protagonist (from step 3) for any appearance of the variable “A” and the name of the opponent (step 4) for “B” with the following variation:
    A. The first time the name is mentioned use the full “Character” name, every time there after use only the first name of the character (excluding titles such as “Dr.”, “Count”, etc.)
    B. Once the “Character” name has been used at least once in an action rendering, for all subsequent actions, use the first name of the character’s “Canonical Name”.
    C. For the final action, use the full “Canonical Name” of both characters in the rendering.
    D. With some randomness and in accordance with the polarity of the action for each character, add adjectives describing the character before the character name taken from the “Positive Talking Points” and “Negative Talking Points” in “Veale’s The NOC List”.
  8. For each action a, add polarized filler sentences which express detail about the characters with sentences reflecting the same polarity as the action a. Note that these are not actions, merely descriptive sentences. For the opening action, generate descriptive sentences describing each character in detail as taken from the “Positive Talking Points” and “Negative Talking Points” in “Veale’s The NOC List” and according to the polarity of the characters.

Descriptive Sentences

The descriptive sentences described in step 8 serve to elongate the narrative, thereby extending the emotion of each action so as to allow the reader to more fully appreciate the emotions before suddenly moving on to the next. These sentences were generated using template sentences that allow for substitution of character- and polarity-specific values for the action to which they are appended. For example:


where <CHAR?> is substituted for either the protagonist or the opponent and <CHAR!> is substituted for the opposite character. is replaced with a verb reflecting the relationship of the polarities of the most recent action on each of the characters. For example, if “Saddam Hussein” had just “apologized” to “Mother Theresa” (an action which has a positive polarity for “Mother Theresa”), then this template may be rendered as

Mother Theresa started to appreciate Saddam Hussein.

Several such templates were created, most of which incorporated various character-specific attributes from “Veale’s The NOC List” such as typical clothing items, typical activities, addresses, and character Category, as well as attributes such as gender-specific pronouns or possessive adjectives.

Examples of Baseline Narrative Generation System

Marriage was always in the cards for Hugh Hefner and Derek Zoolander.
But, Derek Zoolander stole Hugh Hefner's thunder.
But, Hugh Hefner imitated Derek Zoolander's style and adopted it as its own.
But, Derek Zoolander heckled Hugh Hefner with cruel jibes.
But, Hugh Hefner hurled insults at Derek Zoolander.
So, Derek Zoolander shut Hugh Hefner up.
So, Hugh Hefner grew to resent Derek Zoolander.

Marriage was always in the cards for Juliet Capulet and Edmund Blackadder.
However, Edmund Blackadder completely deceived Juliet Capulet.
As a reaction to this, Juliet Capulet filed for divorce against Edmund Blackadder.
Nevertheless, Edmund Blackadder furtively followed Juliet Capulet everywhere.
For this reason, Juliet Capulet stabbed Edmund Blackadder.
In spite of this Edmund Blackadder came back to haunt Juliet Capulet.
Juliet Capulet hoped that Edmund Blackadder would be satisfied with the sacrifice and not demand Juliet Capulet's own blood.

Examples with Intelligent Character Selection Added

Dr. Evil had a knack for getting others to do things.
Still Shrek trusted Douglas implicitly.
Yet, Douglas crucially underestimated Shrek.
As a consequence, Shrek took over the position once occupied by Douglas.
Still Douglas looked up to Shrek as a role model.
However, Shrek pulled Douglas's strings.
Would Shrek use his newly consolidated power over Douglas Evil wisely? Or squander it foolishly?

Monica Lewinsky was a pushover for a witty chat-up line.
Monica became utterly smitten with Michelle Obama.
Nevertheless, Michelle pulled Monica's strings.
For this reason, Monica's attitude hardened toward Michelle.
As a consequence, Michelle publically denounced Monica.
For this reason, Monica sought forgiveness from Michelle.
Monica Lewinsky's family would now seek revenge in a never-ending cycle of vengeance.

Harry Potter needed a top-class trainer to reach the top.
In spite of this Harry failed to properly reward Darth Maul.
The effect of this was that Darth unceremoniously dumped Harry.
As a reaction to this, Harry begged Darth's forgiveness.
For this reason, "Get back here right now" said Darth to Harry.
For this reason, Harry sought forgiveness from Darth.
Harry Potter was never again seen in these parts.

Mark Zuckerberg looked everywhere for inspiration.
The effect of this was that Mark worshipped the ground beneath Steve Jobs.
For this reason, Steve filled Mark's head with doctrinaire ideas.
However, Mark misrepresented Steve's intentions.
As a consequence, Steve had Mark silenced.
As a reaction to this, Mark obeyed Steve's orders.
That's what happens when you give your trust too easily.

Examples with Plot Flow Profile Added

Profile: [2,1,0,-1]
Marriage was always in the cards for Barack Obama and Michelle Obama.
Michelle loved everything about Barack.
As a consequence, Barack showed true loyalty to Michelle.
Yet, Michelle pushed Barack too far.
As a consequence, Barack lost all faith in hectoring Michelle.
The effect of this was that Michelle publically denounced Barack.
Barack Obama pledged to never seek out Michelle Obama's company again.

Profile: [-1,0,1,2]
Sarah Palin and Osama Bin Laden were from different sides of the political divide.
Sarah delivered a crushing defeat to Osama.
The effect of this was that Osama campaigned vigorously for Sarah.
Nevertheless, "You're fired" shouted Sarah at Osama.
For this reason, Osama furtively spied on Sarah.
Tough-talking Sarah appealed to Osama's sense of wonder.
Will romance flourish for Osama Bin-Laden and Sarah Palin? does a happy marriage beckon for Osama Bin-Laden and Sarah Palin? will Osama Bin-Laden and Sarah Palin be star-crossed lovers or will love prevail?

Profile: [0,1,-1,2]
Bruce Wayne had money and Dr. Evil needed money; it was a match made in heaven.
Yet, Douglas totally took advantage of Bruce.
The effect of this was that Bruce decided to sue Douglas.
Douglas seduced and enthralled Bruce.
Bruce waved the white flag to shrewd Douglas.
Douglas delivered a humiliating lecture to hedonistic Bruce.
Douglas Evil looked down from his throne and laughed; it was a hollow laugh.

Sarah Palin and Osama Bin Laden were from different sides of the political divide.
However, Sarah delivered a humiliating lecture to Osama. Osama spent days insipidly plotting terrorist outrages.
In reaction, Osama hated everything about Sarah. Osama felt his ramming with a hijacked 747 was looking quite weak right now.
Yet, Sarah paid Osama to do what it asked. Osama often remarked, "My, what the moot Conservative you've become, Sarah!"
Osama showed true loyalty to Sarah. Sarah started to notice Osama.
For this reason, Irrepressible Sarah rewarded bold Osama amply. Sarah was beginning to look quite strong compared to Osama.
Will romance flourish for Osama Bin-Laden and Sarah Palin? does a happy marriage beckon for Osama Bin-Laden and Sarah Palin? will Osama Bin-Laden and Sarah Palin be star-crossed lovers or will love prevail?


Several challenges exist to the approach we’ve taken. The biggest challenge derives from the need for more data. Even with as large a knowledge base as we are given, finding a sequence of satisfactory actions (step 5) that meet the constraints of our plot flow is very difficult. Often the sequence progresses to a place where no satisfactory actions transitions are available. Our system overcomes this by generating and testing for this exception. Our research suggests that even for the most frequently successful plot flows, only about 1 in 20 generations succeeds in finding a full sequence of satisfactory actions.

Ideally all actions would not only adhere to the polarity constraints, but also to constraints limiting actions to those which agree with the characters’ Category values. This would be overly prohibitive in the system’s current state, for which we did not implement this latter constraint. One way to overcome this would be to leverage information in “Veale’s Category Hierarchy” such that if no actions were available due to a character’s Category, a higher level of the hierarchy might be used to find a more generic Category for which there are satisfactory actions.

The final challenge we faced was that we found some subjectivity existed in the annotations we made for characters and actions. For example, our expectation was that by choosing an opponent similar to those listed as the protagonist’s opponents we would get two characters with opposite character polarities. This was often not the case however, and enforcing it often resulted in no choices for an opponent. As such it occasionally happens that two characters of like polarity are chosen as characters for the narrative (e.g., “Saddam Hussein”, who is enemies with “George Bush”, and “Osama Bin Laden”, who is apparently similar to “George Bush”). This may or may not be undesirable, but was not what we expected. One approach to solving this might be to use social network analysis of the reader to cater the character polarities to the preferences of the reader.

There were also many cases where the idiomatic rendering of actions slightly altered the meaning of the action, making the transitions between actions awkward. This is an example of the problems resulting from using a knowledge base: your sentences can only be as good as the accuracy of the symbol representations in the knowledge base. Further improvement to the knowledge base by refining idioms and splitting actions whose meaning varies by context is needed.

Implementation details

The program was developed using a combination of the Java (in Eclipse) and Python programming languages. We used Git to collaborate our programming efforts; Trello to collaborate our team management; and GroupSpaces to for easy communication with team members. Progress of our program was periodically reported on the Code Camp Blog, We also created a website to demo narratives created by our system,

One of the greatest benefits of the camp and the project was learning how to work together to leverage the several strengths of each member. We were happy to find that each member contributed significantly in terms of contributing both intellectually and programmatically to the final version of our system.

Conclusion and Future Work

We were pleased with the results of our narrative system. We found that in several of our stories the plot flow was well-reflected in the sequential actions, leading us overall to conclude that our efforts to create a narrative-generating system that follows a particular plot flow had been largely successful. In the future we’d like to implement more efficient ways of discovering meaningful good plot flows and finding action sequences that match them (without resorting to a generate-and-test methodology).

We feel that the results of our project and many others at PROSECCO 2016 provide a glimpse of A) how collaborations effective facilitate research that is greater than the sum of individual members and B) how computer systems can be implemented to achieve specific goals in narrative story generation. Narration places a pivotal role in communication universally. Our society stands to benefit immensely from machines equipped with the ability to communicate in this medium.


The Drax team would like to acknowledge Tony Veale for providing the initial knowledge base, his constructive criticism during brainstorming sessions, and help developing data-accessory methods. We would also like to thank Team Stromberg for their assistance in annotating the data as outlined above.

Available Upon Request

Presentation slides; Code; Added Annotations

Scholarly Lite is a free theme, contributed to the Drupal Community by More than Themes.