-
Sample_Persona_Meta/: Code for generating meta personas from US Census Bureau dataget_dist/: Probability sampling functions for demographic information (age, sex, race, education, income, etc.)collect_data/: Data collection notebooks from US Census Bureausample_marginal.py: Main script for generating meta personas
-
Gen_Sim/: Core simulation frameworkPersona_Generation.py: Generates detailed personas from meta personasOpinion_Simulation.py: Runs opinion simulations with generated personasPersona_Calibration.py: Calibrating persona generation to avoid sampling bias.configs/: Configuration files for different models and simulation parametersmodel_configs/: Model-specific configurations for various LLMsrun_persona_gen.py: Script for generating personasrun_simluation_topic.py: Script for running topic-based simulationsrun_simluation_slurm.py: SLURM cluster execution script
-
Prompts/: Prompt templates for persona generation and opinion simulationPersona_Generation/: Prompts for creating detailed personas. We also include prompts we used for experimentation. For the simulation experiments in the paper, we used the following persona types:objective_table_persona/: Structured objective persona with demographic tablessubjective_table_persona/: Structured subjective persona with opinion tablesdescriptive_persona/: Natural language descriptive personas
Opinion_Simulation/: Prompts for opinion simulation tasksfast_user_instruction.json: Fast simulation without chain-of-thoughtmulti_turn_*.json: Multi-turn conversation simulation promptsreason_user_instruction.json: CoT-based opinion generation
-
Simulation_Result/: Output directory for simulation results- Contains results organized by topic and persona type
First, generate meta personas from US Census data:
cd Sample_Persona_Meta
python sample_marginal.pyThis creates demographic samples for all US states based on Census Bureau data.
Generate detailed personas using LLMs:
cd Gen_Sim
python run_persona_gen.pyThis creates the three persona types (objective table, subjective table, descriptive) for each state.
First, create simulation questions in the Simulation_Result/ directory, register the questions as a file called context.json. See the context.json file in the Simulation_Result/ directory for an example.
Run opinion simulations on various topics:
cd Gen_Sim
python run_simluation_topic.pyThis simulates opinions across different topics using the generated personas.
configs/persona_config.json: Configuration for persona generationconfigs/simulation_config.json: Configuration for opinion simulationsmodel_configs/: Model-specific configurations for different LLMs
- Llama-3.1-8B-Instruct
- Llama-3.1-70B-Instruct
- Athene-70B
- Mixtral-8x7B-Instruct-v0.1
- Nemotron-70B-Instruct
- Qwen2.5-72B-Instruct
You can register new models in the model_configs/ directory.