Conversation Dynamics Similarity (ConDynS)¶
ConDynS is a similarity measure for comparing conversations with respect to their dynamics, as introduced in the paper “A Similarity Measure for Comparing Conversational Dynamics”. The quality of a conversation goes beyond the individual quality of each reply, and instead emerges from how these combine into interactional patterns that give the conversation its distinctive overall “shape”. ConDynS provides a robust automated method for comparing conversations in terms of their overall interactional dynamics.
In this module, we provide a comprehensive framework for computing ConDynS, including:
ConDynS: Main similarity computation using bidirectional comparison between SCD patterns and conversation transcripts
NaiveConDynS: Simplified similarity computation using only SoP comparison without transcripts
ConDynSBaselines: Baseline methods for comparison including BERTScore, cosine similarity, and LLM-based direct comparison
ConDynS builds on top of the SCD (Summary of Conversation Dynamics) module, which generates structured summaries of conversation dynamics. To compute ConDynS, you first need to extract SCD summaries from your conversations using the SCD transformer.
Note that ConDynS computation requires access to a LLM. We provide a unified interface for working with LLMs in the GenAI module. It is recommended to setup for GenAI models in the module beforehand to compute ConDynS.
Usage Examples¶
We provide experiments notebooks from the paper:
Applications on WikiConv German and Friends
To see a simple example of using both SCD and ConDynS together, check out this example notebook.
Modules¶
ConDynS¶
- 
class 
convokit.convo_similarity.condyns.ConDynS(model_provider: str, config, model: str = None, custom_condyns_prompt: str = None, custom_prompt_dir: str = None)¶ A class to compute ConDynS score between conversations.
ConDynS computes similarity scores between conversations by analyzing their Summary of Conversation Dynamics (SCD) patterns, which are extracted from the SCD as the Sequence of Patterns (SoP), and comparing them with conversation transcripts. The method uses bidirectional similarity computation to capture the full dynamics of both conversations.
- Parameters
 model_provider – The LLM provider to use (e.g., “gpt”, “gemini”)
config – The GenAIConfigManager instance to use
model – Optional specific model name
custom_condyns_prompt – Custom prompt for the condyns prompt template
custom_prompt_dir – Directory to save custom prompts (if not provided, overwrites default prompts in ./prompts)
- 
compare_conversations(corpus, convo_id1: str, convo_id2: str, sop_meta_name: str, formatter=None)¶ Compare two conversations using ConDynS and store the result in both conversations’ metadata.
This method retrieves two conversations from the corpus, formats them into transcripts, extracts their SoP data from metadata, computes the ConDynS score between them, and stores the result in both conversations’ metadata with the key format “condyns_{convo_id1}_{convo_id2}”.
- Parameters
 corpus – The ConvoKit Corpus containing the conversations
convo_id1 – ID of the first conversation
convo_id2 – ID of the second conversation
sop_meta_name – Name of the metadata field containing SoP data
formatter – Optional custom formatter function that takes a Conversation object and returns a transcript string. If None, uses the default formatter.
- Returns
 The computed ConDynS score
- Raises
 KeyError – If conversations don’t exist or required metadata is missing
ValueError – If SoP data is malformed
TypeError – If custom formatter is not callable
- 
compute_bidirectional_similarity(transcript1, transcript2, sop1, sop2)¶ Compute bidirectional similarity between two conversations.
Computes similarity in both directions: SoP1 vs Transcript2 and SoP2 vs Transcript1 to capture the full dynamics of both conversations.
- Parameters
 transcript1 – First conversation transcript
transcript2 – Second conversation transcript
sop1 – SoP for first conversation
sop2 – SoP for second conversation
- Returns
 List of [response_dict1, response_dict2] where each dict contains analysis and scores for each event
- 
compute_score_from_results(results)¶ Compute scores from bidirectional similarity results.
- Parameters
 results – List of bidirectional similarity results
- Returns
 List of mean scores for each direction
- 
compute_unidirectional_similarity(sop1, transcript2)¶ Compute unidirectional similarity between SoPs and a transcript.
Analyzes how well the SoPs from one conversation match the dynamics observed in another conversation’s transcript.
- Parameters
 sop1 – SoPs from the first conversation
transcript2 – Conversation transcript from the second conversation
- Returns
 Dictionary with analysis and scores for each event in sop1
- 
get_condyns_score(transcript1, transcript2, sop1, sop2)¶ Compute ConDynS score between two conversations.
Computes ConDynS with the bidirectional similarity between two conversations using their transcripts and SoPs, then returns the mean score.
- Parameters
 transcript1 – First conversation transcript
transcript2 – Second conversation transcript
sop1 – SoP for first conversation
sop2 – SoP for second conversation
- Returns
 ConDynS score
- 
load_custom_prompts_from_directory(prompt_dir: str)¶ Load custom prompts from a specified directory.
- Parameters
 prompt_dir – Directory containing custom prompt files
- 
measure_score(data)¶ Calculate the mean score from a similarity result dictionary.
- Parameters
 data – Dictionary containing similarity analysis results
- Returns
 Mean score across all events
- 
set_custom_condyns_prompt(prompt_text: str, save_to_file: bool = True)¶ Set a custom condyns prompt template.
- Parameters
 prompt_text – The custom prompt text
save_to_file – Whether to save the prompt to file in custom_prompt_dir or default prompts directory
NaiveConDynS¶
- 
class 
convokit.convo_similarity.naive_condyns.NaiveConDynS(model_provider: str, config, model: str = None, custom_naive_condyns_prompt: str = None, custom_prompt_dir: str = None)¶ A class to compute naive ConDynS score between two Sequences of Patterns.
NaiveConDynS computes similarity scores between conversations by directly comparing their Sequences of Patterns (SoP) without using conversation transcripts. This provides a simpler approach to measuring conversation dynamics similarity.
- Parameters
 model_provider – The LLM provider to use (e.g., “gpt”, “gemini”)
