Verbalized-Sampling-Dialogue-Simulation
0
44 commits
2 linked in READMEs
updated Oct 29, 2025
This dataset demonstrates how Verbalized Sampling (VS) enables more diverse and realistic multi-turn conversational simulations between AI agents. From the paper Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity.
The Dialogue Simulation dataset contains multi-turn conversations between pairs of language models, comparing different approaches to generating diverse social interactions. This dataset is valuable for:
Verbalized Sampling approaches produce significantly more diverse dialogue trajectories compared to baseline methods, while maintaining conversational coherence and naturalness. This enables more realistic social simulations and better coverage of possible conversation paths.
Each config represents a different dialogue generation method:
Direct: Standard prompting baseline without special samplingFine_Tune: Conversations using fine-tuned modelsVS_Standard: Verbalized Sampling with structured probabilitiesVS_CoT: Verbalized Sampling with chain-of-thought (if available)VS_Multi: Combined verbalized sampling approach (if available)Each split represents a specific model used in the conversations:
Available models:
gpt_4_1: GPT-4.1gpt_4_1_mini: GPT-4.1-miniclaude_4_sonnet: Claude-4-Sonnetgemini_2_5_pro: Gemini-2.5-Progemini_2_5_flash: Gemini-2.5-Flashdeepseek_r1: DeepSeek-R1o3: o3 from OpenAIQwen3-235b: Qwen3 235B A22B Instruct 2507llama_3_1_70b_instruct: Llama-3.1-70B-InstructLlama_3_1_8B: Llama-3.1-8B (Fine-Tuned) - only available in Fine_Tune configEach example contains:
conversation_id (string): Unique identifier for the conversationutterances (string): JSON-encoded list of conversation turns, each containing:
conversation_id (string): Links utterance to conversationutterance_id (string): Unique ID for this utterancespeaker (string): Speaker identifierrole (int): Speaker role (0 or 1)text (string): The utterance contentmodel (string): The model used for this conversationmethod (string): The generation method (Direct, Fine_Tune, VS_Standard, etc.)num_turns (int): Total number of utterances in the conversationfrom datasets import load_dataset
# Load Direct method conversations
direct = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "Direct")
# Access GPT-4.1 conversations
gpt_convos = direct["gpt_4_1"]
print(f"Number of conversations: {len(gpt_convos)}")
import json
# Read and display a conversation
for example in gpt_convos[:1]: # First conversation
print(f"Conversation ID: {example['conversation_id']}")
print(f"Model: {example['model']}")
print(f"Method: {example['method']}")
print(f"Number of turns: {example['num_turns']}\n")
utterances = json.loads(example["utterances"])
# Display conversation
for utt in utterances:
speaker_label = "Speaker A" if utt["role"] == 0 else "Speaker B"
print(f"{speaker_label}: {utt['text']}\n")
import json
import numpy as np
def analyze_conversation_lengths(dataset_split):
"""Compute statistics about conversation lengths"""
lengths = []
for example in dataset_split:
utterances = json.loads(example["utterances"])
lengths.append(len(utterances))
return {
"mean": np.mean(lengths),
"median": np.median(lengths),
"min": np.min(lengths),
"max": np.max(lengths),
"std": np.std(lengths)
}
# Compare conversation lengths across methods
direct_data = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "Direct")["gpt_4_1"]
vs_standard_data = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation, "VS_Standard")["gpt_4_1"]
print("Direct:", analyze_conversation_lengths(direct_data))
print("VS_Standard:", analyze_conversation_lengths(vs_standard_data))
import json
from collections import Counter
def compute_lexical_diversity(dataset_split):
"""Compute lexical diversity (type-token ratio)"""
all_words = []
for example in dataset_split:
utterances = json.loads(example["utterances"])
for utt in utterances:
words = utt["text"].lower().split()
all_words.extend(words)
unique_words = len(set(all_words))
total_words = len(all_words)
return unique_words / total_words if total_words > 0 else 0
def compute_topic_diversity(dataset_split):
"""Measure diversity of conversation topics"""
# Simple topic extraction using first few words
topics = []
for example in dataset_split:
utterances = json.loads(example["utterances"])
if utterances:
# Use first utterance as topic indicator
first_utt = utterances[0]["text"][:50]
topics.append(first_utt)
unique_topics = len(set(topics))
total_convos = len(topics)
return unique_topics / total_convos if total_convos > 0 else 0
direct = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "Direct")["gpt_4_1"]
vs_standard = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "VS_Standard")["gpt_4_1"]
print(f"Direct lexical diversity: {compute_lexical_diversity(direct):.3f}")
print(f"VS_Standard lexical diversity: {compute_lexical_diversity(vs_standard):.3f}")
print(f"Direct topic diversity: {compute_topic_diversity(direct):.3f}")
print(f"VS_Standard topic diversity: {compute_topic_diversity(vs_standard):.3f}")
import json
def analyze_turn_taking(dataset_split):
"""Analyze turn-taking patterns"""
turn_counts = {0: 0, 1: 0}
total_switches = 0
for example in dataset_split:
utterances = json.loads(example["utterances"])
for utt in utterances:
turn_counts[utt["role"]] += 1
# Count role switches
for i in range(1, len(utterances)):
if utterances[i]["role"] != utterances[i-1]["role"]:
total_switches += 1
total_turns = sum(turn_counts.values())
balance = min(turn_counts.values()) / max(turn_counts.values()) if max(turn_counts.values()) > 0 else 0
return {
"total_turns": total_turns,
"speaker_balance": balance,
"avg_switches_per_convo": total_switches / len(dataset_split)
}
# Analyze turn-taking patterns
direct = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "Direct")["gpt_4_1"]
print("Turn-taking analysis:", analyze_turn_taking(direct))
Conversations were generated through multi-turn interactions between pairs of language models. Initial prompts were designed to elicit natural, engaging dialogues.
For each (model_pair, approach) combination:
sampling approach to select diverse responsesConversations are stored as JSONL with one utterance per line, grouped by conversation ID. Each utterance maintains:
This dataset is valuable for:
This Agreement contains the terms and conditions that govern your access and use of the Verbalized-Sampling-Dialogue-Simulation 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.
Verbalized-Sampling-Dialogue-Simulation
0
44 commits
2 linked in READMEs
updated Oct 29, 2025
This dataset demonstrates how Verbalized Sampling (VS) enables more diverse and realistic multi-turn conversational simulations between AI agents. From the paper Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity.
The Dialogue Simulation dataset contains multi-turn conversations between pairs of language models, comparing different approaches to generating diverse social interactions. This dataset is valuable for:
Verbalized Sampling approaches produce significantly more diverse dialogue trajectories compared to baseline methods, while maintaining conversational coherence and naturalness. This enables more realistic social simulations and better coverage of possible conversation paths.
Each config represents a different dialogue generation method:
Direct: Standard prompting baseline without special samplingFine_Tune: Conversations using fine-tuned modelsVS_Standard: Verbalized Sampling with structured probabilitiesVS_CoT: Verbalized Sampling with chain-of-thought (if available)VS_Multi: Combined verbalized sampling approach (if available)Each split represents a specific model used in the conversations:
Available models:
gpt_4_1: GPT-4.1gpt_4_1_mini: GPT-4.1-miniclaude_4_sonnet: Claude-4-Sonnetgemini_2_5_pro: Gemini-2.5-Progemini_2_5_flash: Gemini-2.5-Flashdeepseek_r1: DeepSeek-R1o3: o3 from OpenAIQwen3-235b: Qwen3 235B A22B Instruct 2507llama_3_1_70b_instruct: Llama-3.1-70B-InstructLlama_3_1_8B: Llama-3.1-8B (Fine-Tuned) - only available in Fine_Tune configEach example contains:
conversation_id (string): Unique identifier for the conversationutterances (string): JSON-encoded list of conversation turns, each containing:
conversation_id (string): Links utterance to conversationutterance_id (string): Unique ID for this utterancespeaker (string): Speaker identifierrole (int): Speaker role (0 or 1)text (string): The utterance contentmodel (string): The model used for this conversationmethod (string): The generation method (Direct, Fine_Tune, VS_Standard, etc.)num_turns (int): Total number of utterances in the conversationfrom datasets import load_dataset
# Load Direct method conversations
direct = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "Direct")
# Access GPT-4.1 conversations
gpt_convos = direct["gpt_4_1"]
print(f"Number of conversations: {len(gpt_convos)}")
import json
# Read and display a conversation
for example in gpt_convos[:1]: # First conversation
print(f"Conversation ID: {example['conversation_id']}")
print(f"Model: {example['model']}")
print(f"Method: {example['method']}")
print(f"Number of turns: {example['num_turns']}\n")
utterances = json.loads(example["utterances"])
# Display conversation
for utt in utterances:
speaker_label = "Speaker A" if utt["role"] == 0 else "Speaker B"
print(f"{speaker_label}: {utt['text']}\n")
import json
import numpy as np
def analyze_conversation_lengths(dataset_split):
"""Compute statistics about conversation lengths"""
lengths = []
for example in dataset_split:
utterances = json.loads(example["utterances"])
lengths.append(len(utterances))
return {
"mean": np.mean(lengths),
"median": np.median(lengths),
"min": np.min(lengths),
"max": np.max(lengths),
"std": np.std(lengths)
}
# Compare conversation lengths across methods
direct_data = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "Direct")["gpt_4_1"]
vs_standard_data = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation, "VS_Standard")["gpt_4_1"]
print("Direct:", analyze_conversation_lengths(direct_data))
print("VS_Standard:", analyze_conversation_lengths(vs_standard_data))
import json
from collections import Counter
def compute_lexical_diversity(dataset_split):
"""Compute lexical diversity (type-token ratio)"""
all_words = []
for example in dataset_split:
utterances = json.loads(example["utterances"])
for utt in utterances:
words = utt["text"].lower().split()
all_words.extend(words)
unique_words = len(set(all_words))
total_words = len(all_words)
return unique_words / total_words if total_words > 0 else 0
def compute_topic_diversity(dataset_split):
"""Measure diversity of conversation topics"""
# Simple topic extraction using first few words
topics = []
for example in dataset_split:
utterances = json.loads(example["utterances"])
if utterances:
# Use first utterance as topic indicator
first_utt = utterances[0]["text"][:50]
topics.append(first_utt)
unique_topics = len(set(topics))
total_convos = len(topics)
return unique_topics / total_convos if total_convos > 0 else 0
direct = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "Direct")["gpt_4_1"]
vs_standard = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "VS_Standard")["gpt_4_1"]
print(f"Direct lexical diversity: {compute_lexical_diversity(direct):.3f}")
print(f"VS_Standard lexical diversity: {compute_lexical_diversity(vs_standard):.3f}")
print(f"Direct topic diversity: {compute_topic_diversity(direct):.3f}")
print(f"VS_Standard topic diversity: {compute_topic_diversity(vs_standard):.3f}")
import json
def analyze_turn_taking(dataset_split):
"""Analyze turn-taking patterns"""
turn_counts = {0: 0, 1: 0}
total_switches = 0
for example in dataset_split:
utterances = json.loads(example["utterances"])
for utt in utterances:
turn_counts[utt["role"]] += 1
# Count role switches
for i in range(1, len(utterances)):
if utterances[i]["role"] != utterances[i-1]["role"]:
total_switches += 1
total_turns = sum(turn_counts.values())
balance = min(turn_counts.values()) / max(turn_counts.values()) if max(turn_counts.values()) > 0 else 0
return {
"total_turns": total_turns,
"speaker_balance": balance,
"avg_switches_per_convo": total_switches / len(dataset_split)
}
# Analyze turn-taking patterns
direct = load_dataset("CHATS-Lab/Verbalized-Sampling-Dialogue-Simulation", "Direct")["gpt_4_1"]
print("Turn-taking analysis:", analyze_turn_taking(direct))
Conversations were generated through multi-turn interactions between pairs of language models. Initial prompts were designed to elicit natural, engaging dialogues.
For each (model_pair, approach) combination:
sampling approach to select diverse responsesConversations are stored as JSONL with one utterance per line, grouped by conversation ID. Each utterance maintains:
This dataset is valuable for:
This Agreement contains the terms and conditions that govern your access and use of the Verbalized-Sampling-Dialogue-Simulation 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.