Skip to main content

Bot Code Camp 2016

Camp guard

After the success of the first code-camp held in Coimbra, Portugal in 2015, PROSECCO organized a second international code-camp on Computational Creativity in the city of Antwerp, Belgium in April 2016. The local organizers of the camp were Lucas Nijs of the Sint Lucas School of Art and Walter Daelemans of the CLiPs Natural Language Processing group of the University of Antwerp.

As in the previous event, scholarships were made available for students to participate in the camp. All students were expected to have reasonable coding abilities in a language such as Java or Python, though some students participated in a non-technical capacity, by bringing their knowledge of aesthetics or literature to bear on the development work of their team mates.

Substantial data/knowledge resources were provided to students so as to undertake the main coding challenge of the camp. This challenge concerned the development of automated story generation systems to produce original stories at the level of plot (the fabula) and surface rendering (idiomatic English).

These resources built-upon and expanded the knowledge sources created for the first PROSECCO code-camp in Coimbra in 2015. They included:

The NOC list: The Non-Official Characterization List.

This is a knowledge-base providing detailed information on many facets of over 800 popular figures from pop-culture, fiction and history. Read more about it in this blog post. Visit the GitHub repository to download the NOC.

Scéalextric: A Path-building Story Generation System and Knowledge-base

This is a comprehensive knowledge-base of action triples and logical connectives for building plots as interconnected action sequences. Read more about it in this blog post Visit the GitHub repository to download Scéalextric.

Participants formed groups to build their own autonomous software systems that can generate original and interesting stories. Much of the camp thus involved intense coding in groups, but brainstorming sessions and tutorials were also scheduled, in addition to a lively social programme that allowed participants to mingle and establish new connections.

Student participants were formed into teams of four people each, using a tiered approach that aimed to distribute technical abilities evenly amongst the groups. Thus, strong programmers were distributed amongst the teams so that every team had at least one experienced programmer to anchor the development work. Teams were named after Bond Villains, in the hope that participants would be inspired to seek out their inner wicked genius. (Students voted to reject team-names based on famous Dwarves and famous Reindeer). The eight teams were:

  • Blofeld
  • Drax
  • LeChifre
  • Jaws
  • OddJob
  • Stromberg
  • Dr. No
  • Goldfinger

Teams were encouraged to live-blog during their design and development work, and you can read many of their postings here. Teams were also encouraged to write a closing summary of their approach to story telling, and these posts show the diversity of the topics that were tackled during the camp. For instance, teams explored the role of Jungian archetypes in story-telling, the role of sentiment and dramatic tension, and the humorous potential of national stereotypes.

All of the knowledge given to participants (in the NOC and in the Scealextric distributions) are stored as a collection of semantic triples. Now, one can use XML, RDF, RDFS or OWL to store a collection of semantic triples, but the core of the triple stays the same regardless of the formalism we use to encode it. So why bother with a complex syntactic sugar for the sake of formalistic appearances? When it comes to maintaining and editing and sharing a large body of semantic triples the most flexible format is a spreadsheet. As mundane as it may sound, a spreadsheet is perfect for this kind of representation work.

Every cell, representing as it does a value-containing intersection of a named column and a named row, represents a single triple. We can share spreadsheets easily (and post them on the Web as Google docs for communal editing) and cut-and-paste relevant parts with abandon. So every piece of information in Scéalextricis to be found in a spreadsheet. Each sheet can be saved as a tab-separated-values text file for easy processing by Java and Python programs, and we encourage you to add new columns and rows to each one, and to create new spreadsheets of your own with complementary forms of knowledge.

Consider a semantic relationship P(X, Y) where P is a predicate that holds between X and Y. We can represent a collection of triples of the form P(X, Y) in a spreadsheet with a column labelled P, a row whose first (and key) value is X, and a cell at the intersection of this row and the column labelled P that contains the value Y. This cell may contain multiple values Y1, Y2 ... Yn, each separated by commas, so this cell would represent a group of predications P(X, Y1), P(X, Y2) ... P(X, Yn)

The NOC distribution contains a variety of spreadsheets, each one a triple store that stores its semantic triples in this fashion. The following are the main spreadsheets in the distribution (the TSV Lists directory contains text file equivalents in which the spreadsheets have been saved in tab-separated-values [TSV] format):

Veale's The NOC List.xlsx

This spreadsheet encodes the central triple-store in which chararcters are defined. Other triple-stores/spreadsheets in the NOC distribution provide further detail on the concepts used in this central triple-store. The first and key column provides the names of the characters, one row per character. Other columns then contain attributes of each character and related ideas, such as Gender, Political leaning, Address, Spouse, Opponent, Weapon, Vehicle, Typical Activities, Typical Clothing, Group Affiliation, Domain, Fictive status (real or fictional?), Creator (if fictional), Taxonomic Category, Positive Talking Points and Negative Talking Points

Veale's vehicle fleet.xlsx

This triple-store provides useful detail on the vehicles associated with characters in the central NOC triple-store above.

Veale's weapon arsenal.xlsx

This triple-store provides useful detail on the weapons associated with characters in the central NOC triple-store above.

Veale's Typical Activities.xlsx

This triple-store provides useful detail on the activities associated with characters in the central NOC triple-store above.

Veale's clothing line.xlsx

This triple-store provides useful detail on the clothing items associated with characters in the central NOC triple-store above.

Veale's creations.xlsx

This triple-store provides useful detail on the creations associated with characters in the central NOC triple-store above. For instance, Seth McFarlane is the creator of Family Guy and this triple-store indicates that Family Guy is a TV show

Veale's Fictional Worlds.xlsx

Family Guy is also a fictional world in which a variety of characters live and interact. This triple-store characterizes the fictional worlds associated with the characters of the main NOC triple-store.

Veale's domains.xlsx

This triple-store provides useful detail on the genres and domains associated with characters in the central NOC triple-store above.

Veale's category hierarchy.xlsx

This triple-store provides useful detail on the taxonomic categories associated with characters in the central NOC triple-store above. In effect, it clusters these categories into broader categories to form a semantic hierarchy or IS-A hierarchy in the old-fashioned AI sense.

The Scéalextric distribution likewise contains a variety of spreadsheets, each one a triple store that stores its semantic triples in this fashion. The following are the main files in the distribution:

Veale's script midpoints.xlsx

This triple store contains the action triples which are described above. Each row contains at least one triple, where the first column holds the first action in the triple, the second column holds the second action, and the third column holds the third action. Since each cell may contain multiple comma-separated values, then a single row may in fact contain multiple action triples. If column 1 holds n1 actions, column 2 holds n2 actions, and column 3 holds n3 actions, then the row encodes n1 by n2 by n3 different action triples

Veale's idiomatic actions.xlsx

This triple maps actions (verbs) onto one or more idiomatic renderings. The action is simply a verb, and it is assumed that the proptagonist (subject) is A and the antagonist (object) is B. The idiomatic rendering contains A and B as placeholders, to be replaced in the generation process with the actual protoganist and antagonist.

Veale's initial bookend actions.xlsx

This triple store provides a scene-establishing preamble for every action verb, so that a story beginning with that action/verb might be prefaced with this preasmble.

Veale's closing bookend actions.xlsx

This triple store provides a moralistic epilogue for every action verb, so that a story ending with that action/verb might be concluded with this "meassage" for the reader.

Veale's action pairs.xlsx

This triple store provides a logical link between actions that may follow each other in a story (as derived from the structure of the action triples in Veale's script midpoints.xlsx)