Talk-Time Sharing Dynamics

The TalkTimeSharing transformer measures how talk-time is distributed between speakers throughout a conversation—–capturing both the overall conversation-level imbalance and the fine-grained dynamics that lead to it. The method and analysis are presented in the paper: Time is On My Side: Dynamics of Talk-Time Sharing in Video-chat Conversations.

Our approach surfaces patterns in how speakers alternate dominance, engage in back-and-forths, or maintain relatively equal control of the floor. We show that even when conversations are similarly balanced overall, their temporal talk-time dynamics can lead to diverging speaker experiences. This framework can be extended to a wide range of dialogue settings, including multi-party and role-asymmetric interactions.

We present a demo, which applies the TalkTimeSharing transformer to the CANDOR corpus, highlighting conversational patterns in video-chat settings. We then extend the analysis to Supreme Court oral arguments to demonstrate the method’s adaptability across different conversational domains. The demo is publically available: Talk-Time Sharing Dynamics in CANDOR Corpus and Supreme Court Oral Arguments

class convokit.talktimesharing.talktimesharing.TalkTimeSharing(primary_threshold=0.50001, window_ps_threshold=0.6, window_ss_threshold=None, window_size=2.5, sliding_size=30, min_utt_words=0, remove_first_last_utt=True)

The TalkTimeSharing transformer quantifies and annotates conversations’ talk-time sharing dynamics between predefined speaker groups within a corpus.

It assigns each conversation a primary speaker group (more talkative), a secondary speaker group (less talkative), and a scalar imbalance score. It also computes a list of windowed imbalance scores over a sliding windows of the conversation to capture how talk-time sharing distribution unfolds over time.

Each utterance is expected to have a speaker group label under utt.meta[‘utt_group’], which can be precomputed or inferred from convo.meta[‘speaker_groups’]. Annotation of speaker groups for each utterance is required before using the TalkTimeSharing transformer. The transform() function assumes either convo.meta[‘speaker_groups’] or utt.meta[‘utt_group’] is already presented in the corpus for correct computation.

Parameters
  • primary_threshold – Minimum talk-time share to label a group as the primary speaker.

  • window_ps_threshold – Talk-time share threshold for identifying dominance in a time window for primary speaker group.

  • window_ss_threshold – Talk-time share threshold for identifying dominance in a time window for secondary speaker group. If not provided, defaults to window_ps_threshold.

  • window_size – Length (in minutes) of each analysis window.

  • sliding_size – Step size (in seconds) to slide the window forward.

  • min_utt_words – Exclude utterances shorter than this number of words from the analysis.

  • remove_first_last_utt – Whether to exclude the first and last utterance.

fit_transform(corpus: convokit.model.corpus.Corpus, selector: Callable[[convokit.model.conversation.Conversation], bool] = <function TalkTimeSharing.<lambda>>)

Same as transform.

Parameters
  • corpus – Corpus to transform

  • selector – (lambda) function selecting conversations to include in this accuracy calculation;

summarize(corpus: convokit.model.corpus.Corpus, selector: Callable[[convokit.model.conversation.Conversation], bool] = <function TalkTimeSharing.<lambda>>, high_balance_threshold: float = 0.5, mid_balance_threshold: float = 0.55, low_balance_threshold: float = 0.65, dominating_throughout_threshold: float = 75.0, back_and_forth_threshold: float = 60.0, alter_dominance_threshold: float = 25.0)

Summarizes the talk-time sharing dynamics across conversations in the corpus.

Categorizes conversations into balance types (high_balance, mid_balance, low_balance) and more fine-grained talk-time sharing dynamics types introduced in the paper (dominating_throughout, back_and_forth, alter_dominance) based on configurable thresholds.

If conversations are missing required metadata (balance_score, balance_lst), the transformer will automatically run on those conversations to annotate them before categorization.

Parameters
  • corpus – Corpus to summarize

  • selector – (lambda) function selecting conversations to include in the summary

  • high_balance_threshold – Minimum balance score for high_balance category (default: 0.5)

  • mid_balance_threshold – Minimum balance score for mid_balance category (default: 0.55)

  • low_balance_threshold – Minimum balance score for low_balance category (default: 0.65)

  • dominating_throughout_threshold – Percentage threshold for dominating_throughout type (default: 75.0)

  • back_and_forth_threshold – Percentage threshold for back_and_forth type (default: 60.0)

  • alter_dominance_threshold – Percentage threshold for alter_dominance type (default: 25.0)

Returns

Dictionary containing counts for each category

transform(corpus: convokit.model.corpus.Corpus, selector: Callable[[convokit.model.conversation.Conversation], bool] = <function TalkTimeSharing.<lambda>>)

Computes and annotate talk-time sharing information for each conversation in the corpus.

Annotates the corpus with speaker group labels and if utterances utt_group metadata is missing, the data is assumed to be labeled in convo.meta[‘speaker_groups’].

Each conversation is then annotated with its primary and secondary speaker groups, an overall conversation level imbalance score, and a list of windowed imbalance score computed via sliding window analysis.

Parameters
  • corpus – Corpus to transform

  • selector – (lambda) function selecting conversations to include in this accuracy calculation;

Returns

The input corpus where selected data is annotated with talk-time sharing dynamics information