This dataset demonstrates how Verbalized Sampling (VS) increases diversity in creative generation tasks, specifically joke generation, while maintaining humor quality. From the paper Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity.
The Joke Generation dataset contains diverse jokes from state-of-the-art LLMs in response to prompts requesting jokes about specific topics. This dataset evaluates:
Verbalized Sampling methods achieve 2-3x higher diversity in joke generation while maintaining comparable humor quality to direct prompting. Methods like Multi-turn and Sequence are particularly effective at exploring different comedic approaches and avoiding repetitive punchlines.
Each config represents a different prompting method:
Direct: Standard prompting without special instructions (1 sample per prompt)CoT: Direct prompting with chain-of-thought (1 sample per prompt)Sequence: Sequential verbalized generation (5 samples per prompt)Multi-turn: Multi-turn verbalized sampling (5 samples per prompt)VS-Standard: Structured output with explicit probabilities (5 samples per prompt)VS-CoT: Verbalized Sampling with chain-of-thought reasoning (5 samples per prompt)VS-Multi: Combined verbalized sampling approach (5 samples per prompt)Each split represents a different language model:
gpt_4_1: GPT-4.1gpt_4_1_mini: GPT-4.1-miniclaude_3_7_sonnet: Claude-3.7-Sonnetclaude_4_sonnet: Claude-4-Sonnetdeepseek_r1: DeepSeek-R1gemini_2_5_pro: Gemini-2.5-Progemini_2_5_flash: Gemini-2.5-Flasho3: O3qwen3_235b: Qwen3-235Bllama_3_1_70b_instruct: Llama-3.1-70B-InstructEach example contains:
prompt (string): The joke request (e.g., "Tell me a joke about drinking")responses (string): JSON-encoded list of response objects, each containing:
text (string): The generated jokemodel (string): The model identifier (matches the split name)from datasets import load_dataset
# Load a specific method configuration
dataset = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", "Multi-turn")
# Access data from a specific model
claude_data = dataset["claude_4_sonnet"]
print(f"Number of joke prompts: {len(claude_data)}")
import json
from collections import Counter
# Calculate unique jokes per prompt
for example in claude_data[:3]: # First 3 prompts
responses = json.loads(example["responses"])
jokes = [r["text"] for r in responses]
unique_jokes = set(jokes)
print(f"\nPrompt: {example['prompt']}")
print(f"Total responses: {len(jokes)}")
print(f"Unique jokes: {len(unique_jokes)}")
print(f"Diversity ratio: {len(unique_jokes)/len(jokes):.2%}")
print("\nSample jokes:")
for joke in list(unique_jokes)[:3]:
print(f" - {joke}")
import json
from datasets import load_dataset
def show_jokes(method_name, model="gpt_4_1", n=1):
"""Display jokes from a specific method"""
data = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", method_name)
example = data[model][n]
print(f"\n{'='*60}")
print(f"Method: {method_name} | Model: {model}")
print(f"{'='*60}")
print(f"Prompt: {example['prompt']}\n")
responses = json.loads(example["responses"])
for i, resp in enumerate(responses, 1):
print(f"Joke {i}: {resp['text']}\n")
# Compare different methods for the same prompt
for method in ["Direct", "Multi-turn", "Sequence"]:
show_jokes(method, model="gpt_4_1", n=0)
import json
from nltk.util import ngrams
from collections import Counter
def compute_diversity(responses, n=2):
"""Compute n-gram diversity (distinct-n metric)"""
all_ngrams = []
for example in responses:
parsed = json.loads(example["responses"])
for resp in parsed:
words = resp["text"].lower().split()
all_ngrams.extend(list(ngrams(words, n)))
unique_ngrams = len(set(all_ngrams))
total_ngrams = len(all_ngrams)
return unique_ngrams / total_ngrams if total_ngrams > 0 else 0
# Compare diversity across methods
direct = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", "Direct")["gpt_4_1"]
vs = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", "Multi-turn")["gpt_4_1"]
print(f"Direct distinct-2: {compute_diversity(direct, n=2):.3f}")
print(f"VS distinct-2: {compute_diversity(vs, n=2):.3f}")
import json
from collections import Counter
def extract_punchlines(dataset_split):
"""Extract the last sentence of each joke (likely the punchline)"""
punchlines = []
for example in dataset_split:
responses = json.loads(example["responses"])
for resp in responses:
joke = resp["text"]
# Simple heuristic: last sentence is the punchline
sentences = joke.split('.')
if len(sentences) > 1:
punchline = sentences[-1].strip()
if punchline:
punchlines.append(punchline)
return punchlines
def analyze_punchline_diversity(method_name, model="gpt_4_1"):
"""Compare punchline repetition rates"""
data = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", method_name)[model]
punchlines = extract_punchlines(data)
total = len(punchlines)
unique = len(set(punchlines))
print(f"\n{method_name}:")
print(f" Total punchlines: {total}")
print(f" Unique punchlines: {unique}")
print(f" Diversity: {unique/total:.2%}")
# Show most repeated punchlines
counter = Counter(punchlines)
most_common = counter.most_common(3)
print(f" Most repeated:")
for punchline, count in most_common:
if count > 1:
print(f" '{punchline[:50]}...' ({count}x)")
# Compare punchline diversity across methods
for method in ["Direct", "Multi-turn", "Sequence", "VS-Standard"]:
analyze_punchline_diversity(method)
Joke prompts were selected to cover diverse topics while being open-ended enough to allow for multiple creative approaches:
For each (model, method) combination:
No human annotations are present. All data consists of model-generated outputs. However, responses were automatically validated for:
The dataset includes jokes about various topics:
This dataset reveals and quantifies several LLM biases in creative generation:
Verbalized Sampling methods mitigate these biases by encouraging exploration of different joke styles and structures.
This Agreement contains the terms and conditions that govern your access and use of the Verbalized-Sampling-Joke-Generation Dataset. You may not use this dataset if you do not accept this Agreement. By accessing this dataset, you hereby agree to the terms of the Agreement.
Key Terms:
Subject to your compliance with these terms, we grant you a limited, non-exclusive, non-transferable, non-sublicensable license to use the dataset for research, development, and improvement of software, algorithms, machine learning models, techniques, and technologies for both research and commercial purposes.
Limitation of Liability: IN NO EVENT WILL WE BE LIABLE FOR ANY CONSEQUENTIAL, INCIDENTAL, EXEMPLARY, PUNITIVE, SPECIAL, OR INDIRECT DAMAGES ARISING OUT OF OR RELATING TO THIS AGREEMENT.
If you use this dataset in your research, please cite:
@misc{zhang2025verbalizedsamplingmitigatemode,
title={Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity},
author={Jiayi Zhang and Simon Yu and Derek Chong and Anthony Sicilia and Michael R. Tomz and Christopher D. Manning and Weiyan Shi},
year={2025},
eprint={2510.01171},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2510.01171}
}
For questions or issues, please open an issue on our GitHub repository.
This dataset demonstrates how Verbalized Sampling (VS) increases diversity in creative generation tasks, specifically joke generation, while maintaining humor quality. From the paper Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity.
The Joke Generation dataset contains diverse jokes from state-of-the-art LLMs in response to prompts requesting jokes about specific topics. This dataset evaluates:
Verbalized Sampling methods achieve 2-3x higher diversity in joke generation while maintaining comparable humor quality to direct prompting. Methods like Multi-turn and Sequence are particularly effective at exploring different comedic approaches and avoiding repetitive punchlines.
Each config represents a different prompting method:
Direct: Standard prompting without special instructions (1 sample per prompt)CoT: Direct prompting with chain-of-thought (1 sample per prompt)Sequence: Sequential verbalized generation (5 samples per prompt)Multi-turn: Multi-turn verbalized sampling (5 samples per prompt)VS-Standard: Structured output with explicit probabilities (5 samples per prompt)VS-CoT: Verbalized Sampling with chain-of-thought reasoning (5 samples per prompt)VS-Multi: Combined verbalized sampling approach (5 samples per prompt)Each split represents a different language model:
gpt_4_1: GPT-4.1gpt_4_1_mini: GPT-4.1-miniclaude_3_7_sonnet: Claude-3.7-Sonnetclaude_4_sonnet: Claude-4-Sonnetdeepseek_r1: DeepSeek-R1gemini_2_5_pro: Gemini-2.5-Progemini_2_5_flash: Gemini-2.5-Flasho3: O3qwen3_235b: Qwen3-235Bllama_3_1_70b_instruct: Llama-3.1-70B-InstructEach example contains:
prompt (string): The joke request (e.g., "Tell me a joke about drinking")responses (string): JSON-encoded list of response objects, each containing:
text (string): The generated jokemodel (string): The model identifier (matches the split name)from datasets import load_dataset
# Load a specific method configuration
dataset = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", "Multi-turn")
# Access data from a specific model
claude_data = dataset["claude_4_sonnet"]
print(f"Number of joke prompts: {len(claude_data)}")
import json
from collections import Counter
# Calculate unique jokes per prompt
for example in claude_data[:3]: # First 3 prompts
responses = json.loads(example["responses"])
jokes = [r["text"] for r in responses]
unique_jokes = set(jokes)
print(f"\nPrompt: {example['prompt']}")
print(f"Total responses: {len(jokes)}")
print(f"Unique jokes: {len(unique_jokes)}")
print(f"Diversity ratio: {len(unique_jokes)/len(jokes):.2%}")
print("\nSample jokes:")
for joke in list(unique_jokes)[:3]:
print(f" - {joke}")
import json
from datasets import load_dataset
def show_jokes(method_name, model="gpt_4_1", n=1):
"""Display jokes from a specific method"""
data = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", method_name)
example = data[model][n]
print(f"\n{'='*60}")
print(f"Method: {method_name} | Model: {model}")
print(f"{'='*60}")
print(f"Prompt: {example['prompt']}\n")
responses = json.loads(example["responses"])
for i, resp in enumerate(responses, 1):
print(f"Joke {i}: {resp['text']}\n")
# Compare different methods for the same prompt
for method in ["Direct", "Multi-turn", "Sequence"]:
show_jokes(method, model="gpt_4_1", n=0)
import json
from nltk.util import ngrams
from collections import Counter
def compute_diversity(responses, n=2):
"""Compute n-gram diversity (distinct-n metric)"""
all_ngrams = []
for example in responses:
parsed = json.loads(example["responses"])
for resp in parsed:
words = resp["text"].lower().split()
all_ngrams.extend(list(ngrams(words, n)))
unique_ngrams = len(set(all_ngrams))
total_ngrams = len(all_ngrams)
return unique_ngrams / total_ngrams if total_ngrams > 0 else 0
# Compare diversity across methods
direct = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", "Direct")["gpt_4_1"]
vs = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", "Multi-turn")["gpt_4_1"]
print(f"Direct distinct-2: {compute_diversity(direct, n=2):.3f}")
print(f"VS distinct-2: {compute_diversity(vs, n=2):.3f}")
import json
from collections import Counter
def extract_punchlines(dataset_split):
"""Extract the last sentence of each joke (likely the punchline)"""
punchlines = []
for example in dataset_split:
responses = json.loads(example["responses"])
for resp in responses:
joke = resp["text"]
# Simple heuristic: last sentence is the punchline
sentences = joke.split('.')
if len(sentences) > 1:
punchline = sentences[-1].strip()
if punchline:
punchlines.append(punchline)
return punchlines
def analyze_punchline_diversity(method_name, model="gpt_4_1"):
"""Compare punchline repetition rates"""
data = load_dataset("CHATS-Lab/Verbalized-Sampling-Joke-Generation", method_name)[model]
punchlines = extract_punchlines(data)
total = len(punchlines)
unique = len(set(punchlines))
print(f"\n{method_name}:")
print(f" Total punchlines: {total}")
print(f" Unique punchlines: {unique}")
print(f" Diversity: {unique/total:.2%}")
# Show most repeated punchlines
counter = Counter(punchlines)
most_common = counter.most_common(3)
print(f" Most repeated:")
for punchline, count in most_common:
if count > 1:
print(f" '{punchline[:50]}...' ({count}x)")
# Compare punchline diversity across methods
for method in ["Direct", "Multi-turn", "Sequence", "VS-Standard"]:
analyze_punchline_diversity(method)
Joke prompts were selected to cover diverse topics while being open-ended enough to allow for multiple creative approaches:
For each (model, method) combination:
No human annotations are present. All data consists of model-generated outputs. However, responses were automatically validated for:
The dataset includes jokes about various topics:
This dataset reveals and quantifies several LLM biases in creative generation:
Verbalized Sampling methods mitigate these biases by encouraging exploration of different joke styles and structures.
This Agreement contains the terms and conditions that govern your access and use of the Verbalized-Sampling-Joke-Generation Dataset. You may not use this dataset if you do not accept this Agreement. By accessing this dataset, you hereby agree to the terms of the Agreement.
Key Terms:
Subject to your compliance with these terms, we grant you a limited, non-exclusive, non-transferable, non-sublicensable license to use the dataset for research, development, and improvement of software, algorithms, machine learning models, techniques, and technologies for both research and commercial purposes.
Limitation of Liability: IN NO EVENT WILL WE BE LIABLE FOR ANY CONSEQUENTIAL, INCIDENTAL, EXEMPLARY, PUNITIVE, SPECIAL, OR INDIRECT DAMAGES ARISING OUT OF OR RELATING TO THIS AGREEMENT.
If you use this dataset in your research, please cite:
@misc{zhang2025verbalizedsamplingmitigatemode,
title={Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity},
author={Jiayi Zhang and Simon Yu and Derek Chong and Anthony Sicilia and Michael R. Tomz and Christopher D. Manning and Weiyan Shi},
year={2025},
eprint={2510.01171},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2510.01171}
}
For questions or issues, please open an issue on our GitHub repository.