Corpus¶
-
class
convokit.model.corpus.
Corpus
¶ Represents a dataset, which can be loaded from a folder or constructed from a list of utterances.
Parameters: - filename – Path to a folder containing a Corpus or to an utterances.jsonl / utterances.json file to load (for use with mem storage)
- corpus_id – Corpus identifier in the database (for use with db storage)
- utterances – list of utterances to initialize Corpus from
- preload_vectors – list of names of vectors to be preloaded from directory; by default, no vectors are loaded but can be loaded any time after corpus initialization (i.e. vectors are lazy-loaded).
- utterance_start_index – if loading from directory and the corpus folder contains utterances.jsonl, specify the line number (zero-indexed) to begin parsing utterances from
- utterance_end_index – if loading from directory and the corpus folder contains utterances.jsonl, specify the line number (zero-indexed) of the last utterance to be parsed.
- merge_lines – whether to merge adjacent lines from same speaker if multiple consecutive utterances belong to the same conversation.
- exclude_utterance_meta – utterance metadata to be ignored
- exclude_conversation_meta – conversation metadata to be ignored
- exclude_speaker_meta – speaker metadata to be ignored
- exclude_overall_meta – overall metadata to be ignored
- disable_type_check – whether to do type checking when loading the Corpus from a directory. Type-checking ensures that the ConvoKitIndex is initialized correctly. However, it may be unnecessary if the index.json is already accurate and disabling it will allow for a faster corpus load. This parameter is set to True by default, i.e. type-checking is not carried out.
- storage_type – either ‘mem’ or ‘db’
- storage – optional convokit.storage.StorageManager object to load the Corpus from
- in_place – when connecting to a Corpus with data already in db storage, whether to load a copy of the Corpus or modify the existing Corpus in place. True by default, i.e. Corpus is not initialized as a seperate copy.
- from_corpus – if specified, the corpus to make a copy from.
- version – (DB only): What version of the specified corpus to connect to
Variables: - meta_index – index of Corpus metadata
- vectors – the vectors stored in the Corpus
- corpus_dirpath – path to the directory the corpus was loaded from
-
add_utterances
(utterances=typing.List[convokit.model.utterance.Utterance], warnings: bool = False, with_checks=True)¶ Add utterances to the Corpus.
If the corpus has utterances that share an id with an utterance in the input utterance list,
Optional warnings will be printed: - if the utterances with same id do not share the same data (added utterance is ignored) - added utterances’ metadata have the same key but different values (added utterance’s metadata will overwrite)
Parameters: - utterances – Utterances to be added to the Corpus
- warnings – set to True for warnings to be printed
- with_checks – set to True if checks on utterance and metadata overlaps are desired. Set to False if newly added utterances are guaranteed to be new and share the same set of metadata keys.
Returns: a Corpus with the utterances from this Corpus and the input utterances combined
-
append_vector_matrix
(matrix: convokit.model.convoKitMatrix.ConvoKitMatrix)¶ Adds an already constructed ConvoKitMatrix to the Corpus.
Parameters: matrix – a ConvoKitMatrix object Returns: None
-
delete_metadata
(obj_type: str, attribute: str)¶ Delete a specified metadata attribute from all Corpus components of the specified object type.
Note that cancelling this method before it runs to completion may lead to errors in the Corpus.
Parameters: - obj_type – ‘utterance’, ‘conversation’, ‘speaker’
- attribute – name of metadata attribute
Returns: None
-
delete_vector_matrix
(name)¶ Deletes the vector matrix stored under name.
Parameters: name – name of the vector mtrix Returns: None
-
directed_pairwise_exchanges
(selector: Union[Callable[[convokit.model.speaker.Speaker, convokit.model.speaker.Speaker], bool], NoneType] = <function Corpus.<lambda>>, speaker_ids_only: bool = False) → Dict[Tuple, List[convokit.model.utterance.Utterance]]¶ Get all directed pairwise exchanges in the dataset.
Parameters: - selector – optional function that takes in a speaking speaker and a replied-to speaker and returns True to include the pair in the result, or False otherwise.
- speaker_ids_only (bool) – if True, index conversations by speaker ids rather than Speaker objects.
Returns: Dictionary mapping (speaker, target) tuples to a list of utterances given by the speaker in reply to the target.
-
dump
(corpus_id: str, data_dir: Union[str, NoneType] = None, exclude_vectors: List[str] = None, force_version: int = None, overwrite_existing_corpus: bool = False, fields_to_skip=None) → None¶ Dumps the corpus and its metadata to disk. Optionally, set force_version to a desired integer version number, otherwise the version number is automatically incremented.
Parameters: - corpus_id – name to identify the corpus
- data_dir – base directory to save corpus in (None to save to a default directory)
- exclude_vectors – list of names of vector matrices to exclude from the dumping step. By default; all vector matrices that belong to the Corpus (whether loaded or not) are dumped.
- force_version – version number to set for the dumped corpus
- overwrite_existing_corpus – if True, save to the path you loaded the corpus from, overriding the original corpus.
- fields_to_skip – a dictionary of {object type: list of metadata attributes to omit when writing to disk}. object types can be one of “speaker”, “utterance”, “conversation”, “corpus”.
-
dump_info
(obj_type, fields, dir_name=None)¶ writes attributes of objects in a corpus to disk. This function, along with load_info, supports cases where a particular attribute is to be stored separately from the other corpus files, for organization or efficiency. These attributes will not be read when the corpus is initialized; rather, they can be loaded on-demand using this function.
For each attribute with name <NAME>, will write to a file called info.<NAME>.jsonl, where rows are json-serialized dictionaries structured as {“id”: id of object, “value”: value of attribute}.
Parameters: - obj_type – type of object the attribute is associated with. can be one of “utterance”, “speaker”, “conversation”.
- fields – a list of names of attributes to write to disk.
- dir_name – the directory to write attributes to. by default, or if set to None, will read from the directory that the Corpus was loaded from.
Returns: None
-
filter_conversations_by
(selector: Callable[[convokit.model.conversation.Conversation], bool])¶ Mutate the corpus by filtering for a subset of Conversations within the Corpus.
Parameters: selector – function for selecting which Conversations to keep Returns: the mutated Corpus
-
filter_utterances_by
(selector: Callable[[convokit.model.utterance.Utterance], bool])¶ Returns a new corpus that includes only a subset of Utterances within this Corpus. This filtering provides no guarantees with regard to maintaining conversational integrity and should be used with care.
Vectors are not preserved.
Parameters: selector – function for selecting which Returns: a new Corpus with a subset of the Utterances
-
static
from_pandas
(utterances_df: pandas.core.frame.DataFrame, speakers_df: Union[pandas.core.frame.DataFrame, NoneType] = None, conversations_df: Union[pandas.core.frame.DataFrame, NoneType] = None) → convokit.model.corpus.Corpus¶ Generates a Corpus from utterances, speakers, and conversations dataframes. For each dataframe, if the ‘id’ column is absent, the dataframe index will be used as the id. Metadata should be denoted with a ‘meta.<key>’ column in the dataframe. For example, if an utterance is to have a metadata key ‘score’, then the ‘meta.score’ column must be present in dataframe.
speakers_df and conversations_df are optional, as their IDs can be inferred from utterances_df, and so their main purpose is to hold speaker / conversation metadata. They should only be included if there exists metadata for the speakers / conversations respectively.
Metadata values that are not basic Python data structures (i.e. lists, dicts, tuples) may be included in the dataframes but may lead to unexpected behavior, depending on how pandas serializes / deserializes those values. Note that as metadata can be added to the Corpus after it is constructed, there is no need to include all metadata keys in the dataframe if it would be inconvenient.
Parameters: - utterances_df – utterances data in a pandas Dataframe, all primary data fields expected, with metadata optional
- speakers_df – (optional) speakers data in a pandas Dataframe
- conversations_df – (optional) conversations data in a pandas Dataframe
Returns: Corpus constructed from the dataframe(s)
-
get_attribute_table
(obj_type, attrs)¶ returns a DataFrame, indexed by the IDs of objects of obj_type, containing attributes of these objects.
Parameters: - obj_type – the type of object to get attributes for. can be ‘utterance’, ‘speaker’ or ‘conversation’.
- attrs – a list of names of attributes to get.
Returns: a Pandas DataFrame of attributes.
-
get_conversation
(convo_id: str) → convokit.model.conversation.Conversation¶ Gets Conversation of the specified id from the corpus
Parameters: convo_id – id of Conversation Returns: Conversation
-
get_conversation_ids
(selector: Union[Callable[[convokit.model.conversation.Conversation], bool], NoneType] = <function Corpus.<lambda>>) → List[str]¶ Get a list of ids of Conversations in the Corpus, with an optional selector that filters for Conversations that should be included
Parameters: selector – a (lambda) function that takes a Conversation and returns True or False (i.e. include / exclude). By default, the selector includes all Conversations in the Corpus. Returns: list of Conversation ids
-
get_conversations_dataframe
(selector: Union[Callable[[convokit.model.conversation.Conversation], bool], NoneType] = <function Corpus.<lambda>>, exclude_meta: bool = False)¶ Get a DataFrame of the conversations with fields and metadata attributes, with an optional selector that filters for conversations that should be included. Edits to the DataFrame do not change the corpus in any way.
Parameters: - exclude_meta – whether to exclude metadata
- selector – a (lambda) function that takes a Conversation and returns True or False (i.e. include / exclude). By default, the selector includes all Conversations in the Corpus.
Returns: a pandas DataFrame
-
get_full_attribute_table
(speaker_convo_attrs, speaker_attrs=None, convo_attrs=None, speaker_suffix='__speaker', convo_suffix='__convo')¶ Returns a table where each row lists a (speaker, convo) level aggregate for each attribute in attrs, along with speaker-level and conversation-level attributes; by default these attributes are suffixed with ‘__speaker’ and ‘__convo’ respectively.
Parameters: - speaker_convo_attrs – list of (speaker, convo) attribute names
- speaker_attrs – list of speaker attribute names
- convo_attrs – list of conversation attribute names
- speaker_suffix – suffix to append to names of speaker-level attributes
- convo_suffix – suffix to append to names of conversation-level attributes.
Returns: DataFrame containing all attributes.
-
get_object
(obj_type: str, oid: str)¶ General Corpus object getter. Gets Speaker / Utterance / Conversation of specified id from the Corpus
Parameters: - obj_type – “speaker”, “utterance”, or “conversation”
- oid – object id
Returns: Corpus object of specified object type with specified object id
-
get_object_ids
(obj_type: str, selector: Callable[[Union[convokit.model.speaker.Speaker, convokit.model.utterance.Utterance, convokit.model.conversation.Conversation]], bool] = <function Corpus.<lambda>>)¶ Get a list of ids of Corpus objects of the specified type in the Corpus, with an optional selector that filters for objects that should be included
Parameters: - obj_type – “speaker”, “utterance”, or “conversation”
- selector – a (lambda) function that takes a Corpus object and returns True or False (i.e. include / exclude). By default, the selector includes all objects of the specified type in the Corpus.
Returns: list of Corpus object ids
-
get_speaker
(speaker_id: str) → convokit.model.speaker.Speaker¶ Gets Speaker of the specified id from the corpus
Parameters: speaker_id – id of Speaker Returns: Speaker
-
get_speaker_convo_attribute_table
(attrs)¶ Returns a table where each row lists a (speaker, convo) level aggregate for each attribute in attrs.
Parameters: attrs – list of (speaker, convo) attribute names Returns: DataFrame containing all speaker,convo attributes.
-
get_speaker_convo_info
(speaker_id, convo_id, key=None)¶ retreives speaker-conversation attribute key for speaker_id in conversation convo_id.
Parameters: - speaker_id – speaker
- convo_id – conversation
- key – name of attribute. if None, will return all attributes for that speaker-conversation.
Returns: attribute value
-
get_speaker_ids
(selector: Union[Callable[[convokit.model.speaker.Speaker], bool], NoneType] = <function Corpus.<lambda>>) → List[str]¶ Get a list of ids of Speakers in the Corpus, with an optional selector that filters for Speakers that should be included
Parameters: selector – a (lambda) function that takes a Speaker and returns True or False (i.e. include / exclude). By default, the selector includes all Speakers in the Corpus. Returns: list of Speaker ids
-
get_speakers_dataframe
(selector: Union[Callable[[convokit.model.speaker.Speaker], bool], NoneType] = <function Corpus.<lambda>>, exclude_meta: bool = False)¶ Get a DataFrame of the Speakers with fields and metadata attributes, with an optional selector that filters Speakers that should be included. Edits to the DataFrame do not change the corpus in any way.
Parameters: - exclude_meta – whether to exclude metadata
- selector – selector: a (lambda) function that takes a Speaker and returns True or False (i.e. include / exclude). By default, the selector includes all Speakers in the Corpus.
Returns: a pandas DataFrame
-
get_usernames
(selector: Union[Callable[[convokit.model.speaker.Speaker], bool], NoneType] = <function Corpus.<lambda>>) → Set[str]¶ Get names of speakers in the dataset.
This function will be deprecated and replaced by get_speaker_ids()
Parameters: selector – optional function that takes in a Speaker and returns True to include the speaker’s name in the resulting list, or False otherwise. Returns: Set containing all speaker names selected by the selector function, or all speaker names in the dataset if no selector function was used.
-
get_utterance
(utt_id: str) → convokit.model.utterance.Utterance¶ Gets Utterance of the specified id from the corpus
Parameters: utt_id – id of Utterance Returns: Utterance
-
get_utterance_ids
(selector: Union[Callable[[convokit.model.utterance.Utterance], bool], NoneType] = <function Corpus.<lambda>>) → List[str]¶ Get a list of ids of Utterances in the Corpus, with an optional selector that filters for Utterances that should be included
Parameters: selector – a (lambda) function that takes an Utterance and returns True or False (i.e. include / exclude). By default, the selector includes all Utterances in the Corpus. Returns: list of Utterance ids
-
get_utterances_dataframe
(selector: Union[Callable[[convokit.model.utterance.Utterance], bool], NoneType] = <function Corpus.<lambda>>, exclude_meta: bool = False)¶ Get a DataFrame of the utterances with fields and metadata attributes, with an optional selector that filters utterances that should be included. Edits to the DataFrame do not change the corpus in any way.
Parameters: - exclude_meta – whether to exclude metadata
- selector – a (lambda) function that takes a Utterance and returns True or False (i.e. include / exclude). By default, the selector includes all Utterances in the Corpus.
Returns: a pandas DataFrame
-
get_vector_matrix
(name)¶ Gets the ConvoKitMatrix stored in the corpus as name. Returns None if no such matrix exists.
Parameters: name – name of the vector matrix Returns: a ConvoKitMatrix object
-
get_vectors
(name, ids: Union[List[str], NoneType] = None, columns: Union[List[str], NoneType] = None, as_dataframe: bool = False)¶ Get the vectors for some corpus component objects.
Parameters: - name – name of the vector matrix
- ids – optional list of object ids to get vectors for; all by default
- columns – optional list of named columns of the vector to include; all by default
- as_dataframe – whether to return the vector as a dataframe (True) or in its raw array form (False). False by default.
Returns: a vector matrix (either np.ndarray or csr_matrix) or a pandas dataframe
-
has_conversation
(convo_id: str) → bool¶ Checks if a Conversation of the specified id exists in the Corpus
Parameters: convo_id – id of Conversation Returns: True if Conversation of specified id is present, False otherwise
-
has_speaker
(speaker_id: str) → bool¶ Checks if a Speaker of the specified id exists in the Corpus
Parameters: speaker_id – id of Speaker Returns: True if Speaker of specified id is present, False otherwise
-
has_utterance
(utt_id: str) → bool¶ Checks if an Utterance of the specified id exists in the Corpus
Parameters: utt_id – id of Utterance Returns: True if Utterance of specified id is present, False otherwise
-
iter_conversations
(selector: Union[Callable[[convokit.model.conversation.Conversation], bool], NoneType] = <function Corpus.<lambda>>) → Generator[convokit.model.conversation.Conversation, NoneType, NoneType]¶ Get conversations in the Corpus, with an optional selector that filters for Conversations that should be included
Parameters: selector – a (lambda) function that takes a Conversation and returns True or False (i.e. include / exclude). By default, the selector includes all Conversations in the Corpus. Returns: a generator of Conversations
-
iter_objs
(obj_type: str, selector: Callable[[Union[convokit.model.speaker.Speaker, convokit.model.utterance.Utterance, convokit.model.conversation.Conversation]], bool] = <function Corpus.<lambda>>)¶ Get Corpus objects of specified type from the Corpus, with an optional selector that filters for Corpus object that should be included
Parameters: - obj_type – “speaker”, “utterance”, or “conversation”
- selector – a (lambda) function that takes a Corpus object and returns True or False (i.e. include / exclude). By default, the selector includes all objects of the specified type in the Corpus.
Returns: a generator of Speakers
-
iter_speakers
(selector: Union[Callable[[convokit.model.speaker.Speaker], bool], NoneType] = <function Corpus.<lambda>>) → Generator[convokit.model.speaker.Speaker, NoneType, NoneType]¶ Get Speakers in the Corpus, with an optional selector that filters for Speakers that should be included
Parameters: selector – a (lambda) function that takes a Speaker and returns True or False (i.e. include / exclude). By default, the selector includes all Speakers in the Corpus. Returns: a generator of Speakers
-
iter_utterances
(selector: Union[Callable[[convokit.model.utterance.Utterance], bool], NoneType] = <function Corpus.<lambda>>) → Generator[convokit.model.utterance.Utterance, NoneType, NoneType]¶ Get utterances in the Corpus, with an optional selector that filters for Utterances that should be included.
Parameters: selector – a (lambda) function that takes an Utterance and returns True or False (i.e. include / exclude). By default, the selector includes all Utterances in the Corpus. Returns: a generator of Utterances
-
load_info
(obj_type, fields=None, dir_name=None)¶ loads attributes of objects in a corpus from disk. This function, along with dump_info, supports cases where a particular attribute is to be stored separately from the other corpus files, for organization or efficiency. These attributes will not be read when the corpus is initialized; rather, they can be loaded on-demand using this function.
For each attribute with name <NAME>, will read from a file called info.<NAME>.jsonl, and load each attribute value into the respective object’s .meta field.
Parameters: - obj_type – type of object the attribute is associated with. can be one of “utterance”, “speaker”, “conversation”.
- fields – a list of names of attributes to load. if empty, will load all attributes stored in the specified directory dir_name.
- dir_name – the directory to read attributes from. by default, or if set to None, will read from the directory that the Corpus was loaded from.
Returns: None
-
merge
(other_corpus, warnings: bool = True)¶ Public Function for merging. Modify will always be false
-
merge_helper
(other_corpus, warnings: bool = True, modify=False)¶ “Private” function for merge where modify is normally false which returns the modified item. Main use for modify=True is for add_utterances to keep track of self corpus and ID
Merges this corpus with another corpus.
Utterances with the same id must share the same data, otherwise the other corpus utterance data & metadata will be ignored. A warning is printed when this happens.
If metadata of this corpus (or its conversations / utterances) shares a key with the metadata of the other corpus, the other corpus’s metadata (or its conversations / utterances) values will be used. A warning is printed when this happens.
May mutate original and other corpus in the process.
(Updates internal ConvoKit Index to match post-merge state and uses this Corpus’s version number.)
Parameters: - other_corpus – Corpus
- warnings – print warnings when data conflicts are encountered
Returns: new Corpus constructed from combined lists of utterances
-
organize_speaker_convo_history
(utterance_filter=None)¶ - For each speaker, pre-computes a list of all of their utterances, organized by the conversation they participated in. Annotates speaker with the following:
- n_convos: number of conversations
- start_time: time of first utterance, across all conversations
- conversations: a dictionary keyed by conversation id, where entries consist of:
- idx: the index of the conversation, in terms of the time of the first utterance contributed by that particular speaker (i.e., idx=0 means this is the first conversation the speaker ever participated in)
- n_utterances: the number of utterances the speaker contributed in the conversation
- start_time: the timestamp of the speaker’s first utterance in the conversation
- utterance_ids: a list of ids of utterances contributed by the speaker, ordered by timestamp.
In case timestamps are not provided with utterances, the present behavior is to sort just by utterance id.
Parameters: utterance_filter – function that returns True for an utterance that counts towards a speaker having participated in that conversation. (e.g., one could filter out conversations where the speaker contributed less than k words per utterance)
-
print_summary_stats
() → None¶ Helper function for printing the number of Speakers, Utterances, and Conversations in this Corpus
Returns: None
-
random_conversation
() → convokit.model.conversation.Conversation¶ Get a random Conversation from the Corpus
Returns: a random Conversation
-
random_speaker
() → convokit.model.speaker.Speaker¶ Get a random Speaker from the Corpus
Returns: a random Speaker
-
random_utterance
() → convokit.model.utterance.Utterance¶ Get a random Utterance from the Corpus
Returns: a random Utterance
-
reindex_conversations
(new_convo_roots: List[str], preserve_corpus_meta: bool = True, preserve_convo_meta: bool = True, verbose=True) → convokit.model.corpus.Corpus¶ Generates a new Corpus from current Corpus with specified list of utterance ids to use as conversation ids.
The subtrees denoted by these utterance ids should be distinct and should not overlap, otherwise there may be unexpected behavior.
Vectors are not preserved. The original Corpus will be mutated.
Parameters: - new_convo_roots – List of utterance ids to use as conversation ids
- preserve_corpus_meta – set as True to copy original Corpus metadata to new Corpus
- preserve_convo_meta – set as True to copy original Conversation metadata to new Conversation metadata (For each new conversation, use the metadata of the conversation that the utterance belonged to.)
- verbose – whether to print a warning when
Returns: new Corpus with reindexed Conversations
-
reinitialize_index
()¶ Reinitialize the Corpus Index from scratch.
Returns: None (sets the .storage.index of Corpus and of the corpus component objects)
-
set_speaker_convo_info
(speaker_id, convo_id, key, value)¶ assigns speaker-conversation attribute key with value to speaker speaker_id in conversation convo_id.
Parameters: - speaker_id – speaker
- convo_id – conversation
- key – name of attribute
- value – value of attribute
Returns: None
-
set_vector_matrix
(name: str, matrix, ids: List[str] = None, columns: List[str] = None)¶ Adds a vector matrix to the Corpus, where the matrix is an array of vector representations of some set of Corpus components (i.e. Utterances, Conversations, Speakers).
A ConvoKitMatrix object is initialized from the arguments and stored in the Corpus.
Parameters: - name – descriptive name for the matrix
- matrix – numpy or scipy array matrix
- ids – optional list of Corpus component object ids, where each id corresponds to each row of the matrix
- columns – optional list of names for the columns of the matrix
Returns: None
-
speaking_pairs
(selector: Union[Callable[[convokit.model.speaker.Speaker, convokit.model.speaker.Speaker], bool], NoneType] = <function Corpus.<lambda>>, speaker_ids_only: bool = False) → Set[Tuple[str, str]]¶ Get all directed speaking pairs (a, b) of speakers such that a replies to b at least once in the dataset.
Parameters: - selector – optional function that takes in a Speaker and a replied-to Speaker and returns True to include the pair in the result, or False otherwise.
- speaker_ids_only (bool) – if True, return just pairs of speaker names rather than speaker objects.
Returns: Set containing all speaking pairs selected by the selector function, or all speaking pairs in the dataset if no selector function was used.
-
update_speakers_data
() → None¶ Updates the conversation and utterance lists of every Speaker in the Corpus
Returns: None