config – The GenAIConfigManager instance to use
model – Optional specific model name
custom_naive_condyns_prompt – Custom prompt for the naive condyns prompt template
custom_prompt_dir – Directory to save custom prompts (if not provided, overwrites defaults in ./prompts)
- 
compare_conversations(corpus, convo_id1: str, convo_id2: str, sop_meta_name: str)¶ Compare two conversations using NaiveConDynS and store the result in both conversations’ metadata.
This method retrieves two conversations from the corpus, extracts their SoP data from metadata, computes the NaiveConDynS score between them, and stores the result in both conversations’ metadata with the key format “condyns_{convo_id1}_{convo_id2}”.
Note: NaiveConDynS only uses SoP data for comparison, not conversation transcripts.
- Parameters
 corpus – The ConvoKit Corpus containing the conversations
convo_id1 – ID of the first conversation
convo_id2 – ID of the second conversation
sop_meta_name – Name of the metadata field containing SoP data
- Returns
 The computed NaiveConDynS score
- Raises
 KeyError – If conversations don’t exist or required metadata is missing
ValueError – If SoP data is malformed
- 
compute_bidirectional_naive_condyns(sop1, sop2)¶ Compute bidirectional naive conditional dynamics similarity between two Sequences of Patterns.
Computes similarity in both directions: sop1 vs sop2 and sop2 vs sop1 to capture the full dynamics of both conversations.
- Parameters
 sop1 – SoP from the first conversation
sop2 – SoP from the second conversation
- Returns
 List of [response_dict1, response_dict2] where each dict contains analysis and scores for each pattern
- 
compute_score_from_results(results)¶ Compute scores from bidirectional similarity results.
- Parameters
 results – List of bidirectional similarity results
- Returns
 List of mean scores for each direction
- 
compute_unidirectional_naive_condyns(sop1, sop2)¶ Compute unidirectional naive conditional dynamics similarity between two Sequences of Patterns.
Compares the SoPs from one conversation against another to measure how well the dynamics of one conversation match those of another.
- Parameters
 sop1 – SoP from the first conversation
sop2 – SoP from the second conversation
- Returns
 Dictionary with analysis and scores for each pattern in sop1
- 
load_custom_prompts_from_directory(prompt_dir: str)¶ Load custom prompts from a specified directory.
- Parameters
 prompt_dir – Directory containing custom prompt files
- 
measure_score(data)¶ Calculate the mean score from a similarity result dictionary.
- Parameters
 data – Dictionary containing similarity analysis results
- Returns
 Mean score across all patterns
- 
set_custom_naive_condyns_prompt(prompt_text: str, save_to_file: bool = True)¶ Set a custom naive condyns prompt template.
- Parameters
 prompt_text – The custom prompt text
save_to_file – Whether to save the prompt to file in custom_prompt_dir or default prompts directory
Baseline Methods¶
- 
class 
convokit.convo_similarity.baseline.ConDynSBaselines(model_provider: str, config, model: str = None, sentence_transformer_model: str = 'all-MiniLM-L6-v2', device: str = 'cpu')¶ A class providing baseline methods for computing conversation similarity to compare with ConDynS.
This class provides various baseline methods for comparing conversations including BERTScore, cosine similarity using sentence embeddings, and GPT-based comparison methods. The baseline methods are used to compare with ConDynS.
- Parameters
 model_provider – The GenAI provider to use (e.g., “gpt”, “gemini”)
model – Optional specific model name
sentence_transformer_model – Sentence transformer model to use for embeddings (default: “all-MiniLM-L6-v2”)
device – Device to use for sentence transformer (default: “cpu”)
- 
get_bertscore(pred, ref)¶ Compute BERTScore between prediction and reference texts.
Uses the BERTScore metric to evaluate semantic similarity between two texts.
- Parameters
 pred – Prediction text to evaluate
ref – Reference text to compare against
- Returns
 BERTScore computation results
- 
get_cosine_similarity(pred, ref)¶ Compute cosine similarity between two texts using sentence embeddings.
Uses the SentenceTransformer model to generate embeddings and computes cosine similarity between them.
- Parameters
 pred – First text for comparison
ref – Second text for comparison
- Returns
 Cosine similarity score between 0 and 1
- 
get_gpt_compare_score(pred, ref, prompt)¶ Compare two texts using GPT model with a custom prompt.
Sends a formatted prompt to GPT model to compare two texts and returns similarity score and reasoning.
- Parameters
 pred – First text for comparison
ref – Second text for comparison
prompt – Prompt template to use for comparison
- Returns
 Tuple of (similarity_score, reasoning)
- 
get_naive_gpt_compare_score_SCDs(scd1, scd2)¶ Compare two Summary of Conversation Dynamics (SCD) using GPT.
Compares two SCD summaries and rates their similarity based on persuasion trajectory and conversational dynamics, ignoring specific topics or claims.
- Parameters
 scd1 – First SCD summary
scd2 – Second SCD summary
- Returns
 Tuple of (similarity_score, reasoning)
- 
get_naive_gpt_compare_score_Transcripts(transcript1, transcript2)¶ Compare two conversation transcripts using GPT.
Compares two conversation transcripts and rates their similarity based on conversational trajectory and dynamics, ignoring specific topics discussed.
- Parameters
 transcript1 – First conversation transcript
transcript2 – Second conversation transcript
- Returns
 Tuple of (similarity_score, reasoning)