Automatic Joke Generation

My master's thesis was about learning to automatically generate jokes from examples.

GOOFER: Generator Of One-liners From Examples with Ratings

GOOFER is a framework for that models a general pipeline for learning to generate jokes from example jokes. It is extension on the generate-and-test principle.

goofer

It models a generalisation of the typical template-and-schema approached used in other computational humor generators. With classic machine learning methods, it learns to recognise good patterns in jokes within particular templates, and then produces similar jokes using this learned pattern.

JokeJudger: Platform for collecting jokes and ratings

Since there wasn't an appropriately large rated joke dataset, I had to create a new platform to collect jokes and ratings, and called it JokeJudger. Because the GOOFER framework works with templates, we decided to only collect rated jokes for one template, namely analogy jokes. These all follow the template "I like my X like I like my Y, Z".

On the site, users were prompted with jokes and asked to rate it using 1 to 5 stars. They could also submit their own jokes, and view the ratings it received.

Later in the research, generated jokes were uploaded alongside human-created jokes, so they could be rated without users realising they weren't created by hand. The collected jokes can be found here.

The main screen: rating jokes.
The main screen: rating jokes.
The create joke menu. A user could press "Challenge me" to already fill in some blanks.
The create joke menu. A user could press "Challenge me" to already fill in some blanks.
Users could also allow suggestions to be given when creating jokes. The platform would use Datamuse to find suitable words for that position.
Users could also allow suggestions to be given when creating jokes. The platform would use Datamuse to find suitable words for that position.
Users could view their performance of their jokes by viewing the distribution of ratings their jokes received.
Users could view their performance of their jokes by viewing the distribution of ratings their jokes received.
Users could view all new ratings for your jokes on the notification screen.
Users could view all new ratings for your jokes on the notification screen.
Users had a profile where they could see their achievements rank (how many jokes rated and created), and filter out jokes labeled as offensive.
Users had a profile where they could see their achievements rank (how many jokes rated and created), and filter out jokes labeled as offensive.
The best rated jokes of the week, month and all time were presented in the Hall of Fame.
The best rated jokes of the week, month and all time were presented in the Hall of Fame.

GAG: Generalised Analogy Generator

GAG (Generalised Analogy Generator) is an analogy joke generator. It uses the GOOFER framework, but strips its template extraction components due to only handling one type of joke template.

The system uses the analogy jokes collected on JokeJudger to learn distinguish the relations between words in a good joke from a bad joke. Afterwards, it generates millions of jokes, and tries to find the jokes that its test algorithm considers good.

In our evaluation (on JokeJudger), we showed that it was able to generate funny jokes half as often as humans did.

Evaluation of the jokes. The classifier algorithm outperformed the regression algorithm. The generated jokes were half as often as funny as human-created jokes with the exact same constraints (only one word per slot).
Evaluation of the jokes. The classifier algorithm outperformed the regression algorithm. The generated jokes were half as often as funny as human-created jokes with the exact same constraints (only one word per slot).

🍒 Generated Jokes

Here is a selection of jokes generated by the algorithm:

  • I like my coffee like I like my myself: hot.
  • I like my coffee like I like my sleep: strong.
  • I like my men like I like my graves: nameless.
  • I like my coffee like I like my country: cold.
  • I like my men like I like my society: heartless.
  • I like my women like I like my buildings: tall.
  • I like my women like I like my tests: independent.
  • I like my women like I like my questions: silly.
  • I like my men like I like my rain: gentle.
  • I like my women like I like my laughter: silly.
  • I like my computer like I like my affection: personal.
  • I like my computer like I like my argument: personal.
View Automatic Joke Generation

Metadata

Related publications

Media mentions

Back to projects