From 94f47c2eba3eaa6ce15e1c09b242b23917091d43 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 15 Nov 2022 09:56:55 +0100 Subject: [PATCH 01/51] Test approximation of topic distribution --- bertopic/_bertopic.py | 241 ++++++++++++++++++ .../plotting/_approximate_distribution.py | 85 ++++++ bertopic/plotting/_distribution.py | 3 - .../distribution/distribution.md | 31 +++ tests/test_plotting/test_approximate.py | 27 ++ 5 files changed, 384 insertions(+), 3 deletions(-) create mode 100644 bertopic/plotting/_approximate_distribution.py create mode 100644 docs/getting_started/distribution/distribution.md create mode 100644 tests/test_plotting/test_approximate.py diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index bb763f80..dda01cbb 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -9,6 +9,7 @@ pass import re +import math import joblib import inspect import numpy as np @@ -17,6 +18,7 @@ from packaging import version from scipy.sparse import csr_matrix from scipy.cluster import hierarchy as sch +from pandas.io.formats.style import Styler from typing import List, Tuple, Union, Mapping, Any, Callable, Iterable # Models @@ -934,6 +936,194 @@ def hierarchical_topics(self, return hier_topics + def approximate_distribution(self, + documents: Union[str, List[str]], + window: int = 4, + stride: int = 1, + min_similarity: float = 0.1, + use_embedding_model: bool = False, + calculate_tokens: bool = False, + separator: str = " ") -> Tuple[np.ndarray, + Union[List[np.ndarray], None]]: + """ A post-hoc approximation of topic distributions across documents. + + In order to perform this approximation, each document is split into tokens + according to the provided tokenizer in the `CountVectorizer`. Then, a + sliding window is applied on each document creating subsets of the document. + For example, with a window size of 3 and stride of 1, the sentence: + + `Solving the right problem is difficult.` + + can be split up into `solving the right`, `the right problem`, `right problem is`, + and `problem is difficult`. These are called tokensets. For each of these + tokensets, we calculate their c-TF-IDF representation and find out + how similar they are to the previously generated topics. Then, the + similarities to the topics for each tokenset are summed in order to + create a topic distribution for the entire document. + + We can also dive into this a bit deeper by then splitting these tokensets + up into individual tokens and calculate how much a word, in a specific sentence, + contributes to the topics found in that document. This can be enabled by + setting `calculate_tokens=True` which can be used for visualization purposes + in `topic_model.visualize_approximate_distribution`. + + The main output, `topic_distributions`, can also be used directly in + `.visualize_distribution(topic_distributions[index])` by simply selecting + a single distribution. + + Arguments: + documents: A single document or a list of documents for which we + approximate their topic distributions + + window: Size of the moving window which indicates the number of + tokens being considered. + stride: How far the window should move at each step. + min_similarity: The minimum similarity of a document's tokenset + with respect to the topics. + use_embedding_model: Whether to use the topic model's embedding + model to calculate the similarity between + tokensets and topics instead of using c-TF-IDF. + calculate_tokens: Calculate the similarity of tokens with all topics. + NOTE: This is computation-wise more expensive and + can require more memory. Using this over batches of + documents might be preferred. + separator: The separator used to merge tokens into tokensets. + + Returns: + topic_distributions: A `n` x `m` matrix containing the topic distributions + for all input documents with `n` being the documents + and `m` the topics. + topic_token_distributions: A list of `t` x `m` arrays with `t` being the + number of tokens for the respective document + and `m` the topics. + + Examples: + + After fitting the model, the topic distributions can be calculated regardless + of the clustering model and regardless of whether the documents were previously + seen or not: + + ```python + topic_distr, _ = topic_model.approximate_distribution(docs) + ``` + + As a result, the topic distributions are calculated in `topic_distr` for the + entire document based on token set with a specific window size and stride. + + If you want to calculate the topic distributions on a token-level: + + ```python + topic_distr, topic_token_distr = topic_model.approximate_distribution(docs, calculate_tokens=True) + ``` + + The `topic_token_distr` then contains, for each token, the best fitting topics. + As with `topic_distr`, it can contain multiple topics for a single token. + """ + if isinstance(documents, str): + documents = [documents] + + # Extract tokens + analyzer = self.vectorizer_model.build_tokenizer() + tokens = [analyzer(document) for document in documents] + + # Extract token sets + all_sentences = [] + all_token_sets = [] + all_indices = [0] + all_doc_ids = [] + all_token_sets_ids = [] + + for doc_id, tokenset in enumerate(tokens): + token_ids = [i for i in range(len(tokenset))] + if len(tokens) < window: + token_sets = tokens + else: + + # Extract tokensets using window and stride parameters + stride_indices = list(range(len(tokenset)))[::stride] + token_sets = [] + token_sets_ids = [] + for stride_index in stride_indices: + selected_tokens = tokenset[stride_index: stride_index+window] + token_sets.append(selected_tokens) + token_sets_ids.append(list(range(stride_index, stride_index+len(selected_tokens)))) + + # Add padding + padded = [] + padded_ids = [] + t = math.ceil(window / stride) - 1 + for i in range(math.ceil(window / stride) - 1): + padded.append(tokenset[:window - ((t-i) * stride)]) + padded_ids.append(list(range(0, window - ((t-i) * stride)))) + + token_sets = padded + token_sets + token_sets_ids = padded_ids + token_sets_ids + + # Join the tokens + sentences = [separator.join(token) for token in token_sets] + all_sentences.extend(sentences) + all_token_sets.extend(token_sets) + all_token_sets_ids.extend(token_sets_ids) + all_indices.append(all_indices[-1] + len(sentences)) + all_doc_ids.extend([doc_id for _ in range(len(sentences))]) + + # Calculate similarity between embeddings of token sets and the topics + if use_embedding_model: + embeddings = self._extract_embeddings(all_sentences, method="document", verbose=True) + similarity = cosine_similarity(embeddings, self.topic_embeddings_[self._outliers:]) + + # Calculate similarity between c-TF-IDF of token sets and the topics + else: + bow_doc = self.vectorizer_model.transform(all_sentences) + c_tf_idf_doc = self.ctfidf_model.transform(bow_doc) + similarity = cosine_similarity(c_tf_idf_doc, self.c_tf_idf_[self._outliers:]) + + # Only keep similarities that exceed the minimum + similarity[similarity < min_similarity] = 0 + + # Aggregate results on an individual token level + if calculate_tokens: + topic_distributions = [] + topic_token_distributions = [] + for index, token in enumerate(tokens): + start = all_indices[index] + end = all_indices[index+1] + + if start == end: + end = end + 1 + + token_id = [i for i in range(len(token))] + token_val = {index: [] for index in token_id} + for sim, token_set in zip(similarity[start:end], all_token_sets_ids[start:end]): + for t in token_set: + if t in token_val: + token_val[t].append(sim) + + matrix = [] + for key, value in token_val.items(): + matrix.append(np.add.reduce(value)) + + topic_token_distributions.append(np.array(matrix)) + topic_distributions.append(np.add.reduce(matrix)) + + topic_distributions = normalize(topic_distributions, norm='l1', axis=1) + + # Aggregate on a tokenset level indicated by the window and stride + else: + topic_distributions = [] + for index in range(len(all_indices)-1): + start = all_indices[index] + end = all_indices[index+1] + + if start == end: + end = end + 1 + group = similarity[start:end].sum(axis=0) + topic_distributions.append(group) + topic_distributions = normalize(np.array(topic_distributions), norm='l1', axis=1) + topic_token_distributions = None + + return topic_distributions, topic_token_distributions + def find_topics(self, search_term: str, top_n: int = 5) -> Tuple[List[int], List[float]]: @@ -1939,6 +2129,57 @@ def visualize_distribution(self, width=width, height=height) + def visualize_approximate_distribution(self, + document: str, + topic_token_distribution: np.ndarray, + normalize: bool = False) -> Styler: + """ Visualize the topic distribution calculated by `.approximate_topic_distribution` + on a token level. Thereby indicating the extend to which a certain word or phrases belong + to a specific topic. The assumption here is that a single word can belong to multiple + similar topics and as such give information about the broader set of topics within + a single document. + + Arguments: + topic_model: A fitted BERTopic instance. + document: The document for which you want to visualize + the approximated topic distribution. + topic_token_distribution: The topic-token distribution of the document as + extracted by `.approximate_topic_distribution` + normalize: Whether to normalize, between 0 and 1 (summing to 1), the + topic distribution values. + + Returns: + df: A stylized dataframe indicating the best fitting topics + for each token. + + Examples: + + ```python + # Calculate the topic distributions on a token level + # Note that we need to have `calculate_token_level=True` + topic_distr, topic_token_distr = topic_model.approximate_distribution( + docs, calculate_token_level=True + ) + + # Visualize the approximated topic distributions + df = topic_model.visualize_approximate_distribution(docs[0], topic_token_distr[0]) + df + ``` + + To revert this stylized dataframe back to a regular dataframe, + you can run the following: + + ```python + df.data.columns = [column.strip() for column in df.data.columns] + df = df.data + ``` + """ + check_is_fitted(self) + return plotting.visualize_approximate_distribution(self, + document=document, + topic_token_distribution=topic_token_distribution, + normalize=normalize) + def visualize_hierarchy(self, orientation: str = "left", topics: List[int] = None, diff --git a/bertopic/plotting/_approximate_distribution.py b/bertopic/plotting/_approximate_distribution.py new file mode 100644 index 00000000..c1428311 --- /dev/null +++ b/bertopic/plotting/_approximate_distribution.py @@ -0,0 +1,85 @@ +import numpy as np +import pandas as pd +from pandas.io.formats.style import Styler + + +def visualize_approximate_distribution(topic_model, + document: str, + topic_token_distribution: np.ndarray, + normalize: bool = False) -> Styler: + """ Visualize the topic distribution calculated by `.approximate_topic_distribution` + on a token level. Thereby indicating the extend to which a certain word or phrases belong + to a specific topic. The assumption here is that a single word can belong to multiple + similar topics and as such give information about the broader set of topics within + a single document. + + Arguments: + topic_model: A fitted BERTopic instance. + document: The document for which you want to visualize + the approximated topic distribution. + topic_token_distribution: The topic-token distribution of the document as + extracted by `.approximate_topic_distribution` + normalize: Whether to normalize, between 0 and 1 (summing to 1), the + topic distribution values. + + Returns: + df: A stylized dataframe indicating the best fitting topics + for each token. + + Examples: + + ```python + # Calculate the topic distributions on a token level + # Note that we need to have `calculate_token_level=True` + topic_distr, topic_token_distr = topic_model.approximate_distribution( + docs, calculate_token_level=True + ) + + # Visualize the approximated topic distributions + df = topic_model.visualize_approximate_distribution(docs[0], topic_token_distr[0]) + df + ``` + + To revert this stylized dataframe back to a regular dataframe, + you can run the following: + + ```python + df.data.columns = [column.strip() for column in df.data.columns] + df = df.data + ``` + """ + # Tokenize document + analyzer = topic_model.vectorizer_model.build_tokenizer() + tokens = analyzer(document) + + # Prepare dataframe with results + if normalize: + df = pd.DataFrame(topic_token_distribution / topic_token_distribution.sum()).T + else: + df = pd.DataFrame(topic_token_distribution).T + + df.columns = [f"{token}_{i}" for i, token in enumerate(tokens)] + df.columns = [f"{token}{' '*i}" for i, token in enumerate(tokens)] + df.index = list(topic_model.topic_labels_.values())[topic_model._outliers:] + df = df.loc[(df.sum(axis=1) != 0), :] + + # Style the resulting dataframe + def text_color(val): + color = 'white' if val == 0 else 'black' + return 'color: %s' % color + + def highligh_color(data, color='white'): + attr = 'background-color: {}'.format(color) + return pd.DataFrame(np.where(data == 0, attr, ''), index=data.index, columns=data.columns) + + if len(df) == 0: + return df + else: + df = ( + df.style + .format("{:.3f}") + .background_gradient(cmap='Blues', axis=None) + .applymap(lambda x: text_color(x)) + .apply(highligh_color, axis=None) + ) + return df diff --git a/bertopic/plotting/_distribution.py b/bertopic/plotting/_distribution.py index f9809bbc..f13172a9 100644 --- a/bertopic/plotting/_distribution.py +++ b/bertopic/plotting/_distribution.py @@ -44,9 +44,6 @@ def visualize_distribution(topic_model, if len(probabilities[probabilities > min_probability]) == 0: raise ValueError("There are no values where `min_probability` is higher than the " "probabilities that were supplied. Lower `min_probability` to prevent this error.") - if not topic_model.calculate_probabilities: - raise ValueError("This visualization cannot be used if you have set `calculate_probabilities` to False " - "as it uses the topic probabilities. ") # Get values and indices equal or exceed the minimum probability labels_idx = np.argwhere(probabilities >= min_probability).flatten() diff --git a/docs/getting_started/distribution/distribution.md b/docs/getting_started/distribution/distribution.md new file mode 100644 index 00000000..2a2ceace --- /dev/null +++ b/docs/getting_started/distribution/distribution.md @@ -0,0 +1,31 @@ +BERTopic approaches topic modeling as a cluster task and attempts to cluster semantically similar documents in order to extract common topics. A disadvantage of using such a method is that each document is assigned to a single cluster and therefore also a single topic. In practice, documents may contain a mixture of topics. This can be accounted for by splitting up the documents into sentences and feeding those to BERTopic. Another option is to use a cluster model that can perform soft-clustering, like HDBSCAN. As BERTopic focuses on modularity, we may still want to model that mixture of topics even when we are using a hard-clustering model, like k-Means without the need to split up our documents. This is where `.approximate_distribution` comes in! + +In order to perform this approximation, each document is split into tokens according to the provided tokenizer in the `CountVectorizer`. Then, a sliding window is applied on each document creating subsets of the document. For example, with a window size of 3 and stride of 1, the document: + + `Solving the right problem is difficult.` + +can be split up into `solving the right`, `the right problem`, `right problem is`, and `problem is difficult`. These are called tokensets. +For each of these tokensets, we calculate their c-TF-IDF representation and find out how similar they are to the previously generated topics. +Then, the similarities to the topics for each tokenset are summed in order to create a topic distribution for the entire document. +Although it is often said that documents can contain a mixture of topics, these are often modeled by assigning each word to a single topic. +With this approach, we take into account that there may be multiple topics for a single word. + +We can make this multiple-topic word assignment a bit more accurate by then splitting these tokensets up into individual tokens and assigning +the topic distributions for each tokenset to each individual token. That way, we can visualize the extent to which a certain word contributes +to a document's topic distribution. + +## **Example** + + +```python +from bertopic import BERTopic +from sklearn.datasets import fetch_20newsgroups + +# Train our model +docs = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))['data'] +topic_model = BERTopic() +topics, _ = topic_model.fit_transform(docs) + +# Calculate topic distribution +topic_distr, _ = topic_model.approximate_distribution(docs) +``` \ No newline at end of file diff --git a/tests/test_plotting/test_approximate.py b/tests/test_plotting/test_approximate.py new file mode 100644 index 00000000..af648789 --- /dev/null +++ b/tests/test_plotting/test_approximate.py @@ -0,0 +1,27 @@ +import copy +import pytest + + +@pytest.mark.parametrize('model', [('kmeans_pca_topic_model'), + ('base_topic_model'), + ('custom_topic_model'), + ('merged_topic_model'), + ('reduced_topic_model')]) +def test_approximate_distribution(model, documents, request): + topic_model = copy.deepcopy(request.getfixturevalue(model)) + + # Calculate only on a document-level based on tokensets + topic_distr, _ = topic_model.approximate_distribution(documents) + assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers + + # Use the distribution visualization + for i in range(3): + topic_model.visualize_distribution(topic_distr[i]) + + # Calculate distribution on a token-level + topic_distr, topic_token_distr = topic_model.approximate_distribution(documents[:100], calculate_tokens=True) + assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers + assert len(topic_token_distr) == len(documents[:100]) + + for token_distr in topic_token_distr: + assert token_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers From d36a9bdabe8167e873fb6de78d0b4214ef81f77e Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 15 Nov 2022 10:05:19 +0100 Subject: [PATCH 02/51] Test without jinja for now --- bertopic/_bertopic.py | 3 +- tests/test_plotting/test_approximate.py | 42 ++++++++++++------------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index dda01cbb..fd2ebdba 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -18,7 +18,6 @@ from packaging import version from scipy.sparse import csr_matrix from scipy.cluster import hierarchy as sch -from pandas.io.formats.style import Styler from typing import List, Tuple, Union, Mapping, Any, Callable, Iterable # Models @@ -2132,7 +2131,7 @@ def visualize_distribution(self, def visualize_approximate_distribution(self, document: str, topic_token_distribution: np.ndarray, - normalize: bool = False) -> Styler: + normalize: bool = False): """ Visualize the topic distribution calculated by `.approximate_topic_distribution` on a token level. Thereby indicating the extend to which a certain word or phrases belong to a specific topic. The assumption here is that a single word can belong to multiple diff --git a/tests/test_plotting/test_approximate.py b/tests/test_plotting/test_approximate.py index af648789..74067c31 100644 --- a/tests/test_plotting/test_approximate.py +++ b/tests/test_plotting/test_approximate.py @@ -1,27 +1,27 @@ -import copy -import pytest +# import copy +# import pytest -@pytest.mark.parametrize('model', [('kmeans_pca_topic_model'), - ('base_topic_model'), - ('custom_topic_model'), - ('merged_topic_model'), - ('reduced_topic_model')]) -def test_approximate_distribution(model, documents, request): - topic_model = copy.deepcopy(request.getfixturevalue(model)) +# @pytest.mark.parametrize('model', [('kmeans_pca_topic_model'), +# ('base_topic_model'), +# ('custom_topic_model'), +# ('merged_topic_model'), +# ('reduced_topic_model')]) +# def test_approximate_distribution(model, documents, request): +# topic_model = copy.deepcopy(request.getfixturevalue(model)) - # Calculate only on a document-level based on tokensets - topic_distr, _ = topic_model.approximate_distribution(documents) - assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers +# # Calculate only on a document-level based on tokensets +# topic_distr, _ = topic_model.approximate_distribution(documents) +# assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers - # Use the distribution visualization - for i in range(3): - topic_model.visualize_distribution(topic_distr[i]) +# # Use the distribution visualization +# for i in range(3): +# topic_model.visualize_distribution(topic_distr[i]) - # Calculate distribution on a token-level - topic_distr, topic_token_distr = topic_model.approximate_distribution(documents[:100], calculate_tokens=True) - assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers - assert len(topic_token_distr) == len(documents[:100]) +# # Calculate distribution on a token-level +# topic_distr, topic_token_distr = topic_model.approximate_distribution(documents[:100], calculate_tokens=True) +# assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers +# assert len(topic_token_distr) == len(documents[:100]) - for token_distr in topic_token_distr: - assert token_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers +# for token_distr in topic_token_distr: +# assert token_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers From 776ee497a41d81b40ea022eb70e9b69f9031487e Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 15 Nov 2022 10:33:48 +0100 Subject: [PATCH 03/51] Update tests --- bertopic/_bertopic.py | 12 ++---- .../plotting/_approximate_distribution.py | 16 +++++-- tests/test_plotting/test_approximate.py | 42 +++++++++---------- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index fd2ebdba..b82d6931 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -1027,13 +1027,10 @@ def approximate_distribution(self, # Extract token sets all_sentences = [] - all_token_sets = [] all_indices = [0] - all_doc_ids = [] all_token_sets_ids = [] - for doc_id, tokenset in enumerate(tokens): - token_ids = [i for i in range(len(tokenset))] + for tokenset in tokens: if len(tokens) < window: token_sets = tokens else: @@ -1061,10 +1058,8 @@ def approximate_distribution(self, # Join the tokens sentences = [separator.join(token) for token in token_sets] all_sentences.extend(sentences) - all_token_sets.extend(token_sets) all_token_sets_ids.extend(token_sets_ids) all_indices.append(all_indices[-1] + len(sentences)) - all_doc_ids.extend([doc_id for _ in range(len(sentences))]) # Calculate similarity between embeddings of token sets and the topics if use_embedding_model: @@ -1099,12 +1094,13 @@ def approximate_distribution(self, token_val[t].append(sim) matrix = [] - for key, value in token_val.items(): + for _, value in token_val.items(): matrix.append(np.add.reduce(value)) topic_token_distributions.append(np.array(matrix)) topic_distributions.append(np.add.reduce(matrix)) - + + topic_distributions = np.array(topic_distributions) topic_distributions = normalize(topic_distributions, norm='l1', axis=1) # Aggregate on a tokenset level indicated by the window and stride diff --git a/bertopic/plotting/_approximate_distribution.py b/bertopic/plotting/_approximate_distribution.py index c1428311..ff10ad45 100644 --- a/bertopic/plotting/_approximate_distribution.py +++ b/bertopic/plotting/_approximate_distribution.py @@ -1,17 +1,27 @@ import numpy as np import pandas as pd -from pandas.io.formats.style import Styler + +try: + from pandas.io.formats.style import Styler +except ModuleNotFoundError: + HAS_JINJA = False def visualize_approximate_distribution(topic_model, document: str, topic_token_distribution: np.ndarray, - normalize: bool = False) -> Styler: + normalize: bool = False): """ Visualize the topic distribution calculated by `.approximate_topic_distribution` on a token level. Thereby indicating the extend to which a certain word or phrases belong to a specific topic. The assumption here is that a single word can belong to multiple similar topics and as such give information about the broader set of topics within a single document. + + NOTE: + This fuction will return a stylized pandas dataframe if Jinja2 is installed. If not, + it will only return a pandas dataframe without color highlighting. To install jinja: + + `pip install jinja2` Arguments: topic_model: A fitted BERTopic instance. @@ -74,7 +84,7 @@ def highligh_color(data, color='white'): if len(df) == 0: return df - else: + elif HAS_JINJA: df = ( df.style .format("{:.3f}") diff --git a/tests/test_plotting/test_approximate.py b/tests/test_plotting/test_approximate.py index 74067c31..af648789 100644 --- a/tests/test_plotting/test_approximate.py +++ b/tests/test_plotting/test_approximate.py @@ -1,27 +1,27 @@ -# import copy -# import pytest +import copy +import pytest -# @pytest.mark.parametrize('model', [('kmeans_pca_topic_model'), -# ('base_topic_model'), -# ('custom_topic_model'), -# ('merged_topic_model'), -# ('reduced_topic_model')]) -# def test_approximate_distribution(model, documents, request): -# topic_model = copy.deepcopy(request.getfixturevalue(model)) +@pytest.mark.parametrize('model', [('kmeans_pca_topic_model'), + ('base_topic_model'), + ('custom_topic_model'), + ('merged_topic_model'), + ('reduced_topic_model')]) +def test_approximate_distribution(model, documents, request): + topic_model = copy.deepcopy(request.getfixturevalue(model)) -# # Calculate only on a document-level based on tokensets -# topic_distr, _ = topic_model.approximate_distribution(documents) -# assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers + # Calculate only on a document-level based on tokensets + topic_distr, _ = topic_model.approximate_distribution(documents) + assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers -# # Use the distribution visualization -# for i in range(3): -# topic_model.visualize_distribution(topic_distr[i]) + # Use the distribution visualization + for i in range(3): + topic_model.visualize_distribution(topic_distr[i]) -# # Calculate distribution on a token-level -# topic_distr, topic_token_distr = topic_model.approximate_distribution(documents[:100], calculate_tokens=True) -# assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers -# assert len(topic_token_distr) == len(documents[:100]) + # Calculate distribution on a token-level + topic_distr, topic_token_distr = topic_model.approximate_distribution(documents[:100], calculate_tokens=True) + assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers + assert len(topic_token_distr) == len(documents[:100]) -# for token_distr in topic_token_distr: -# assert token_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers + for token_distr in topic_token_distr: + assert token_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers From 137b421c8002cfcb67827195913ce3b972631ed1 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 15 Nov 2022 11:01:27 +0100 Subject: [PATCH 04/51] Take empty documents into account for approximating topic distributions --- bertopic/_bertopic.py | 13 +++++++++---- bertopic/plotting/_approximate_distribution.py | 5 ++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index b82d6931..dd006396 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -1086,21 +1086,26 @@ def approximate_distribution(self, if start == end: end = end + 1 + # Assign topics to individual tokens token_id = [i for i in range(len(token))] token_val = {index: [] for index in token_id} for sim, token_set in zip(similarity[start:end], all_token_sets_ids[start:end]): - for t in token_set: - if t in token_val: - token_val[t].append(sim) + for token in token_set: + if token in token_val: + token_val[token].append(sim) matrix = [] for _, value in token_val.items(): matrix.append(np.add.reduce(value)) + + # Take empty documents into account + matrix = np.array(matrix) + if len(matrix.shape) == 1: + matrix = np.zeros((1, len(self.topic_labels_) - self._outliers)) topic_token_distributions.append(np.array(matrix)) topic_distributions.append(np.add.reduce(matrix)) - topic_distributions = np.array(topic_distributions) topic_distributions = normalize(topic_distributions, norm='l1', axis=1) # Aggregate on a tokenset level indicated by the window and stride diff --git a/bertopic/plotting/_approximate_distribution.py b/bertopic/plotting/_approximate_distribution.py index ff10ad45..7b0e459a 100644 --- a/bertopic/plotting/_approximate_distribution.py +++ b/bertopic/plotting/_approximate_distribution.py @@ -20,7 +20,7 @@ def visualize_approximate_distribution(topic_model, NOTE: This fuction will return a stylized pandas dataframe if Jinja2 is installed. If not, it will only return a pandas dataframe without color highlighting. To install jinja: - + `pip install jinja2` Arguments: @@ -61,6 +61,9 @@ def visualize_approximate_distribution(topic_model, # Tokenize document analyzer = topic_model.vectorizer_model.build_tokenizer() tokens = analyzer(document) + + if len(tokens) == 0: + raise ValueError("Make sure that your document contains at least 1 token.") # Prepare dataframe with results if normalize: From 1965e49594dbf6b8c7f430bece5bfe905241f51e Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 15 Nov 2022 13:13:07 +0100 Subject: [PATCH 05/51] Added padding and batch_size parameters, more documentation and examples --- bertopic/_bertopic.py | 217 ++++++++++-------- .../distribution/approximate_distribution.svg | 132 +++++++++++ .../distribution/distribution.md | 92 +++++++- .../distribution/distribution.png | Bin 0 -> 46573 bytes .../distribution/distribution_viz.html | 7 + mkdocs.yml | 1 + tests/test_plotting/test_approximate.py | 7 +- 7 files changed, 350 insertions(+), 106 deletions(-) create mode 100644 docs/getting_started/distribution/approximate_distribution.svg create mode 100644 docs/getting_started/distribution/distribution.png create mode 100644 docs/getting_started/distribution/distribution_viz.html diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index dd006396..9582e9dc 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -940,6 +940,8 @@ def approximate_distribution(self, window: int = 4, stride: int = 1, min_similarity: float = 0.1, + batch_size: int = None, + padding: bool = False, use_embedding_model: bool = False, calculate_tokens: bool = False, separator: str = " ") -> Tuple[np.ndarray, @@ -973,12 +975,17 @@ def approximate_distribution(self, Arguments: documents: A single document or a list of documents for which we approximate their topic distributions - window: Size of the moving window which indicates the number of tokens being considered. stride: How far the window should move at each step. min_similarity: The minimum similarity of a document's tokenset with respect to the topics. + batch_size: The number of documents to process at a time. If None, + then all documents are processed at once. + NOTE: With a large number of documents, it is not + advised to process all documents at once. + padding: Whether to pad the beginning and ending of a document with + empty tokens. use_embedding_model: Whether to use the topic model's embedding model to calculate the similarity between tokensets and topics instead of using c-TF-IDF. @@ -1021,106 +1028,130 @@ def approximate_distribution(self, if isinstance(documents, str): documents = [documents] - # Extract tokens - analyzer = self.vectorizer_model.build_tokenizer() - tokens = [analyzer(document) for document in documents] + if batch_size is None: + batch_size = len(documents) + batches = 1 + else: + batches = math.ceil(len(documents)/batch_size) - # Extract token sets - all_sentences = [] - all_indices = [0] - all_token_sets_ids = [] + topic_distributions = [] + topic_token_distributions = [] - for tokenset in tokens: - if len(tokens) < window: - token_sets = tokens - else: + for i in tqdm(range(batches), disable=not self.verbose): + doc_set = documents[i*batch_size: (i+1) * batch_size] - # Extract tokensets using window and stride parameters - stride_indices = list(range(len(tokenset)))[::stride] - token_sets = [] - token_sets_ids = [] - for stride_index in stride_indices: - selected_tokens = tokenset[stride_index: stride_index+window] - token_sets.append(selected_tokens) - token_sets_ids.append(list(range(stride_index, stride_index+len(selected_tokens)))) - - # Add padding - padded = [] - padded_ids = [] - t = math.ceil(window / stride) - 1 - for i in range(math.ceil(window / stride) - 1): - padded.append(tokenset[:window - ((t-i) * stride)]) - padded_ids.append(list(range(0, window - ((t-i) * stride)))) - - token_sets = padded + token_sets - token_sets_ids = padded_ids + token_sets_ids - - # Join the tokens - sentences = [separator.join(token) for token in token_sets] - all_sentences.extend(sentences) - all_token_sets_ids.extend(token_sets_ids) - all_indices.append(all_indices[-1] + len(sentences)) - - # Calculate similarity between embeddings of token sets and the topics - if use_embedding_model: - embeddings = self._extract_embeddings(all_sentences, method="document", verbose=True) - similarity = cosine_similarity(embeddings, self.topic_embeddings_[self._outliers:]) + # Extract tokens + analyzer = self.vectorizer_model.build_tokenizer() + tokens = [analyzer(document) for document in doc_set] + + # Extract token sets + all_sentences = [] + all_indices = [0] + all_token_sets_ids = [] + + for tokenset in tokens: + if len(tokens) < window: + token_sets = tokens + else: + + # Extract tokensets using window and stride parameters + stride_indices = list(range(len(tokenset)))[::stride] + token_sets = [] + token_sets_ids = [] + for stride_index in stride_indices: + selected_tokens = tokenset[stride_index: stride_index+window] + + if padding or len(selected_tokens) == window: + token_sets.append(selected_tokens) + token_sets_ids.append(list(range(stride_index, stride_index+len(selected_tokens)))) + + # Add empty tokens at the beginning and end of a document + if padding: + padded = [] + padded_ids = [] + t = math.ceil(window / stride) - 1 + for i in range(math.ceil(window / stride) - 1): + padded.append(tokenset[:window - ((t-i) * stride)]) + padded_ids.append(list(range(0, window - ((t-i) * stride)))) + + token_sets = padded + token_sets + token_sets_ids = padded_ids + token_sets_ids + + # Join the tokens + sentences = [separator.join(token) for token in token_sets] + all_sentences.extend(sentences) + all_token_sets_ids.extend(token_sets_ids) + all_indices.append(all_indices[-1] + len(sentences)) - # Calculate similarity between c-TF-IDF of token sets and the topics - else: - bow_doc = self.vectorizer_model.transform(all_sentences) - c_tf_idf_doc = self.ctfidf_model.transform(bow_doc) - similarity = cosine_similarity(c_tf_idf_doc, self.c_tf_idf_[self._outliers:]) - - # Only keep similarities that exceed the minimum - similarity[similarity < min_similarity] = 0 - - # Aggregate results on an individual token level - if calculate_tokens: - topic_distributions = [] - topic_token_distributions = [] - for index, token in enumerate(tokens): - start = all_indices[index] - end = all_indices[index+1] - - if start == end: - end = end + 1 - - # Assign topics to individual tokens - token_id = [i for i in range(len(token))] - token_val = {index: [] for index in token_id} - for sim, token_set in zip(similarity[start:end], all_token_sets_ids[start:end]): - for token in token_set: - if token in token_val: - token_val[token].append(sim) - - matrix = [] - for _, value in token_val.items(): - matrix.append(np.add.reduce(value)) + # Calculate similarity between embeddings of token sets and the topics + if use_embedding_model: + embeddings = self._extract_embeddings(all_sentences, method="document", verbose=True) + similarity = cosine_similarity(embeddings, self.topic_embeddings_[self._outliers:]) + + # Calculate similarity between c-TF-IDF of token sets and the topics + else: + bow_doc = self.vectorizer_model.transform(all_sentences) + c_tf_idf_doc = self.ctfidf_model.transform(bow_doc) + similarity = cosine_similarity(c_tf_idf_doc, self.c_tf_idf_[self._outliers:]) + + # Only keep similarities that exceed the minimum + similarity[similarity < min_similarity] = 0 + + # Aggregate results on an individual token level + if calculate_tokens: + topic_distribution = [] + topic_token_distribution = [] + for index, token in enumerate(tokens): + start = all_indices[index] + end = all_indices[index+1] + + if start == end: + end = end + 1 + + # Assign topics to individual tokens + token_id = [i for i in range(len(token))] + token_val = {index: [] for index in token_id} + for sim, token_set in zip(similarity[start:end], all_token_sets_ids[start:end]): + for token in token_set: + if token in token_val: + token_val[token].append(sim) + + matrix = [] + for _, value in token_val.items(): + matrix.append(np.add.reduce(value)) + + # Take empty documents into account + matrix = np.array(matrix) + if len(matrix.shape) == 1: + matrix = np.zeros((1, len(self.topic_labels_) - self._outliers)) + + topic_token_distribution.append(np.array(matrix)) + topic_distribution.append(np.add.reduce(matrix)) - # Take empty documents into account - matrix = np.array(matrix) - if len(matrix.shape) == 1: - matrix = np.zeros((1, len(self.topic_labels_) - self._outliers)) + topic_distribution = normalize(topic_distribution, norm='l1', axis=1) - topic_token_distributions.append(np.array(matrix)) - topic_distributions.append(np.add.reduce(matrix)) + # Aggregate on a tokenset level indicated by the window and stride + else: + topic_distribution = [] + for index in range(len(all_indices)-1): + start = all_indices[index] + end = all_indices[index+1] + + if start == end: + end = end + 1 + group = similarity[start:end].sum(axis=0) + topic_distribution.append(group) + topic_distribution = normalize(np.array(topic_distribution), norm='l1', axis=1) + topic_token_distribution = None - topic_distributions = normalize(topic_distributions, norm='l1', axis=1) + # Combine results + topic_distributions.append(topic_distribution) + if topic_token_distribution is None: + topic_token_distributions = None + else: + topic_token_distributions.extend(topic_token_distribution) - # Aggregate on a tokenset level indicated by the window and stride - else: - topic_distributions = [] - for index in range(len(all_indices)-1): - start = all_indices[index] - end = all_indices[index+1] - - if start == end: - end = end + 1 - group = similarity[start:end].sum(axis=0) - topic_distributions.append(group) - topic_distributions = normalize(np.array(topic_distributions), norm='l1', axis=1) - topic_token_distributions = None + topic_distributions = np.vstack(topic_distributions) return topic_distributions, topic_token_distributions diff --git a/docs/getting_started/distribution/approximate_distribution.svg b/docs/getting_started/distribution/approximate_distribution.svg new file mode 100644 index 00000000..3f0cc9df --- /dev/null +++ b/docs/getting_started/distribution/approximate_distribution.svg @@ -0,0 +1,132 @@ + + + + +the +right +problem +is +difficult +Solving + + + + + + +right +the +Solving + + + +the +right +problem + + + +right +problem +is + + + +problem +is +difficult + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +create tokensets +topic-tokenset similarity +document-topic distribution +multi-topic assignment on a token-level + + + + +solving +topic 2 +topic 1 +topic 3 + +topic 4 +the +right +problem +is +difficult + +0.75 +0.32 +0.16 + + + + + +0.21 +0.29 +0.81 +0.47 +0.26 + + +0.12 +0.33 + + + + + + + diff --git a/docs/getting_started/distribution/distribution.md b/docs/getting_started/distribution/distribution.md index 2a2ceace..18c96e2f 100644 --- a/docs/getting_started/distribution/distribution.md +++ b/docs/getting_started/distribution/distribution.md @@ -1,31 +1,103 @@ -BERTopic approaches topic modeling as a cluster task and attempts to cluster semantically similar documents in order to extract common topics. A disadvantage of using such a method is that each document is assigned to a single cluster and therefore also a single topic. In practice, documents may contain a mixture of topics. This can be accounted for by splitting up the documents into sentences and feeding those to BERTopic. Another option is to use a cluster model that can perform soft-clustering, like HDBSCAN. As BERTopic focuses on modularity, we may still want to model that mixture of topics even when we are using a hard-clustering model, like k-Means without the need to split up our documents. This is where `.approximate_distribution` comes in! - -In order to perform this approximation, each document is split into tokens according to the provided tokenizer in the `CountVectorizer`. Then, a sliding window is applied on each document creating subsets of the document. For example, with a window size of 3 and stride of 1, the document: +BERTopic approaches topic modeling as a cluster task and attempts to cluster semantically similar documents in order to extract common topics. A disadvantage of using such a method is that each document is assigned to a single cluster and therefore also a single topic. In practice, documents may contain a mixture of topics. This can be accounted for by splitting up the documents into sentences and feeding those to BERTopic. + +Another option is to use a cluster model that can perform soft-clustering, like HDBSCAN. As BERTopic focuses on modularity, we may still want to model that mixture of topics even when we are using a hard-clustering model, like k-Means without the need to split up our documents. This is where `.approximate_distribution` comes in! +

+ +

+In order to perform this approximation, each document is split into tokens according to the provided tokenizer in the `CountVectorizer`. Then, a **sliding window** is applied on each document creating subsets of the document. For example, with a window size of 3 and stride of 1, the document: - `Solving the right problem is difficult.` +> Solving the right problem is difficult. can be split up into `solving the right`, `the right problem`, `right problem is`, and `problem is difficult`. These are called tokensets. For each of these tokensets, we calculate their c-TF-IDF representation and find out how similar they are to the previously generated topics. Then, the similarities to the topics for each tokenset are summed in order to create a topic distribution for the entire document. + Although it is often said that documents can contain a mixture of topics, these are often modeled by assigning each word to a single topic. With this approach, we take into account that there may be multiple topics for a single word. - + We can make this multiple-topic word assignment a bit more accurate by then splitting these tokensets up into individual tokens and assigning the topic distributions for each tokenset to each individual token. That way, we can visualize the extent to which a certain word contributes to a document's topic distribution. ## **Example** +To calculate our topic distributions, we first need to fit a basic topic model: ```python from bertopic import BERTopic from sklearn.datasets import fetch_20newsgroups -# Train our model docs = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))['data'] -topic_model = BERTopic() -topics, _ = topic_model.fit_transform(docs) +topic_model = BERTopic().fit(docs) +``` -# Calculate topic distribution +After doing so, we can approximate the topic distributions for your documents: + +```python topic_distr, _ = topic_model.approximate_distribution(docs) -``` \ No newline at end of file +``` + +The resulting `topic_distr` is a *n* x *m* matrix where *n* are the topics and *m* the documents. We can then visualize the distribution +of topics in a document: + +```python +topic_model.visualize_distribution(topic_distr[1]) +``` + + + +Although a topic distribution is nice, we may want to see how each token contributes to a specific topic. To do so, we need to first +calculate topic distributions on a token level and then visualize the results: + +```python +# Calculate the topic distributions on a token-level +topic_distr, topic_token_distr = topic_model.approximate_distribution(docs, calculate_tokens=True) + +# Visualize the token-level distributions +df = topic_model.visualize_approximate_distribution(docs[1], topic_token_distr[1]) +df +``` + +

+ +

+ +!!! tip + You can also approximate the topic distributions for unseen documents. It will not be as accurate as `.transform` but it is quite fast and can serve you well in a production setting. + +!!! note + To get the stylized dataframe for `.visualize_approximate_distribution` you will need to have Jinja installed. If you do not have this installed, a unstylized dataframe will be returned instead. You can install Jinja via `pip install jinja2` + +## **Parameters** +There are a few parameters that are of interest which will be discussed below. + + +### **batch_size** +Creating tokensets for each document can result in quite a large list of tokensets. The similarity of these tokensets with the topics can result a large matrix that might not fit into memory anymore. To circumvent this, we can process batches of documents instead to minimize the memory overload. The value for `batch_size` indicates the number of documents that will be processed at once: + +```python +topic_distr, _ = topic_model.approximate_distribution(docs, batch_size=500) +``` + +### **window** +The number of tokens that are combined into a tokenset are defined by the `window` parameter. Seeing as we are performing a sliding window, we can change the size of the window. A larger window takes more tokens into account but setting it too large can result in considering too much information. Personally, I like to have this window between 4 and 8: + +```python +topic_distr, _ = topic_model.approximate_distribution(docs, window=4) +``` + +### **stride** +The sliding window that is performed on a documents shifts, as a default, 1 token to the right each time to create its tokensets. As a result, especially with large windows, a single token gets judged several times. We can use the `stride` parameter to increase the number of tokens the window shifts to the right. By increasing +this value, we are judging each token less frequently which often results in a much faster calculation. Combining this parameter with `window` is prefered. For example, if we have a very large dataset, we can set `stride=4` and `window=8` in order to judge tokensets that contain 8 tokens but that are shifted with 4 steps +each time. As a result, this increases the computational speed quite a bit: + +```python +topic_distr, _ = topic_model.approximate_distribution(docs, window=4) +``` + +### **use_embedding_model** +As a default, we compare the c-TF-IDF calculations between the tokensets and all topics. Due to its bag-of-word representation, this is quite fast. However, you might want to use the selected `embedding_model` instead to do this comparison. Do note that due to the many tokensets, it is often computationally quite a bit slower: + +```python +topic_distr, _ = topic_model.approximate_distribution(docs, use_embedding_model=True) +``` diff --git a/docs/getting_started/distribution/distribution.png b/docs/getting_started/distribution/distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..74e78c41242dcdead08c141a3e7ab941502cc66e GIT binary patch literal 46573 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 SAB`b@Ur|;?rb5aj;NJi!ce8c? literal 0 HcmV?d00001 diff --git a/docs/getting_started/distribution/distribution_viz.html b/docs/getting_started/distribution/distribution_viz.html new file mode 100644 index 00000000..a4b7346d --- /dev/null +++ b/docs/getting_started/distribution/distribution_viz.html @@ -0,0 +1,7 @@ + + + +
+
+ + \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 9dfb4d7c..ddfe0f7b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -25,6 +25,7 @@ nav: - Vectorizers: getting_started/vectorizers/vectorizers.md - c-TF-IDF: getting_started/ctfidf/ctfidf.md - Variations: + - Topic Distributions: getting_started/distribution/distribution.md - Topics per Class: getting_started/topicsperclass/topicsperclass.md - (semi)-Supervised Topic Modeling: getting_started/supervised/supervised.md - Dynamic Topic Modeling: getting_started/topicsovertime/topicsovertime.md diff --git a/tests/test_plotting/test_approximate.py b/tests/test_plotting/test_approximate.py index af648789..c9a1e6b3 100644 --- a/tests/test_plotting/test_approximate.py +++ b/tests/test_plotting/test_approximate.py @@ -1,17 +1,18 @@ import copy import pytest - +@pytest.mark.parametrize("batch_size", [50, None]) +@pytest.mark.parametrize("padding", [True, False]) @pytest.mark.parametrize('model', [('kmeans_pca_topic_model'), ('base_topic_model'), ('custom_topic_model'), ('merged_topic_model'), ('reduced_topic_model')]) -def test_approximate_distribution(model, documents, request): +def test_approximate_distribution(batch_size, padding, model, documents, request): topic_model = copy.deepcopy(request.getfixturevalue(model)) # Calculate only on a document-level based on tokensets - topic_distr, _ = topic_model.approximate_distribution(documents) + topic_distr, _ = topic_model.approximate_distribution(documents, padding=padding, batch_size=batch_size) assert topic_distr.shape[1] == len(topic_model.topic_labels_) - topic_model._outliers # Use the distribution visualization From 655862858d488b4a6fa0a17a95cf355c1e4003fd Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Thu, 17 Nov 2022 14:36:17 +0100 Subject: [PATCH 06/51] get_representative_docs now works for all cluster models --- bertopic/_bertopic.py | 94 ++++++++++++++++----------- bertopic/_utils.py | 2 +- tests/test_vectorizers/test_ctfidf.py | 2 +- 3 files changed, 58 insertions(+), 40 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 9582e9dc..84c1b2ed 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -359,7 +359,11 @@ def fit_transform(self, if self.nr_topics: documents = self._reduce_topics(documents) - self._map_representative_docs(original_topics=True) + if isinstance(self.hdbscan_model, hdbscan.HDBSCAN): + self._map_representative_docs(original_topics=True) + else: + self._save_representative_docs(documents) + self.probabilities_ = self._map_probabilities(probabilities, original_topics=True) predictions = documents.Topic.to_list() @@ -2677,30 +2681,45 @@ def _save_representative_docs(self, documents: pd.DataFrame): Arguments: documents: Dataframe with documents and their corresponding IDs """ - # Prepare the condensed tree and luf clusters beneath a given cluster - condensed_tree = self.hdbscan_model.condensed_tree_ - raw_tree = condensed_tree._raw_tree - clusters = sorted(condensed_tree._select_clusters()) - cluster_tree = raw_tree[raw_tree['child_size'] > 1] - - # Find the points with maximum lambda value in each leaf - representative_docs = {} - for topic in documents['Topic'].unique(): - if topic != -1: - leaves = hdbscan.plots._recurse_leaf_dfs(cluster_tree, clusters[topic]) - - result = np.array([]) - for leaf in leaves: - max_lambda = raw_tree['lambda_val'][raw_tree['parent'] == leaf].max() - points = raw_tree['child'][(raw_tree['parent'] == leaf) & (raw_tree['lambda_val'] == max_lambda)] - result = np.hstack((result, points)) - - representative_docs[topic] = list(np.random.choice(result, 3, replace=False).astype(int)) - - # Convert indices to documents - self.representative_docs_ = {topic: [documents.iloc[doc_id].Document for doc_id in doc_ids] - for topic, doc_ids in - representative_docs.items()} + if isinstance(self.hdbscan_model, hdbscan.HDBSCAN): + # Prepare the condensed tree and luf clusters beneath a given cluster + condensed_tree = self.hdbscan_model.condensed_tree_ + raw_tree = condensed_tree._raw_tree + clusters = sorted(condensed_tree._select_clusters()) + cluster_tree = raw_tree[raw_tree['child_size'] > 1] + + # Find the points with maximum lambda value in each leaf + representative_docs = {} + for topic in documents['Topic'].unique(): + if topic != -1: + leaves = hdbscan.plots._recurse_leaf_dfs(cluster_tree, clusters[topic]) + + result = np.array([]) + for leaf in leaves: + max_lambda = raw_tree['lambda_val'][raw_tree['parent'] == leaf].max() + points = raw_tree['child'][(raw_tree['parent'] == leaf) & (raw_tree['lambda_val'] == max_lambda)] + result = np.hstack((result, points)) + + representative_docs[topic] = list(np.random.choice(result, 3, replace=False).astype(int)) + + # Convert indices to documents + self.representative_docs_ = {topic: [documents.iloc[doc_id].Document for doc_id in doc_ids] + for topic, doc_ids in + representative_docs.items()} + else: + documents_per_topic = documents.groupby('Topic').sample(n=500, replace=True).drop_duplicates() + self.representative_docs_ = {} + for topic in documents['Topic'].unique(): + + # Calculate similarity + selected_docs = documents_per_topic.loc[documents_per_topic.Topic == topic, "Document"].values + bow = self.vectorizer_model.transform(selected_docs) + ctfidf = self.ctfidf_model.transform(bow) + sim_matrix = cosine_similarity(ctfidf, self.c_tf_idf_[topic + self._outliers]) + + # Extract top 3 most representative documents + indices = np.argpartition(sim_matrix.reshape(1, -1)[0], -3)[-3:] + self.representative_docs_[topic] = [selected_docs[index] for index in indices] def _map_representative_docs(self, original_topics: bool = False): """ Map the representative docs per topic to the correct topics @@ -2715,19 +2734,18 @@ def _map_representative_docs(self, original_topics: bool = False): original topics to the most recent topics or from the second-most recent topics. """ - if isinstance(self.hdbscan_model, hdbscan.HDBSCAN): - mappings = self.topic_mapper_.get_mappings(original_topics) - representative_docs = self.representative_docs_.copy() - - # Update the representative documents - updated_representative_docs = {mappings[old_topic]: [] - for old_topic, _ in representative_docs.items()} - for old_topic, docs in representative_docs.items(): - new_topic = mappings[old_topic] - updated_representative_docs[new_topic].extend(docs) - - self.representative_docs_ = updated_representative_docs - self.representative_docs_.pop(-1, None) + mappings = self.topic_mapper_.get_mappings(original_topics) + representative_docs = self.representative_docs_.copy() + + # Update the representative documents + updated_representative_docs = {mappings[old_topic]: [] + for old_topic, _ in representative_docs.items()} + for old_topic, docs in representative_docs.items(): + new_topic = mappings[old_topic] + updated_representative_docs[new_topic].extend(docs) + + self.representative_docs_ = updated_representative_docs + self.representative_docs_.pop(-1, None) def _create_topic_vectors(self): """ Creates embeddings per topics based on their topic representation diff --git a/bertopic/_utils.py b/bertopic/_utils.py index afe90b62..65a0890e 100644 --- a/bertopic/_utils.py +++ b/bertopic/_utils.py @@ -1,7 +1,7 @@ import numpy as np import logging from collections.abc import Iterable -from scipy.sparse.csr import csr_matrix +from scipy.sparse import csr_matrix class MyLogger: diff --git a/tests/test_vectorizers/test_ctfidf.py b/tests/test_vectorizers/test_ctfidf.py index f3ba7cef..703067ff 100644 --- a/tests/test_vectorizers/test_ctfidf.py +++ b/tests/test_vectorizers/test_ctfidf.py @@ -4,7 +4,7 @@ import numpy as np import pandas as pd from packaging import version -from scipy.sparse.csr import csr_matrix +from scipy.sparse import csr_matrix from sklearn import __version__ as sklearn_version from sklearn.feature_extraction.text import CountVectorizer from bertopic.vectorizers import ClassTfidfTransformer From b9a0d1beea77d64841968b9083acc7d29d3dce63 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Thu, 17 Nov 2022 14:57:02 +0100 Subject: [PATCH 07/51] Fix online learning bug --- bertopic/_bertopic.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 84c1b2ed..96c7b955 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -218,7 +218,7 @@ def __init__(self, self.topic_embeddings_ = None self.topic_labels_ = None self.custom_labels_ = None - self.representative_docs_ = None + self.representative_docs_ = {} self.c_tf_idf_ = None # Private attributes for internal tracking purposes @@ -1384,7 +1384,20 @@ def get_topic_freq(self, topic: int = None) -> Union[pd.DataFrame, int]: ascending=False) def get_representative_docs(self, topic: int = None) -> List[str]: - """ Extract representative documents per topic + """ Extract the best representing documents per topic. + + NOTE: + This does not extract all documents per topic as all documents + are not saved within BERTopic. To get all documents, please + run the following: + + ```python + # When you used `.fit_transform`: + df = pd.DataFrame({"Document": docs, "Topic": topic}) + + # When you used `.fit`: + df = pd.DataFrame({"Document": docs, "Topic": topic_model.topics_}) + ``` Arguments: topic: A specific topic for which you want @@ -1409,7 +1422,10 @@ def get_representative_docs(self, topic: int = None) -> List[str]: """ check_is_fitted(self) if isinstance(topic, int): - return self.representative_docs_[topic] + if self.representative_docs_.get(topic): + return self.representative_docs_[topic] + else: + return None else: return self.representative_docs_ @@ -2735,7 +2751,10 @@ def _map_representative_docs(self, original_topics: bool = False): or from the second-most recent topics. """ mappings = self.topic_mapper_.get_mappings(original_topics) - representative_docs = self.representative_docs_.copy() + if self.representative_docs_ is not None: + representative_docs = self.representative_docs_.copy() + else: + representative_docs = {} # Update the representative documents updated_representative_docs = {mappings[old_topic]: [] From 763c29415a0285aca26f735be2980f4b77f4ebe6 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Thu, 17 Nov 2022 15:19:47 +0100 Subject: [PATCH 08/51] Prepare for light weight installation option --- bertopic/backend/_utils.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/bertopic/backend/_utils.py b/bertopic/backend/_utils.py index a48c1cc2..7627f83c 100644 --- a/bertopic/backend/_utils.py +++ b/bertopic/backend/_utils.py @@ -1,10 +1,13 @@ from ._base import BaseEmbedder -from ._sentencetransformers import SentenceTransformerBackend -from ._hftransformers import HFTransformerBackend -from ._sklearn import SklearnEmbedder -from transformers.pipelines import Pipeline + +# Imports for light-weight variant of BERTopic +from bertopic.backend._sklearn import SklearnEmbedder +from sklearn.pipeline import make_pipeline +from sklearn.decomposition import TruncatedSVD +from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.pipeline import Pipeline as ScikitPipeline + languages = ['afrikaans', 'albanian', 'amharic', 'arabic', 'armenian', 'assamese', 'azerbaijani', 'basque', 'belarusian', 'bengali', 'bengali romanize', 'bosnian', 'breton', 'bulgarian', 'burmese', 'burmese zawgyi font', 'catalan', @@ -35,6 +38,7 @@ def select_backend(embedding_model, if isinstance(embedding_model, BaseEmbedder): return embedding_model + # Scikit-learn backend if isinstance(embedding_model, ScikitPipeline): return SklearnEmbedder(embedding_model) @@ -59,19 +63,18 @@ def select_backend(embedding_model, return USEBackend(embedding_model) # Sentence Transformer embeddings - if "sentence_transformers" in str(type(embedding_model)): - return SentenceTransformerBackend(embedding_model) - - # Create a Sentence Transformer model based on a string - if isinstance(embedding_model, str): + if "sentence_transformers" in str(type(embedding_model)) or isinstance(embedding_model, str): + from ._sentencetransformers import SentenceTransformerBackend return SentenceTransformerBackend(embedding_model) # Hugging Face embeddings - if isinstance(embedding_model, Pipeline): + if "transformers" and "pipeline" in str(type(embedding_model)): + from ._hftransformers import HFTransformerBackend return HFTransformerBackend(embedding_model) # Select embedding model based on language if language: + from ._sentencetransformers import SentenceTransformerBackend if language.lower() in ["English", "english", "en"]: return SentenceTransformerBackend("all-MiniLM-L6-v2") elif language.lower() in languages or language == "multilingual": @@ -81,5 +84,12 @@ def select_backend(embedding_model, f"create any embeddings yourself and pass it through fit_transform(docs, embeddings)\n" "Else, please select a language from the following list:\n" f"{languages}") - - return SentenceTransformerBackend("all-MiniLM-L6-v2") + + try: + from ._sentencetransformers import SentenceTransformerBackend + return SentenceTransformerBackend("all-MiniLM-L6-v2") + + # Only for light-weight installation + except ModuleNotFoundError: + pipe = make_pipeline(TfidfVectorizer(), TruncatedSVD(100)) + return SklearnEmbedder(pipe) From baf1593d89670599532381ac5f299bc5f02e4080 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Thu, 17 Nov 2022 15:46:02 +0100 Subject: [PATCH 09/51] Fix lightweight installation + update docs --- bertopic/backend/_utils.py | 38 ++++----- docs/getting_started/embeddings/embeddings.md | 81 ++++++++++--------- 2 files changed, 61 insertions(+), 58 deletions(-) diff --git a/bertopic/backend/_utils.py b/bertopic/backend/_utils.py index 7627f83c..9268a975 100644 --- a/bertopic/backend/_utils.py +++ b/bertopic/backend/_utils.py @@ -74,22 +74,22 @@ def select_backend(embedding_model, # Select embedding model based on language if language: - from ._sentencetransformers import SentenceTransformerBackend - if language.lower() in ["English", "english", "en"]: - return SentenceTransformerBackend("all-MiniLM-L6-v2") - elif language.lower() in languages or language == "multilingual": - return SentenceTransformerBackend("paraphrase-multilingual-MiniLM-L12-v2") - else: - raise ValueError(f"{language} is currently not supported. However, you can " - f"create any embeddings yourself and pass it through fit_transform(docs, embeddings)\n" - "Else, please select a language from the following list:\n" - f"{languages}") - - try: - from ._sentencetransformers import SentenceTransformerBackend - return SentenceTransformerBackend("all-MiniLM-L6-v2") - - # Only for light-weight installation - except ModuleNotFoundError: - pipe = make_pipeline(TfidfVectorizer(), TruncatedSVD(100)) - return SklearnEmbedder(pipe) + try: + from ._sentencetransformers import SentenceTransformerBackend + if language.lower() in ["English", "english", "en"]: + return SentenceTransformerBackend("all-MiniLM-L6-v2") + elif language.lower() in languages or language == "multilingual": + return SentenceTransformerBackend("paraphrase-multilingual-MiniLM-L12-v2") + else: + raise ValueError(f"{language} is currently not supported. However, you can " + f"create any embeddings yourself and pass it through fit_transform(docs, embeddings)\n" + "Else, please select a language from the following list:\n" + f"{languages}") + + # Only for light-weight installation + except ModuleNotFoundError: + pipe = make_pipeline(TfidfVectorizer(), TruncatedSVD(100)) + return SklearnEmbedder(pipe) + + from ._sentencetransformers import SentenceTransformerBackend + return SentenceTransformerBackend("all-MiniLM-L6-v2") diff --git a/docs/getting_started/embeddings/embeddings.md b/docs/getting_started/embeddings/embeddings.md index 714cbf77..681aee50 100644 --- a/docs/getting_started/embeddings/embeddings.md +++ b/docs/getting_started/embeddings/embeddings.md @@ -133,6 +133,48 @@ topic_model = BERTopic(embedding_model=ft) Gensim is primarily used for Word Embedding models. This works typically best for short documents since the word embeddings are pooled. + +### **Scikit-Learn Embeddings** +Scikit-Learn is a framework for more than just machine learning. +It offers many preprocessing tools, some of which can be used to create representations +for text. Many of these tools are relatively lightweight and don't require a GPU. +While the representations may be less expressive as many BERT models, the fact that +it runs much faster can make it a relevant candidate to consider. + +If you have a scikit-learn compatible pipeline that you'd like to use to embed +text then you can also pass this to BERTopic. + +```python +from sklearn.pipeline import make_pipeline +from sklearn.decomposition import TruncatedSVD +from sklearn.feature_extraction.text import TfidfVectorizer + +pipe = make_pipeline( + TfidfVectorizer(), + TruncatedSVD(100) +) + +topic_model = BERTopic(embedding_model=pipe) +``` + +Internally, this uses the `SklearnEmbedder` that ensures the scikit-learn +pipeline is compatible. + +```python +from bertopic.backend import SklearnEmbedder + +sklearn_embedder = SklearnEmbedder(pipe) +topic_model = BERTopic(embedding_model=sklearn_embedder) +``` + +!!! Warning + One caveat to be aware of is that scikit-learns base `Pipeline` class does not + support the `.partial_fit()`-API. If you have a pipeline that theoretically should + be able to support online learning then you might want to explore + the [scikit-partial](https://github.com/koaning/scikit-partial) project. + Moreover, since this backend does not generate representations on a word-level, + it does not support the `diversity` parameter. + ### **Word + Document Embeddings** You might want to be using different language models for creating document- and word-embeddings. For example, while SentenceTransformers might be great in embedding sentences and documents, you might prefer to use @@ -231,42 +273,3 @@ topics, probs = topic_model.fit_transform(docs, embeddings) Here, you will probably notice that creating the embeddings is quite fast whereas `fit_transform` is quite slow. This is to be expected as reducing the dimensionality of a large sparse matrix takes some time. The inverse of using transformer embeddings is true: creating the embeddings is slow whereas `fit_transform` is quite fast. - -#### **Scikit-Learn Embeddings** -Scikit-Learn is a framework for more than just machine learning. -It offers many preprocessing tools, some of which can be used to create representations -for text. Many of these tools are relatively lightweight and don't require a GPU. -While the representations may be less expressive as many BERT models, the fact that -it runs much faster can make it a relevant candidate to consider. - -If you have a scikit-learn compatible pipeline that you'd like to use to embed -text then you can also pass this to BERTopic. - -```python -from sklearn.pipeline import make_pipeline -from sklearn.decomposition import TruncatedSVD -from sklearn.feature_extraction.text import TfidfVectorizer - -pipe = make_pipeline( - TfidfVectorizer(), - TruncatedSVD(100) -) - -topic_model = BERTopic(embedding_model=pipe) -``` - -Internally, this uses the `SklearnEmbedder` that ensures the scikit-learn -pipeline is compatible. - -```python -from bertopic.backend import SklearnEmbedder - -sklearn_embedder = SklearnEmbedder(pipe) -topic_model = BERTopic(embedding_model=sklearn_embedder) -``` - -!!! Warning - One caveat to be aware of is that scikit-learns base `Pipeline` class does not - support the `.partial_fit()`-API. If you have a pipeline that theoretically should - be able to support online learning then you might want to explore - the [scikit-partial](https://github.com/koaning/scikit-partial) project. From dd720f99c948d0622dee2497ceef79b44b482644 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sun, 20 Nov 2022 09:35:37 +0100 Subject: [PATCH 10/51] Fully supervised BERTopic by adding classification to the cluster step --- bertopic/_bertopic.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 96c7b955..26bd2a2b 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -346,7 +346,7 @@ def fit_transform(self, umap_embeddings = self._reduce_dimensionality(embeddings, y) # Cluster reduced embeddings - documents, probabilities = self._cluster_embeddings(umap_embeddings, documents) + documents, probabilities = self._cluster_embeddings(umap_embeddings, documents, y=y) # Sort and Map Topic IDs by their frequency if not self.nr_topics: @@ -2586,7 +2586,8 @@ def _reduce_dimensionality(self, def _cluster_embeddings(self, umap_embeddings: np.ndarray, documents: pd.DataFrame, - partial_fit: bool = False) -> Tuple[pd.DataFrame, + partial_fit: bool = False, + y: np.ndarray = None) -> Tuple[pd.DataFrame, np.ndarray]: """ Cluster UMAP embeddings with HDBSCAN @@ -2606,8 +2607,15 @@ def _cluster_embeddings(self, documents['Topic'] = labels self.topics_ = labels else: - self.hdbscan_model.fit(umap_embeddings) - labels = self.hdbscan_model.labels_ + try: + self.hdbscan_model.fit(umap_embeddings, y=y) + except TypeError: + self.hdbscan_model.fit(umap_embeddings) + + try: + labels = self.hdbscan_model.labels_ + except AttributeError: + labels = y documents['Topic'] = labels self._update_topic_size(documents) From 52ff7ba949973a846aa9b31b67d6a01ec364e5c4 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sun, 20 Nov 2022 10:29:34 +0100 Subject: [PATCH 11/51] Add empty dimensionality and cluster modules for manual topic modeling or skipping steps --- bertopic/cluster/__init__.py | 5 ++++ bertopic/cluster/_base.py | 41 +++++++++++++++++++++++++++++ bertopic/dimensionality/__init__.py | 5 ++++ bertopic/dimensionality/_base.py | 26 ++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 bertopic/cluster/__init__.py create mode 100644 bertopic/cluster/_base.py create mode 100644 bertopic/dimensionality/__init__.py create mode 100644 bertopic/dimensionality/_base.py diff --git a/bertopic/cluster/__init__.py b/bertopic/cluster/__init__.py new file mode 100644 index 00000000..afe75878 --- /dev/null +++ b/bertopic/cluster/__init__.py @@ -0,0 +1,5 @@ +from ._base import BaseCluster + +__all__ = [ + "BaseCluster", +] diff --git a/bertopic/cluster/_base.py b/bertopic/cluster/_base.py new file mode 100644 index 00000000..dc8412f0 --- /dev/null +++ b/bertopic/cluster/_base.py @@ -0,0 +1,41 @@ +import numpy as np + + +class BaseCluster: + """ The Base Cluster class + + Using this class directly in BERTopic will make it skip + over the cluster step. As a result, topics need to be passed + to BERTopic in the form of its `y` parameter in order to create + topic representations. + + Examples: + + This will skip over the cluster step in BERTopic: + + ```python + from bertopic import BERTopic + from bertopic.dimensionality import BaseCluster + + empty_cluster_model = BaseCluster() + + topic_model = BERTopic(hdbscan_model=empty_cluster_model) + ``` + + Then, this class can be used to perform manual topic modeling. + That is, topic modeling on a topics that were already generated before + without the need to learn them: + + ```python + topic_model.fit(docs, y=y) + ``` + """ + def fit(self, X, y=None): + if y is not None: + self.labels_ = y + else: + self.labels_ = None + return self + + def transform(self, X: np.ndarray) -> np.ndarray: + return X diff --git a/bertopic/dimensionality/__init__.py b/bertopic/dimensionality/__init__.py new file mode 100644 index 00000000..ca349f40 --- /dev/null +++ b/bertopic/dimensionality/__init__.py @@ -0,0 +1,5 @@ +from ._base import BaseDimensionalityReduction + +__all__ = [ + "BaseDimensionalityReduction", +] diff --git a/bertopic/dimensionality/_base.py b/bertopic/dimensionality/_base.py new file mode 100644 index 00000000..7b39c3b4 --- /dev/null +++ b/bertopic/dimensionality/_base.py @@ -0,0 +1,26 @@ +import numpy as np + + +class BaseDimensionalityReduction: + """ The Base Dimensionality Reduction class + + You can use this to skip over the dimensionality reduction step in BERTopic. + + Examples: + + This will skip over the reduction step in BERTopic: + + ```python + from bertopic import BERTopic + from bertopic.dimensionality import BaseDimensionalityReduction + + empty_reduction_model = BaseDimensionalityReduction() + + topic_model = BERTopic(umap_model=empty_reduction_model) + ``` + """ + def fit(self, X: np.ndarray = None): + return self + + def transform(self, X: np.ndarray) -> np.ndarray: + return X From ce560e0d99590228a19cc27ed86936a5ebf97994 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Wed, 23 Nov 2022 07:55:59 +0100 Subject: [PATCH 12/51] Start documentation for manual topic modeling --- docs/getting_started/manual/manual.md | 75 ++++++++++++++++++++++++ docs/getting_started/manual/pipeline.svg | 14 +++++ docs/getting_started/manual/table.svg | 51 ++++++++++++++++ mkdocs.yml | 1 + 4 files changed, 141 insertions(+) create mode 100644 docs/getting_started/manual/manual.md create mode 100644 docs/getting_started/manual/pipeline.svg create mode 100644 docs/getting_started/manual/table.svg diff --git a/docs/getting_started/manual/manual.md b/docs/getting_started/manual/manual.md new file mode 100644 index 00000000..8d8af0b9 --- /dev/null +++ b/docs/getting_started/manual/manual.md @@ -0,0 +1,75 @@ +Although topic modeling is typically done by discovering topics in an unsupervised manner, there might be times when you already have a bunch of clusters or classes from which you want to model the topics. For example, the often used [20 NewsGroups dataset](https://scikit-learn.org/0.19/datasets/twenty_newsgroups.html) is already split up into 20 classes. Here, we might want to see how we can transform those 20 classes into 20 topics. Instead of using BERTopic to discover previously unknown topics, we are now going to manually pass them to BERTopic without actually learning them. + +We can view this as a manual topic modeling approach. There is no underlying algorithm for detecting these topics since you already have done that before. Whether that is simply because they are already available, like with the 20 NewsGroups dataset, or maybe because you have created clusters of documents before using packages like [human-learn](https://github.com/koaning/human-learn), [bulk](https://github.com/koaning/bulk), [thisnotthat](https://github.com/TutteInstitute/thisnotthat) or something entirely different. + +In other words, we can pass our labels to BERTopic and it will try to transform those labels into topics by running the c-TF-IDF representations on the set of documents within each label. This process allows us to model the topics themselves and similarly gives us the option to use everything BERTopic has to offer. + +
+

+ +

+ +
+ +To do so, we need to skip over the dimensionality reduction and clustering steps since we already know the labels for our documents. We can use the documents and labels from the 20 NewsGroups dataset to create topics from those 20 labels: + + +```python +from sklearn.datasets import fetch_20newsgroups + +# Get labeled data +data= fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) +docs = data['data'] +y = data['target'] +``` + +Then, we make sure to create empty instances of the dimensionality reduction and clustering steps. We pass those to BERTopic in order to simply skip over them and go to the topic representation process: + + +```python +from bertopic import BERTopic +from bertopic.cluster import BaseCluster +from bertopic.vectorizers import ClassTfidfTransformer +from bertopic.dimensionality import BaseDimensionalityReduction + +# Prepare our empty sub-models and reduce frequent words +empty_dimensionality_model = BaseDimensionalityReduction() +empty_cluster_model = BaseCluster() +ctfidf_model = ClassTfidfTransformer(reduce_frequent_words=True) + +# Fit BERTopic without actually performing any clustering +topic_model= BERTopic( + hdbscan_model=empty_cluster_model, + umap_model=empty_dimensionality_model, + ctfidf_model=ctfidf_model +) +topics, probs = topic_model.fit_transform(docs, y=y) +``` + +Let's take a look at a few topics that we get out of training this way by running `topic_model.get_topic_info()`: + +
+

+ +

+ +
+ +As a result, BERTopic directly learned from our labeled data `y` what the most representative words are per class. We can still perform BERTopic-specific features like dynamic topic modeling, topics per class, hierarchical topic modeling, modeling topic distributions, etc. + +The resulting `topics` may be a different mapping from the `y` labels. In order to map `y` to `topics`, we can run the following: + + +```python +mappings = topic_model.topic_mapper_.get_mappings() +y__mapped = [mappings[val] for val in y] +``` + + +!!! note + Although we can skip over our embeddings step, it may be worthwhile to create them nonetheless in order to get some topic embeddings together with our c-TF-IDF representation. However, you can also skip over this step by running the following instead: + + ```python + empty_embeddings = np.zeros((len(docs), 1)) + topics, probs = topic_model.fit_transform(docs, empty_embeddings, y=y) + ``` diff --git a/docs/getting_started/manual/pipeline.svg b/docs/getting_started/manual/pipeline.svg new file mode 100644 index 00000000..39357e49 --- /dev/null +++ b/docs/getting_started/manual/pipeline.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/getting_started/manual/table.svg b/docs/getting_started/manual/table.svg new file mode 100644 index 00000000..50fd2383 --- /dev/null +++ b/docs/getting_started/manual/table.svg @@ -0,0 +1,51 @@ + + +Topic +Count +Name + +0 +0 +999 +0_game_hockey_team_25 + +1_god_church_jesus_christ +997 +1 +1 + +2 +2 +996 +2_bike_dod_ride_bikes + +3_baseball_game_he_year +994 +3 +3 + +4 +4 +991 +4_key_encryption_db_clipper + +5_car_cars_engine_ford +990 +5 +5 + +6 +6 +990 +6_medical_patients_cancer_disease + +7_window_server_widget_motif +988 +7 +7 + +8 +8 +988 +8_space_launch_nasa_orbit + diff --git a/mkdocs.yml b/mkdocs.yml index ddfe0f7b..e74c6d51 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -32,6 +32,7 @@ nav: - Guided Topic Modeling: getting_started/guided/guided.md - Hierarchical Topic Modeling: getting_started/hierarchicaltopics/hierarchicaltopics.md - Online Topic Modeling: getting_started/online/online.md + - Manual Topic Modeling: getting_started/manual/manual.md - FAQ: faq.md - API: - BERTopic: api/bertopic.md From 307ecb7401d3ae695cf24e612d2384d8713003de Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Wed, 23 Nov 2022 15:39:11 +0100 Subject: [PATCH 13/51] More documentation for manual topic modeling --- docs/getting_started/manual/manual.md | 38 ++++++++---- docs/getting_started/manual/pipeline.svg | 22 +++---- docs/getting_started/manual/table.svg | 2 +- docs/getting_started/manual/table_classes.svg | 61 +++++++++++++++++++ 4 files changed, 98 insertions(+), 25 deletions(-) create mode 100644 docs/getting_started/manual/table_classes.svg diff --git a/docs/getting_started/manual/manual.md b/docs/getting_started/manual/manual.md index 8d8af0b9..5098d374 100644 --- a/docs/getting_started/manual/manual.md +++ b/docs/getting_started/manual/manual.md @@ -18,7 +18,7 @@ To do so, we need to skip over the dimensionality reduction and clustering steps from sklearn.datasets import fetch_20newsgroups # Get labeled data -data= fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) +data = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) docs = data['data'] y = data['target'] ``` @@ -32,9 +32,11 @@ from bertopic.cluster import BaseCluster from bertopic.vectorizers import ClassTfidfTransformer from bertopic.dimensionality import BaseDimensionalityReduction -# Prepare our empty sub-models and reduce frequent words +# Prepare our empty sub-models, empty embeddings, +# and reduce frequent words while we are at it. empty_dimensionality_model = BaseDimensionalityReduction() empty_cluster_model = BaseCluster() +empty_embeddings = np.zeros((len(docs), 1)) ctfidf_model = ClassTfidfTransformer(reduce_frequent_words=True) # Fit BERTopic without actually performing any clustering @@ -43,7 +45,7 @@ topic_model= BERTopic( umap_model=empty_dimensionality_model, ctfidf_model=ctfidf_model ) -topics, probs = topic_model.fit_transform(docs, y=y) +topics, probs = topic_model.fit_transform(docs, empty_embeddings, y=y) ``` Let's take a look at a few topics that we get out of training this way by running `topic_model.get_topic_info()`: @@ -52,24 +54,36 @@ Let's take a look at a few topics that we get out of training this way by runnin

-
-As a result, BERTopic directly learned from our labeled data `y` what the most representative words are per class. We can still perform BERTopic-specific features like dynamic topic modeling, topics per class, hierarchical topic modeling, modeling topic distributions, etc. - -The resulting `topics` may be a different mapping from the `y` labels. In order to map `y` to `topics`, we can run the following: - +We can see a number of interesting topics appearing here. They seem to relate to the 20 classes we had as an input. Now, let's map those topics to our original classes in order to view their relationship: ```python +# Map input `y` to topics mappings = topic_model.topic_mapper_.get_mappings() -y__mapped = [mappings[val] for val in y] +mappings = {value: data["target_names"][key] for key, value in mappings.items()} + +# Assign original classes to our topics +df = topic_model.get_topic_info() +df["Class"] = df.Topic.map(mappings) +df ``` +
+

+ +

+
+ +We can clearly see that that the c-TF-IDF representations nicely extracts the words that give a nice representation of our input classes. This is all done without actually embeddings and clustering the data. + +As a result, the entire "training" process only takes a couple of seconds. Moreover, we can still perform BERTopic-specific features like dynamic topic modeling, topics per class, hierarchical topic modeling, modeling topic distributions, etc. !!! note - Although we can skip over our embeddings step, it may be worthwhile to create them nonetheless in order to get some topic embeddings together with our c-TF-IDF representation. However, you can also skip over this step by running the following instead: + The resulting `topics` may be a different mapping from the `y` labels. In order to map `y` to `topics`, we can run the following: + ```python - empty_embeddings = np.zeros((len(docs), 1)) - topics, probs = topic_model.fit_transform(docs, empty_embeddings, y=y) + mappings = topic_model.topic_mapper_.get_mappings() + y_mapped = [mappings[val] for val in y] ``` diff --git a/docs/getting_started/manual/pipeline.svg b/docs/getting_started/manual/pipeline.svg index 39357e49..5d0d8900 100644 --- a/docs/getting_started/manual/pipeline.svg +++ b/docs/getting_started/manual/pipeline.svg @@ -1,14 +1,12 @@ - + - - - - - - - - - - - + + + + + + + + + diff --git a/docs/getting_started/manual/table.svg b/docs/getting_started/manual/table.svg index 50fd2383..0cbeae21 100644 --- a/docs/getting_started/manual/table.svg +++ b/docs/getting_started/manual/table.svg @@ -37,7 +37,7 @@ 6 6 990 -6_medical_patients_cancer_disease +6_medical_patients_cancer_disease 7_window_server_widget_motif 988 diff --git a/docs/getting_started/manual/table_classes.svg b/docs/getting_started/manual/table_classes.svg new file mode 100644 index 00000000..8464ba1d --- /dev/null +++ b/docs/getting_started/manual/table_classes.svg @@ -0,0 +1,61 @@ + + +Topic +Count +Name +Class + +0 +0 +999 +0_game_hockey_team_25 +rec.sport.hockey + +1_god_church_jesus_christ +997 +1 +1 + +2 +2 +996 +2_bike_dod_ride_bikes + +3_baseball_game_he_year +994 +3 +3 + +4 +4 +991 +4_key_encryption_db_clipper + +5_car_cars_engine_ford +990 +5 +5 + +6 +6 +990 +6_medical_patients_cancer_disease + +7_window_server_widget_motif +988 +7 +7 + +8 +8 +988 +8_space_launch_nasa_orbit +sci.space +comp.windows.x +sci.med +rec.autos +sci.crypt +rec.sport.baseball +rec.motorcycles +soc.religion.christian + From c842bdeb95255be5d7998f07282c742e8ae0d93b Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Thu, 24 Nov 2022 14:04:49 +0100 Subject: [PATCH 14/51] Added supervised documentation --- docs/getting_started/manual/manual.md | 23 +-- docs/getting_started/manual/table.svg | 101 +++++------ docs/getting_started/manual/table_classes.svg | 121 +++++++------- .../semisupervised/semisupervised.md | 81 +++++++++ .../supervised/classification_pipeline.svg | 14 ++ .../supervised/default_pipeline.svg | 18 ++ docs/getting_started/supervised/square.svg | 16 ++ docs/getting_started/supervised/supervised.md | 158 +++++++++++------- docs/getting_started/supervised/table.svg | 52 ++++++ .../supervised/table_classes.svg | 62 +++++++ docs/stylesheets/extra.css | 12 ++ mkdocs.yml | 23 ++- 12 files changed, 489 insertions(+), 192 deletions(-) create mode 100644 docs/getting_started/semisupervised/semisupervised.md create mode 100644 docs/getting_started/supervised/classification_pipeline.svg create mode 100644 docs/getting_started/supervised/default_pipeline.svg create mode 100644 docs/getting_started/supervised/square.svg create mode 100644 docs/getting_started/supervised/table.svg create mode 100644 docs/getting_started/supervised/table_classes.svg diff --git a/docs/getting_started/manual/manual.md b/docs/getting_started/manual/manual.md index 5098d374..7908ac37 100644 --- a/docs/getting_started/manual/manual.md +++ b/docs/getting_started/manual/manual.md @@ -5,10 +5,9 @@ We can view this as a manual topic modeling approach. There is no underlying alg In other words, we can pass our labels to BERTopic and it will try to transform those labels into topics by running the c-TF-IDF representations on the set of documents within each label. This process allows us to model the topics themselves and similarly gives us the option to use everything BERTopic has to offer.
-

- -

- +
+--8<-- "docs/getting_started/manual/pipeline.svg" +

To do so, we need to skip over the dimensionality reduction and clustering steps since we already know the labels for our documents. We can use the documents and labels from the 20 NewsGroups dataset to create topics from those 20 labels: @@ -51,9 +50,10 @@ topics, probs = topic_model.fit_transform(docs, empty_embeddings, y=y) Let's take a look at a few topics that we get out of training this way by running `topic_model.get_topic_info()`:
-

- -

+
+--8<-- "docs/getting_started/manual/table.svg" +
+
We can see a number of interesting topics appearing here. They seem to relate to the 20 classes we had as an input. Now, let's map those topics to our original classes in order to view their relationship: @@ -69,13 +69,14 @@ df["Class"] = df.Topic.map(mappings) df ```
-

- -

+
+--8<-- "docs/getting_started/manual/table_classes.svg" +
+
-We can clearly see that that the c-TF-IDF representations nicely extracts the words that give a nice representation of our input classes. This is all done without actually embeddings and clustering the data. +We can clearly see that that the c-TF-IDF representations nicely extracts the words that give a nice representation of our input classes. This is all done without actually embedding and clustering the data. As a result, the entire "training" process only takes a couple of seconds. Moreover, we can still perform BERTopic-specific features like dynamic topic modeling, topics per class, hierarchical topic modeling, modeling topic distributions, etc. diff --git a/docs/getting_started/manual/table.svg b/docs/getting_started/manual/table.svg index 0cbeae21..7e841c33 100644 --- a/docs/getting_started/manual/table.svg +++ b/docs/getting_started/manual/table.svg @@ -1,51 +1,52 @@ - - -Topic -Count -Name - -0 -0 -999 -0_game_hockey_team_25 - -1_god_church_jesus_christ -997 -1 -1 - -2 -2 -996 -2_bike_dod_ride_bikes - -3_baseball_game_he_year -994 -3 -3 - -4 -4 -991 -4_key_encryption_db_clipper - -5_car_cars_engine_ford -990 -5 -5 - -6 -6 -990 -6_medical_patients_cancer_disease - -7_window_server_widget_motif -988 -7 -7 - -8 -8 -988 -8_space_launch_nasa_orbit + + + +Topic +Count +Name + +0 +0 +999 +0_game_hockey_team_25 + +1_god_church_jesus_christ +997 +1 +1 + +2 +2 +996 +2_bike_dod_ride_bikes + +3_baseball_game_he_year +994 +3 +3 + +4 +4 +991 +4_key_encryption_db_clipper + +5_car_cars_engine_ford +990 +5 +5 + +6 +6 +990 +6_medical_patients_cancer_disease + +7_window_server_widget_motif +988 +7 +7 + +8 +8 +988 +8_space_launch_nasa_orbit diff --git a/docs/getting_started/manual/table_classes.svg b/docs/getting_started/manual/table_classes.svg index 8464ba1d..c13b2f10 100644 --- a/docs/getting_started/manual/table_classes.svg +++ b/docs/getting_started/manual/table_classes.svg @@ -1,61 +1,62 @@ - - -Topic -Count -Name -Class - -0 -0 -999 -0_game_hockey_team_25 -rec.sport.hockey - -1_god_church_jesus_christ -997 -1 -1 - -2 -2 -996 -2_bike_dod_ride_bikes - -3_baseball_game_he_year -994 -3 -3 - -4 -4 -991 -4_key_encryption_db_clipper - -5_car_cars_engine_ford -990 -5 -5 - -6 -6 -990 -6_medical_patients_cancer_disease - -7_window_server_widget_motif -988 -7 -7 - -8 -8 -988 -8_space_launch_nasa_orbit -sci.space -comp.windows.x -sci.med -rec.autos -sci.crypt -rec.sport.baseball -rec.motorcycles -soc.religion.christian + + + +Topic +Count +Name +Class + +0 +0 +999 +0_game_hockey_team_25 +rec.sport.hockey + +1_god_church_jesus_christ +997 +1 +1 + +2 +2 +996 +2_bike_dod_ride_bikes + +3_baseball_game_he_year +994 +3 +3 + +4 +4 +991 +4_key_encryption_db_clipper + +5_car_cars_engine_ford +990 +5 +5 + +6 +6 +990 +6_medical_patients_cancer_disease + +7_window_server_widget_motif +988 +7 +7 + +8 +8 +988 +8_space_launch_nasa_orbit +sci.space +comp.windows.x +sci.med +rec.autos +sci.crypt +rec.sport.baseball +rec.motorcycles +soc.religion.christian diff --git a/docs/getting_started/semisupervised/semisupervised.md b/docs/getting_started/semisupervised/semisupervised.md new file mode 100644 index 00000000..6a87fa6d --- /dev/null +++ b/docs/getting_started/semisupervised/semisupervised.md @@ -0,0 +1,81 @@ +In BERTopic, you have several options to nudge the creation of topics towards certain pre-specified topics. Here, we will be looking at semi-supervised topic modeling with BERTopic. + +Semi-supervised modeling allows us to steer the dimensionality reduction of the embeddings into a space that closely follows any labels you might already have. +In other words, we use a semi-supervised UMAP instance to reduce the dimensionality of embeddings before clustering the documents +with HDBSCAN. + +First, let us prepare the data needed for our topic model: + +```python +from bertopic import BERTopic +from sklearn.datasets import fetch_20newsgroups + +data = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) +docs = data["data"] +categories = data["target"] +category_names = data["target_names"] +``` + +We are using the popular 20 Newsgroups dataset which contains roughly 18000 newsgroups posts that each is +assigned to one of 20 categories. Using this dataset we can try to extract its corresponding topic model whilst +taking its underlying categories into account. These categories are here the variable `targets`. + +Each document can be put into one of the following categories: + +```python +>>> category_names + +['alt.atheism', + 'comp.graphics', + 'comp.os.ms-windows.misc', + 'comp.sys.ibm.pc.hardware', + 'comp.sys.mac.hardware', + 'comp.windows.x', + 'misc.forsale', + 'rec.autos', + 'rec.motorcycles', + 'rec.sport.baseball', + 'rec.sport.hockey', + 'sci.crypt', + 'sci.electronics', + 'sci.med', + 'sci.space', + 'soc.religion.christian', + 'talk.politics.guns', + 'talk.politics.mideast', + 'talk.politics.misc', + 'talk.religion.misc'] +``` + +To perform this semi-supervised approach, we can take in some pre-defined topics and simply pass those to the `y` parameter when fitting BERTopic. These labels can be pre-defined topics or simply documents that you feel belong together regardless of their content. BERTopic will nudge the creation of topics towards these categories +using the pre-defined labels. + +To perform supervised topic modeling, we simply use all categories: + +```python +topic_model = BERTopic(verbose=True).fit(docs, y=categories) +``` + +The topic model will be much more attuned to the categories that were defined previously. However, this does not mean that only topics for these categories will be found. BERTopic is likely to find more specific topics in those you have already defined. This allows you to discover previously unknown topics! + +## **Partial labels** + +At times, you might only have labels for a subset of documents. Fortunately, we can still use those labels to at least nudge the documents for which those labels exist. The documents for which we do not have labels are assigned a -1. For this example, imagine we only the labels of categories that are related to computers and we want to create a topic model using semi-supervised modeling: + +```python +labels_to_add = ['comp.graphics', 'comp.os.ms-windows.misc', + 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', + 'comp.windows.x',] +indices = [category_names.index(label) for label in labels_to_add] +y = [label if label in indices else -1 for label in categories] +``` + +The `y` variable contains many -1 values since we do not know all the categories. + +Next, we use those newly constructed labels to again BERTopic semi-supervised: + +```python +topic_model = BERTopic(verbose=True).fit(docs, y=y) +``` + +And that is it! By defining certain classes for our documents, we can steer the topic modeling towards modeling the pre-defined categories. diff --git a/docs/getting_started/supervised/classification_pipeline.svg b/docs/getting_started/supervised/classification_pipeline.svg new file mode 100644 index 00000000..bcf18290 --- /dev/null +++ b/docs/getting_started/supervised/classification_pipeline.svg @@ -0,0 +1,14 @@ + + + +SBERT +Logistic Regression +c-TF-IDF +Embeddings + +Classifier + + +Topic representation + + diff --git a/docs/getting_started/supervised/default_pipeline.svg b/docs/getting_started/supervised/default_pipeline.svg new file mode 100644 index 00000000..60dbdbd5 --- /dev/null +++ b/docs/getting_started/supervised/default_pipeline.svg @@ -0,0 +1,18 @@ + + + +SBERT +UMAP +HDBSCAN +c-TF-IDF +Embeddings + +Dimensionality reduction + + +Clustering + + +Topic representation + + diff --git a/docs/getting_started/supervised/square.svg b/docs/getting_started/supervised/square.svg new file mode 100644 index 00000000..c2935526 --- /dev/null +++ b/docs/getting_started/supervised/square.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/docs/getting_started/supervised/supervised.md b/docs/getting_started/supervised/supervised.md index 703c1a66..3362ca97 100644 --- a/docs/getting_started/supervised/supervised.md +++ b/docs/getting_started/supervised/supervised.md @@ -1,86 +1,120 @@ -In this tutorial, we will be looking at a new feature of BERTopic, namely (semi)-supervised topic modeling! -This allows us to steer the dimensionality reduction of the embeddings into a space that closely follows any labels you might already have. -In other words, we use a semi-supervised UMAP instance to reduce the dimensionality of embeddings before clustering the documents -with HDBSCAN. +Although topic modeling is typically done by discovering topics in an unsupervised manner, there might be times when you already have a bunch of clusters or classes from which you want to model the topics. For example, the often used [20 NewsGroups dataset](https://scikit-learn.org/0.19/datasets/twenty_newsgroups.html) is already split up into 20 classes. Similarly, you might already have created some labels yourself through packages like [human-learn](https://github.com/koaning/human-learn), [bulk](https://github.com/koaning/bulk), [thisnotthat](https://github.com/TutteInstitute/thisnotthat) or something entirely different. + +Instead of using BERTopic to discover previously unknown topics, we are now going to manually pass them to BERTopic and try to learn the relationship between those topics and the input documents. + +> In other words, we are going to be performing classification instead! + +We can view this as a supervised topic modeling approach. Instead of using a clustering algorithm, we are going to be using a classification algorithm instead. + +Generally, we have the following pipeline: + +
+
+--8<-- "docs/getting_started/supervised/default_pipeline.svg" +
+
+ +Instead, we are now going to skip over the dimensionality reduction step and replace the clustering step with a classification model: + +
+
+--8<-- "docs/getting_started/supervised/classification_pipeline.svg" +
+
+ +In other words, we can pass our labels to BERTopic and it will not only learn how to predict labels for new instances, it also transforms those labels into topics by running the c-TF-IDF representations on the set of documents within each label. This process allows us to model the topics themselves and similarly gives us the option to use everything BERTopic has to offer. + +To do so, we need to skip over the dimensionality reduction step and replace the clustering step with a classification algorithm. We can use the documents and labels from the 20 NewsGroups dataset to create topics from those 20 labels: -First, let us prepare the data needed for our topic model: ```python -from bertopic import BERTopic from sklearn.datasets import fetch_20newsgroups +# Get labeled data data = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) -docs = data["data"] -categories = data["target"] -category_names = data["target_names"] +docs = data['data'] +y = data['target'] ``` -We are using the popular 20 Newsgroups dataset which contains roughly 18000 newsgroups posts that each is -assigned to one of 20 categories. Using this dataset we can try to extract its corresponding topic model whilst -taking its underlying categories into account. These categories are here the variable `targets`. +Then, we make sure to create empty instances of the dimensionality reduction and clustering steps. We pass those to BERTopic in order to simply skip over them and go to the topic representation process: -Each document can be put into one of the following categories: ```python ->>> category_names - -['alt.atheism', - 'comp.graphics', - 'comp.os.ms-windows.misc', - 'comp.sys.ibm.pc.hardware', - 'comp.sys.mac.hardware', - 'comp.windows.x', - 'misc.forsale', - 'rec.autos', - 'rec.motorcycles', - 'rec.sport.baseball', - 'rec.sport.hockey', - 'sci.crypt', - 'sci.electronics', - 'sci.med', - 'sci.space', - 'soc.religion.christian', - 'talk.politics.guns', - 'talk.politics.mideast', - 'talk.politics.misc', - 'talk.religion.misc'] +from bertopic import BERTopic +from bertopic.vectorizers import ClassTfidfTransformer +from bertopic.dimensionality import BaseDimensionalityReduction +from sklearn.linear_model import LogisticRegression + +# Get labeled data +data = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) +docs = data['data'] +y = data['target'] + +# Skip over dimensionality reduction, replace cluster model with classifier, +# and reduce frequent words while we are at it. +empty_dimensionality_model = BaseDimensionalityReduction() +clf = LogisticRegression() +ctfidf_model = ClassTfidfTransformer(reduce_frequent_words=True) + +# Create a fully supervised BERTopic instance +topic_model= BERTopic( + umap_model=empty_dimensionality_model, + hdbscan_model=clf, + ctfidf_model=ctfidf_model +) +topics, probs = topic_model.fit_transform(docs, y=y) ``` -## **Semi-supervised Topic Modeling** -In semi-supervised topic modeling, we only have some labels for our documents. The documents for which we do have labels -are used to somewhat guide BERTopic to the extraction of topics for those labels. The documents for which we do not have -labels are assigned a -1. For this example, imagine we only the labels of categories that are related to computers -and we want to create a topic model using semi-supervised modeling: -```python -labels_to_add = ['comp.graphics', 'comp.os.ms-windows.misc', - 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', - 'comp.windows.x',] -indices = [category_names.index(label) for label in labels_to_add] -y = [label if label in indices else -1 for label in categories] -``` +Let's take a look at a few topics that we get out of training this way by running `topic_model.get_topic_info()`: -The `y` variable contains many -1 values since we do not know all the categories. +
+
+--8<-- "docs/getting_started/supervised/table.svg" +
+
-Next, we use those newly constructed labels to again BERTopic semi-supervised: +We can see a number of interesting topics appearing here. They seem to relate to the 20 classes we had as an input. Now, let's map those topics to our original classes in order to view their relationship: ```python -topic_model = BERTopic(verbose=True).fit(docs, y=y) +# Map input `y` to topics +mappings = topic_model.topic_mapper_.get_mappings() +mappings = {value: data["target_names"][key] for key, value in mappings.items()} + +# Assign original classes to our topics +df = topic_model.get_topic_info() +df["Class"] = df.Topic.map(mappings) +df ``` +
+--8<-- "docs/getting_started/supervised/table_classes.svg" +
-And that is it! By defining certain classes for our documents, we can steer the topic modeling towards modeling the -pre-defined categories. +
-## **Supervised Topic Modeling** -In supervised topic modeling, we have labels for all our documents. This can be pre-defined topics or simply documents -that you feel belong together regardless of their content. BERTopic will nudge the creation of topics towards these categories -using the pre-defined labels. - -To perform supervised topic modeling, we simply use all categories: +We can see that the c-TF-IDF representations extracts the words that give a good representation of our input classes. This is all done directly from the labeling. A welcome side-effect is that we now have a classification algorithm that allows us to predict the topics of unseen data: ```python -topic_model = BERTopic(verbose=True).fit(docs, y=categories) +>>> topic, _ = topic_model.transform("this is a document about cars") +>>> topic_model.get_topic(topic) +[('car', 0.4407600315538472), + ('cars', 0.32348015696446325), + ('engine', 0.28032518444946686), + ('ford', 0.2500224508115155), + ('oil', 0.2325984913598611), + ('dealer', 0.2310723968585826), + ('my', 0.22045777551991935), + ('it', 0.21327993649430219), + ('tires', 0.20420842634292657), + ('brake', 0.20246902481367085)] ``` -The topic model will be much more attuned to the categories that were defined previously. However, this does not mean -that only topics for these categories will be found. BERTopic is likely to find more specific topics in those you -have already defined. This allows you to discover previously unknown topics! \ No newline at end of file + Moreover, we can still perform BERTopic-specific features like dynamic topic modeling, topics per class, hierarchical topic modeling, modeling topic distributions, etc. + +!!! note + The resulting `topics` may be a different mapping from the `y` labels. In order to map `y` to `topics`, we can run the following: + + + ```python + mappings = topic_model.topic_mapper_.get_mappings() + y_mapped = [mappings[val] for val in y] + ``` diff --git a/docs/getting_started/supervised/table.svg b/docs/getting_started/supervised/table.svg new file mode 100644 index 00000000..7e841c33 --- /dev/null +++ b/docs/getting_started/supervised/table.svg @@ -0,0 +1,52 @@ + + + +Topic +Count +Name + +0 +0 +999 +0_game_hockey_team_25 + +1_god_church_jesus_christ +997 +1 +1 + +2 +2 +996 +2_bike_dod_ride_bikes + +3_baseball_game_he_year +994 +3 +3 + +4 +4 +991 +4_key_encryption_db_clipper + +5_car_cars_engine_ford +990 +5 +5 + +6 +6 +990 +6_medical_patients_cancer_disease + +7_window_server_widget_motif +988 +7 +7 + +8 +8 +988 +8_space_launch_nasa_orbit + diff --git a/docs/getting_started/supervised/table_classes.svg b/docs/getting_started/supervised/table_classes.svg new file mode 100644 index 00000000..c13b2f10 --- /dev/null +++ b/docs/getting_started/supervised/table_classes.svg @@ -0,0 +1,62 @@ + + + +Topic +Count +Name +Class + +0 +0 +999 +0_game_hockey_team_25 +rec.sport.hockey + +1_god_church_jesus_christ +997 +1 +1 + +2 +2 +996 +2_bike_dod_ride_bikes + +3_baseball_game_he_year +994 +3 +3 + +4 +4 +991 +4_key_encryption_db_clipper + +5_car_cars_engine_ford +990 +5 +5 + +6 +6 +990 +6_medical_patients_cancer_disease + +7_window_server_widget_motif +988 +7 +7 + +8 +8 +988 +8_space_launch_nasa_orbit +sci.space +comp.windows.x +sci.med +rec.autos +sci.crypt +rec.sport.baseball +rec.motorcycles +soc.religion.christian + diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index e0eabae5..8d90266c 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -6,4 +6,16 @@ :root>* { --md-typeset-a-color: #016198; --md-text-link-color: #000000; +} + +body[data-md-color-primary="black"] .svg_image svg { + filter: invert(100%) hue-rotate(180deg); +} + +body[data-md-color-primary="black"] .svg_image svg rect { + fill: transparent; +} + +.svg_image { + text-align: center; } \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index e74c6d51..c5a75cd7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -27,7 +27,8 @@ nav: - Variations: - Topic Distributions: getting_started/distribution/distribution.md - Topics per Class: getting_started/topicsperclass/topicsperclass.md - - (semi)-Supervised Topic Modeling: getting_started/supervised/supervised.md + - Supervised Topic Modeling: getting_started/supervised/supervised.md + - Semi-supervised Topic Modeling: getting_started/semisupervised/semisupervised.md - Dynamic Topic Modeling: getting_started/topicsovertime/topicsovertime.md - Guided Topic Modeling: getting_started/guided/guided.md - Hierarchical Topic Modeling: getting_started/hierarchicaltopics/hierarchicaltopics.md @@ -83,19 +84,23 @@ theme: - navigation.tracking - toc.follow palette: - - scheme: default - toggle: - icon: material/weather-sunny - name: Switch to dark mode - - scheme: slate - toggle: - icon: material/weather-night - name: Switch to light mode + - media: "(prefers-color-scheme: light)" + scheme: black + toggle: + icon: material/weather-sunny + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: black + toggle: + icon: material/weather-night + name: Switch to light mode markdown_extensions: - admonition - pymdownx.details - pymdownx.highlight - pymdownx.superfences + - pymdownx.snippets - toc: permalink: true From 5fffe499397af2dbc20d42f554a904fd4c36eecd Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Fri, 25 Nov 2022 09:38:36 +0100 Subject: [PATCH 15/51] Added support for cuML's HDBSCAN approximate_predict and all_points_membership_vectors functions --- bertopic/_bertopic.py | 26 ++++++++++++--------- bertopic/cluster/_utils.py | 48 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 bertopic/cluster/_utils.py diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 26bd2a2b..b0a83c43 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -33,6 +33,7 @@ from bertopic._mmr import mmr from bertopic.vectorizers import ClassTfidfTransformer from bertopic.backend._utils import select_backend +from bertopic.cluster._utils import hdbscan_delegator, is_supported_hdbscan from bertopic._utils import MyLogger, check_documents_type, check_embeddings_shape, check_is_fitted # Visualization @@ -428,15 +429,15 @@ def transform(self, umap_embeddings = self.umap_model.transform(embeddings) logger.info("Reduced dimensionality") - # Extract predictions and probabilities if it is a HDBSCAN model - if isinstance(self.hdbscan_model, hdbscan.HDBSCAN): - predictions, probabilities = hdbscan.approximate_predict(self.hdbscan_model, umap_embeddings) + + # Extract predictions and probabilities if it is a HDBSCAN-like model + if is_supported_hdbscan(self.hdbscan_model): + predictions, probabilities = hdbscan_delegator(self.hdbscan_model, "approximate_predict", umap_embeddings) # Calculate probabilities - if self.calculate_probabilities: + if self.calculate_probabilities and isinstance(self.hdbscan_model, hdbscan.HDBSCAN): probabilities = hdbscan.membership_vector(self.hdbscan_model, umap_embeddings) logger.info("Calculated probabilities with HDBSCAN") - else: predictions = self.hdbscan_model.predict(umap_embeddings) probabilities = None @@ -2624,14 +2625,17 @@ def _cluster_embeddings(self, # track if there are outlier labels and act accordingly when slicing. self._outliers = 1 if -1 in set(labels) else 0 - # Save representative docs and calculate probabilities if it is a HDBSCAN model + # Save representative docs if isinstance(self.hdbscan_model, hdbscan.HDBSCAN): - probabilities = self.hdbscan_model.probabilities_ self._save_representative_docs(documents) - if self.calculate_probabilities: - probabilities = hdbscan.all_points_membership_vectors(self.hdbscan_model) - else: - probabilities = None + + # Extract probabilities + probabilities = None + if hasattr(self.hdbscan_model, "probabilities_"): + probabilities = self.hdbscan_model.probabilities_ + + if self.calculate_probabilities and is_supported_hdbscan(self.hdbscan_model): + probabilities = hdbscan_delegator(self.hdbscan_model, "all_points_membership_vectors") if not partial_fit: self.topic_mapper_ = TopicMapper(self.topics_) diff --git a/bertopic/cluster/_utils.py b/bertopic/cluster/_utils.py new file mode 100644 index 00000000..4b3149ae --- /dev/null +++ b/bertopic/cluster/_utils.py @@ -0,0 +1,48 @@ +import hdbscan +import numpy as np + + +def hdbscan_delegator(model, func: str, embeddings: np.ndarray = None): + """ Function used to select the HDBSCAN-like model for generating + predictions and probabilities. + + Arguments: + model: The cluster model. + func: The function to use. Options: + - "approximate_predict" + - "all_points_membership_vectors" + embeddings: Input embeddings for "approximate_predict" + """ + + # Approximate predict + if func == "approximate_predict": + if isinstance(model, hdbscan.HDBSCAN): + predictions, probabilities = hdbscan.approximate_predict(model, embeddings) + return predictions, probabilities + elif "cuml" and "hdbscan" in str(type(model)).lower(): + from cuml.cluster import approximate_predict + predictions, probabilities = approximate_predict(model, embeddings) + return predictions, probabilities + else: + predictions = model.predict(embeddings) + return predictions, None + + # All points membership + if func == "all_points_membership_vectors": + if isinstance(model, hdbscan.HDBSCAN): + return hdbscan.all_points_membership_vectors(model) + elif "cuml" and "hdbscan" in str(type(model)).lower(): + from cuml import cluster + return cluster.all_points_membership_vectors(model) + else: + return None + + +def is_supported_hdbscan(model): + """ Check whether the input model is a supported HDBSCAN-like model """ + if isinstance(model, hdbscan.HDBSCAN): + return True + elif "cuml" and "hdbscan" in str(type(model)).lower(): + return True + else: + return False From 3c7cbeda82f6cacf0c89a0829beb19d3071971a2 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sat, 26 Nov 2022 10:36:17 +0100 Subject: [PATCH 16/51] A lot of documentation updates, added several images --- docs/algorithm/algorithm.md | 174 +------------ docs/algorithm/default.svg | 41 ++++ docs/algorithm/modularity.svg | 228 ++++++++++++++++++ docs/getting_started/clustering/clustering.md | 34 ++- .../getting_started/clustering/clustering.svg | 47 ++++ docs/getting_started/ctfidf/ctfidf.md | 5 + docs/getting_started/ctfidf/ctfidf.svg | 47 ++++ .../dim_reduction/dim_reduction.md | 34 ++- .../dim_reduction/dimensionality.svg | 47 ++++ docs/getting_started/embeddings/embeddings.md | 15 +- .../getting_started/embeddings/embeddings.svg | 99 ++++++++ .../tips_and_tricks/tips_and_tricks.md | 4 + .../vectorizers/vectorizers.md | 8 + .../vectorizers/vectorizers.svg | 47 ++++ mkdocs.yml | 2 +- 15 files changed, 652 insertions(+), 180 deletions(-) create mode 100644 docs/algorithm/default.svg create mode 100644 docs/algorithm/modularity.svg create mode 100644 docs/getting_started/clustering/clustering.svg create mode 100644 docs/getting_started/ctfidf/ctfidf.svg create mode 100644 docs/getting_started/dim_reduction/dimensionality.svg create mode 100644 docs/getting_started/embeddings/embeddings.svg create mode 100644 docs/getting_started/vectorizers/vectorizers.svg diff --git a/docs/algorithm/algorithm.md b/docs/algorithm/algorithm.md index 1f5c49d7..af998d72 100644 --- a/docs/algorithm/algorithm.md +++ b/docs/algorithm/algorithm.md @@ -9,169 +9,17 @@ Below, you will find different types of overviews of each step in BERTopic's mai ## **Visual Overview** -This visual overview reduces BERTopic to four main steps, namely the embedding of documents, the clustering of documents, the topic extraction, and the topic diversification. Each step contains one or more sub-steps that you can read a bit more about below. -

- - - - -
- - -
-

Embed documents

-
-
- - - -
-
- embeddings -
-
- -

- We start by converting our documents to vector representations through the use of language models. -

-
-
- - SBERT - - - 🤗 Transformers - - - spaCy - -
-
-
- - -
- -

Cluster embeddings

-
- - -
-
- reduction -
-
- -

- The vector representations are reduced in dimensionality so that clustering algorithms have an easier time finding clusters. -

-
-
- UMAP - PCA - Truncated SVD -
-
- - -
-
- cluster -
-
- -

- A clustering algorithm is used to cluster the reduced vectors in order to find semantically similar documents. -

-
-
- HDBSCAN - k-Means - BIRCH -
-
- -
-

Topic Representation

-
- - -
-
- bow -
-
- -

- We tokenize each topic into a bag-of-words representation that allows us to process the data without affecting the input embeddings. -

-
-
- CountVectorizer -
-
- - -
-
- ctfidf -
-
- -

- We calculate words that are interesting to each topic with a class-based TF-IDF procedure called c-TF-IDF. -

-
-
- c-TF-IDF - BM-25 -
-
- -
-

(Optional) Topic Diversity

-
-
- - -
-
- embeddings -
-
- -

- Maximal Marginal Relevance is used to diversify words in each topic which removes repeating and similar words. -

-
-
- MMR -
-
- -
- - +BERTopic can be viewed as a sequence of steps in order to create its topic representations. There are five steps to this process: + + + +Although these steps are the default, there is some modularity to BERTopic. Each step in this process was carefully selected such that they are all somewhat independent from one another. For example, the tokenization step is not directly influenced by the embedding model that was used to convert the documents which allows us to be creative in how we perform the tokenization step. + +This effect is especially strong in the clustering step. Models like HDBSCAN assume that clusters can have different shapes and forms. As a result, using a centroid-based technique to model the topic representations would not be beneficial since the centroid is not always representative of these types of clusters. A bag-of-words representation, however, makes very few assumptions with respect to the shape and form of a cluster. + +As a result, BERTopic is quite modular and can maintain its quality of topic generation throughout a variety of sub-models. In other words, BERTopic essentially allows you to **build your own topic model**: + + ## **Code Overview** After going through the visual overview, this code overview demonstrates the algorithm using BERTopic. An advantage of using BERTopic is each major step in its algorithm can be explicitly defined, thereby making the process not only transparent but also more intuitive. diff --git a/docs/algorithm/default.svg b/docs/algorithm/default.svg new file mode 100644 index 00000000..206e10d8 --- /dev/null +++ b/docs/algorithm/default.svg @@ -0,0 +1,41 @@ + + + + + + +SBERT + + + + + +UMAP + + + + + +HDBSCAN + + + + + +CountVectorizer + + + + + +c-TF-IDF +Weighting scheme +Tokenizer +Clustering +Dimensionality Reduction +Embeddings + + + + + diff --git a/docs/algorithm/modularity.svg b/docs/algorithm/modularity.svg new file mode 100644 index 00000000..a8596c70 --- /dev/null +++ b/docs/algorithm/modularity.svg @@ -0,0 +1,228 @@ + + + + + + +SBERT + + + + + +SpaCy + + + + + +Transformers + + + + + + + + + + + + + + + + + + + + + + + + +UMAP + + + + + +PCA + + + + + +TruncatedSVD + + + + + + + + +HDBSCAN + + + + + +CountVectorizer + + + + + +Jieba + + + + + +POS + + + + + +k-Means + + + + + +BIRCH + + + + + + + + + + + + +Embeddings +Dimensionality reduction +Clustering +Tokenizer +Weighting scheme + + + + + +SpaCy + + + + + +PCA + + + + + +k-Means + + + + + +CountVectorizer + + + + + +c-TF-IDF + + + + + +c-TF-IDF + + + + + +c-TF-IDF + MMR + + + + + +c-TF-IDF + BM25 + + + + + +TF-IDF + + + + + +TruncatedSVD + + + + + +BIRCH + + + + + +CountVectorizer + + + + + +c-TF-IDF + MMR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/getting_started/clustering/clustering.md b/docs/getting_started/clustering/clustering.md index ce8aed8a..a83f3164 100644 --- a/docs/getting_started/clustering/clustering.md +++ b/docs/getting_started/clustering/clustering.md @@ -1,9 +1,14 @@ After reducing the dimensionality of our input embeddings, we need to cluster them into groups of similar embeddings in order to extract our topics. This process of clustering is quite important because the more performant our clustering technique the more accurate our topic representations are. -In BERTopic, we typically use HDBSCAN as it is quite capable of capturing structures with different densities. However, there is not perfect +In BERTopic, we typically use HDBSCAN as it is quite capable of capturing structures with different densities. However, there is not one perfect clustering model and you might want to be using something entirely different for you use case. Moreover, what if a new state-of-the-art model -is released tomorrow? We would like to able to use that in BERTopic, right? +is released tomorrow? We would like to able to use that in BERTopic, right? Since BERTopic assumes some independence among steps, we can allow for this modularity: + +

+ +

+ As a result, the `hdbscan_model` parameter in BERTopic now allows for a variety of clustering models. To do so, the class should have the following attributes: @@ -28,7 +33,7 @@ class ClusterModel: return X ``` -In this tutorial, I will show you how to use several clustering algorithms in BERTopic. +In this section, we will go through several examples of clustering algorithms and how they can be implemented. ## **HDBSCAN** @@ -81,4 +86,25 @@ from sklearn.cluster import AgglomerativeClustering cluster_model = AgglomerativeClustering(n_clusters=50) topic_model = BERTopic(hdbscan_model=cluster_model) -``` \ No newline at end of file +``` + + +## **cuML HDBSCAN** + +Although the original HDBSCAN implementation is an amazing technique, it may have difficulty handling large amounts of data. Instead, +we can use [cuML](https://rapids.ai/start.html#rapids-release-selector) to speed up HDBSCAN through GPU acceleration: + +```python +from bertopic import BERTopic +from cuml.cluster import HDBSCAN + +hdbscan_model = HDBSCAN(min_samples=10, gen_min_span_tree=True) +topic_model = BERTopic(hdbscan_model=hdbscan_model) +``` + +The great thing about using cuML's HDBSCAN implementation is that it supports many features of the original implementation. In other words, +`calculate_probabilities=True` also works! + +!!! note + As of the v0.13 release, it is not yet possible to calculate the topic-document probability matrix for unseen data (i.e., `.transform`) using cuML's HDBSCAN. + However, it is still possible to calculate the topic-document probability matrix for the data on which the model was trained (i.e., `.fit` and `.fit_tranform`). \ No newline at end of file diff --git a/docs/getting_started/clustering/clustering.svg b/docs/getting_started/clustering/clustering.svg new file mode 100644 index 00000000..bf36ce61 --- /dev/null +++ b/docs/getting_started/clustering/clustering.svg @@ -0,0 +1,47 @@ + + + + + + +SBERT + + + + + +UMAP + + + + + +HDBSCAN + + + + + +CountVectorizer + + + + + +c-TF-IDF + + + + + +k-Means + + + + + +BIRCH + + + + diff --git a/docs/getting_started/ctfidf/ctfidf.md b/docs/getting_started/ctfidf/ctfidf.md index 9c3dada6..dd81869f 100644 --- a/docs/getting_started/ctfidf/ctfidf.md +++ b/docs/getting_started/ctfidf/ctfidf.md @@ -9,6 +9,11 @@ Each cluster is converted to a single document instead of a set of documents. Th

Then, we take take the logarithm of one plus the average number of words per class `A` divided by the frequency of word `x` across all classes. We add plus one within the logarithm to force values to be positive. This results in our class-based `idf` representation. Like with the classic TF-IDF, we then multiply `tf` with `idf` to get the importance score per word in each class. In other words, the classical TF-IDF procedure is **not** used here but a modified version of the algorithm that allows for a much better representation. +Since the topic representation is somewhat independent from the clustering step, we can change how the c-TF-IDF representation will look like. This can be in the form of parameter tuning, different weighting schemes, or using a diversity metric on top of it. This allows for some modularity with respect to the weighting scheme: + +

+ +

This class-based TF-IDF representation is enabled by default in BERTopic. However, we can explicitly pass it to BERTopic through the `ctfidf_model` allowing for parameter tuning and the customization of the topic extraction technique: diff --git a/docs/getting_started/ctfidf/ctfidf.svg b/docs/getting_started/ctfidf/ctfidf.svg new file mode 100644 index 00000000..ef5299c3 --- /dev/null +++ b/docs/getting_started/ctfidf/ctfidf.svg @@ -0,0 +1,47 @@ + + + + + + +SBERT + + + + + +UMAP + + + + + +HDBSCAN + + + + + +c-TF-IDF + 
BM25 + + + + + +CountVectorizer + + + + + +c-TF-IDF + + + + + +c-TF-IDF + MMR + + + + diff --git a/docs/getting_started/dim_reduction/dim_reduction.md b/docs/getting_started/dim_reduction/dim_reduction.md index 4a211c2d..32079b93 100644 --- a/docs/getting_started/dim_reduction/dim_reduction.md +++ b/docs/getting_started/dim_reduction/dim_reduction.md @@ -1,13 +1,16 @@ -One important aspect of BERTopic is dimensionality reduction of the embeddings. Typically, embeddings are at least 384 in length and -many clustering algorithms have difficulty clustering in such a high dimensional space. A solution is to reduce the dimensionality -of the embeddings to a workable dimensional space (e.g., 5) for clustering algorithms to work with. +An important aspect of BERTopic is dimensionality reduction of the input embeddings. As embeddings are often high in dimensionality, clustering becomes difficult due +to the curse of dimensionality. A solution is to reduce the dimensionality into -In BERTopic, we typically use UMAP as it is able to capture both the local and global high-dimensional space in lower dimensions. -However, there are other solutions out there, such as PCA that users might be interested in trying out. +A solution is to reduce the dimensionality of the embeddings to a workable dimensional space (e.g., 5) for clustering algorithms to work with. +UMAP is used as a default in BERTopic since it is able to capture both the local and global high-dimensional space in lower dimensions. +However, there are other solutions out there, such as PCA that users might be interested in trying out. Since BERTopic allows assumes some independency between steps, we can +use any other dimensionality reduction algorithm. The image below illustrates this modularity: + + +

+ +

-We have seen that developments in the artificial intelligence fields are quite fast and that whatever mights be state-of-the-art now, -could be different a year or even months later. Therefore, BERTopic allows you to use any dimensionality reduction algorithm that -you would like to be using. As a result, the `umap_model` parameter in BERTopic now allows for a variety of dimensionality reduction models. To do so, the class should have the following attributes: @@ -28,7 +31,7 @@ class DimensionalityReduction: return X ``` -In this tutorial, I will show you how to use several dimensionality reduction algorithms in BERTopic. +In this section, we will go through several examples of dimensionality reduction techniques and how they can be implemented. ## **UMAP** @@ -77,4 +80,17 @@ from sklearn.decomposition import TruncatedSVD dim_model = TruncatedSVD(n_components=5) topic_model = BERTopic(umap_model=dim_model) +``` + +## **cuML UMAP** + +Although the original UMAP implementation is an amazing technique, it may have difficulty handling large amounts of data. Instead, +we can use [cuML](https://rapids.ai/start.html#rapids-release-selector) to speed up UMAP through GPU acceleration: + +```python +from bertopic import BERTopic +from cuml.manifold import UMAP + +umap_model = UMAP(n_components=5, n_neighbors=15, min_dist=0.0) +topic_model = BERTopic(umap_model=umap_model) ``` \ No newline at end of file diff --git a/docs/getting_started/dim_reduction/dimensionality.svg b/docs/getting_started/dim_reduction/dimensionality.svg new file mode 100644 index 00000000..58413491 --- /dev/null +++ b/docs/getting_started/dim_reduction/dimensionality.svg @@ -0,0 +1,47 @@ + + + + + + +SBERT + + + + + +UMAP + + + + + +PCA + + + + + +TruncatedSVD + + + + + + + + +HDBSCAN + + + + + +CountVectorizer + + + + + +c-TF-IDF + diff --git a/docs/getting_started/embeddings/embeddings.md b/docs/getting_started/embeddings/embeddings.md index 681aee50..87674301 100644 --- a/docs/getting_started/embeddings/embeddings.md +++ b/docs/getting_started/embeddings/embeddings.md @@ -1,7 +1,16 @@ # Embedding Models -In this tutorial, we will be going through the embedding models that can be used in BERTopic. -Having the option to choose embedding models allows you to leverage pre-trained embeddings that suit your use case. -Moreover, it helps to create a topic when you have little data available. +BERTopic starts with transforming our input documents into numerical representations. Althought there are a number of ways this can be achieved, we typically use sentence-transformers (`"all-MiniLM-L6-v2"`) as it is quite capable of capturing the semantic similarity between documents. + +However, there is not one perfect +embedding model and you might want to be using something entirely different for you use case. Since BERTopic assumes some independence among steps, we can allow for this modularity: + +

+ +

+ +This modularity allows us not only to choose any embedding model to convert our documents into numerical representations, we can use essentially any data to perform our clustering. +When new state-of-the-art pre-trained embedding models are released, BERTopic will be able to use them. As a result, BERTopic grows with any new models being released. +Out-of-the-box, BERTopic supports a number of embedding techniques. In this section, we will go through several of them and how they can be implemented. ### **Sentence Transformers** You can select any model from sentence-transformers [here](https://www.sbert.net/docs/pretrained_models.html) diff --git a/docs/getting_started/embeddings/embeddings.svg b/docs/getting_started/embeddings/embeddings.svg new file mode 100644 index 00000000..96cfae15 --- /dev/null +++ b/docs/getting_started/embeddings/embeddings.svg @@ -0,0 +1,99 @@ + + + + + + +SpaCy + + + + + +SBERT + + + + + +Transformers + + + + + + + + + + + + + + + + + + + + + + + + +UMAP + + + + + +HDBSCAN + + + + + +CountVectorizer + + + + + +c-TF-IDF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/getting_started/tips_and_tricks/tips_and_tricks.md b/docs/getting_started/tips_and_tricks/tips_and_tricks.md index 91c1755f..5d752fe5 100644 --- a/docs/getting_started/tips_and_tricks/tips_and_tricks.md +++ b/docs/getting_started/tips_and_tricks/tips_and_tricks.md @@ -152,6 +152,10 @@ from cuml.preprocessing import normalize embeddings = normalize(embeddings) ``` +!!! note + As of the v0.13 release, it is not yet possible to calculate the topic-document probability matrix for unseen data (i.e., `.transform`) using cuML's HDBSCAN. + However, it is still possible to calculate the topic-document probability matrix for the data on which the model was trained (i.e., `.fit` and `.fit_tranform`). + ## **Finding similar topics between models** Whenever you have trained seperate BERTopic models on different datasets, it might diff --git a/docs/getting_started/vectorizers/vectorizers.md b/docs/getting_started/vectorizers/vectorizers.md index f7191e1b..a5217c1d 100644 --- a/docs/getting_started/vectorizers/vectorizers.md +++ b/docs/getting_started/vectorizers/vectorizers.md @@ -5,6 +5,14 @@ importance to make sure that the topic representations fits with your use case. In practice, there is not one correct way of creating topic representations. Some use cases might opt more higher n-grams, whereas others might focus more on single words without any stop words. The diversity in use cases also means that we need to have some flexibility in BERTopic to make sure it can be used across most use cases. +The image below illustrates this modularity: + +

+ +

+ + +In this section, we will go through several examples of vectorization algorithms and how they can be implemented. ## **CountVectorizer** diff --git a/docs/getting_started/vectorizers/vectorizers.svg b/docs/getting_started/vectorizers/vectorizers.svg new file mode 100644 index 00000000..be3ee4ab --- /dev/null +++ b/docs/getting_started/vectorizers/vectorizers.svg @@ -0,0 +1,47 @@ + + + + + + +SBERT + + + + + +UMAP + + + + + +HDBSCAN + + + + + +CountVectorizer + + + + + +Jieba + + + + + +c-TF-IDF + + + + + +POS + + + + diff --git a/mkdocs.yml b/mkdocs.yml index c5a75cd7..ea79ad79 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -12,7 +12,6 @@ nav: - The Algorithm: algorithm/algorithm.md - Getting Started: - getting_started/quickstart/quickstart.md - - Embedding Models: getting_started/embeddings/embeddings.md - Topic Visualization: getting_started/visualization/visualization.md - Topic Reduction: getting_started/topicreduction/topicreduction.md - Topic Representation: getting_started/topicrepresentation/topicrepresentation.md @@ -20,6 +19,7 @@ nav: - Parameter tuning: getting_started/parameter tuning/parametertuning.md - Tips & Tricks: getting_started/tips_and_tricks/tips_and_tricks.md - Sub-models: + - Embeddings: getting_started/embeddings/embeddings.md - Dimensionality Reduction: getting_started/dim_reduction/dim_reduction.md - Clustering: getting_started/clustering/clustering.md - Vectorizers: getting_started/vectorizers/vectorizers.md From 7d3651eeebd00aec57648de80032a841203ba6a2 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sun, 27 Nov 2022 16:47:43 +0100 Subject: [PATCH 17/51] Add lightweight installation and usage --- docs/getting_started/embeddings/embeddings.md | 2 +- .../tips_and_tricks/tips_and_tricks.md | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/getting_started/embeddings/embeddings.md b/docs/getting_started/embeddings/embeddings.md index 87674301..7a613184 100644 --- a/docs/getting_started/embeddings/embeddings.md +++ b/docs/getting_started/embeddings/embeddings.md @@ -146,7 +146,7 @@ topic_model = BERTopic(embedding_model=ft) ### **Scikit-Learn Embeddings** Scikit-Learn is a framework for more than just machine learning. It offers many preprocessing tools, some of which can be used to create representations -for text. Many of these tools are relatively lightweight and don't require a GPU. +for text. Many of these tools are relatively lightweight and do not require a GPU. While the representations may be less expressive as many BERT models, the fact that it runs much faster can make it a relevant candidate to consider. diff --git a/docs/getting_started/tips_and_tricks/tips_and_tricks.md b/docs/getting_started/tips_and_tricks/tips_and_tricks.md index 5d752fe5..20cad98f 100644 --- a/docs/getting_started/tips_and_tricks/tips_and_tricks.md +++ b/docs/getting_started/tips_and_tricks/tips_and_tricks.md @@ -156,6 +156,36 @@ embeddings = normalize(embeddings) As of the v0.13 release, it is not yet possible to calculate the topic-document probability matrix for unseen data (i.e., `.transform`) using cuML's HDBSCAN. However, it is still possible to calculate the topic-document probability matrix for the data on which the model was trained (i.e., `.fit` and `.fit_tranform`). + +## **Lightweight installation** + +The default embedding model in BERTopic is one of the amazing sentence-transformers models, namely `"all-MiniLM-L6-v2"`. Although this model performs well out of the box, it typically needs a GPU to transform the documents into embeddings in a reasonable time. Moreover, the installation requires `pytorch` which often results in a rather large environment, memory-wise. + +Fortunately, it is possible to install BERTopic without `sentence-transformers` and use it as a lightweight solution instead. The installation can be done as follows: + +```bash +pip install --no-deps bertopic +pip install --upgrade numpy hdbscan umap-learn pandas scikit-learn tqdm plotly pyyaml +``` + +Then, we can use BERTopic without `sentence-transformers` as follows using a CPU-based embedding technique: + +```python +from sklearn.pipeline import make_pipeline +from sklearn.decomposition import TruncatedSVD +from sklearn.feature_extraction.text import TfidfVectorizer + +pipe = make_pipeline( + TfidfVectorizer(), + TruncatedSVD(100) +) + +topic_model = BERTopic(embedding_model=pipe) +``` + +As a result, the entire package and resulting model can be run quickly on the CPU and no GPU is necessary! + + ## **Finding similar topics between models** Whenever you have trained seperate BERTopic models on different datasets, it might From ceca56a90dc62bb8fdf12f9d6e1524868324e128 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Mon, 28 Nov 2022 11:15:43 +0100 Subject: [PATCH 18/51] Added loads of images for all BERTopic extensions --- .../distribution/approximate_distribution.svg | 253 +++++++++--------- .../distribution/distribution.md | 10 +- docs/getting_started/guided/guided.md | 21 +- docs/getting_started/guided/guided.svg | 152 +++++++++++ .../hierarchicaltopics/hierarchical.svg | 166 ++++++++++++ .../hierarchicaltopics/hierarchicaltopics.md | 24 +- docs/getting_started/manual/pipeline.svg | 6 +- docs/getting_started/manual/table.svg | 78 +++--- docs/getting_started/manual/table_classes.svg | 98 +++---- docs/getting_started/online/online.md | 6 + docs/getting_started/online/online.svg | 26 ++ .../semisupervised/semisupervised.md | 7 + .../semisupervised/semisupervised.svg | 21 ++ .../supervised/classification_pipeline.svg | 12 +- .../supervised/default_pipeline.svg | 16 +- docs/getting_started/supervised/table.svg | 78 +++--- .../supervised/table_classes.svg | 98 +++---- .../topicsovertime/topicsovertime.md | 19 +- .../topicsovertime/topicsovertime.svg | 115 ++++++++ .../topicsperclass/class_modeling.svg | 76 ++++++ .../topicsperclass/topicsperclass.md | 14 +- 21 files changed, 928 insertions(+), 368 deletions(-) create mode 100644 docs/getting_started/guided/guided.svg create mode 100644 docs/getting_started/hierarchicaltopics/hierarchical.svg create mode 100644 docs/getting_started/online/online.svg create mode 100644 docs/getting_started/semisupervised/semisupervised.svg create mode 100644 docs/getting_started/topicsovertime/topicsovertime.svg create mode 100644 docs/getting_started/topicsperclass/class_modeling.svg diff --git a/docs/getting_started/distribution/approximate_distribution.svg b/docs/getting_started/distribution/approximate_distribution.svg index 3f0cc9df..84e16602 100644 --- a/docs/getting_started/distribution/approximate_distribution.svg +++ b/docs/getting_started/distribution/approximate_distribution.svg @@ -1,132 +1,123 @@ - - - - -the -right -problem -is -difficult -Solving - - - - - - -right -the -Solving - - - -the -right -problem - - - -right -problem -is - - - -problem -is -difficult - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -create tokensets -topic-tokenset similarity -document-topic distribution -multi-topic assignment on a token-level - - - - -solving -topic 2 -topic 1 -topic 3 - -topic 4 -the -right -problem -is -difficult - -0.75 -0.32 -0.16 - - - - - -0.21 -0.29 -0.81 -0.47 -0.26 - - -0.12 -0.33 - - - - - - + +the +right +problem +is +difficult +Solving + + + + + + +right +the +Solving + + + +the +right +problem + + + +right +problem +is + + + +problem +is +difficult + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +create tokensets +topic-tokenset similarity +document-topic distribution +multi-topic assignment on a token-level + + + + +solving +topic 2 +topic 1 +topic 3 + +topic 4 +the +right +problem +is +difficult + +0.75 +0.32 +0.16 + + + + + +0.21 +0.29 +0.81 +0.47 +0.26 + + +0.12 +0.33 diff --git a/docs/getting_started/distribution/distribution.md b/docs/getting_started/distribution/distribution.md index 18c96e2f..d1f86bf1 100644 --- a/docs/getting_started/distribution/distribution.md +++ b/docs/getting_started/distribution/distribution.md @@ -1,9 +1,13 @@ BERTopic approaches topic modeling as a cluster task and attempts to cluster semantically similar documents in order to extract common topics. A disadvantage of using such a method is that each document is assigned to a single cluster and therefore also a single topic. In practice, documents may contain a mixture of topics. This can be accounted for by splitting up the documents into sentences and feeding those to BERTopic. Another option is to use a cluster model that can perform soft-clustering, like HDBSCAN. As BERTopic focuses on modularity, we may still want to model that mixture of topics even when we are using a hard-clustering model, like k-Means without the need to split up our documents. This is where `.approximate_distribution` comes in! -

- -

+ +
+

+--8<-- "docs/getting_started/distribution/approximate_distribution.svg" +
+
+ In order to perform this approximation, each document is split into tokens according to the provided tokenizer in the `CountVectorizer`. Then, a **sliding window** is applied on each document creating subsets of the document. For example, with a window size of 3 and stride of 1, the document: > Solving the right problem is difficult. diff --git a/docs/getting_started/guided/guided.md b/docs/getting_started/guided/guided.md index ffbdc6f7..64fd0c17 100644 --- a/docs/getting_started/guided/guided.md +++ b/docs/getting_started/guided/guided.md @@ -1,27 +1,24 @@ -Guided Topic Modeling or Seeded Topic Modeling is a collection of techniques that guides the topic modeling approach -by setting a number of seed topics in which the model will converge to. These techniques allow the user to set a -pre-defined number of topic representations that are sure to be in documents. For example, take an IT-business -that has a ticket system for the software their clients use. Those tickets may typically contain information about -a specific bug regarding login issues that the IT-business is aware off. +Guided Topic Modeling or Seeded Topic Modeling is a collection of techniques that guides the topic modeling approach by setting a number of seed topics in which the model will converge to. These techniques allow the user to set a pre-defined number of topic representations that are sure to be in documents. For example, take an IT-business that has a ticket system for the software their clients use. Those tickets may typically contain information about a specific bug regarding login issues that the IT-business is aware off. To model that bug, we can create a seed topic representation containing the words `bug`, `login`, `password`, and `username`. By defining those words, a Guided Topic Modeling approach will try to converge at least one topic to those words. +
+
+--8<-- "docs/getting_started/guided/guided.svg" +
+
+ Guided BERTopic has two main steps: -First, we create embeddings for each seeded topics by joining them and passing them through the document embedder. -These embeddings will be compared with the existing document embeddings through cosine similarity and assigned a label. -If the document is most similar to a seeded topic, then it will get that topic's label. +First, we create embeddings for each seeded topics by joining them and passing them through the document embedder. These embeddings will be compared with the existing document embeddings through cosine similarity and assigned a label. If the document is most similar to a seeded topic, then it will get that topic's label. If it is most similar to the average document embedding, it will get the -1 label. These labels are then passed through UMAP to create a semi-supervised approach that should nudge the topic creation to the seeded topics. Second, we take all words in seed_topic_list and assign them a multiplier larger than 1. Those multipliers will be used to increase the IDF values of the words across all topics thereby increasing -the likelihood that a seeded topic word will appear in a topic. This does, however, also increase the chance of an -irrelevant topic having unrelated words. In practice, this should not be an issue since the IDF value is likely -to remain low regardless of the multiplier. The multiplier is now a fixed value but may change to something -more elegant, like taking the distribution of IDF values and its position into account when defining the multiplier. +the likelihood that a seeded topic word will appear in a topic. This does, however, also increase the chance of an irrelevant topic having unrelated words. In practice, this should not be an issue since the IDF value is likely to remain low regardless of the multiplier. The multiplier is now a fixed value but may change to something more elegant, like taking the distribution of IDF values and its position into account when defining the multiplier. ### **Example** To demonstrate Guided BERTopic, we use the 20 Newsgroups dataset as our example. We have frequently used this diff --git a/docs/getting_started/guided/guided.svg b/docs/getting_started/guided/guided.svg new file mode 100644 index 00000000..2f8de3be --- /dev/null +++ b/docs/getting_started/guided/guided.svg @@ -0,0 +1,152 @@ + + + + + + +"drug cancer drugs doctor" + + + + + +"windows drive dos file" + + + + + +"space launch orbit lunar" +Concatenate and embed the keywords/keyphrases using the embedding model. +For each document, generate labels by finding which seeded topic fits best based on cosine similarity between embeddings. +Average the embedding of each document with the selected seeded topic. +Define seed topics through keywords or keyphrases. +"drug", "cancer", "drugs", "doctor" +Seed topic 1 +Seed topic 2 +Seed topic 3 + +"windows", "drive", "dos", "file" + +"space", "launch", "orbit", "lunar" + + + + + + + + + + + + + + + + + + + + + +Seed topic 3 + + + + + + + + + + + + + +Seed topic 2 + + + + + + + + + + + + + +No seed topic match found + + + + + + + + + + + + + +Seed topic 2 + + + + + + + + +seed topic embedding + + + + + +document embedding ++ +2 + +Mutiply the IDF values of the seeded keywords across all topics with 1.2. + + + +Word +IDF +Multiplier +Adjusted IDF + +drug +1.2 +.55 +.66 + +1.2 +doctor +.78 +.94 + +cat +1 +.22 +.22 + +1 +dog +.11 +.11 + +space +1.2 +.35 +.42 + +1.2 +launch +.89 +1.07 + diff --git a/docs/getting_started/hierarchicaltopics/hierarchical.svg b/docs/getting_started/hierarchicaltopics/hierarchical.svg new file mode 100644 index 00000000..a0998b09 --- /dev/null +++ b/docs/getting_started/hierarchicaltopics/hierarchical.svg @@ -0,0 +1,166 @@ + +Create a distance matrix by calculating the cosine similarity between c-TF-IDF representations of each topic. +Apply a linkage function of choice on the distance matrix to model the hierarchical structure of topics. + + + + + + + + + + + + + + + +Topic 26 + + + + + + + + + + + + + + + +Topic 1 + + + + + + + + + + + + + + + +Topic 38 + + + + + + + + + + + + + + + +Topic 42 + + + + + +re-calculate c-TF-IDF +Update the c-TF-IDF representation based on the collection of documents across the merged topics. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Topic +1 +.12 +.12 +.53 +.53 +.74 +.74 +.89 +.89 +.24 +.24 +.01 +.01 +1 +1 +1 +1 +... +... +... +... +... +... +... +... +1 +2 +3 +1 +2 +3 +n +... +. +. +. +n + + + + + + + + + + + + + + + diff --git a/docs/getting_started/hierarchicaltopics/hierarchicaltopics.md b/docs/getting_started/hierarchicaltopics/hierarchicaltopics.md index 29ed1821..7b7624f8 100644 --- a/docs/getting_started/hierarchicaltopics/hierarchicaltopics.md +++ b/docs/getting_started/hierarchicaltopics/hierarchicaltopics.md @@ -1,20 +1,16 @@ -When tweaking your topic model, the number of topics that are generated has a large effect on the quality of the topic representations. -Some topics could be merged together and having an understanding of the effect will help you understand which topics should and which -should not be merged. +When tweaking your topic model, the number of topics that are generated has a large effect on the quality of the topic representations. Some topics could be merged together and having an understanding of the effect will help you understand which topics should and which should not be merged. -That is where hierarchical topic modeling comes in. It tries to model the possible hierarchical nature of the topics you have created -in order to understand which topics are similar to each other. Moreover, you will have more insight into sub-topics that might -exist in your data. +That is where hierarchical topic modeling comes in. It tries to model the possible hierarchical nature of the topics you have created in order to understand which topics are similar to each other. Moreover, you will have more insight into sub-topics that might exist in your data. -In BERTopic, we can approximate this potential hierarchy by making use of our topic-term matrix (c-TF-IDF matrix). This matrix -contains information about the importance of every word in every topic and makes for a nice numerical representation of our topics. -The smaller the distance between two c-TF-IDF representations, the more similar we assume they are. In practice, this process of merging -topics is done through the hierarchical clustering capabilities of `scipy` (see [here](https://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html)). -It allows for several linkage methods through which we can approximate our topic hierarchy. As a default, we are using the [ward](https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.ward.html#scipy.cluster.hierarchy.ward) but many others are availabe. +
+
+--8<-- "docs/getting_started/hierarchicaltopics/hierarchical.svg" +
+
-Whenever we merge two topics, we can calculate the c-TF-IDF representation of these two merged by summing their bag-of-words representation. -We assume that two sets of topics are merged and that all others are kept the same, regardless of their location in the hierarchy. This helps -us isolate the potential effect of merging sets of topics. As a result, we can see the topic representation at each level in the tree. +In BERTopic, we can approximate this potential hierarchy by making use of our topic-term matrix (c-TF-IDF matrix). This matrix contains information about the importance of every word in every topic and makes for a nice numerical representation of our topics. The smaller the distance between two c-TF-IDF representations, the more similar we assume they are. In practice, this process of merging topics is done through the hierarchical clustering capabilities of `scipy` (see [here](https://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html)). It allows for several linkage methods through which we can approximate our topic hierarchy. As a default, we are using the [ward](https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.ward.html#scipy.cluster.hierarchy.ward) but many others are availabe. + +Whenever we merge two topics, we can calculate the c-TF-IDF representation of these two merged by summing their bag-of-words representation. We assume that two sets of topics are merged and that all others are kept the same, regardless of their location in the hierarchy. This helps us isolate the potential effect of merging sets of topics. As a result, we can see the topic representation at each level in the tree. ## **Example** To demonstrate hierarchical topic modeling with BERTopic, we use the 20 Newsgroups dataset to see how the topics that we uncover are represented in the 20 categories of documents. diff --git a/docs/getting_started/manual/pipeline.svg b/docs/getting_started/manual/pipeline.svg index 5d0d8900..c58b1e6a 100644 --- a/docs/getting_started/manual/pipeline.svg +++ b/docs/getting_started/manual/pipeline.svg @@ -1,10 +1,10 @@ - +Documents - +Labels - +c-TF-IDF diff --git a/docs/getting_started/manual/table.svg b/docs/getting_started/manual/table.svg index 7e841c33..4f0b5ae0 100644 --- a/docs/getting_started/manual/table.svg +++ b/docs/getting_started/manual/table.svg @@ -1,52 +1,52 @@ -Topic -Count -Name +Topic +Count +Name -0 -0 -999 -0_game_hockey_team_25 +0 +0 +999 +0_game_hockey_team_25 -1_god_church_jesus_christ -997 -1 -1 +1_god_church_jesus_christ +997 +1 +1 -2 -2 -996 -2_bike_dod_ride_bikes +2 +2 +996 +2_bike_dod_ride_bikes -3_baseball_game_he_year -994 -3 -3 +3_baseball_game_he_year +994 +3 +3 -4 -4 -991 -4_key_encryption_db_clipper +4 +4 +991 +4_key_encryption_db_clipper -5_car_cars_engine_ford -990 -5 -5 +5_car_cars_engine_ford +990 +5 +5 -6 -6 -990 -6_medical_patients_cancer_disease +6 +6 +990 +6_medical_patients_cancer_disease -7_window_server_widget_motif -988 -7 -7 +7_window_server_widget_motif +988 +7 +7 -8 -8 -988 -8_space_launch_nasa_orbit +8 +8 +988 +8_space_launch_nasa_orbit diff --git a/docs/getting_started/manual/table_classes.svg b/docs/getting_started/manual/table_classes.svg index c13b2f10..856f12ef 100644 --- a/docs/getting_started/manual/table_classes.svg +++ b/docs/getting_started/manual/table_classes.svg @@ -1,62 +1,62 @@ -Topic -Count -Name -Class +Topic +Count +Name +Class -0 -0 -999 -0_game_hockey_team_25 -rec.sport.hockey +0 +0 +999 +0_game_hockey_team_25 +rec.sport.hockey -1_god_church_jesus_christ -997 -1 -1 +1_god_church_jesus_christ +997 +1 +1 -2 -2 -996 -2_bike_dod_ride_bikes +2 +2 +996 +2_bike_dod_ride_bikes -3_baseball_game_he_year -994 -3 -3 +3_baseball_game_he_year +994 +3 +3 -4 -4 -991 -4_key_encryption_db_clipper +4 +4 +991 +4_key_encryption_db_clipper -5_car_cars_engine_ford -990 -5 -5 +5_car_cars_engine_ford +990 +5 +5 -6 -6 -990 -6_medical_patients_cancer_disease +6 +6 +990 +6_medical_patients_cancer_disease -7_window_server_widget_motif -988 -7 -7 +7_window_server_widget_motif +988 +7 +7 -8 -8 -988 -8_space_launch_nasa_orbit -sci.space -comp.windows.x -sci.med -rec.autos -sci.crypt -rec.sport.baseball -rec.motorcycles -soc.religion.christian +8 +8 +988 +8_space_launch_nasa_orbit +sci.space +comp.windows.x +sci.med +rec.autos +sci.crypt +rec.sport.baseball +rec.motorcycles +soc.religion.christian diff --git a/docs/getting_started/online/online.md b/docs/getting_started/online/online.md index 5fa4bc2d..79dc1a86 100644 --- a/docs/getting_started/online/online.md +++ b/docs/getting_started/online/online.md @@ -17,6 +17,12 @@ In BERTopic, online topic modeling can be a bit tricky as there are several step For some steps, an online variant is more important than others. Typically, in step 1 we use pre-trained language models that are in less need for continuous updates. This means that we can use an embedding model like Sentence-Transformers for extracting the embeddings and still use it in an online setting. Similarly, step 5 and 6 do not necessarily need online variants since they are built upon step 4, the tokenization. If that tokenization is by itself incremental, then so will steps 5 and 6. +
+
+--8<-- "docs/getting_started/online/online.svg" +
+
+ This means that we will need online variants for steps 2 through 4. Steps 2 and 3, dimensionality reduction and clustering, can be modeled through the use of Scikit-Learn's `.partial_fit` function. In other words, it supports any algorithm that can be trained using `.partial_fit` since these algorithms can be trained incrementally. For example, incremental dimensionality reduction can be achieved using Scikit-Learn's `IncrementalPCA` and incremental clustering with `MiniBatchKMeans`. Lastly, we need to develop an online variant for step 5, tokenization. In this step, a Bag-of-words representation is created through the `CountVectorizer`. However, as new data comes in, its vocabulary will need to be updated. For that purpose, `bertopic.vectorizers.OnlineCountVectorizer` was created that not only updates out-of-vocabulary words but also implements decay and cleaning functions to prevent the sparse bag-of-words matrix to become too large in size. Most notably, the `decay` parameter is a value between 0 and 1 to weight the percentage of frequencies that the previous bag-of-words matrix should be reduced to. For example, a value of `.1` will decrease the frequencies in the bag-of-words matrix with 10% at each iteration. This will make sure that recent data has more weight than previously iterations. Similarly, `delete_min_df` will remove certain words from its vocabulary if its frequency is lower than a set value. This ties together with the `decay` parameter as some words will decay over time if not used. For more information regarding the `OnlineCountVectorizer`, please see the [vectorizers documentation](https://maartengr.github.io/BERTopic/getting_started/vectorizers/vectorizers.html#onlinecountvectorizer). diff --git a/docs/getting_started/online/online.svg b/docs/getting_started/online/online.svg new file mode 100644 index 00000000..e3ab13e0 --- /dev/null +++ b/docs/getting_started/online/online.svg @@ -0,0 +1,26 @@ + + + +SBERT +IncrementalPCA +MiniBatchKMeans +Online CountVectorizer +Embeddings + +Dimensionality reduction + + +Clustering + + +Incremental Bag-of-Words + +c-TF-IDF + +Topic representation + + +Online variants of these steps in the main BERTopic pipeline are needed in order to enable incremental learning. + + + diff --git a/docs/getting_started/semisupervised/semisupervised.md b/docs/getting_started/semisupervised/semisupervised.md index 6a87fa6d..47dad185 100644 --- a/docs/getting_started/semisupervised/semisupervised.md +++ b/docs/getting_started/semisupervised/semisupervised.md @@ -1,6 +1,13 @@ In BERTopic, you have several options to nudge the creation of topics towards certain pre-specified topics. Here, we will be looking at semi-supervised topic modeling with BERTopic. Semi-supervised modeling allows us to steer the dimensionality reduction of the embeddings into a space that closely follows any labels you might already have. + +
+
+--8<-- "docs/getting_started/semisupervised/semisupervised.svg" +
+
+ In other words, we use a semi-supervised UMAP instance to reduce the dimensionality of embeddings before clustering the documents with HDBSCAN. diff --git a/docs/getting_started/semisupervised/semisupervised.svg b/docs/getting_started/semisupervised/semisupervised.svg new file mode 100644 index 00000000..e341e30e --- /dev/null +++ b/docs/getting_started/semisupervised/semisupervised.svg @@ -0,0 +1,21 @@ + + + +SBERT +UMAP +HDBSCAN +c-TF-IDF +Embeddings + +Dimensionality reduction + +Labels + + +Clustering + + +Topic representation + + + diff --git a/docs/getting_started/supervised/classification_pipeline.svg b/docs/getting_started/supervised/classification_pipeline.svg index bcf18290..efd21fb8 100644 --- a/docs/getting_started/supervised/classification_pipeline.svg +++ b/docs/getting_started/supervised/classification_pipeline.svg @@ -1,14 +1,14 @@ -SBERT -Logistic Regression -c-TF-IDF -Embeddings +SBERT +Logistic Regression +c-TF-IDF +Embeddings -Classifier +Classifier -Topic representation +Topic representation diff --git a/docs/getting_started/supervised/default_pipeline.svg b/docs/getting_started/supervised/default_pipeline.svg index 60dbdbd5..30759e66 100644 --- a/docs/getting_started/supervised/default_pipeline.svg +++ b/docs/getting_started/supervised/default_pipeline.svg @@ -1,18 +1,18 @@ -SBERT -UMAP -HDBSCAN -c-TF-IDF -Embeddings +SBERT +UMAP +HDBSCAN +c-TF-IDF +Embeddings -Dimensionality reduction +Dimensionality reduction -Clustering +Clustering -Topic representation +Topic representation diff --git a/docs/getting_started/supervised/table.svg b/docs/getting_started/supervised/table.svg index 7e841c33..4f0b5ae0 100644 --- a/docs/getting_started/supervised/table.svg +++ b/docs/getting_started/supervised/table.svg @@ -1,52 +1,52 @@ -Topic -Count -Name +Topic +Count +Name -0 -0 -999 -0_game_hockey_team_25 +0 +0 +999 +0_game_hockey_team_25 -1_god_church_jesus_christ -997 -1 -1 +1_god_church_jesus_christ +997 +1 +1 -2 -2 -996 -2_bike_dod_ride_bikes +2 +2 +996 +2_bike_dod_ride_bikes -3_baseball_game_he_year -994 -3 -3 +3_baseball_game_he_year +994 +3 +3 -4 -4 -991 -4_key_encryption_db_clipper +4 +4 +991 +4_key_encryption_db_clipper -5_car_cars_engine_ford -990 -5 -5 +5_car_cars_engine_ford +990 +5 +5 -6 -6 -990 -6_medical_patients_cancer_disease +6 +6 +990 +6_medical_patients_cancer_disease -7_window_server_widget_motif -988 -7 -7 +7_window_server_widget_motif +988 +7 +7 -8 -8 -988 -8_space_launch_nasa_orbit +8 +8 +988 +8_space_launch_nasa_orbit diff --git a/docs/getting_started/supervised/table_classes.svg b/docs/getting_started/supervised/table_classes.svg index c13b2f10..856f12ef 100644 --- a/docs/getting_started/supervised/table_classes.svg +++ b/docs/getting_started/supervised/table_classes.svg @@ -1,62 +1,62 @@ -Topic -Count -Name -Class +Topic +Count +Name +Class -0 -0 -999 -0_game_hockey_team_25 -rec.sport.hockey +0 +0 +999 +0_game_hockey_team_25 +rec.sport.hockey -1_god_church_jesus_christ -997 -1 -1 +1_god_church_jesus_christ +997 +1 +1 -2 -2 -996 -2_bike_dod_ride_bikes +2 +2 +996 +2_bike_dod_ride_bikes -3_baseball_game_he_year -994 -3 -3 +3_baseball_game_he_year +994 +3 +3 -4 -4 -991 -4_key_encryption_db_clipper +4 +4 +991 +4_key_encryption_db_clipper -5_car_cars_engine_ford -990 -5 -5 +5_car_cars_engine_ford +990 +5 +5 -6 -6 -990 -6_medical_patients_cancer_disease +6 +6 +990 +6_medical_patients_cancer_disease -7_window_server_widget_motif -988 -7 -7 +7_window_server_widget_motif +988 +7 +7 -8 -8 -988 -8_space_launch_nasa_orbit -sci.space -comp.windows.x -sci.med -rec.autos -sci.crypt -rec.sport.baseball -rec.motorcycles -soc.religion.christian +8 +8 +988 +8_space_launch_nasa_orbit +sci.space +comp.windows.x +sci.med +rec.autos +sci.crypt +rec.sport.baseball +rec.motorcycles +soc.religion.christian diff --git a/docs/getting_started/topicsovertime/topicsovertime.md b/docs/getting_started/topicsovertime/topicsovertime.md index 3d19e1a9..3f0f5b55 100644 --- a/docs/getting_started/topicsovertime/topicsovertime.md +++ b/docs/getting_started/topicsovertime/topicsovertime.md @@ -5,21 +5,20 @@ topic itself remains the same, environmental awareness, the exact representation BERTopic allows for DTM by calculating the topic representation at each timestep without the need to run the entire model several times. To do this, we first need to fit BERTopic as if there were no temporal -aspect in the data. Thus, a general topic model will be created. We use the global representation as to the main -topics that can be found at, most likely, different timesteps. For each topic and timestep, we calculate the c-TF-IDF -representation. This will result in a specific topic representation at each timestep without the need to create -clusters from embeddings as they were already created. +aspect in the data. Thus, a general topic model will be created. We use the global representation as to the main topics that can be found at, most likely, different timesteps. For each topic and timestep, we calculate the c-TF-IDF representation. This will result in a specific topic representation at each timestep without the need to create clusters from embeddings as they were already created. + +
+
+--8<-- "docs/getting_started/topicsovertime/topicsovertime.svg" +
+
Next, there are two main ways to further fine-tune these specific topic representations, namely **globally** and **evolutionary**. -A topic representation at timestep *t* can fine-tuned **globally** by averaging its c-TF-IDF representation with -that of the global representation. This allows each topic representation to move slightly towards the global -representation whilst still keeping some its specific words. +A topic representation at timestep *t* can fine-tuned **globally** by averaging its c-TF-IDF representation with that of the global representation. This allows each topic representation to move slightly towards the global representation whilst still keeping some its specific words. -A topic representation at timestep *t* can be fine-tuned **evolutionary** by averaging its c-TF-IDF representation -with that of the c-TF-IDF representation at timestep *t-1*. This is done for each topic representation allowing for -the representations to evolve over time. +A topic representation at timestep *t* can be fine-tuned **evolutionary** by averaging its c-TF-IDF representation with that of the c-TF-IDF representation at timestep *t-1*. This is done for each topic representation allowing for the representations to evolve over time. Both fine-tuning methods are set to `True` as a default and allow for interesting representations to be created. diff --git a/docs/getting_started/topicsovertime/topicsovertime.svg b/docs/getting_started/topicsovertime/topicsovertime.svg new file mode 100644 index 00000000..4c9d21e6 --- /dev/null +++ b/docs/getting_started/topicsovertime/topicsovertime.svg @@ -0,0 +1,115 @@ + + + 1 +Topic + +Timestep +1 + + m +Timestep + +Timestep +1 + +Timestep +m + + n +Topic + + + + + + + + + + + + + + + + + + + + + + + + + + + + +c-TF-IDF +c-TF-IDF +c-TF-IDF +c-TF-IDF + + + + + + + + + + + + + + + + + + + + + + + + + + +topic c-TF-IDF + + + + + +c-TF-IDF at t ++ +2 + + + + + + +c-TF-IDF at t + + + + + +c-TF-IDF at t-1 ++ +2 + + +Global Tuning +Split documents by topic +Split documents by topic and timestep +Apply pre-fitted c-TF-IDF on each subset of documents. +Tune the c-TF-IDF at each timestep t by either averaging the representations with the global representation or with the representation at t-1. +Evolutionary Tuning + + + + +Optional tuning of representations + diff --git a/docs/getting_started/topicsperclass/class_modeling.svg b/docs/getting_started/topicsperclass/class_modeling.svg new file mode 100644 index 00000000..999b428e --- /dev/null +++ b/docs/getting_started/topicsperclass/class_modeling.svg @@ -0,0 +1,76 @@ + + + 1 +Topic + + 1 +Class + + m +Class + + 1 +Class + + m +Class + + n +Topic + + + + + + + + + + + + + + + + + + + + + + + + + + + + +c-TF-IDF +c-TF-IDF +c-TF-IDF +c-TF-IDF + + + + + + + + + + + + + + + + + + + + + +Split documents by topic +Split documents by topic and class +Apply pre-fitted c-TF-IDF on each subset of documents. + diff --git a/docs/getting_started/topicsperclass/topicsperclass.md b/docs/getting_started/topicsperclass/topicsperclass.md index 024ea9de..0b1d41b8 100644 --- a/docs/getting_started/topicsperclass/topicsperclass.md +++ b/docs/getting_started/topicsperclass/topicsperclass.md @@ -1,12 +1,16 @@ In some cases, you might be interested in how certain topics are represented over certain categories. Perhaps there are specific groups of users for which you want to see how they talk about certain topics. -Instead of running the topic model per class, we can simply create a topic model and then extract, for each topic, -its representation per class. This allows you to see how certain topics, calculated over all documents, are represented -for certain subgroups. +Instead of running the topic model per class, we can simply create a topic model and then extract, for each topic, its representation per class. This allows you to see how certain topics, calculated over all documents, are represented for certain subgroups. -To do so, we use the 20 Newsgroups dataset to see how the topics that we uncover are represented in the 20 categories of -documents. +
+
+--8<-- "docs/getting_started/topicsperclass/class_modeling.svg" +
+
+ + +To do so, we use the 20 Newsgroups dataset to see how the topics that we uncover are represented in the 20 categories of documents. First, let's prepare the data: From 00b626c9409e36c891fac37909eefcec03db7376 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Mon, 28 Nov 2022 15:04:51 +0100 Subject: [PATCH 19/51] Update documentation --- README.md | 16 ++++++---- docs/faq.md | 87 +++++++++++++++++++++++++++++---------------------- docs/index.md | 15 +++++---- 3 files changed, 68 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 00031023..fd862a1b 100644 --- a/README.md +++ b/README.md @@ -206,15 +206,19 @@ public attributes that can be used to access model information. ### Variations There are many different use cases in which topic modeling can be used. As such, a number of -variations of BERTopic have been developed such that one package can be used across across many use cases. +variations of BERTopic have been developed such that one package can be used across many use cases. | Method | Code | |-----------------------|---| -| (semi-) Supervised Topic Modeling | `.fit(docs, y=y)` | -| Topic Modeling per Class | `.topics_per_class(docs, classes)` | -| Dynamic Topic Modeling | `.topics_over_time(docs, timestamps)` | -| Hierarchical Topic Modeling | `.hierarchical_topics(docs)` | -| Guided Topic Modeling | `BERTopic(seed_topic_list=seed_topic_list)` | +| [Topic Distribution Approximation](https://maartengr.github.io/BERTopic/getting_started/distribution/distribution.html) | `.approximate_distribution(docs)` | +| [Online Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/online/online.html) | `.partial_fit(doc)` | +| [Semi-supervised Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/semisupervised/semisupervised.html) | `.fit(docs, y=y)` | +| [Supervised Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html) | `.fit(docs, y=y)` | +| [Topic Modeling per Class](https://maartengr.github.io/BERTopic/getting_started/topicsperclass/topicsperclass.html) | `.topics_per_class(docs, classes)` | +| [Dynamic Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/topicsovertime/topicsovertime.html) | `.topics_over_time(docs, timestamps)` | +| [Hierarchical Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/hierarchicaltopics/hierarchicaltopics.html) | `.hierarchical_topics(docs)` | +| [Guided Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/guided/guided.html) | `BERTopic(seed_topic_list=seed_topic_list)` | + ### Visualizations Evaluating topic models can be rather difficult due to the somewhat subjective nature of evaluation. diff --git a/docs/faq.md b/docs/faq.md index 320ce017..14a7f29a 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -6,9 +6,7 @@ hide: # Frequently Asked Questions ## **Why are the results not consistent between runs?** -Due to the stochastic nature of UMAP, the results from BERTopic might differ even if you run the same code -multiple times. Using custom embeddings allows you to try out BERTopic several times until you find the -topics that suit you best. You only need to generate the embeddings itself once and run BERTopic several times +Due to the stochastic nature of UMAP, the results from BERTopic might differ even if you run the same code multiple times. Using custom embeddings allows you to try out BERTopic several times until you find the topics that suit you best. You only need to generate the embeddings themselves once and run BERTopic several times with different parameters. If you want to reproduce the results, at the expense of [performance](https://umap-learn.readthedocs.io/en/latest/reproducibility.html), you can set a `random_state` in UMAP to prevent @@ -24,12 +22,9 @@ topic_model = BERTopic(umap_model=umap_model) ``` ## **Which embedding model should I choose?** -Unfortunately, there is not a definitive list of the best models for each language, this highly depends -on your data, the model, and your specific use-case. However, the default model in BERTopic -(`"all-MiniLM-L6-v2"`) works great for **English** documents. In contrast, for **multi-lingual** -documents or any other language, `"paraphrase-multilingual-MiniLM-L12-v2""` has shown great performance. +Unfortunately, there is not a definitive list of the best models for each language, this highly depends on your data, the model, and your specific use case. However, the default model in BERTopic (`"all-MiniLM-L6-v2"`) works great for **English** documents. In contrast, for **multi-lingual** documents or any other language, `"paraphrase-multilingual-MiniLM-L12-v2"` has shown great performance. -If you want to use a model that provides a higher quality, but takes more compute time, then I would advise using `all-mpnet-base-v2` and `paraphrase-multilingual-mpnet-base-v2` instead. +If you want to use a model that provides a higher quality, but takes more computing time, then I would advise using `all-mpnet-base-v2` and `paraphrase-multilingual-mpnet-base-v2` instead. **SentenceTransformers** [SentenceTransformers](https://www.sbert.net/docs/pretrained_models.html#sentence-embedding-models) work typically quite well @@ -37,15 +32,13 @@ and are the preferred models to use. They are great at generating document embed multi-lingual versions available. **🤗 transformers** -BERTopic allows you to use any 🤗 transformers model. These models are typically embeddings created on -a word/sentence level but can easily be pooled using Flair (see Guides/Embeddings). If you have a -specific language for which you want to generate embeddings, you can choose the model [here](https://huggingface.co/models). +BERTopic allows you to use any 🤗 transformers model. These models are typically embeddings created on a word/sentence level but can easily be pooled using Flair (see Guides/Embeddings). If you have a specific language for which you want to generate embeddings, you can choose the model [here](https://huggingface.co/models). ## **How do I reduce topic outliers?** -There are three ways in reducing outliers. +There are several ways we can reduce outliers. First, the amount of datapoint classified as outliers is handled by the `min_samples` parameters in HDBSCAN. This value is automatically set to the -same value of `min_cluster_size`. However, you can set it indepedently if you want to reduce the number of generated outliers. Lowering this value will +same value of `min_cluster_size`. However, you can set it independently if you want to reduce the number of generated outliers. Lowering this value will result in less noise being generated. ```python @@ -63,7 +56,7 @@ topics, probs = topic_model.fit_transform(docs) sure to strike a balance between keeping noise and reducing outliers. Second, after training our BERTopic model, we can assign outliers to topics. By setting `calculate_probabilities=True`, we calculate the probability -of a document belonging to any topic. That way, we can select, for each document, the topic with the the highest probability. Thus, although we do +of a document belonging to any topic. That way, we can select, for each document, the topic with the highest probability. Thus, although we do generate an outlier class in our BERTopic model, we can assign documents to an actual topic. To do this, we can set a probability threshold and assign each document to a topic based on their probabilities: @@ -75,11 +68,21 @@ new_topics = [np.argmax(prob) if max(prob) >= probability_threshold else -1 for ``` !!! note "Note" - The topics assigned using the above method can result in topics different from using `.fit_transform()`. This is expected + The topics assigned using the above method can result in topics different from those using `.fit_transform()`. This is expected behavior as HDBSCAN is merely trying to imitate soft clustering after fitting the model and it is not a core component of assigning points to clusters. -Third, we can replace HDBSCAN with any other clustering algorithm that we want. So we can choose a clustering algorithm, like k-Means, that +Third, we can estimate the topic distributions after training our model and use those to assign an outlier document to the topic that has the largest distribution in that document: + +```python +import numpy as np +topic_distr, _ = topic_model.approximate_distribution(docs, min_similarity=0) +new_topics = [np.argmax(prob) if topic == -1 else topic + for topic, prob in zip(topics, topic_distr)] +``` + + +Fourth, we can replace HDBSCAN with any other clustering algorithm that we want. So we can choose a clustering algorithm, like k-Means, that does not produce any outliers at all. Using k-Means instead of HDBSCAN is straightforward: ```python @@ -92,16 +95,30 @@ topic_model = BERTopic(hdbscan_model=cluster_model) ## **How can I speed up BERTopic?** You can speed up BERTopic by either generating your embeddings beforehand or by -setting `calculate_probabilities` to False. Calculating the probabilities is quite expensive and can -significantly increase the computation time. Thus, only use it if you do not mind waiting a bit before -the model is done running or if you have less than 50_000 documents. +setting `calculate_probabilities` to False. Calculating the probabilities is quite expensive and can significantly increase the computation time. Thus, only use it if you do not mind waiting a bit before the model is done running or if you have less than a couple of hundred thousand documents. + +Also, make sure to use a GPU when extracting the sentence/document embeddings. Transformer models typically require a GPU and using only a CPU can slow down computation time quite a lot. However, if you do not have access to a GPU, looking into quantization might help. + +Lastly, it is also possible to speed up BERTopic with [cuML's](https://rapids.ai/start.html#rapids-release-selector) GPU acceleration of UMAP and HDBSCAN: + + +```python +from bertopic import BERTopic +from cuml.cluster import HDBSCAN +from cuml.manifold import UMAP + +# Create instances of GPU-accelerated UMAP and HDBSCAN +umap_model = UMAP(n_components=5, n_neighbors=15, min_dist=0.0) +hdbscan_model = HDBSCAN(min_samples=10, gen_min_span_tree=True) + +# Pass the above models to be used in BERTopic +topic_model = BERTopic(umap_model=umap_model, hdbscan_model=hdbscan_model) +``` -Also, make sure to use a GPU when extracting the sentence/document embeddings. Transformer models -typically require a GPU and using only a CPU can slow down computation time quite a lot. -However, if you do not have access to a GPU, looking into quantization might help. ## **I am facing memory issues. Help!** -There are several ways to perform computation with large datasets. +There are several ways to perform computation with large datasets: + * First, you can set `low_memory` to True when instantiating BERTopic. This may prevent blowing up the memory in UMAP. @@ -124,8 +141,7 @@ parameter is used to indicate the minimum frequency of words. Setting this value * Fourth, you can use online topic modeling instead to use BERTopic on big data by training the model in chunks -If the problem persists, then this could be an issue related to your available memory. The processing of -millions of documents is quite computationally expensive and sufficient RAM is necessary. +If the problem persists, then this could be an issue related to your available memory. The processing of millions of documents is quite computationally expensive and sufficient RAM is necessary. ## **I have only a few topics, how do I increase them?** There are several reasons why your topic model may result in only a few topics: @@ -143,20 +159,13 @@ in your documents. You can often see this when you have many `-1` topics, which but a category of outliers. ## **I have too many topics, how do I decrease them?** -If you have a large dataset, then it is possible to generate thousands of topics. Especially with large -datasets, there is a good chance they actually contain many small topics. In practice, you might want -a few hundred topics at most in order to interpret them nicely. +If you have a large dataset, then it is possible to generate thousands of topics. Especially with large datasets, there is a good chance they actually contain many small topics. In practice, you might want a few hundred topics at most in order to interpret them nicely. There are a few ways of increasing the number of generated topics: -* First, we can set the `min_topic_size` in the BERTopic initialization much higher (e.g., 300) -to make sure that those small clusters will not be generated. This is a HDBSCAN parameter that -specifies what the minimum number of documents are needed in a cluster. More documents in a cluster -means less topics will be generated. +* First, we can set the `min_topic_size` in the BERTopic initialization much higher (e.g., 300) to make sure that those small clusters will not be generated. This is an HDBSCAN parameter that specifies minimum number of documents needed in a cluster. More documents in a cluster mean fewer topics will be generated. -* Second, you can create a custom UMAP model and set `n_neighbors` much higher than the default 15 (e.g., 200). -This also prevents those micro clusters to be generated as it will needs quite a number of neighboring -documents to create a cluster. +* Second, you can create a custom UMAP model and set `n_neighbors` much higher than the default 15 (e.g., 200). This also prevents those micro clusters to be generated as it will need quite a number of neighboring documents to create a cluster. * Third, we can set `nr_topics` to a value that seems logical to the user. Do note that topics are forced to merge together which might result in a lower quality of topics. In practice, I would advise using @@ -174,11 +183,13 @@ topic_model = BERTopic(calculate_probabilities=True) topics, probs = topic_model.fit_transform(docs) ``` +!!! note + The `calculate_probabilties` parameter is only used when using HDBSCAN or cuML's HDBSCAN model. In other words, this will not work when using a model other than HDBSCAN. Instead, we can approximate the topic distributions across all documents with [`approximate_distribution`](https://maartengr.github.io/BERTopic/getting_started/distribution/distribution.html). + ## **Numpy gives me an error when running BERTopic** -With the release of Numpy 1.20.0, there have been significant issues with using that version (and previous) due -to compilation issues and pypi. +With the release of Numpy 1.20.0, there have been significant issues with using that version (and previous ones) due to compilation issues and pypi. -This is a known issue with the order of install using pypi. You can find more details about this issue +This is a known issue with the order of installation using pypi. You can find more details about this issue [here](https://github.com/lmcinnes/umap/issues/567) and [here](https://github.com/scikit-learn-contrib/hdbscan/issues/457). I would suggest doing one of the following: diff --git a/docs/index.md b/docs/index.md index 739cddcf..8d27b4cd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -132,15 +132,18 @@ public attributes that can be used to access model information. ### Variations There are many different use cases in which topic modeling can be used. As such, a number of -variations of BERTopic have been developed such that one package can be used across across many use cases. +variations of BERTopic have been developed such that one package can be used across many use cases. | Method | Code | |-----------------------|---| -| (semi-) Supervised Topic Modeling | `.fit(docs, y=y)` | -| Topic Modeling per Class | `.topics_per_class(docs, classes)` | -| Dynamic Topic Modeling | `.topics_over_time(docs, timestamps)` | -| Hierarchical Topic Modeling | `.hierarchical_topics(docs)` | -| Guided Topic Modeling | `BERTopic(seed_topic_list=seed_topic_list)` | +| [Topic Distribution Approximation](https://maartengr.github.io/BERTopic/getting_started/distribution/distribution.html) | `.approximate_distribution(docs)` | +| [Online Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/online/online.html) | `.partial_fit(doc)` | +| [Semi-supervised Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/semisupervised/semisupervised.html) | `.fit(docs, y=y)` | +| [Supervised Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html) | `.fit(docs, y=y)` | +| [Topic Modeling per Class](https://maartengr.github.io/BERTopic/getting_started/topicsperclass/topicsperclass.html) | `.topics_per_class(docs, classes)` | +| [Dynamic Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/topicsovertime/topicsovertime.html) | `.topics_over_time(docs, timestamps)` | +| [Hierarchical Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/hierarchicaltopics/hierarchicaltopics.html) | `.hierarchical_topics(docs)` | +| [Guided Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/guided/guided.html) | `BERTopic(seed_topic_list=seed_topic_list)` | ### Visualizations Evaluating topic models can be rather difficult due to the somewhat subjective nature of evaluation. From 0a689efd0f8c813f5e9f60903a3724d8c21e0321 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 29 Nov 2022 12:46:56 +0100 Subject: [PATCH 20/51] Lots of small documentation changes --- README.md | 13 +++-- docs/algorithm/algorithm.md | 24 ++++----- docs/faq.md | 49 ++++++++++++++----- docs/getting_started/clustering/clustering.md | 12 ++--- docs/getting_started/ctfidf/ctfidf.md | 10 ++-- .../dim_reduction/dim_reduction.md | 11 ++--- .../distribution/approximate_distribution.svg | 6 +-- .../distribution/distribution.md | 28 +++++------ docs/getting_started/embeddings/embeddings.md | 23 +++++---- docs/getting_started/guided/guided.md | 12 ++--- .../hierarchicaltopics/hierarchicaltopics.md | 8 +-- docs/getting_started/manual/manual.md | 8 +-- docs/getting_started/online/online.md | 16 +++--- .../parameter tuning/parametertuning.md | 48 +++++++++--------- docs/getting_started/search/search.md | 4 +- .../semisupervised/semisupervised.md | 4 +- docs/getting_started/supervised/supervised.md | 10 ++-- .../tips_and_tricks/tips_and_tricks.md | 11 +++++ .../topicreduction/topicreduction.md | 9 ++-- .../topicrepresentation.md | 8 +-- .../topicsovertime/topicsovertime.md | 8 +-- .../vectorizers/vectorizers.md | 36 +++++++------- .../visualization/visualization.md | 48 +++++++++++------- docs/index.md | 7 ++- 24 files changed, 227 insertions(+), 186 deletions(-) diff --git a/README.md b/README.md index fd862a1b..d1c37d93 100644 --- a/README.md +++ b/README.md @@ -115,7 +115,7 @@ topic_model.visualize_topics() We can create an overview of the most frequent topics in a way that they are easily interpretable. -Horizontal barcharts typically convey information rather well and allow for an intuitive representation +Horizontal bar charts typically convey information rather well and allow for an intuitive representation of the topics: ```python @@ -129,7 +129,7 @@ Find all possible visualizations with interactive examples in the documentation [here](https://maartengr.github.io/BERTopic/getting_started/visualization/visualization.html). ## Embedding Models -BERTopic supports many embedding models that can be used to embed the documents and words: +BERTopic supports many embedding models that can be used to embed documents and words: * Sentence-Transformers * 🤗 Transformers * Flair @@ -137,7 +137,7 @@ BERTopic supports many embedding models that can be used to embed the documents * Gensim * USE -[**Sentence-Transformers**](https://github.com/UKPLab/sentence-transformers) is typically used as it has shown great results embedding documents +[**Sentence-Transformers**](https://github.com/UKPLab/sentence-transformers) is typically used as it has shown great results in embedding documents meant for semantic similarity. Simply select any from their documentation [here](https://www.sbert.net/docs/pretrained_models.html) and pass it to BERTopic: @@ -158,7 +158,7 @@ Click [here](https://maartengr.github.io/BERTopic/getting_started/embeddings/emb for a full overview of all supported embedding models. ## Overview -BERTopic has quite a number of functions that quickly can become overwhelming. To alleviate this issue, you will find an overview +BERTopic has many functions that quickly can become overwhelming. To alleviate this issue, you will find an overview of all methods and a short description of its purpose. ### Common @@ -186,7 +186,7 @@ Below, you will find an overview of common functions in BERTopic. ### Attributes -After having trained your BERTopic model, a number of attributes are saved within your model. These attributes, in part, +After having trained your BERTopic model, several attributes are saved within your model. These attributes, in part, refer to how model information is stored on an estimator during fitting. The attributes that you see below all end in `_` and are public attributes that can be used to access model information. @@ -205,8 +205,7 @@ public attributes that can be used to access model information. ### Variations -There are many different use cases in which topic modeling can be used. As such, a number of -variations of BERTopic have been developed such that one package can be used across many use cases. +There are many different use cases in which topic modeling can be used. As such, several variations of BERTopic have been developed such that one package can be used across many use cases. | Method | Code | |-----------------------|---| diff --git a/docs/algorithm/algorithm.md b/docs/algorithm/algorithm.md index af998d72..45594f88 100644 --- a/docs/algorithm/algorithm.md +++ b/docs/algorithm/algorithm.md @@ -5,17 +5,17 @@ hide: # The Algorithm -Below, you will find different types of overviews of each step in BERTopic's main algorithm. Each successive overview will be more in-depth than the previous overview. The aim of this approach is to make the underlying algorithm as intuitive as possible for a wide range of users. +Below, you will find different types of overviews of each step in BERTopic's main algorithm. Each successive overview will be more in-depth than the previous overview. This approach aims to make the underlying algorithm as intuitive as possible for a wide range of users. ## **Visual Overview** -BERTopic can be viewed as a sequence of steps in order to create its topic representations. There are five steps to this process: +BERTopic can be viewed as a sequence of steps to create its topic representations. There are five steps to this process: -Although these steps are the default, there is some modularity to BERTopic. Each step in this process was carefully selected such that they are all somewhat independent from one another. For example, the tokenization step is not directly influenced by the embedding model that was used to convert the documents which allows us to be creative in how we perform the tokenization step. +Although these steps are the default, there is some modularity to BERTopic. Each step in this process was carefully selected such that they are all somewhat independent from one another. For example, the tokenization step is not directly influenced by the embedding model that was used to convert the documents which allow us to be creative in how we perform the tokenization step. -This effect is especially strong in the clustering step. Models like HDBSCAN assume that clusters can have different shapes and forms. As a result, using a centroid-based technique to model the topic representations would not be beneficial since the centroid is not always representative of these types of clusters. A bag-of-words representation, however, makes very few assumptions with respect to the shape and form of a cluster. +This effect is especially strong in the clustering step. Models like HDBSCAN assume that clusters can have different shapes and forms. As a result, using a centroid-based technique to model the topic representations would not be beneficial since the centroid is not always representative of these types of clusters. A bag-of-words representation, however, makes very few assumptions concerning the shape and form of a cluster. As a result, BERTopic is quite modular and can maintain its quality of topic generation throughout a variety of sub-models. In other words, BERTopic essentially allows you to **build your own topic model**: @@ -66,13 +66,13 @@ This overview describes each step in more detail such that you can get an intuit ### **1. Embed documents** We start by converting our documents to numerical representations. Although there are many methods for doing so the default in BERTopic is [sentence-transformers](https://github.com/UKPLab/sentence-transformers). These models are often optimized for semantic similarity which helps tremendously in our clustering task. Moreover, they are great for creating either document- or sentence-embeddings.
-In BERTopic, you can choose any sentence-transformers model but there are two models that are set as defaults: +In BERTopic, you can choose any sentence-transformers model but two models are set as defaults: * `"all-MiniLM-L6-v2"` * `"paraphrase-multilingual-MiniLM-L12-v2"` -The first is an English language model trained specifically for semantic similarity tasks which work quite -well for most use-cases. The second model is very similar to the first with one major difference is that the +The first is an English language model trained specifically for semantic similarity tasks which works quite +well for most use cases. The second model is very similar to the first with one major difference being that the `multilingual` models work for 50+ languages. This model is quite a bit larger than the first and is only selected if you select any language other than English. @@ -93,7 +93,7 @@ After having created our numerical representations of the documents we have to r and customizing your model. ### **3. Cluster Documents** -After having reduced our embeddings, we can start clustering our data. For that, we leverage a density-based clustering technique, HDBSCAN. It can find clusters of different shapes and has the nice feature of identifying outliers where possible. As a result, we do not force documents in a cluster where they might note belong. This will improve the resulting topic representation as there is less noise to draw from. +After having reduced our embeddings, we can start clustering our data. For that, we leverage a density-based clustering technique, HDBSCAN. It can find clusters of different shapes and has the nice feature of identifying outliers where possible. As a result, we do not force documents into a cluster where they might not belong. This will improve the resulting topic representation as there is less noise to draw from. !!! tip Cluster models @@ -102,16 +102,16 @@ After having reduced our embeddings, we can start clustering our data. For that, and customizing your model. ### **4. Bag-of-words** -Before we can start creating the topic representation we first need to select a technique that allows for modularity in BERTopic's algorithm. When we use HDBSCAN as a cluster model, we may assume that our clusters having different degrees of density and different shapes. This means that a centroid-based topic representation technique might not be the best fitting model. In other words, we want a topic representation technique that makes little to no assumption on the expected structure of the clusters. +Before we can start creating the topic representation we first need to select a technique that allows for modularity in BERTopic's algorithm. When we use HDBSCAN as a cluster model, we may assume that our clusters have different degrees of density and different shapes. This means that a centroid-based topic representation technique might not be the best-fitting model. In other words, we want a topic representation technique that makes little to no assumption on the expected structure of the clusters.
-To do this, we first combine all documents in a cluster into a single document. That, very long, document then represents the cluster. Then, we can count how often each word appears in each cluster. This generates something called a bag-of-words representation in which resides the frequency of each word in each cluster. This bag-of-words representation is therefore on a cluster-level and not on a document-level. This distinction is important as we are interested in words on a topic-level (i.e., cluster-level). By using a bag-of-words representation, no assumption is made with respect to the structure of the clusters. Moreover, the bag-of-words representation is L1-normalized to account for clusters that have different sizes. +To do this, we first combine all documents in a cluster into a single document. That, very long, document then represents the cluster. Then, we can count how often each word appears in each cluster. This generates something called a bag-of-words representation in which the frequency of each word in each cluster can be found. This bag-of-words representation is therefore on a cluster level and not on a document level. This distinction is important as we are interested in words on a topic level (i.e., cluster level). By using a bag-of-words representation, no assumption is made concerning the structure of the clusters. Moreover, the bag-of-words representation is L1-normalized to account for clusters that have different sizes. !!! tip Bag-of-words and tokenization There are many ways you can tune or change the bag-of-words step. This step allows for processing the documents however you want without affecting the first step, embedding the documents. You can follow the guide [here](https://maartengr.github.io/BERTopic/getting_started/countvectorizer/countvectorizer.html) for more information about tokenization options in BERTopic. ### **5. Topic representation** -From the generated bag-of-words representation, we want to know what makes one cluster different from another? Which words are typical for cluster 1 and not so much for all other clusters? To solve this, we need to modify TF-IDF such that it considers topics (i.e., clusters) instead of documents. +From the generated bag-of-words representation, we want to know what makes one cluster different from another. Which words are typical for cluster 1 and not so much for all other clusters? To solve this, we need to modify TF-IDF such that it considers topics (i.e., clusters) instead of documents.
When you apply TF-IDF as usual on a set of documents, what you are doing is comparing the importance of words between documents. Now, what if, we instead treat all documents in a single category (e.g., a cluster) as a single document and then apply TF-IDF? The result would be importance scores for words within a cluster. The more important words are within a cluster, the more it is representative of that topic. In other words, if we extract the most important words per cluster, we get descriptions of **topics**! This model is called **class-based TF-IDF**: @@ -122,7 +122,7 @@ words between documents. Now, what if, we instead treat all documents in a singl
Each cluster is converted to a single document instead of a set of documents. Then, we extract the frequency of word `x` in class `c`, where `c` refers to the cluster we created before. This results in our class-based `tf` representation. This representation is L1-normalized to account for the differences in topic sizes.

-Then, we take take the logarithm of one plus the average number of words per class `A` divided by the frequency of word `x` across all classes. We add plus one within the logarithm to force values to be positive. This results in our class-based `idf` representation. Like with the classic TF-IDF, we then multiply `tf` with `idf` to get the importance score per word in each class. In other words, the classical TF-IDF procedure is **not** used here but a modified version of the algorithm that allows for a much better representation. +Then, we take the logarithm of one plus the average number of words per class `A` divided by the frequency of word `x` across all classes. We add plus one within the logarithm to force values to be positive. This results in our class-based `idf` representation. Like with the classic TF-IDF, we then multiply `tf` with `idf` to get the importance score per word in each class. In other words, the classical TF-IDF procedure is **not** used here but a modified version of the algorithm that allows for a much better representation. !!! tip c-TF-IDF parameters diff --git a/docs/faq.md b/docs/faq.md index 14a7f29a..791e029f 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -93,6 +93,32 @@ cluster_model = KMeans(n_clusters=50) topic_model = BERTopic(hdbscan_model=cluster_model) ``` + +## **How do I remove stop words?** +At times, stop words might end up in our topic representations. This is something we typically want to avoid as they contribute little to the interpretation of the topics. However, removing stop words as a preprocessing step is not advised as the transformer-based embedding models that we use need the full context to create accurate embeddings. + +Instead, we can use the `CountVectorizer` to preprocess our documents **after** having generated embeddings and clustered +our documents. I have found almost no disadvantages to using the `CountVectorizer` to remove stop words and +it is something I would strongly advise to try out: + +```python +from bertopic import BERTopic +from sklearn.feature_extraction.text import CountVectorizer + +vectorizer_model = CountVectorizer(stop_words="english") +topic_model = BERTopic(vectorizer_model=vectorizer_model) +``` + +We can also use the `ClassTfidfTransformer` to reduce the impact of frequent words. The result is very similar to explicitly removing stop words but this process does this automatically: + +```python +from bertopic import BERTopic +from bertopic.vectorizers import ClassTfidfTransformer + +ctfidf_model = ClassTfidfTransformer(reduce_frequent_words=True) +topic_model = BERTopic(ctfidf_model=ctfidf_model) +``` + ## **How can I speed up BERTopic?** You can speed up BERTopic by either generating your embeddings beforehand or by setting `calculate_probabilities` to False. Calculating the probabilities is quite expensive and can significantly increase the computation time. Thus, only use it if you do not mind waiting a bit before the model is done running or if you have less than a couple of hundred thousand documents. @@ -155,27 +181,27 @@ the minimum size of topics, then you are much more likely to increase the number You could also decrease the `n_neighbors` parameter used in `UMAP` if this does not work. * Third, although this does not happen very often, there simply aren't that many topics to be found -in your documents. You can often see this when you have many `-1` topics, which is actually not a topic +in your documents. You can often see this when you have many `-1` topics, which is not a topic but a category of outliers. ## **I have too many topics, how do I decrease them?** -If you have a large dataset, then it is possible to generate thousands of topics. Especially with large datasets, there is a good chance they actually contain many small topics. In practice, you might want a few hundred topics at most in order to interpret them nicely. +If you have a large dataset, then it is possible to generate thousands of topics. Especially with large datasets, there is a good chance they contain many small topics. In practice, you might want a few hundred topics at most to interpret them nicely. There are a few ways of increasing the number of generated topics: -* First, we can set the `min_topic_size` in the BERTopic initialization much higher (e.g., 300) to make sure that those small clusters will not be generated. This is an HDBSCAN parameter that specifies minimum number of documents needed in a cluster. More documents in a cluster mean fewer topics will be generated. +* First, we can set the `min_topic_size` in the BERTopic initialization much higher (e.g., 300) to make sure that those small clusters will not be generated. This is an HDBSCAN parameter that specifies the minimum number of documents needed in a cluster. More documents in a cluster mean fewer topics will be generated. -* Second, you can create a custom UMAP model and set `n_neighbors` much higher than the default 15 (e.g., 200). This also prevents those micro clusters to be generated as it will need quite a number of neighboring documents to create a cluster. +* Second, you can create a custom UMAP model and set `n_neighbors` much higher than the default 15 (e.g., 200). This also prevents those micro clusters to be generated as it will need many neighboring documents to create a cluster. * Third, we can set `nr_topics` to a value that seems logical to the user. Do note that topics are forced -to merge together which might result in a lower quality of topics. In practice, I would advise using -`nr_topic="auto"` as that will merge topics together that are very similar. Dissimilar topics will +to merge which might result in a lower quality of topics. In practice, I would advise using +`nr_topic="auto"` as that will merge topics that are very similar. Dissimilar topics will therefore remain separated. ## **How do I calculate the probabilities of all topics in a document?** Although it is possible to calculate all the probabilities, the process of doing so is quite computationally inefficient and might significantly increase the computation time. To prevent this, the probabilities are -not calculated as a default. In order to calculate, you will have to set `calculate_probabilities` to True: +not calculated as a default. To calculate them, you will have to set `calculate_probabilities` to True: ```python from bertopic import BERTopic @@ -184,7 +210,7 @@ topics, probs = topic_model.fit_transform(docs) ``` !!! note - The `calculate_probabilties` parameter is only used when using HDBSCAN or cuML's HDBSCAN model. In other words, this will not work when using a model other than HDBSCAN. Instead, we can approximate the topic distributions across all documents with [`approximate_distribution`](https://maartengr.github.io/BERTopic/getting_started/distribution/distribution.html). + The `calculate_probabilties` parameter is only used when using HDBSCAN or cuML's HDBSCAN model. In other words, this will not work when using a model other than HDBSCAN. Instead, we can approximate the topic distributions across all documents with [`.approximate_distribution`](https://maartengr.github.io/BERTopic/getting_started/distribution/distribution.html). ## **Numpy gives me an error when running BERTopic** With the release of Numpy 1.20.0, there have been significant issues with using that version (and previous ones) due to compilation issues and pypi. @@ -241,8 +267,7 @@ topic_model = BERTopic(umap_model=umap_model, hdbscan_model=hdbscan_model) topics, probs = topic_model.fit_transform(docs) ``` -Depending on the embeddings you are using, you might want to normalize them first in order to -force a cosine-related distance metric in UMAP: +Depending on the embeddings you are using, you might want to normalize them first to force a cosine-related distance metric in UMAP: ```python from cuml.preprocessing import normalize @@ -251,7 +276,7 @@ embeddings = normalize(embeddings) ## **How can I use BERTopic with Chinese documents?** Currently, CountVectorizer tokenizes text by splitting whitespace which does not work for Chinese. -In order to get it to work, you will have to create a custom `CountVectorizer` with `jieba`: +To get it to work, you will have to create a custom `CountVectorizer` with `jieba`: ```python from sklearn.feature_extraction.text import CountVectorizer @@ -283,7 +308,7 @@ issue can be found [here](https://github.com/lmcinnes/umap/issues/631). ## **Should I preprocess the data?** No. By using document embeddings there is typically no need to preprocess the data as all parts of a document -are important in understanding the general topic of the document. Although this holds true in 99% of cases, if you +are important in understanding the general topic of the document. Although this holds in 99% of cases, if you have data that contains a lot of noise, for example, HTML-tags, then it would be best to remove them. HTML-tags typically do not contribute to the meaning of a document and should therefore be removed. However, if you apply topic modeling to HTML-code to extract topics of code, then it becomes important. \ No newline at end of file diff --git a/docs/getting_started/clustering/clustering.md b/docs/getting_started/clustering/clustering.md index a83f3164..c5f6e383 100644 --- a/docs/getting_started/clustering/clustering.md +++ b/docs/getting_started/clustering/clustering.md @@ -1,9 +1,9 @@ -After reducing the dimensionality of our input embeddings, we need to cluster them into groups of similar embeddings in order to extract our topics. +After reducing the dimensionality of our input embeddings, we need to cluster them into groups of similar embeddings to extract our topics. This process of clustering is quite important because the more performant our clustering technique the more accurate our topic representations are. In BERTopic, we typically use HDBSCAN as it is quite capable of capturing structures with different densities. However, there is not one perfect -clustering model and you might want to be using something entirely different for you use case. Moreover, what if a new state-of-the-art model -is released tomorrow? We would like to able to use that in BERTopic, right? Since BERTopic assumes some independence among steps, we can allow for this modularity: +clustering model and you might want to be using something entirely different for your use case. Moreover, what if a new state-of-the-art model +is released tomorrow? We would like to be able to use that in BERTopic, right? Since BERTopic assumes some independence among steps, we can allow for this modularity:

@@ -48,12 +48,12 @@ hdbscan_model = HDBSCAN(min_cluster_size=15, metric='euclidean', cluster_selecti topic_model = BERTopic(hdbscan_model=hdbscan_model) ``` -Here, we can define any parameters in HDBSCAN to optimize for the best performance based on whatever validation metrics that you are using. +Here, we can define any parameters in HDBSCAN to optimize for the best performance based on whatever validation metrics you are using. ## **k-Means** Although HDBSCAN works quite well in BERTopic and is typically advised, you might want to be using k-Means instead. It allows you to select how many clusters you would like and forces every single point to be in a cluster. Therefore, no -outliers will be created. This has also has disadvantages. When you force every single point in a cluster, it will mean +outliers will be created. This also has disadvantages. When you force every single point in a cluster, it will mean that the cluster is highly likely to contain noise which can hurt the topic representations. As a small tip, using the `vectorizer_model=CountVectorizer(stop_words="english")` helps quite a bit to then improve the topic representation. @@ -69,7 +69,7 @@ topic_model = BERTopic(hdbscan_model=cluster_model) !!! note As you might have noticed, the `cluster_model` is passed to `hdbscan_model` which might be a bit confusing considering - you are not passing a HDBSCAN model. For now, the name of the parameter is kept the same to adhere to the current + you are not passing an HDBSCAN model. For now, the name of the parameter is kept the same to adhere to the current state of the API. Changing the name could lead to deprecation issues, which I want to prevent as much as possible. ## **Agglomerative Clustering** diff --git a/docs/getting_started/ctfidf/ctfidf.md b/docs/getting_started/ctfidf/ctfidf.md index dd81869f..d59c4c31 100644 --- a/docs/getting_started/ctfidf/ctfidf.md +++ b/docs/getting_started/ctfidf/ctfidf.md @@ -1,15 +1,15 @@ # c-TF-IDF -In BERTopic, in order to get an accurate representation of the topics from our bag-of-words matrix, TF-IDF was adjusted to work on a cluster/categorical/topic-level instead of a document-level. This adjusted TF-IDF representation is called **c-TF-IDF** takes into account what makes the documents in once cluster different from documents in another cluster: +In BERTopic, in order to get an accurate representation of the topics from our bag-of-words matrix, TF-IDF was adjusted to work on a cluster/categorical/topic level instead of a document level. This adjusted TF-IDF representation is called **c-TF-IDF** and takes into account what makes the documents in one cluster different from documents in another cluster:
Each cluster is converted to a single document instead of a set of documents. Then, we extract the frequency of word `x` in class `c`, where `c` refers to the cluster we created before. This results in our class-based `tf` representation. This representation is L1-normalized to account for the differences in topic sizes.

-Then, we take take the logarithm of one plus the average number of words per class `A` divided by the frequency of word `x` across all classes. We add plus one within the logarithm to force values to be positive. This results in our class-based `idf` representation. Like with the classic TF-IDF, we then multiply `tf` with `idf` to get the importance score per word in each class. In other words, the classical TF-IDF procedure is **not** used here but a modified version of the algorithm that allows for a much better representation. +Then, we take the logarithm of one plus the average number of words per class `A` divided by the frequency of word `x` across all classes. We add plus one within the logarithm to force values to be positive. This results in our class-based `idf` representation. Like with the classic TF-IDF, we then multiply `tf` with `idf` to get the importance score per word in each class. In other words, the classical TF-IDF procedure is **not** used here but a modified version of the algorithm that allows for a much better representation. -Since the topic representation is somewhat independent from the clustering step, we can change how the c-TF-IDF representation will look like. This can be in the form of parameter tuning, different weighting schemes, or using a diversity metric on top of it. This allows for some modularity with respect to the weighting scheme: +Since the topic representation is somewhat independent of the clustering step, we can change how the c-TF-IDF representation will look like. This can be in the form of parameter tuning, different weighting schemes, or using a diversity metric on top of it. This allows for some modularity concerning the weighting scheme:

@@ -33,7 +33,7 @@ There are two parameters worth exploring in the `ClassTfidfTransformer`, namely The `bm25_weighting` is a boolean parameter that indicates whether a class-based BM-25 weighting measure is used instead of the default method as defined in the formula at the beginning of this page. -Instead of the using the following weighting scheme: +Instead of using the following weighting scheme: @@ -61,7 +61,7 @@ Instead of the default term frequency: -we take the square root of the term frequency after applying normalizing the frequency matrix: +we take the square root of the term frequency after normalizing the frequency matrix: diff --git a/docs/getting_started/dim_reduction/dim_reduction.md b/docs/getting_started/dim_reduction/dim_reduction.md index 32079b93..9ae89c4f 100644 --- a/docs/getting_started/dim_reduction/dim_reduction.md +++ b/docs/getting_started/dim_reduction/dim_reduction.md @@ -1,8 +1,7 @@ -An important aspect of BERTopic is dimensionality reduction of the input embeddings. As embeddings are often high in dimensionality, clustering becomes difficult due -to the curse of dimensionality. A solution is to reduce the dimensionality into +An important aspect of BERTopic is the dimensionality reduction of the input embeddings. As embeddings are often high in dimensionality, clustering becomes difficult due to the curse of dimensionality. A solution is to reduce the dimensionality of the embeddings to a workable dimensional space (e.g., 5) for clustering algorithms to work with. -UMAP is used as a default in BERTopic since it is able to capture both the local and global high-dimensional space in lower dimensions. +UMAP is used as a default in BERTopic since it can capture both the local and global high-dimensional space in lower dimensions. However, there are other solutions out there, such as PCA that users might be interested in trying out. Since BERTopic allows assumes some independency between steps, we can use any other dimensionality reduction algorithm. The image below illustrates this modularity: @@ -46,11 +45,11 @@ umap_model = UMAP(n_neighbors=15, n_components=5, min_dist=0.0, metric='cosine') topic_model = BERTopic(umap_model=umap_model) ``` -Here, we can define any parameters in UMAP to optimize for the best performance based on whatever validation metrics that you are using. +Here, we can define any parameters in UMAP to optimize for the best performance based on whatever validation metrics you are using. ## **PCA** -Although UMAP works quite well in BERTopic and is typically advised, you might want to be using PCA instead. It can be faster to train and to perform -inference with. To use PCA, we can simply import it from `sklearn` and pass it to the `umap_model` parameter: +Although UMAP works quite well in BERTopic and is typically advised, you might want to be using PCA instead. It can be faster to train and perform +inference. To use PCA, we can simply import it from `sklearn` and pass it to the `umap_model` parameter: ```python diff --git a/docs/getting_started/distribution/approximate_distribution.svg b/docs/getting_started/distribution/approximate_distribution.svg index 84e16602..3b00794c 100644 --- a/docs/getting_started/distribution/approximate_distribution.svg +++ b/docs/getting_started/distribution/approximate_distribution.svg @@ -83,10 +83,10 @@ -create tokensets -topic-tokenset similarity +create token sets +topic-token set similarity document-topic distribution -multi-topic assignment on a token-level +multi-topic assignment on a token level diff --git a/docs/getting_started/distribution/distribution.md b/docs/getting_started/distribution/distribution.md index d1f86bf1..becee01b 100644 --- a/docs/getting_started/distribution/distribution.md +++ b/docs/getting_started/distribution/distribution.md @@ -1,6 +1,6 @@ -BERTopic approaches topic modeling as a cluster task and attempts to cluster semantically similar documents in order to extract common topics. A disadvantage of using such a method is that each document is assigned to a single cluster and therefore also a single topic. In practice, documents may contain a mixture of topics. This can be accounted for by splitting up the documents into sentences and feeding those to BERTopic. +BERTopic approaches topic modeling as a cluster task and attempts to cluster semantically similar documents to extract common topics. A disadvantage of using such a method is that each document is assigned to a single cluster and therefore also a single topic. In practice, documents may contain a mixture of topics. This can be accounted for by splitting up the documents into sentences and feeding those to BERTopic. -Another option is to use a cluster model that can perform soft-clustering, like HDBSCAN. As BERTopic focuses on modularity, we may still want to model that mixture of topics even when we are using a hard-clustering model, like k-Means without the need to split up our documents. This is where `.approximate_distribution` comes in! +Another option is to use a cluster model that can perform soft clustering, like HDBSCAN. As BERTopic focuses on modularity, we may still want to model that mixture of topics even when we are using a hard-clustering model, like k-Means without the need to split up our documents. This is where `.approximate_distribution` comes in!

@@ -8,19 +8,19 @@ Another option is to use a cluster model that can perform soft-clustering, like

-In order to perform this approximation, each document is split into tokens according to the provided tokenizer in the `CountVectorizer`. Then, a **sliding window** is applied on each document creating subsets of the document. For example, with a window size of 3 and stride of 1, the document: +To perform this approximation, each document is split into tokens according to the provided tokenizer in the `CountVectorizer`. Then, a **sliding window** is applied on each document creating subsets of the document. For example, with a window size of 3 and stride of 1, the document: > Solving the right problem is difficult. -can be split up into `solving the right`, `the right problem`, `right problem is`, and `problem is difficult`. These are called tokensets. -For each of these tokensets, we calculate their c-TF-IDF representation and find out how similar they are to the previously generated topics. -Then, the similarities to the topics for each tokenset are summed in order to create a topic distribution for the entire document. +can be split up into `solving the right`, `the right problem`, `right problem is`, and `problem is difficult`. These are called token sets. +For each of these token sets, we calculate their c-TF-IDF representation and find out how similar they are to the previously generated topics. +Then, the similarities to the topics for each token set are summed to create a topic distribution for the entire document. Although it is often said that documents can contain a mixture of topics, these are often modeled by assigning each word to a single topic. With this approach, we take into account that there may be multiple topics for a single word. -We can make this multiple-topic word assignment a bit more accurate by then splitting these tokensets up into individual tokens and assigning -the topic distributions for each tokenset to each individual token. That way, we can visualize the extent to which a certain word contributes +We can make this multiple-topic word assignment a bit more accurate by then splitting these token sets up into individual tokens and assigning +the topic distributions for each token set to each individual token. That way, we can visualize the extent to which a certain word contributes to a document's topic distribution. ## **Example** @@ -70,29 +70,29 @@ df You can also approximate the topic distributions for unseen documents. It will not be as accurate as `.transform` but it is quite fast and can serve you well in a production setting. !!! note - To get the stylized dataframe for `.visualize_approximate_distribution` you will need to have Jinja installed. If you do not have this installed, a unstylized dataframe will be returned instead. You can install Jinja via `pip install jinja2` + To get the stylized dataframe for `.visualize_approximate_distribution` you will need to have Jinja installed. If you do not have this installed, an unstylized dataframe will be returned instead. You can install Jinja via `pip install jinja2` ## **Parameters** There are a few parameters that are of interest which will be discussed below. ### **batch_size** -Creating tokensets for each document can result in quite a large list of tokensets. The similarity of these tokensets with the topics can result a large matrix that might not fit into memory anymore. To circumvent this, we can process batches of documents instead to minimize the memory overload. The value for `batch_size` indicates the number of documents that will be processed at once: +Creating token sets for each document can result in quite a large list of token sets. The similarity of these token sets with the topics can result a large matrix that might not fit into memory anymore. To circumvent this, we can process batches of documents instead to minimize the memory overload. The value for `batch_size` indicates the number of documents that will be processed at once: ```python topic_distr, _ = topic_model.approximate_distribution(docs, batch_size=500) ``` ### **window** -The number of tokens that are combined into a tokenset are defined by the `window` parameter. Seeing as we are performing a sliding window, we can change the size of the window. A larger window takes more tokens into account but setting it too large can result in considering too much information. Personally, I like to have this window between 4 and 8: +The number of tokens that are combined into token sets are defined by the `window` parameter. Seeing as we are performing a sliding window, we can change the size of the window. A larger window takes more tokens into account but setting it too large can result in considering too much information. Personally, I like to have this window between 4 and 8: ```python topic_distr, _ = topic_model.approximate_distribution(docs, window=4) ``` ### **stride** -The sliding window that is performed on a documents shifts, as a default, 1 token to the right each time to create its tokensets. As a result, especially with large windows, a single token gets judged several times. We can use the `stride` parameter to increase the number of tokens the window shifts to the right. By increasing -this value, we are judging each token less frequently which often results in a much faster calculation. Combining this parameter with `window` is prefered. For example, if we have a very large dataset, we can set `stride=4` and `window=8` in order to judge tokensets that contain 8 tokens but that are shifted with 4 steps +The sliding window that is performed on a document shifts, as a default, 1 token to the right each time to create its token sets. As a result, especially with large windows, a single token gets judged several times. We can use the `stride` parameter to increase the number of tokens the window shifts to the right. By increasing +this value, we are judging each token less frequently which often results in a much faster calculation. Combining this parameter with `window` is preferred. For example, if we have a very large dataset, we can set `stride=4` and `window=8` to judge token sets that contain 8 tokens but that are shifted with 4 steps each time. As a result, this increases the computational speed quite a bit: ```python @@ -100,7 +100,7 @@ topic_distr, _ = topic_model.approximate_distribution(docs, window=4) ``` ### **use_embedding_model** -As a default, we compare the c-TF-IDF calculations between the tokensets and all topics. Due to its bag-of-word representation, this is quite fast. However, you might want to use the selected `embedding_model` instead to do this comparison. Do note that due to the many tokensets, it is often computationally quite a bit slower: +As a default, we compare the c-TF-IDF calculations between the token sets and all topics. Due to its bag-of-word representation, this is quite fast. However, you might want to use the selected `embedding_model` instead to do this comparison. Do note that due to the many token sets, it is often computationally quite a bit slower: ```python topic_distr, _ = topic_model.approximate_distribution(docs, use_embedding_model=True) diff --git a/docs/getting_started/embeddings/embeddings.md b/docs/getting_started/embeddings/embeddings.md index 7a613184..8afca511 100644 --- a/docs/getting_started/embeddings/embeddings.md +++ b/docs/getting_started/embeddings/embeddings.md @@ -1,8 +1,8 @@ # Embedding Models -BERTopic starts with transforming our input documents into numerical representations. Althought there are a number of ways this can be achieved, we typically use sentence-transformers (`"all-MiniLM-L6-v2"`) as it is quite capable of capturing the semantic similarity between documents. +BERTopic starts with transforming our input documents into numerical representations. Although there are many ways this can be achieved, we typically use sentence-transformers (`"all-MiniLM-L6-v2"`) as it is quite capable of capturing the semantic similarity between documents. However, there is not one perfect -embedding model and you might want to be using something entirely different for you use case. Since BERTopic assumes some independence among steps, we can allow for this modularity: +embedding model and you might want to be using something entirely different for your use case. Since BERTopic assumes some independence among steps, we can allow for this modularity:

@@ -10,7 +10,7 @@ embedding model and you might want to be using something entirely different for This modularity allows us not only to choose any embedding model to convert our documents into numerical representations, we can use essentially any data to perform our clustering. When new state-of-the-art pre-trained embedding models are released, BERTopic will be able to use them. As a result, BERTopic grows with any new models being released. -Out-of-the-box, BERTopic supports a number of embedding techniques. In this section, we will go through several of them and how they can be implemented. +Out of the box, BERTopic supports several embedding techniques. In this section, we will go through several of them and how they can be implemented. ### **Sentence Transformers** You can select any model from sentence-transformers [here](https://www.sbert.net/docs/pretrained_models.html) @@ -31,7 +31,7 @@ topic_model = BERTopic(embedding_model=sentence_model) ``` !!! tip "Tip!" - This embedding back-end was put here first for a reason, sentence-transformers works amazing out-of-the-box! Playing around with different models can give you great results. Also, make sure to frequently visit [this](https://www.sbert.net/docs/pretrained_models.html) page as new models are often released. + This embedding back-end was put here first for a reason, sentence-transformers works amazing out of the box! Playing around with different models can give you great results. Also, make sure to frequently visit [this](https://www.sbert.net/docs/pretrained_models.html) page as new models are often released. ### 🤗 Hugging Face Transformers To use a Hugging Face transformers model, load in a pipeline and point @@ -45,8 +45,7 @@ topic_model = BERTopic(embedding_model=embedding_model) ``` !!! tip "Tip!" - These transformers also work quite well using `sentence-transformers` which has a number of - optimizations tricks that make using it a bit faster. + These transformers also work quite well using `sentence-transformers` which has great optimizations tricks that make using it a bit faster. ### **Flair** [Flair](https://github.com/flairNLP/flair) allows you to choose almost any embedding model that @@ -63,7 +62,7 @@ You can select any 🤗 transformers model [here](https://huggingface.co/models) Moreover, you can also use Flair to use word embeddings and pool them to create document embeddings. Under the hood, Flair simply averages all word embeddings in a document. Then, we can easily -pass it to BERTopic in order to use those word embeddings as document embeddings: +pass it to BERTopic to use those word embeddings as document embeddings: ```python from flair.embeddings import WordEmbeddings, DocumentPoolEmbeddings @@ -147,7 +146,7 @@ topic_model = BERTopic(embedding_model=ft) Scikit-Learn is a framework for more than just machine learning. It offers many preprocessing tools, some of which can be used to create representations for text. Many of these tools are relatively lightweight and do not require a GPU. -While the representations may be less expressive as many BERT models, the fact that +While the representations may be less expressive than many BERT models, the fact that it runs much faster can make it a relevant candidate to consider. If you have a scikit-learn compatible pipeline that you'd like to use to embed @@ -181,11 +180,11 @@ topic_model = BERTopic(embedding_model=sklearn_embedder) support the `.partial_fit()`-API. If you have a pipeline that theoretically should be able to support online learning then you might want to explore the [scikit-partial](https://github.com/koaning/scikit-partial) project. - Moreover, since this backend does not generate representations on a word-level, + Moreover, since this backend does not generate representations on a word level, it does not support the `diversity` parameter. ### **Word + Document Embeddings** -You might want to be using different language models for creating document- and word-embeddings. For example, +You might want to be using different language models for creating document and word embeddings. For example, while SentenceTransformers might be great in embedding sentences and documents, you might prefer to use FastText to create the word embeddings. @@ -237,7 +236,7 @@ topic_model = BERTopic(embedding_model=custom_embedder) ### **Custom Embeddings** The base models in BERTopic are BERT-based models that work well with document similarity tasks. Your documents, -however, might be too specific for a general pre-trained model to be used. Fortunately, you can use embedding +however, might be too specific for a general pre-trained model to be used. Fortunately, you can use the embedding model in BERTopic to create document features. You only need to prepare the document embeddings yourself and pass them through `fit_transform` of BERTopic: @@ -259,7 +258,7 @@ As you can see above, we used a SentenceTransformer model to create the embeddin `🤗 transformers`, `Doc2Vec`, or any other embedding method. #### **TF-IDF** -As mentioned above, any embedding technique can be used. However, when running umap, the typical distance metric is +As mentioned above, any embedding technique can be used. However, when running UMAP, the typical distance metric is `cosine` which does not work quite well for a TF-IDF matrix. Instead, BERTopic will recognize that a sparse matrix is passed and use `hellinger` instead which works quite well for the similarity between probability distributions. diff --git a/docs/getting_started/guided/guided.md b/docs/getting_started/guided/guided.md index 64fd0c17..9233ac41 100644 --- a/docs/getting_started/guided/guided.md +++ b/docs/getting_started/guided/guided.md @@ -1,4 +1,4 @@ -Guided Topic Modeling or Seeded Topic Modeling is a collection of techniques that guides the topic modeling approach by setting a number of seed topics in which the model will converge to. These techniques allow the user to set a pre-defined number of topic representations that are sure to be in documents. For example, take an IT-business that has a ticket system for the software their clients use. Those tickets may typically contain information about a specific bug regarding login issues that the IT-business is aware off. +Guided Topic Modeling or Seeded Topic Modeling is a collection of techniques that guides the topic modeling approach by setting several seed topics to which the model will converge to. These techniques allow the user to set a predefined number of topic representations that are sure to be in documents. For example, take an IT business that has a ticket system for the software their clients use. Those tickets may typically contain information about a specific bug regarding login issues that the IT business is aware of. To model that bug, we can create a seed topic representation containing the words `bug`, `login`, `password`, and `username`. By defining those words, a Guided Topic Modeling approach will try to converge at least one topic to those words. @@ -11,7 +11,7 @@ and `username`. By defining those words, a Guided Topic Modeling approach will t Guided BERTopic has two main steps: -First, we create embeddings for each seeded topics by joining them and passing them through the document embedder. These embeddings will be compared with the existing document embeddings through cosine similarity and assigned a label. If the document is most similar to a seeded topic, then it will get that topic's label. +First, we create embeddings for each seeded topic by joining them and passing them through the document embedder. These embeddings will be compared with the existing document embeddings through cosine similarity and assigned a label. If the document is most similar to a seeded topic, then it will get that topic's label. If it is most similar to the average document embedding, it will get the -1 label. These labels are then passed through UMAP to create a semi-supervised approach that should nudge the topic creation to the seeded topics. @@ -22,8 +22,8 @@ the likelihood that a seeded topic word will appear in a topic. This does, howev ### **Example** To demonstrate Guided BERTopic, we use the 20 Newsgroups dataset as our example. We have frequently used this -dataset in BERTopic examples and we sometimes see a topic generated about health with words as `drug` and `cancer` -being important. However, due to the stocastisch nature of UMAP this topic is not always found. +dataset in BERTopic examples and we sometimes see a topic generated about health with words such as `drug` and `cancer` +being important. However, due to the stochastic nature of UMAP, this topic is not always found. In order to guide BERTopic to that topic, we create a seed topic list that we pass through our model. However, there may be several other topics that we know should be in the documents. Let's also initialize those: @@ -42,7 +42,7 @@ topic_model = BERTopic(seed_topic_list=seed_topic_list) topics, probs = topic_model.fit_transform(docs) ``` -AS you can see above, the `seed_topic_list` contains a list of topic representations. By defining the above topics +As you can see above, the `seed_topic_list` contains a list of topic representations. By defining the above topics BERTopic is more likely to model the defined seeded topics. However, BERTopic is merely nudged towards creating those topics. In practice, if the seeded topics do not exist or might be divided into smaller topics, then they will -not be modeled. Thus, seed topics need to be accurate in order to accurately converge towards them. \ No newline at end of file +not be modeled. Thus, seed topics need to be accurate to accurately converge towards them. \ No newline at end of file diff --git a/docs/getting_started/hierarchicaltopics/hierarchicaltopics.md b/docs/getting_started/hierarchicaltopics/hierarchicaltopics.md index 7b7624f8..839e28a0 100644 --- a/docs/getting_started/hierarchicaltopics/hierarchicaltopics.md +++ b/docs/getting_started/hierarchicaltopics/hierarchicaltopics.md @@ -1,6 +1,6 @@ -When tweaking your topic model, the number of topics that are generated has a large effect on the quality of the topic representations. Some topics could be merged together and having an understanding of the effect will help you understand which topics should and which should not be merged. +When tweaking your topic model, the number of topics that are generated has a large effect on the quality of the topic representations. Some topics could be merged and having an understanding of the effect will help you understand which topics should and which should not be merged. -That is where hierarchical topic modeling comes in. It tries to model the possible hierarchical nature of the topics you have created in order to understand which topics are similar to each other. Moreover, you will have more insight into sub-topics that might exist in your data. +That is where hierarchical topic modeling comes in. It tries to model the possible hierarchical nature of the topics you have created to understand which topics are similar to each other. Moreover, you will have more insight into sub-topics that might exist in your data.

@@ -8,7 +8,7 @@ That is where hierarchical topic modeling comes in. It tries to model the possib

-In BERTopic, we can approximate this potential hierarchy by making use of our topic-term matrix (c-TF-IDF matrix). This matrix contains information about the importance of every word in every topic and makes for a nice numerical representation of our topics. The smaller the distance between two c-TF-IDF representations, the more similar we assume they are. In practice, this process of merging topics is done through the hierarchical clustering capabilities of `scipy` (see [here](https://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html)). It allows for several linkage methods through which we can approximate our topic hierarchy. As a default, we are using the [ward](https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.ward.html#scipy.cluster.hierarchy.ward) but many others are availabe. +In BERTopic, we can approximate this potential hierarchy by making use of our topic-term matrix (c-TF-IDF matrix). This matrix contains information about the importance of every word in every topic and makes for a nice numerical representation of our topics. The smaller the distance between two c-TF-IDF representations, the more similar we assume they are. In practice, this process of merging topics is done through the hierarchical clustering capabilities of `scipy` (see [here](https://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html)). It allows for several linkage methods through which we can approximate our topic hierarchy. As a default, we are using the [ward](https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.ward.html#scipy.cluster.hierarchy.ward) but many others are available. Whenever we merge two topics, we can calculate the c-TF-IDF representation of these two merged by summing their bag-of-words representation. We assume that two sets of topics are merged and that all others are kept the same, regardless of their location in the hierarchy. This helps us isolate the potential effect of merging sets of topics. As a result, we can see the topic representation at each level in the tree. @@ -64,7 +64,7 @@ topic_model.visualize_hierarchy(hierarchical_topics=hierarchical_topics) If you **hover** over the black circles, you will see the topic representation at that level of the hierarchy. These representations -help you understand the effect of merging certain topics together. Some might be logical to merge whilst others might not. Moreover, +help you understand the effect of merging certain topics. Some might be logical to merge whilst others might not. Moreover, we can now see which sub-topics can be found within certain larger themes. Although this gives a nice overview of the potential hierarchy, hovering over all black circles can be tiresome. Instead, we can diff --git a/docs/getting_started/manual/manual.md b/docs/getting_started/manual/manual.md index 7908ac37..808b0aaa 100644 --- a/docs/getting_started/manual/manual.md +++ b/docs/getting_started/manual/manual.md @@ -22,7 +22,7 @@ docs = data['data'] y = data['target'] ``` -Then, we make sure to create empty instances of the dimensionality reduction and clustering steps. We pass those to BERTopic in order to simply skip over them and go to the topic representation process: +Then, we make sure to create empty instances of the dimensionality reduction and clustering steps. We pass those to BERTopic to simply skip over them and go to the topic representation process: ```python @@ -56,7 +56,7 @@ Let's take a look at a few topics that we get out of training this way by runnin
-We can see a number of interesting topics appearing here. They seem to relate to the 20 classes we had as an input. Now, let's map those topics to our original classes in order to view their relationship: +We can see several interesting topics appearing here. They seem to relate to the 20 classes we had as input. Now, let's map those topics to our original classes to view their relationship: ```python # Map input `y` to topics @@ -76,12 +76,12 @@ df
-We can clearly see that that the c-TF-IDF representations nicely extracts the words that give a nice representation of our input classes. This is all done without actually embedding and clustering the data. +We can see that the c-TF-IDF representations nicely extract the words that give a nice representation of our input classes. This is all done without actually embedding and clustering the data. As a result, the entire "training" process only takes a couple of seconds. Moreover, we can still perform BERTopic-specific features like dynamic topic modeling, topics per class, hierarchical topic modeling, modeling topic distributions, etc. !!! note - The resulting `topics` may be a different mapping from the `y` labels. In order to map `y` to `topics`, we can run the following: + The resulting `topics` may be a different mapping from the `y` labels. To map `y` to `topics`, we can run the following: ```python diff --git a/docs/getting_started/online/online.md b/docs/getting_started/online/online.md index 79dc1a86..94b072df 100644 --- a/docs/getting_started/online/online.md +++ b/docs/getting_started/online/online.md @@ -1,4 +1,4 @@ -Online topic modeling (sometimes called "incremental topic modeling") is the ability to learn incrementally from a mini-batch of instances. Essentially, it is a way to update your topic model with data on which it was not trained on before. In Scikit-Learn, this technique is often modeled through a `.partial_fit` function, which is also used in BERTopic. +Online topic modeling (sometimes called "incremental topic modeling") is the ability to learn incrementally from a mini-batch of instances. Essentially, it is a way to update your topic model with data on which it was not trained before. In Scikit-Learn, this technique is often modeled through a `.partial_fit` function, which is also used in BERTopic. In BERTopic, there are three main goals for using this technique. @@ -15,7 +15,7 @@ In BERTopic, online topic modeling can be a bit tricky as there are several step 5. Extract topic words 6. Diversify topic words -For some steps, an online variant is more important than others. Typically, in step 1 we use pre-trained language models that are in less need for continuous updates. This means that we can use an embedding model like Sentence-Transformers for extracting the embeddings and still use it in an online setting. Similarly, step 5 and 6 do not necessarily need online variants since they are built upon step 4, the tokenization. If that tokenization is by itself incremental, then so will steps 5 and 6. +For some steps, an online variant is more important than others. Typically, in step 1 we use pre-trained language models that are in less need of continuous updates. This means that we can use an embedding model like Sentence-Transformers for extracting the embeddings and still use it in an online setting. Similarly, steps 5 and 6 do not necessarily need online variants since they are built upon step 4, tokenization. If that tokenization is by itself incremental, then so will steps 5 and 6.
@@ -25,12 +25,12 @@ For some steps, an online variant is more important than others. Typically, in s This means that we will need online variants for steps 2 through 4. Steps 2 and 3, dimensionality reduction and clustering, can be modeled through the use of Scikit-Learn's `.partial_fit` function. In other words, it supports any algorithm that can be trained using `.partial_fit` since these algorithms can be trained incrementally. For example, incremental dimensionality reduction can be achieved using Scikit-Learn's `IncrementalPCA` and incremental clustering with `MiniBatchKMeans`. -Lastly, we need to develop an online variant for step 5, tokenization. In this step, a Bag-of-words representation is created through the `CountVectorizer`. However, as new data comes in, its vocabulary will need to be updated. For that purpose, `bertopic.vectorizers.OnlineCountVectorizer` was created that not only updates out-of-vocabulary words but also implements decay and cleaning functions to prevent the sparse bag-of-words matrix to become too large in size. Most notably, the `decay` parameter is a value between 0 and 1 to weight the percentage of frequencies that the previous bag-of-words matrix should be reduced to. For example, a value of `.1` will decrease the frequencies in the bag-of-words matrix with 10% at each iteration. This will make sure that recent data has more weight than previously iterations. Similarly, `delete_min_df` will remove certain words from its vocabulary if its frequency is lower than a set value. This ties together with the `decay` parameter as some words will decay over time if not used. For more information regarding the `OnlineCountVectorizer`, please see the [vectorizers documentation](https://maartengr.github.io/BERTopic/getting_started/vectorizers/vectorizers.html#onlinecountvectorizer). +Lastly, we need to develop an online variant for step 5, tokenization. In this step, a Bag-of-words representation is created through the `CountVectorizer`. However, as new data comes in, its vocabulary will need to be updated. For that purpose, `bertopic.vectorizers.OnlineCountVectorizer` was created that not only updates out-of-vocabulary words but also implements decay and cleaning functions to prevent the sparse bag-of-words matrix to become too large. Most notably, the `decay` parameter is a value between 0 and 1 to weigh the percentage of frequencies that the previous bag-of-words matrix should be reduced to. For example, a value of `.1` will decrease the frequencies in the bag-of-words matrix by 10% at each iteration. This will make sure that recent data has more weight than previous iterations. Similarly, `delete_min_df` will remove certain words from its vocabulary if their frequency is lower than a set value. This ties together with the `decay` parameter as some words will decay over time if not used. For more information regarding the `OnlineCountVectorizer`, please see the [vectorizers documentation](https://maartengr.github.io/BERTopic/getting_started/vectorizers/vectorizers.html#onlinecountvectorizer). ## **Example** -Online topic modeling in BERTopic is rather straightforward. We first need to have our documents in split in chunks such that we can train and update our topic model incrementally. +Online topic modeling in BERTopic is rather straightforward. We first need to have our documents split into chunks such that we can train and update our topic model incrementally. ```python from sklearn.datasets import fetch_20newsgroups @@ -40,7 +40,7 @@ all_docs = fetch_20newsgroups(subset=subset, remove=('headers', 'footers', 'quo doc_chunks = [all_docs[i:i+1000] for i in range(0, len(all_docs), 1000)] ``` -Here, we created chunks of 1000 documents to be fed in BERTopic. Then, we will need to define a number of sub-models that support online learning. Specifically, we are going to be using `IncrementalPCA`, `MiniBatchKMeans`, and the `OnlineCountVectorizer`: +Here, we created chunks of 1000 documents to be fed in BERTopic. Then, we will need to define several sub-models that support online learning. Specifically, we are going to be using `IncrementalPCA`, `MiniBatchKMeans`, and the `OnlineCountVectorizer`: ```python from sklearn.cluster import MiniBatchKMeans @@ -54,7 +54,7 @@ vectorizer_model = OnlineCountVectorizer(stop_words="english", decay=.01) ``` !!! tip Tip - You can use any other dimensionality reduction and clustering algorithm as long as they have a `.partial_fit` function. Moreover, you can use dimensionality reduction algorithms that do not support `.partial_fit` functions but do have a `.fit` function to first train it on a large amount of data and then continously add documents. The dimensionality reduction will not be updated but may be trained sufficiently to properly reduce the embeddings without the need to continuously add documents. + You can use any other dimensionality reduction and clustering algorithm as long as they have a `.partial_fit` function. Moreover, you can use dimensionality reduction algorithms that do not support `.partial_fit` functions but do have a `.fit` function to first train it on a large amount of data and then continuously add documents. The dimensionality reduction will not be updated but may be trained sufficiently to properly reduce the embeddings without the need to continuously add documents. After having defined our sub-models, we can start training our topic model incrementally by looping over our document chunks: @@ -70,7 +70,7 @@ for docs in doc_chunks: topic_model.partial_fit(docs) ``` -And that is it! During each iteration, you can access the predicted topics through the `.topics_` attribute. Do note though that only the most recent batch of documents are tracked. If you want to be using online topic modeling for low-memory use cases, then it is advised to also update the `.topics_` attribute. Otherwise, variations such as hierarchical topic model will not work. +And that is it! During each iteration, you can access the predicted topics through the `.topics_` attribute. Do note though that only the most recent batch of documents is tracked. If you want to be using online topic modeling for low-memory use cases, then it is advised to also update the `.topics_` attribute. Otherwise, variations such as hierarchical topic modeling will not work. ```python # Incrementally fit the topic model by training on 1000 documents at a time and track the topics in each iteration @@ -83,7 +83,7 @@ topic_model.topics_ = topics ``` !!! note - Do note that in BERTopic it is not possible to use `.partial_fit` after the `.fit` as they work quite differently with respect to internally updating topics, frequencies, representations, etc. + Do note that in BERTopic it is not possible to use `.partial_fit` after the `.fit` as they work quite differently concerning internally updating topics, frequencies, representations, etc. ## **River** diff --git a/docs/getting_started/parameter tuning/parametertuning.md b/docs/getting_started/parameter tuning/parametertuning.md index e906f050..d38b44f4 100644 --- a/docs/getting_started/parameter tuning/parametertuning.md +++ b/docs/getting_started/parameter tuning/parametertuning.md @@ -1,12 +1,12 @@ # Hyperparameter Tuning -Although BERTopic works quite well out of the box, there are a number of hyperparameters to tune according to your use-case. -This section will focus on important parameters directly accessable in BERTopic but also hyperparameter optimization in sub-models +Although BERTopic works quite well out of the box, there are a number of hyperparameters to tune according to your use case. +This section will focus on important parameters directly accessible in BERTopic but also hyperparameter optimization in sub-models such as HDBSCAN and UMAP. ## **BERTopic** -When instantiating BERTopic, there are a number of hyperparameters that you can directly adjust that could significantly improve the performance of your topic model. In this section, we will go through the most impactful parameters in BERTopic and directions on how to optimize them. +When instantiating BERTopic, there are several hyperparameters that you can directly adjust that could significantly improve the performance of your topic model. In this section, we will go through the most impactful parameters in BERTopic and directions on how to optimize them. ### **language** The `language` parameter is used to simplify the selection of models for those who are not familiar with sentence-transformers models. @@ -22,30 +22,30 @@ The multilingual model is "paraphrase-multilingual-MiniLM-L12-v2" and supports o ### **top_n_words** -`top_n_words` refers to the number of words per topic that you want extracted. In practice, I would advise you to keep this value below 30 and preferably between 10 and 20. The reasoning for this is that the more words you put in a topic the less coherent it can become. The top words are the most representative for the topic and should be focused on. +`top_n_words` refers to the number of words per topic that you want to be extracted. In practice, I would advise you to keep this value below 30 and preferably between 10 and 20. The reasoning for this is that the more words you put in a topic the less coherent it can become. The top words are the most representative of the topic and should be focused on. ### **n_gram_range** -The `n_gram_range` parameter refers to the CountVectorizer used when creating the topic representation. It relates to the number of words you want in your topic representation. For example, "New" and "York" are two seperate words but are often used as "New York" which represents an n-gram of 2. Thus, the `n_gram_range` should be set to (1, 2) if you want "New York" in your topic representation. +The `n_gram_range` parameter refers to the CountVectorizer used when creating the topic representation. It relates to the number of words you want in your topic representation. For example, "New" and "York" are two separate words but are often used as "New York" which represents an n-gram of 2. Thus, the `n_gram_range` should be set to (1, 2) if you want "New York" in your topic representation. ### **min_topic_size** -`min_topic_size` is an important parameter! It is used to specify what the minimum size of a topic can be. The lower this value the more topics are created. If you set this value too high, then it is possible that simply no topics will be created! Set this value too low and you will get many micro clusters. +`min_topic_size` is an important parameter! It is used to specify what the minimum size of a topic can be. The lower this value the more topics are created. If you set this value too high, then it is possible that simply no topics will be created! Set this value too low and you will get many microclusters. -It is advised to play around with this value depending on the size of the your dataset. If it nears a million documents, then it advised to set it much higher than the default of 10, for example 100 or even 500. +It is advised to play around with this value depending on the size of your dataset. If it nears a million documents, then it is advised to set it much higher than the default of 10, for example, 100 or even 500. ### **nr_topics** -`nr_topics` can be a tricky parameter. It specifies, after training the topic model, the number of topics that will be reduced to. For example, if your topic model results in 100 topics but you have set `nr_topics` to 20 then the topic model will try to reduce the number of topics from 100 to 20. +`nr_topics` can be a tricky parameter. It specifies, after training the topic model, the number of topics that will be reduced. For example, if your topic model results in 100 topics but you have set `nr_topics` to 20 then the topic model will try to reduce the number of topics from 100 to 20. -This reduction can take awhile as each reduction in topics activates a c-TF-IDF calculation. If this is set to None, no reduction is applied. Use "auto" to automatically reduce topics that using HDBSCAN. +This reduction can take a while as each reduction in topics activates a c-TF-IDF calculation. If this is set to None, no reduction is applied. Use "auto" to automatically reduce topics using HDBSCAN. ### **low_memory** -`low_memory` sets UMAP's `low_memory` to True to make sure that less memory is used in computation. This slows down computation but allows UMAP to be ran on low memory machines. +`low_memory` sets UMAP's `low_memory` to True to make sure that less memory is used in the computation. This slows down computation but allows UMAP to be run on low-memory machines. ### **calculate_probabilities** -`calculate_probabilities` lets you calculate the probabilities of each topic to each document. This is computationally quite expensive and is turned off by default. +`calculate_probabilities` lets you calculate the probabilities of each topic in each document. This is computationally quite expensive and is turned off by default. ## **UMAP** -UMAP is an amazing technique for dimensionality reduction. In BERTopic, it is used to reduce the dimensionality of document embedding into something that is easier to use with HDBSCAN in order to create good clusters. +UMAP is an amazing technique for dimensionality reduction. In BERTopic, it is used to reduce the dimensionality of document embedding into something easier to use with HDBSCAN to create good clusters. However, it does has a significant number of parameters you could take into account. As exposing all parameters in BERTopic would be difficult to manage, we can instantiate our UMAP model and pass it to BERTopic: @@ -57,26 +57,26 @@ topic_model = BERTopic(umap_model=umap_model).fit(docs) ``` ### **n_neighbors** -`n_neighbors` is the numer of neighboring sample points used when making the manifold approximation. Increasing this value typically results in a +`n_neighbors` is the number of neighboring sample points used when making the manifold approximation. Increasing this value typically results in a more global view of the embedding structure whilst smaller values result in a more local view. Increasing this value often results in larger clusters being created. ### **n_components** -`n_components` refers to the dimensionality of the embeddings after reducing them. This is set as a default to `5` in order to reduce dimensionality -as much as possible whilst trying to maximize the information kept in the resulting embeddings. Although lowering or increasing this value has an influence on the quality of embeddings, its effect is largest on the performance of HDBSCAN. Increasing this value too much and HDBSCAN will have a -hard time clustering the high-dimensional embeddings. Lower this value too much and too little information in the resulting embeddings is available +`n_components` refers to the dimensionality of the embeddings after reducing them. This is set as a default to `5` to reduce dimensionality +as much as possible whilst trying to maximize the information kept in the resulting embeddings. Although lowering or increasing this value influences the quality of embeddings, its effect is largest on the performance of HDBSCAN. Increasing this value too much and HDBSCAN will have a +hard time clustering the high-dimensional embeddings. Lower this value too much and too little information in the resulting embeddings are available to create proper clusters. If you want to increase this value, I would advise setting using a metric for HDBSCAN that works well in high dimensional data. ### **metric** `metric` refers to the method used to compute the distances in high dimensional space. The default is `cosine` as we are dealing with high dimensional data. However, BERTopic is also able to use any input, even regular tabular data, to cluster the documents. Thus, you might want to change the metric -to something that fits with your use case. +to something that fits your use case. ### **low_memory** `low_memory` is used when datasets may consume a lot of memory. Using millions of documents can lead to memory issues and setting this value to `True` might alleviate some of the issues. ## **HDBSCAN** -After reducing the embeddings with UMAP, we use HDBSCAN to cluster our documents into clusters of similar documents. Similar to UMAP, HDBSCAN has many parameters that could be tweaked in order to improve the cluster's quality. +After reducing the embeddings with UMAP, we use HDBSCAN to cluster our documents into clusters of similar documents. Similar to UMAP, HDBSCAN has many parameters that could be tweaked to improve the cluster's quality. ```python from hdbscan import HDBSCAN @@ -86,13 +86,13 @@ topic_model = BERTopic(hdbscan_model=hdbscan_model).fit(docs) ``` ### **min_cluster_size** -`min_cluster_size` is arguably the most important parameter in HDBSCAN. It controls the minimum size of a cluster and thereby the amount of clusters -that will be generated. It is set to `10` as a default. Increasing this value results in less clusters but of larger size whereas decreasing this value -results in more micro clusters being generated. Typically, I would advise on increasing this value rather than decreasing it. +`min_cluster_size` is arguably the most important parameter in HDBSCAN. It controls the minimum size of a cluster and thereby the number of clusters +that will be generated. It is set to `10` as a default. Increasing this value results in fewer clusters but of larger size whereas decreasing this value +results in more micro clusters being generated. Typically, I would advise increasing this value rather than decreasing it. ### **min_samples** -`min_samples` is automatically set to `min_cluster_size` and controls the amount of outliers are generated. Setting this value significantly lower than -`min_cluster_size` might help you reduce the amount of noise you will get. Do note that outliers are typically to be expected and forcing the output +`min_samples` is automatically set to `min_cluster_size` and controls the number of outliers generated. Setting this value significantly lower than +`min_cluster_size` might help you reduce the amount of noise you will get. Do note that outliers are to be expected and forcing the output to have no outliers may not properly represent the data. ### **metric** @@ -102,4 +102,4 @@ metrics that work with high dimensional data. ### **prediction_data** Make sure you always set this value to `True` as it is needed to predict new points later on. You can set this to False if you do not wish to predict -any unseen datapoints. \ No newline at end of file +any unseen data points. \ No newline at end of file diff --git a/docs/getting_started/search/search.md b/docs/getting_started/search/search.md index f03583cf..83d1c868 100644 --- a/docs/getting_started/search/search.md +++ b/docs/getting_started/search/search.md @@ -32,8 +32,8 @@ search term "motor". Then, we extract the most similar topic and check the resul ('advice', 0.005534544418830091)] ``` -It definitely seems that a topic was found that closely matches with "motor". The topic seems to be motorcycle -related and therefore matches with our "motor" input. You can use the `similarity` variable to see how similar +It definitely seems that a topic was found that closely matches "motor". The topic seems to be motorcycle +related and therefore matches our "motor" input. You can use the `similarity` variable to see how similar the extracted topics are to the search term. !!! note diff --git a/docs/getting_started/semisupervised/semisupervised.md b/docs/getting_started/semisupervised/semisupervised.md index 47dad185..2a5707f0 100644 --- a/docs/getting_started/semisupervised/semisupervised.md +++ b/docs/getting_started/semisupervised/semisupervised.md @@ -1,4 +1,4 @@ -In BERTopic, you have several options to nudge the creation of topics towards certain pre-specified topics. Here, we will be looking at semi-supervised topic modeling with BERTopic. +In BERTopic, you have several options to nudge the creation of topics toward certain pre-specified topics. Here, we will be looking at semi-supervised topic modeling with BERTopic. Semi-supervised modeling allows us to steer the dimensionality reduction of the embeddings into a space that closely follows any labels you might already have. @@ -54,7 +54,7 @@ Each document can be put into one of the following categories: 'talk.religion.misc'] ``` -To perform this semi-supervised approach, we can take in some pre-defined topics and simply pass those to the `y` parameter when fitting BERTopic. These labels can be pre-defined topics or simply documents that you feel belong together regardless of their content. BERTopic will nudge the creation of topics towards these categories +To perform this semi-supervised approach, we can take in some pre-defined topics and simply pass those to the `y` parameter when fitting BERTopic. These labels can be pre-defined topics or simply documents that you feel belong together regardless of their content. BERTopic will nudge the creation of topics toward these categories using the pre-defined labels. To perform supervised topic modeling, we simply use all categories: diff --git a/docs/getting_started/supervised/supervised.md b/docs/getting_started/supervised/supervised.md index 3362ca97..8ed7ed3b 100644 --- a/docs/getting_started/supervised/supervised.md +++ b/docs/getting_started/supervised/supervised.md @@ -22,7 +22,7 @@ Instead, we are now going to skip over the dimensionality reduction step and rep

-In other words, we can pass our labels to BERTopic and it will not only learn how to predict labels for new instances, it also transforms those labels into topics by running the c-TF-IDF representations on the set of documents within each label. This process allows us to model the topics themselves and similarly gives us the option to use everything BERTopic has to offer. +In other words, we can pass our labels to BERTopic and it will not only learn how to predict labels for new instances, but it also transforms those labels into topics by running the c-TF-IDF representations on the set of documents within each label. This process allows us to model the topics themselves and similarly gives us the option to use everything BERTopic has to offer. To do so, we need to skip over the dimensionality reduction step and replace the clustering step with a classification algorithm. We can use the documents and labels from the 20 NewsGroups dataset to create topics from those 20 labels: @@ -36,7 +36,7 @@ docs = data['data'] y = data['target'] ``` -Then, we make sure to create empty instances of the dimensionality reduction and clustering steps. We pass those to BERTopic in order to simply skip over them and go to the topic representation process: +Then, we make sure to create empty instances of the dimensionality reduction and clustering steps. We pass those to BERTopic to simply skip over them and go to the topic representation process: ```python @@ -73,7 +73,7 @@ Let's take a look at a few topics that we get out of training this way by runnin
-We can see a number of interesting topics appearing here. They seem to relate to the 20 classes we had as an input. Now, let's map those topics to our original classes in order to view their relationship: +We can see several interesting topics appearing here. They seem to relate to the 20 classes we had as input. Now, let's map those topics to our original classes to view their relationship: ```python # Map input `y` to topics @@ -91,7 +91,7 @@ df
-We can see that the c-TF-IDF representations extracts the words that give a good representation of our input classes. This is all done directly from the labeling. A welcome side-effect is that we now have a classification algorithm that allows us to predict the topics of unseen data: +We can see that the c-TF-IDF representations extract the words that give a good representation of our input classes. This is all done directly from the labeling. A welcome side-effect is that we now have a classification algorithm that allows us to predict the topics of unseen data: ```python >>> topic, _ = topic_model.transform("this is a document about cars") @@ -111,7 +111,7 @@ We can see that the c-TF-IDF representations extracts the words that give a good Moreover, we can still perform BERTopic-specific features like dynamic topic modeling, topics per class, hierarchical topic modeling, modeling topic distributions, etc. !!! note - The resulting `topics` may be a different mapping from the `y` labels. In order to map `y` to `topics`, we can run the following: + The resulting `topics` may be a different mapping from the `y` labels. To map `y` to `topics`, we can run the following: ```python diff --git a/docs/getting_started/tips_and_tricks/tips_and_tricks.md b/docs/getting_started/tips_and_tricks/tips_and_tricks.md index 20cad98f..c90d63d8 100644 --- a/docs/getting_started/tips_and_tricks/tips_and_tricks.md +++ b/docs/getting_started/tips_and_tricks/tips_and_tricks.md @@ -21,6 +21,17 @@ vectorizer_model = CountVectorizer(stop_words="english") topic_model = BERTopic(vectorizer_model=vectorizer_model) ``` +We can also use the `ClassTfidfTransformer` to reduce the impact of frequent words. The end result is very similar to explictly removing stopwords but this process does this automatically: + +```python +from bertopic import BERTopic +from bertopic.vectorizers import ClassTfidfTransformer + +ctfidf_model = ClassTfidfTransformer(reduce_frequent_words=True) +topic_model = BERTopic(ctfidf_model=ctfidf_model) +``` + + ## **Diversify topic representation** After having calculated our top *n* words per topic there might be many words that essentially mean the same thing. As a little bonus, we can use the `diversity` parameter in BERTopic to diff --git a/docs/getting_started/topicreduction/topicreduction.md b/docs/getting_started/topicreduction/topicreduction.md index 3e5dc2f6..00cd48d9 100644 --- a/docs/getting_started/topicreduction/topicreduction.md +++ b/docs/getting_started/topicreduction/topicreduction.md @@ -1,11 +1,10 @@ BERTopic uses HDSCAN for clustering the data and it cannot specify the number of clusters you would want. To a certain extent, -this is an advantage, as we can trust HDBSCAN to be better in finding the number of clusters than we are. +this is an advantage, as we can trust HDBSCAN to be better at finding the number of clusters than we are. Instead, we can try to reduce the number of topics that have been created. Below, you will find three methods of doing so. ### **Manual Topic Reduction** -Each resulting topic has its own -feature vector constructed from c-TF-IDF. Using those feature vectors, we can find the most similar +Each resulting topic has its feature vector constructed from c-TF-IDF. Using those feature vectors, we can find the most similar topics and merge them. If we do this iteratively, starting from the least frequent topic, we can reduce the number of topics quite easily. We do this until we reach the value of `nr_topics`: ```python @@ -44,9 +43,7 @@ topic_model = BERTopic(nr_topics="auto") ``` ### **Topic Reduction after Training** -Finally, we can also reduce the number of topics after having trained a BERTopic model. The advantage of doing so, -is that you can decide the number of topics after knowing how many are created. It is difficult to -predict before training your model how many topics that are in your documents and how many will be extracted. +Finally, we can also reduce the number of topics after having trained a BERTopic model. The advantage of doing so is that you can decide the number of topics after knowing how many are created. It is difficult to predict before training your model how many topics that are in your documents and how many will be extracted. Instead, we can decide afterward how many topics seem realistic: ```python diff --git a/docs/getting_started/topicrepresentation/topicrepresentation.md b/docs/getting_started/topicrepresentation/topicrepresentation.md index 91f3f630..ce515aa9 100644 --- a/docs/getting_started/topicrepresentation/topicrepresentation.md +++ b/docs/getting_started/topicrepresentation/topicrepresentation.md @@ -34,7 +34,7 @@ From the model created above, one of the most frequent topics is the following: ('amanda intercon com', 0.002585262048515583)] ``` -Although there does seem to be some relation between words, it is difficult, at least for me, to intuitively understand +Although there does seems to be some relation between words, it is difficult, at least for me, to intuitively understand what the topic is about. Instead, let's simplify the topic representation by setting `n_gram_range` to (1, 3) to also allow for single words. @@ -64,14 +64,14 @@ topic_model.update_topics(docs, vectorizer_model=vectorizer_model) ``` !!! Tip "Tip!" - If you want to change the topics to something else, whether that is merging them or removing outliers, you can pass in - a custom list of topics in order to update them: `topic_model.update_topics(docs, topics=my_updated_topics)` + If you want to change the topics to something else, whether that is merging them or removing outliers, you can pass + a custom list of topics to update them: `topic_model.update_topics(docs, topics=my_updated_topics)` ### **Custom labels** The topic labels are currently automatically generated by taking the top 3 words and combining them using the `_` separator. Although this is an informative label, in practice, this is definitely not the prettiest nor necessarily the most accurate label. For example, although the topic label -`1_space_nasa_orbit` is informative, we would prefer to have a bit more intuitive label, such as +`1_space_nasa_orbit` is informative, but we would prefer to have a bit more intuitive label, such as `space travel`. The difficulty with creating such topic labels is that much of the interpretation is left to the user. Would `space travel` be more accurate or perhaps `space explorations`? To truly understand which labels are most suited, going into some of the documents in topics is especially helpful. Although we can go through every single topic ourselves and try to label them, we can start by creating an overview of labels that have the length and number of words that we are looking for. To do so, we can generate our list of topic labels with `.get_topic_labels` and define the number of words, the separator, word length, etc: diff --git a/docs/getting_started/topicsovertime/topicsovertime.md b/docs/getting_started/topicsovertime/topicsovertime.md index 3f0f5b55..ee9afa35 100644 --- a/docs/getting_started/topicsovertime/topicsovertime.md +++ b/docs/getting_started/topicsovertime/topicsovertime.md @@ -16,7 +16,7 @@ aspect in the data. Thus, a general topic model will be created. We use the glob Next, there are two main ways to further fine-tune these specific topic representations, namely **globally** and **evolutionary**. -A topic representation at timestep *t* can fine-tuned **globally** by averaging its c-TF-IDF representation with that of the global representation. This allows each topic representation to move slightly towards the global representation whilst still keeping some its specific words. +A topic representation at timestep *t* can be fine-tuned **globally** by averaging its c-TF-IDF representation with that of the global representation. This allows each topic representation to move slightly towards the global representation whilst still keeping some of its specific words. A topic representation at timestep *t* can be fine-tuned **evolutionary** by averaging its c-TF-IDF representation with that of the c-TF-IDF representation at timestep *t-1*. This is done for each topic representation allowing for the representations to evolve over time. @@ -28,7 +28,7 @@ modeling on Twitter data. We can analyze how certain people have talked about ce they have been on Twitter. Due to the controversial nature of his tweets, we are going to be using all tweets by Donald Trump. -First, we need to load in the data and do some very basic cleaning. For example, I am not interested in his +First, we need to load the data and do some very basic cleaning. For example, I am not interested in his re-tweets for this use-case: ```python @@ -55,7 +55,7 @@ topics, probs = topic_model.fit_transform(tweets) ``` From these topics, we are going to generate the topic representations at each timestamp for each topic. We do this -by simply calling `topics_over_time` and pass in his tweets, the corresponding timestamps, and the related topics: +by simply calling `topics_over_time` and passing the tweets, the corresponding timestamps, and the related topics: ```python topics_over_time = topic_model.topics_over_time(tweets, timestamps, nr_bins=20) @@ -98,7 +98,7 @@ topics_over_time = topic_model.topics_over_time(tweets, timestamps, datetime_for ## **Visualization** To me, DTM becomes truly interesting when you have a good way of visualizing how topics have changed over time. -A nice way of doing so is leveraging the interactive abilities of Plotly. Plotly allows us to show the frequency +A nice way of doing so is by leveraging the interactive abilities of Plotly. Plotly allows us to show the frequency of topics over time whilst giving the option of hovering over the points to show the time-specific topic representations. Simply call `visualize_topics_over_time` with the newly created topics over time: diff --git a/docs/getting_started/vectorizers/vectorizers.md b/docs/getting_started/vectorizers/vectorizers.md index a5217c1d..7533555f 100644 --- a/docs/getting_started/vectorizers/vectorizers.md +++ b/docs/getting_started/vectorizers/vectorizers.md @@ -1,9 +1,9 @@ # Vectorizers -In topic modeling, the quality of the topic representations are key for interpreting the topics, communicating results, and understanding patterns. It is of utmost -importance to make sure that the topic representations fits with your use case. +In topic modeling, the quality of the topic representations is key for interpreting the topics, communicating results, and understanding patterns. It is of utmost +importance to make sure that the topic representations fit with your use case. -In practice, there is not one correct way of creating topic representations. Some use cases might opt more higher n-grams, whereas others might focus more on single +In practice, there is not one correct way of creating topic representations. Some use cases might opt for higher n-grams, whereas others might focus more on single words without any stop words. The diversity in use cases also means that we need to have some flexibility in BERTopic to make sure it can be used across most use cases. The image below illustrates this modularity: @@ -16,7 +16,7 @@ In this section, we will go through several examples of vectorization algorithms ## **CountVectorizer** -One often understimated component of BERTopic is the `CountVectorizer` and `c-TF-IDF` calculation. Together, they are responsible for creating the topic representations and luckily +One often underestimated component of BERTopic is the `CountVectorizer` and `c-TF-IDF` calculation. Together, they are responsible for creating the topic representations and luckily can be quite flexible in parameter tuning. Here, we will go through tips and tricks for tuning your `CountVectorizer` and see how they might affect the topic representations. Before starting, it should be noted that you can pass the `CountVectorizer` before and after training your topic model. Passing it before training allows you to @@ -57,7 +57,7 @@ on fine-tuning our topic representations after training our model. ### **Basic Usage** -First, let's start with defining our documents and train our topic model: +First, let's start with defining our documents and training our topic model: ```python from bertopic import BERTopic @@ -94,7 +94,7 @@ them to the topic representation above. ### **Parameters** -There are a number of basic parameters in the CountVectorizer that we can use to improve upon the quality of the resulting topic representations. +There are several basic parameters in the CountVectorizer that we can use to improve upon the quality of the resulting topic representations. #### ngram_range @@ -148,7 +148,7 @@ Although they look very similar, if we zoom in on topic 8, we can see longer wor #### stop_words In some of the topics, we can see stop words appearing like `he` or `the`. -Stop words is something we typically want to prevent in our topic representations as they do not give additional information to the topic. +Stop words are something we typically want to prevent in our topic representations as they do not give additional information to the topic. To prevent those stop words, we can use the `stop_words` parameter in the `CountVectorizer` to remove them from the representations: ```python @@ -182,11 +182,11 @@ We can also pass in a list of stop words if you have multiple languages to take One important parameter to keep in mind is the `min_df`. This is typically an integer representing how frequent a word must be before being added to our representation. You can imagine that if we have a million documents and a certain word only appears a single time across all of them, then -it would be highly unlikely to be representive of a topic. Typically, the `c-TF-IDF` calculation removes that word from the topic representation but when -you have millions of documents, that will also lead to very large topic-term matrix. To prevent a huge vocabulary, we can set the `min_df` to only accept +it would be highly unlikely to be representative of a topic. Typically, the `c-TF-IDF` calculation removes that word from the topic representation but when +you have millions of documents, that will also lead to a very large topic-term matrix. To prevent a huge vocabulary, we can set the `min_df` to only accept words that have a minimum frequency. -When you have millions of documents, or error issues, I would advise increasing the value of `min_df` as long as the topic representations might sense: +When you have millions of documents or error issues, I would advise increasing the value of `min_df` as long as the topic representations might sense: ```python from sklearn.feature_extraction.text import CountVectorizer @@ -211,14 +211,14 @@ With the following topic representation: 10 9 174 9_audio_condition_stereo_asking ``` -As you can see, the output is nearly the same which is actually what we would like to achieve. All words that appear less than 10 times are now removed +As you can see, the output is nearly the same which is what we would like to achieve. All words that appear less than 10 times are now removed from our topic-term matrix (i.e., `c-TF-IDF` matrix) which drastically lowers the matrix in size. #### max_features A parameter similar to `min_df` is `max_features` which allows you to select the top n most frequent words to be used in the topic representation. -Setting this to, for example, `10_000` creates a topic-term matrix with `10_000` terms. This helps you control the size of the topic-term matrix +Setting this, for example, to `10_000` creates a topic-term matrix with `10_000` terms. This helps you control the size of the topic-term matrix directly without having to fiddle around with the `min_df` parameter: ```python @@ -263,7 +263,7 @@ def tokenize_zh(text): vectorizer = CountVectorizer(tokenizer=tokenize_zh) ``` -Then, we can simply pass the vectorizer update our topic representations: +Then, we can simply pass the vectorizer to update our topic representations: ```python topic_model.update_topics(docs, vectorizer_model=vectorizer_model) @@ -272,7 +272,7 @@ topic_model.update_topics(docs, vectorizer_model=vectorizer_model) ## **OnlineCountVectorizer** -When using the online/incremental variant of BERTopic, we need a `CountVectorizer` than can incrementally update its representation. For that purpose, `OnlineCountVectorizer` was created that not only updates out-of-vocabulary words but also implements decay and cleaning functions to prevent the sparse bag-of-words matrix to become too large in size. It is a class that can be found in `bertopic.vectorizers` which extends `sklearn.feature_extraction.text.CountVectorizer`. In other words, you can use the exact same parameter in `OnlineCountVectorizer` as found in Scikit-Learn's `CountVectorizer`. We can use it as follows: +When using the online/incremental variant of BERTopic, we need a `CountVectorizer` than can incrementally update its representation. For that purpose, `OnlineCountVectorizer` was created that not only updates out-of-vocabulary words but also implements decay and cleaning functions to prevent the sparse bag-of-words matrix to become too large. It is a class that can be found in `bertopic.vectorizers` which extends `sklearn.feature_extraction.text.CountVectorizer`. In other words, you can use the exact same parameter in `OnlineCountVectorizer` as found in Scikit-Learn's `CountVectorizer`. We can use it as follows: ```python from bertopic import BERTopic @@ -289,13 +289,13 @@ Other than parameters found in `CountVectorizer`, such as `stop_words` and `ngr #### decay -At each iteration, we sum the bag-of-words representation of the new documents with the bag-of-words representation of all documents processed thus far. In other words, the bag-of-words matrix keeps increasing with each iteration. However, especially in a streaming setting, older documents might become less and less relevant as time goes on. Therefore, a `decay` parameter was implemented that decays the bag-of-words's frequencies at each iteration before adding the document frequencies of new documents. The `decay` parameter is a value between 0 and 1 and indicates the percentage of frequencies the previous bag-of-words matrix should be reduced to. For example, a value of `.1` will decrease the frequencies in the bag-of-words matrix with 10% at each iteration before adding the new bag-of-words matrix. This will make sure that recent data has more weight than previously iterations. +At each iteration, we sum the bag-of-words representation of the new documents with the bag-of-words representation of all documents processed thus far. In other words, the bag-of-words matrix keeps increasing with each iteration. However, especially in a streaming setting, older documents might become less and less relevant as time goes on. Therefore, a `decay` parameter was implemented that decays the bag-of-words' frequencies at each iteration before adding the document frequencies of new documents. The `decay` parameter is a value between 0 and 1 and indicates the percentage of frequencies the previous bag-of-words matrix should be reduced to. For example, a value of `.1` will decrease the frequencies in the bag-of-words matrix by 10% at each iteration before adding the new bag-of-words matrix. This will make sure that recent data has more weight than previous iterations. #### delete_min_df -In BERTopic, we might want to remove words from the topic representation that ppear infrequently. The `min_df` in the `CountVectorizer` works quite well for that. However, when have a streaming setting, the `min_df` does not work as well since a word's frequency might start below `min_df` but will end up higher than that over time. Setting that value high might not always be advised. +In BERTopic, we might want to remove words from the topic representation that appear infrequently. The `min_df` in the `CountVectorizer` works quite well for that. However, when we have a streaming setting, the `min_df` does not work as well since a word's frequency might start below `min_df` but will end up higher than that over time. Setting that value high might not always be advised. -As a result, the vocabulary of the resulting bag-of-words matrix can become quite large. Similarly, if we implement the `decay` parameter, then some values will actually decrease over time until they are below `min_df`. For these reasons, the `delete_min_df` parameter was implemented. The parameter takes positive integers and indicates, at each iteration, which words will be removed. If the value is set to 5, it will check after each iteration if the total frequency of a word is exceed by that value. If so, the word will be removed in its entirety from the bag-of-words matrix. This helps to keep the bag-of-words matrix of a manageble size. +As a result, the vocabulary of the resulting bag-of-words matrix can become quite large. Similarly, if we implement the `decay` parameter, then some values will decrease over time until they are below `min_df`. For these reasons, the `delete_min_df` parameter was implemented. The parameter takes positive integers and indicates, at each iteration, which words will be removed. If the value is set to 5, it will check after each iteration if the total frequency of a word is exceeded by that value. If so, the word will be removed in its entirety from the bag-of-words matrix. This helps to keep the bag-of-words matrix of a manageable size. !!! note - Although the `delete_min_df` parameter removes words from the bag-of-words matrix, it is not permament. If new documents come in where those previously deleted words are used frequently, they get added back to the matrix. \ No newline at end of file + Although the `delete_min_df` parameter removes words from the bag-of-words matrix, it is not permanent. If new documents come in where those previously deleted words are used frequently, they get added back to the matrix. \ No newline at end of file diff --git a/docs/getting_started/visualization/visualization.md b/docs/getting_started/visualization/visualization.md index c3efebe0..48551f40 100644 --- a/docs/getting_started/visualization/visualization.md +++ b/docs/getting_started/visualization/visualization.md @@ -1,10 +1,10 @@ -Visualizing BERTopic and its derivatives is important in understanding the model, how it works, but more importantly, where it works. +Visualizing BERTopic and its derivatives is important in understanding the model, how it works, and more importantly, where it works. Since topic modeling can be quite a subjective field it is difficult for users to validate their models. Looking at the topics and seeing if they make sense is an important factor in alleviating this issue. ## **Visualize Topics** After having trained our `BERTopic` model, we can iteratively go through hundreds of topics to get a good -understanding of the topics that were extract. However, that takes quite some time and lacks a global representation. +understanding of the topics that were extracted. However, that takes quite some time and lacks a global representation. Instead, we can visualize the topics that were generated in a way very similar to [LDAvis](https://github.com/cpsievert/LDAvis). @@ -22,7 +22,7 @@ topic_model = BERTopic() topics, probs = topic_model.fit_transform(docs) ``` -Then, we can use call `.visualize_topics` to create a 2D representation of your topics. The resulting graph is a +Then, we can call `.visualize_topics` to create a 2D representation of your topics. The resulting graph is a plotly interactive graph which can be converted to HTML: ```python @@ -75,7 +75,7 @@ topic_model.visualize_documents(docs, reduced_embeddings=reduced_embeddings) ## **Visualize Topic Hierarchy** The topics that were created can be hierarchically reduced. In order to understand the potential hierarchical structure of the topics, we can use `scipy.cluster.hierarchy` to create clusters and visualize how -they relate to one another. This might help selecting an appropriate `nr_topics` when reducing the number +they relate to one another. This might help to select an appropriate `nr_topics` when reducing the number of topics that you have created. To visualize this hierarchy, run the following: ```python @@ -117,7 +117,7 @@ topic_model.visualize_hierarchy(hierarchical_topics=hierarchical_topics) If you **hover** over the black circles, you will see the topic representation at that level of the hierarchy. These representations -help you understand the effect of merging certain topics together. Some might be logical to merge whilst others might not. Moreover, +help you understand the effect of merging certain topics. Some might be logical to merge whilst others might not. Moreover, we can now see which sub-topics can be found within certain larger themes. ### **Text-based topic tree** @@ -397,7 +397,7 @@ to view, we can see better which topics could be logically merged: ## **Visualize Hierarchical Documents** We can extend the previous method by calculating the topic representation at different levels of the hierarchy and -plotting them on a 2D-plane. To do so, we first need to calculate the hierarchical topics: +plotting them on a 2D plane. To do so, we first need to calculate the hierarchical topics: ```python from sklearn.datasets import fetch_20newsgroups @@ -431,7 +431,7 @@ topic_model.visualize_hierarchical_documents(docs, hierarchical_topics, reduced_ !!! note The visualization above was generated with the additional parameter `hide_document_hover=True` which disables the option to hover over the individual points and see the content of the documents. This makes the resulting visualization - smaller and fit into your RAM. However, it might be interesting to set `hide_document_hover=False` in order to hover + smaller and fit into your RAM. However, it might be interesting to set `hide_document_hover=False` to hover over the points and see the content of the documents. ## **Visualize Terms** @@ -567,25 +567,37 @@ topic_model.visualize_topics_per_class(topics_per_class) -## **Visualize Probablities** -We can also calculate the probabilities of topics found in a document. In order to do so, we have to -set `calculate_probabilities` to True as calculating them can be quite computationally expensive. -Then, we use the variable `probabilities` that is returned from `transform()` or `fit_transform()` -to understand how confident BERTopic is that certain topics can be found in a document: +## **Visualize Probablities or Distribution** + +We can generate the topic-document probability matrix by simply setting `calculate_probabilities=True` if a HDBSCAN model is used: ```python from bertopic import BERTopic -from sklearn.datasets import fetch_20newsgroups - -docs = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))['data'] topic_model = BERTopic(calculate_probabilities=True) -topics, probabilities = topic_model.fit_transform(docs) +topics, probs = topic_model.fit_transform(docs) ``` -To visualize the distributions, run the following: +The resulting `probs` variable contains the soft-clustering as done through HDBSCAN. + +If a non-HDBSCAN model is used, we can estimate the topic distributions after training our model: ```python -topic_model.visualize_distribution(probabilities[0]) +from bertopic import BERTopic + +topic_model = BERTopic() +topics, _ = topic_model.fit_transform(docs) +topic_distr, _ = topic_model.approximate_distribution(docs, min_similarity=0) +``` + +Then, we either pass the `probs` or `topic_distr` variable to `.visualize_distribution` to visualize either the probability distributions or the topic distributions: + + +```python +# To visualize the probabilities of topic assignment +topic_model.visualize_distribution(probs[0]) + +# To visualize the topic distributions in a document +topic_model.visualize_distribution(topic_distr[0]) ``` diff --git a/docs/index.md b/docs/index.md index 8d27b4cd..7ea3783c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -84,7 +84,7 @@ frequent topic that was generated, topic 0: ## **Overview** -BERTopic has quite a number of functions that quickly can become overwhelming. To alleviate this issue, you will find an overview +BERTopic has many functions that quickly can become overwhelming. To alleviate this issue, you will find an overview of all methods and a short description of its purpose. ### Common @@ -112,7 +112,7 @@ Below, you will find an overview of common functions in BERTopic. ### Attributes -After having trained your BERTopic model, a number of attributes are saved within your model. These attributes, in part, +After having trained your BERTopic model, several are saved within your model. These attributes, in part, refer to how model information is stored on an estimator during fitting. The attributes that you see below all end in `_` and are public attributes that can be used to access model information. @@ -131,8 +131,7 @@ public attributes that can be used to access model information. ### Variations -There are many different use cases in which topic modeling can be used. As such, a number of -variations of BERTopic have been developed such that one package can be used across many use cases. +There are many different use cases in which topic modeling can be used. As such, several variations of BERTopic have been developed such that one package can be used across many use cases. | Method | Code | |-----------------------|---| From 79c4a44d4ec3e6842b93f3d860959d564608a0af Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 29 Nov 2022 13:05:25 +0100 Subject: [PATCH 21/51] Fix #807 --- bertopic/_bertopic.py | 7 +++++++ bertopic/plotting/_hierarchy.py | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index b0a83c43..fe78ef0a 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -18,6 +18,7 @@ from packaging import version from scipy.sparse import csr_matrix from scipy.cluster import hierarchy as sch +from scipy.spatial.distance import squareform from typing import List, Tuple, Union, Mapping, Any, Callable, Iterable # Models @@ -860,6 +861,12 @@ def hierarchical_topics(self, # Calculate linkage embeddings = self.c_tf_idf_[self._outliers:] X = distance_function(embeddings) + + # Make sure it is the 1-D condensed distance matrix with zeros on the diagonal + np.fill_diagonal(X, 0) + X = squareform(X) + + # Use the 1-D condensed distance matrix as an input instead of the raw distance matrix Z = linkage_function(X) # Calculate basic bag-of-words to be iteratively merged later diff --git a/bertopic/plotting/_hierarchy.py b/bertopic/plotting/_hierarchy.py index 237ae678..364c582c 100644 --- a/bertopic/plotting/_hierarchy.py +++ b/bertopic/plotting/_hierarchy.py @@ -3,6 +3,7 @@ from typing import Callable, List from scipy.sparse import csr_matrix from scipy.cluster import hierarchy as sch +from scipy.spatial.distance import squareform from sklearn.metrics.pairwise import cosine_similarity import plotly.graph_objects as go @@ -225,8 +226,14 @@ def _get_annotations(topic_model, """ df = hierarchical_topics.loc[hierarchical_topics.Parent_Name != "Top", :] - # Calculate linkage + # Calculate distance X = distance_function(embeddings) + + # Make sure it is the 1-D condensed distance matrix with zeros on the diagonal + np.fill_diagonal(X, 0) + X = squareform(X) + + # Calculate linkage and generate dendrogram Z = linkage_function(X) P = sch.dendrogram(Z, orientation=orientation, no_plot=True) From fd9f22b99f86afec33e9a0fedd2737f5e9ced8f7 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 29 Nov 2022 13:28:26 +0100 Subject: [PATCH 22/51] Up HDBSCAN version and fix #782 --- bertopic/_bertopic.py | 2 +- bertopic/plotting/_heatmap.py | 10 ++++------ docs/getting_started/visualization/visualization.md | 1 - setup.py | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index fe78ef0a..1c2eaa95 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -858,7 +858,7 @@ def hierarchical_topics(self, if linkage_function is None: linkage_function = lambda x: sch.linkage(x, 'ward', optimal_ordering=True) - # Calculate linkage + # Calculate distance embeddings = self.c_tf_idf_[self._outliers:] X = distance_function(embeddings) diff --git a/bertopic/plotting/_heatmap.py b/bertopic/plotting/_heatmap.py index b4358f48..545d24cb 100644 --- a/bertopic/plotting/_heatmap.py +++ b/bertopic/plotting/_heatmap.py @@ -54,9 +54,9 @@ def visualize_heatmap(topic_model, # Select topic embeddings if topic_model.topic_embeddings_ is not None: - embeddings = np.array(topic_model.topic_embeddings_) + embeddings = np.array(topic_model.topic_embeddings_)[topic_model._outliers:] else: - embeddings = topic_model.c_tf_idf_ + embeddings = topic_model.c_tf_idf_[topic_model._outliers:] # Select topics based on top_n and topics args freq_df = topic_model.get_topic_freq() @@ -69,13 +69,13 @@ def visualize_heatmap(topic_model, topics = sorted(freq_df.Topic.to_list()) # Order heatmap by similar clusters of topics + sorted_topics = topics if n_clusters: if n_clusters >= len(set(topics)): raise ValueError("Make sure to set `n_clusters` lower than " "the total number of unique topics.") - embeddings = embeddings[[topic + topic_model._outliers for topic in topics]] - distance_matrix = cosine_similarity(embeddings) + distance_matrix = cosine_similarity(embeddings[topics]) Z = linkage(distance_matrix, 'ward') clusters = fcluster(Z, t=n_clusters, criterion='maxclust') @@ -85,8 +85,6 @@ def visualize_heatmap(topic_model, mapping[cluster].append(topic) mapping = [cluster for cluster in mapping.values()] sorted_topics = [topic for cluster in mapping for topic in cluster] - else: - sorted_topics = topics # Select embeddings indices = np.array([topics.index(topic) for topic in sorted_topics]) diff --git a/docs/getting_started/visualization/visualization.md b/docs/getting_started/visualization/visualization.md index 48551f40..d3a5e915 100644 --- a/docs/getting_started/visualization/visualization.md +++ b/docs/getting_started/visualization/visualization.md @@ -591,7 +591,6 @@ topic_distr, _ = topic_model.approximate_distribution(docs, min_similarity=0) Then, we either pass the `probs` or `topic_distr` variable to `.visualize_distribution` to visualize either the probability distributions or the topic distributions: - ```python # To visualize the probabilities of topic assignment topic_model.visualize_distribution(probs[0]) diff --git a/setup.py b/setup.py index 320b01ba..ac9ee2db 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ base_packages = [ "numpy>=1.20.0", - "hdbscan>=0.8.28", + "hdbscan>=0.8.29", "umap-learn>=0.5.0", "pandas>=1.1.5", "scikit-learn>=0.22.2.post1", From a7927a2f7c3d18701ad275bdc232d00a21ca8baa Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 29 Nov 2022 13:37:43 +0100 Subject: [PATCH 23/51] Fix #744 --- bertopic/backend/_spacy.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/bertopic/backend/_spacy.py b/bertopic/backend/_spacy.py index 3865c7d1..7ef9e1a2 100644 --- a/bertopic/backend/_spacy.py +++ b/bertopic/backend/_spacy.py @@ -83,17 +83,21 @@ def embed(self, except: embedding = self.embedding_model("An empty document")._.trf_data.tensors[-1][0].tolist() embeddings.append(embedding) - embeddings = np.array(embeddings) # Extract embeddings from a general spacy model else: embeddings = [] for doc in tqdm(documents, position=0, leave=True, disable=not verbose): try: - vector = self.embedding_model(doc).vector + embedding = self.embedding_model(doc).vector except ValueError: - vector = self.embedding_model("An empty document").vector - embeddings.append(vector) + embedding = self.embedding_model("An empty document").vector + embeddings.append(embedding) + + # Convert to numpy arrays depending on whether cupy was used or not + if isinstance(embedding, np.ndarray): embeddings = np.array(embeddings) + else: + embeddings = np.array([embedding.get() for embedding in embeddings]) return embeddings From 57963cf7355c3f17ed34376a5d5dfd5aabd4583a Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 29 Nov 2022 14:02:41 +0100 Subject: [PATCH 24/51] Fix #703 --- bertopic/_bertopic.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 1c2eaa95..7487b679 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -134,7 +134,8 @@ def __init__(self, NOTE: This param will not be used if you pass in your own CountVectorizer. min_topic_size: The minimum size of the topic. Increasing this value will lead - to a lower number of clusters/topics. + to a lower number of clusters/topics. + NOTE: This param will not be used if you are not using HDBSCAN. nr_topics: Specifying the number of topics will reduce the initial number of topics to the value specified. This reduction can take a while as each reduction in topics (-1) activates a c-TF-IDF @@ -179,6 +180,7 @@ def __init__(self, # Topic-based parameters if top_n_words > 30: raise ValueError("top_n_words should be lower or equal to 30. The preferred value is 10.") + self.top_n_words = top_n_words self.min_topic_size = min_topic_size self.nr_topics = nr_topics @@ -2716,6 +2718,12 @@ def _save_representative_docs(self, documents: pd.DataFrame): Arguments: documents: Dataframe with documents and their corresponding IDs """ + smallest_cluster_size = min(self.topic_sizes_.items(), key=lambda x: x[1]) + if smallest_cluster_size < 3: + top_n_representative_docs = smallest_cluster_size + else: + top_n_representative_docs = 3 + if isinstance(self.hdbscan_model, hdbscan.HDBSCAN): # Prepare the condensed tree and luf clusters beneath a given cluster condensed_tree = self.hdbscan_model.condensed_tree_ @@ -2735,7 +2743,7 @@ def _save_representative_docs(self, documents: pd.DataFrame): points = raw_tree['child'][(raw_tree['parent'] == leaf) & (raw_tree['lambda_val'] == max_lambda)] result = np.hstack((result, points)) - representative_docs[topic] = list(np.random.choice(result, 3, replace=False).astype(int)) + representative_docs[topic] = list(np.random.choice(result, top_n_representative_docs, replace=False).astype(int)) # Convert indices to documents self.representative_docs_ = {topic: [documents.iloc[doc_id].Document for doc_id in doc_ids] @@ -2753,7 +2761,8 @@ def _save_representative_docs(self, documents: pd.DataFrame): sim_matrix = cosine_similarity(ctfidf, self.c_tf_idf_[topic + self._outliers]) # Extract top 3 most representative documents - indices = np.argpartition(sim_matrix.reshape(1, -1)[0], -3)[-3:] + indices = np.argpartition(sim_matrix.reshape(1, -1)[0], + -top_n_representative_docs)[-top_n_representative_docs:] self.representative_docs_[topic] = [selected_docs[index] for index in indices] def _map_representative_docs(self, original_topics: bool = False): From 5466255eb58fbfba064e545db2d35689ad21f5b0 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 29 Nov 2022 14:03:31 +0100 Subject: [PATCH 25/51] Correct index --- bertopic/_bertopic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 7487b679..67ae8c75 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -2718,7 +2718,7 @@ def _save_representative_docs(self, documents: pd.DataFrame): Arguments: documents: Dataframe with documents and their corresponding IDs """ - smallest_cluster_size = min(self.topic_sizes_.items(), key=lambda x: x[1]) + smallest_cluster_size = min(self.topic_sizes_.items(), key=lambda x: x[1])[1] if smallest_cluster_size < 3: top_n_representative_docs = smallest_cluster_size else: From d183bb1c0cea8178012d27902814c35640313970 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 29 Nov 2022 14:20:26 +0100 Subject: [PATCH 26/51] Fix #837 by updating the documentation --- docs/getting_started/online/online.md | 32 +++++++++++++++------------ 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/docs/getting_started/online/online.md b/docs/getting_started/online/online.md index 94b072df..deb7451b 100644 --- a/docs/getting_started/online/online.md +++ b/docs/getting_started/online/online.md @@ -53,9 +53,6 @@ cluster_model = MiniBatchKMeans(n_clusters=50, random_state=0) vectorizer_model = OnlineCountVectorizer(stop_words="english", decay=.01) ``` -!!! tip Tip - You can use any other dimensionality reduction and clustering algorithm as long as they have a `.partial_fit` function. Moreover, you can use dimensionality reduction algorithms that do not support `.partial_fit` functions but do have a `.fit` function to first train it on a large amount of data and then continuously add documents. The dimensionality reduction will not be updated but may be trained sufficiently to properly reduce the embeddings without the need to continuously add documents. - After having defined our sub-models, we can start training our topic model incrementally by looping over our document chunks: ```python @@ -70,21 +67,28 @@ for docs in doc_chunks: topic_model.partial_fit(docs) ``` -And that is it! During each iteration, you can access the predicted topics through the `.topics_` attribute. Do note though that only the most recent batch of documents is tracked. If you want to be using online topic modeling for low-memory use cases, then it is advised to also update the `.topics_` attribute. Otherwise, variations such as hierarchical topic modeling will not work. - -```python -# Incrementally fit the topic model by training on 1000 documents at a time and track the topics in each iteration -topics = [] -for docs in doc_chunks: - topic_model.partial_fit(docs) - topics.extend(topic_model.topics_) - -topic_model.topics_ = topics -``` +And that is it! During each iteration, you can access the predicted topics through the `.topics_` attribute. !!! note Do note that in BERTopic it is not possible to use `.partial_fit` after the `.fit` as they work quite differently concerning internally updating topics, frequencies, representations, etc. +!!! tip Tip + You can use any other dimensionality reduction and clustering algorithm as long as they have a `.partial_fit` function. Moreover, you can use dimensionality reduction algorithms that do not support `.partial_fit` functions but do have a `.fit` function to first train it on a large amount of data and then continuously add documents. The dimensionality reduction will not be updated but may be trained sufficiently to properly reduce the embeddings without the need to continuously add documents. + +!!! warning + Only the most recent batch of documents is tracked. If you want to be using online topic modeling for low-memory use cases, then it is advised to also update the `.topics_` attribute. Otherwise, variations such as **hierarchical topic modeling** will not work. + + ```python + # Incrementally fit the topic model by training on 1000 documents at a time and track the topics in each iteration + topics = [] + for docs in doc_chunks: + topic_model.partial_fit(docs) + topics.extend(topic_model.topics_) + + topic_model.topics_ = topics + ``` + + ## **River** To continuously find new topics as they come in, we can use the package [river](https://github.com/online-ml/river). It contains several clustering models that can create new clusters as new data comes in. To make sure we can use their models, we first need to create a class that has a `.partial_fit` function and the option to extract labels through `.labels_`: From e93823d68f8c018c1ba6a154f220bd96e4fedc96 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Thu, 1 Dec 2022 14:39:19 +0100 Subject: [PATCH 27/51] Update documentation and allow for skipping over embedding with a model instead of zero numpy vectors --- README.md | 58 +---- bertopic/_bertopic.py | 3 +- docs/getting_started/clustering/clustering.md | 2 +- .../dim_reduction/default_pipeline.svg | 18 ++ .../dim_reduction/dim_reduction.md | 31 ++- .../dim_reduction/no_dimensionality.svg | 14 + docs/getting_started/manual/manual.md | 15 +- images/clusters.png | Bin 882697 -> 0 bytes images/modularity.svg | 240 ++++++++++++++++++ images/probabilities.png | Bin 198858 -> 0 bytes images/topics.png | Bin 46450 -> 0 bytes 11 files changed, 326 insertions(+), 55 deletions(-) create mode 100644 docs/getting_started/dim_reduction/default_pipeline.svg create mode 100644 docs/getting_started/dim_reduction/no_dimensionality.svg delete mode 100644 images/clusters.png create mode 100644 images/modularity.svg delete mode 100644 images/probabilities.png delete mode 100644 images/topics.png diff --git a/README.md b/README.md index d1c37d93..56e8fd19 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,14 @@ allowing for easily interpretable topics whilst keeping important words in the t BERTopic supports [**guided**](https://maartengr.github.io/BERTopic/getting_started/guided/guided.html), -(semi-) [**supervised**](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html), +[**supervised**](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html), +[**semi-supervised**](https://maartengr.github.io/BERTopic/getting_started/semisupervised/semisupervised.html), +[**manual**](https://maartengr.github.io/BERTopic/getting_started/manual/manual.html), [**hierarchical**](https://maartengr.github.io/BERTopic/getting_started/hierarchicaltopics/hierarchicaltopics.html), [**dynamic**](https://maartengr.github.io/BERTopic/getting_started/topicsovertime/topicsovertime.html), and [**online**](https://maartengr.github.io/BERTopic/getting_started/online/online.html) topic modeling. It even supports visualizations similar to LDAvis! -Corresponding medium posts can be found [here](https://towardsdatascience.com/topic-modeling-with-bert-779f7db187e6?source=friends_link&sk=0b5a470c006d1842ad4c8a3057063a99) -and [here](https://towardsdatascience.com/interactive-topic-modeling-with-bertopic-1ea55e7d73d8?sk=03c2168e9e74b6bda2a1f3ed953427e4). For a more detailed overview, you can read the [paper](https://arxiv.org/abs/2203.05794). +Corresponding medium posts can be found [here](https://towardsdatascience.com/topic-modeling-with-bert-779f7db187e6?source=friends_link&sk=0b5a470c006d1842ad4c8a3057063a99), [here](https://towardsdatascience.com/interactive-topic-modeling-with-bertopic-1ea55e7d73d8?sk=03c2168e9e74b6bda2a1f3ed953427e4) and [here](https://towardsdatascience.com/using-whisper-and-bertopic-to-model-kurzgesagts-videos-7d8a63139bdf?sk=b1e0fd46f70cb15e8422b4794a81161d). For a more detailed overview, you can read the [paper](https://arxiv.org/abs/2203.05794) or see a [brief overview](https://maartengr.github.io/BERTopic/algorithm/algorithm.html). ## Installation @@ -31,8 +32,7 @@ Installation, with sentence-transformers, can be done using [pypi](https://pypi. pip install bertopic ``` -You may want to install more depending on the transformers and language backends that you will be using. -The possible installations are: +If you want to install BERTopic with other embedding models, you can choose one of the following: ```bash pip install bertopic[flair] @@ -82,8 +82,8 @@ Topic Count Name 3 381 22_key_encryption_keys_encrypted ``` --1 refers to all outliers and should typically be ignored. Next, let's take a look at the most -frequent topic that was generated, topic 0: +The `-1` topic refers to all outlier documents and are typically ignored. Next, let's take a look at the most +frequent topic that was generated: ```python >>> topic_model.get_topic(0) @@ -100,7 +100,9 @@ frequent topic that was generated, topic 0: ('pc', 0.003047105930670237)] ``` -**NOTE**: Use `BERTopic(language="multilingual")` to select a model that supports 50+ languages. +> **Note** +> +> Use `BERTopic(language="multilingual")` to select a model that supports 50+ languages. ## Visualize Topics After having trained our BERTopic model, we can iteratively go through hundreds of topics to get a good @@ -114,48 +116,16 @@ topic_model.visualize_topics() -We can create an overview of the most frequent topics in a way that they are easily interpretable. -Horizontal bar charts typically convey information rather well and allow for an intuitive representation -of the topics: - -```python -topic_model.visualize_barchart() -``` - - - - Find all possible visualizations with interactive examples in the documentation [here](https://maartengr.github.io/BERTopic/getting_started/visualization/visualization.html). -## Embedding Models -BERTopic supports many embedding models that can be used to embed documents and words: -* Sentence-Transformers -* 🤗 Transformers -* Flair -* Spacy -* Gensim -* USE -[**Sentence-Transformers**](https://github.com/UKPLab/sentence-transformers) is typically used as it has shown great results in embedding documents -meant for semantic similarity. Simply select any from their documentation -[here](https://www.sbert.net/docs/pretrained_models.html) and pass it to BERTopic: +## Modularity +By default, the main steps for topic modeling with BERTopic are sentence-transformers, UMAP, HDBSCAN, and c-TF-IDF run in sequence. However, BERTopic assumes some independence between these steps which makes BERTopic quite modular. In other words, BERTopic essentially allows you to build your own topic model: -```python -topic_model = BERTopic(embedding_model="all-MiniLM-L6-v2") -``` - -Similarly, you can choose any [**🤗 Transformers**](https://huggingface.co/models) model and pass it to BERTopic: - -```python -from transformers.pipelines import pipeline - -embedding_model = pipeline("feature-extraction", model="distilbert-base-cased") -topic_model = BERTopic(embedding_model=embedding_model) -``` + -Click [here](https://maartengr.github.io/BERTopic/getting_started/embeddings/embeddings.html) -for a full overview of all supported embedding models. +You can swap out any of these models or even remove them entirely. Starting with the embedding step, you can find out how to do this [here](https://maartengr.github.io/BERTopic/getting_started/embeddings/embeddings.html) and more about the underlying algorithm and assumptions [here](https://maartengr.github.io/BERTopic/algorithm/algorithm.html). ## Overview BERTopic has many functions that quickly can become overwhelming. To alleviate this issue, you will find an overview diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 67ae8c75..81d68265 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -33,6 +33,7 @@ from bertopic import plotting from bertopic._mmr import mmr from bertopic.vectorizers import ClassTfidfTransformer +from bertopic.backend import BaseEmbedder from bertopic.backend._utils import select_backend from bertopic.cluster._utils import hdbscan_delegator, is_supported_hdbscan from bertopic._utils import MyLogger, check_documents_type, check_embeddings_shape, check_is_fitted @@ -2806,7 +2807,7 @@ def _create_topic_vectors(self): a sentence-transformer model to be used or there are custom embeddings but it is allowed to use a different multi-lingual sentence-transformer model """ - if self.embedding_model is not None: + if self.embedding_model is not None and type(self.embedding_model) is not BaseEmbedder: topic_list = list(self.topic_representations_.keys()) topic_list.sort() n = self.top_n_words diff --git a/docs/getting_started/clustering/clustering.md b/docs/getting_started/clustering/clustering.md index c5f6e383..79327837 100644 --- a/docs/getting_started/clustering/clustering.md +++ b/docs/getting_started/clustering/clustering.md @@ -107,4 +107,4 @@ The great thing about using cuML's HDBSCAN implementation is that it supports ma !!! note As of the v0.13 release, it is not yet possible to calculate the topic-document probability matrix for unseen data (i.e., `.transform`) using cuML's HDBSCAN. - However, it is still possible to calculate the topic-document probability matrix for the data on which the model was trained (i.e., `.fit` and `.fit_tranform`). \ No newline at end of file + However, it is still possible to calculate the topic-document probability matrix for the data on which the model was trained (i.e., `.fit` and `.fit_transform`). \ No newline at end of file diff --git a/docs/getting_started/dim_reduction/default_pipeline.svg b/docs/getting_started/dim_reduction/default_pipeline.svg new file mode 100644 index 00000000..30759e66 --- /dev/null +++ b/docs/getting_started/dim_reduction/default_pipeline.svg @@ -0,0 +1,18 @@ + + + +SBERT +UMAP +HDBSCAN +c-TF-IDF +Embeddings + +Dimensionality reduction + + +Clustering + + +Topic representation + + diff --git a/docs/getting_started/dim_reduction/dim_reduction.md b/docs/getting_started/dim_reduction/dim_reduction.md index 9ae89c4f..f113c72e 100644 --- a/docs/getting_started/dim_reduction/dim_reduction.md +++ b/docs/getting_started/dim_reduction/dim_reduction.md @@ -92,4 +92,33 @@ from cuml.manifold import UMAP umap_model = UMAP(n_components=5, n_neighbors=15, min_dist=0.0) topic_model = BERTopic(umap_model=umap_model) -``` \ No newline at end of file +``` + +## **Skip dimensionality reduction** +Although BERTopic applies dimensionality reduction as a default in its pipeline, this is a step that you might want to skip. We generate an "empty" model that simply returns the data pass it to: + +```python +from bertopic import BERTopic +from bertopic.dimensionality import BaseDimensionalityReduction + +# Fit BERTopic without actually performing any dimensionality reduction +empty_dimensionality_model = BaseDimensionalityReduction() +topic_model = BERTopic(umap_model=empty_dimensionality_model) +``` + +In other words, we go from this pipeline: + +
+
+--8<-- "docs/getting_started/dim_reduction/default_pipeline.svg" +
+
+ +To the following pipeline: + +
+
+--8<-- "docs/getting_started/dim_reduction/no_dimensionality.svg" +
+ +
\ No newline at end of file diff --git a/docs/getting_started/dim_reduction/no_dimensionality.svg b/docs/getting_started/dim_reduction/no_dimensionality.svg new file mode 100644 index 00000000..8a31b6f6 --- /dev/null +++ b/docs/getting_started/dim_reduction/no_dimensionality.svg @@ -0,0 +1,14 @@ + + + +SBERT +HDBSCAN +c-TF-IDF +Embeddings + +Clustering + + +Topic representation + + diff --git a/docs/getting_started/manual/manual.md b/docs/getting_started/manual/manual.md index 808b0aaa..709c4370 100644 --- a/docs/getting_started/manual/manual.md +++ b/docs/getting_started/manual/manual.md @@ -27,24 +27,25 @@ Then, we make sure to create empty instances of the dimensionality reduction and ```python from bertopic import BERTopic +from bertopic.backend import BaseEmbedder from bertopic.cluster import BaseCluster from bertopic.vectorizers import ClassTfidfTransformer from bertopic.dimensionality import BaseDimensionalityReduction -# Prepare our empty sub-models, empty embeddings, -# and reduce frequent words while we are at it. +# Prepare our empty sub-models and reduce frequent words while we are at it. +empty_embedding_model = BaseEmbedder() empty_dimensionality_model = BaseDimensionalityReduction() empty_cluster_model = BaseCluster() -empty_embeddings = np.zeros((len(docs), 1)) ctfidf_model = ClassTfidfTransformer(reduce_frequent_words=True) # Fit BERTopic without actually performing any clustering topic_model= BERTopic( - hdbscan_model=empty_cluster_model, + embedding_model=empty_embedding_model, umap_model=empty_dimensionality_model, + hdbscan_model=empty_cluster_model, ctfidf_model=ctfidf_model ) -topics, probs = topic_model.fit_transform(docs, empty_embeddings, y=y) +topics, probs = topic_model.fit_transform(docs, y=y) ``` Let's take a look at a few topics that we get out of training this way by running `topic_model.get_topic_info()`: @@ -53,7 +54,6 @@ Let's take a look at a few topics that we get out of training this way by runnin
--8<-- "docs/getting_started/manual/table.svg"
-
We can see several interesting topics appearing here. They seem to relate to the 20 classes we had as input. Now, let's map those topics to our original classes to view their relationship: @@ -68,14 +68,13 @@ df = topic_model.get_topic_info() df["Class"] = df.Topic.map(mappings) df ``` +
--8<-- "docs/getting_started/manual/table_classes.svg"
-
- We can see that the c-TF-IDF representations nicely extract the words that give a nice representation of our input classes. This is all done without actually embedding and clustering the data. As a result, the entire "training" process only takes a couple of seconds. Moreover, we can still perform BERTopic-specific features like dynamic topic modeling, topics per class, hierarchical topic modeling, modeling topic distributions, etc. diff --git a/images/clusters.png b/images/clusters.png deleted file mode 100644 index 80d2d32a498742f8a3ec8760528a4875879c7eab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882697 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

0{^b5NJH2Tu#A6W)h9s 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%0DT1c7tLSI2F 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%0DYL>CN&TNq<)b_j9RRYB&7}K5{J0 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

Py9_E5rL2 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 z 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 z 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�~$>E~aIqTmo}89_O>42^<~@>b4+% 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 ARR910 diff --git a/images/modularity.svg b/images/modularity.svg new file mode 100644 index 00000000..fb137685 --- /dev/null +++ b/images/modularity.svg @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + +SBERT + + + + + +SpaCy + + + + + +Transformers + + + + + + + + + + + + + + + + + + + + + + + + +UMAP + + + + + +PCA + + + + + +TruncatedSVD + + + + + + + + +HDBSCAN + + + + + +CountVectorizer + + + + + +Jieba + + + + + +POS + + + + + +k-Means + + + + + +BIRCH + + + + + + + + + + + + +Embeddings +Dimensionality Reduction +Clustering +Tokenizer +Weighting scheme + + + + + +SBERT + + + + + +UMAP + + + + + +HDBSCAN + + + + + +CountVectorizer + + + + + +c-TF-IDF + + + + + +c-TF-IDF + + + + + +c-TF-IDF + MMR + + + + + +c-TF-IDF + BM25 + + + + + +TF-IDF + + + + + +TruncatedSVD + + + + + +BIRCH + + + + + +CountVectorizer + + + + + +c-TF-IDF + MMR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/probabilities.png b/images/probabilities.png deleted file mode 100644 index 124ce60cd8e0771d0626bfe469c24e5a9ff3bf47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198858 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

rR1|&Y%^|-3L`trQpos-~8GiFW+M}?1^WA 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

%7`5Hg8uovnN2)F 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 g|LH;^_MZfs}3)J7e!vFvP From a592127892f645467eb39e49d899933fb405a3aa Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Thu, 1 Dec 2022 16:16:13 +0100 Subject: [PATCH 28/51] Small doc changes --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 56e8fd19..05bcd657 100644 --- a/README.md +++ b/README.md @@ -121,13 +121,13 @@ Find all possible visualizations with interactive examples in the documentation ## Modularity -By default, the main steps for topic modeling with BERTopic are sentence-transformers, UMAP, HDBSCAN, and c-TF-IDF run in sequence. However, BERTopic assumes some independence between these steps which makes BERTopic quite modular. In other words, BERTopic essentially allows you to build your own topic model: +By default, the main steps for topic modeling with BERTopic are sentence-transformers, UMAP, HDBSCAN, and c-TF-IDF run in sequence. However, it assumes some independence between these steps which makes BERTopic quite modular. In other words, BERTopic essentially allows you to build your own topic model: You can swap out any of these models or even remove them entirely. Starting with the embedding step, you can find out how to do this [here](https://maartengr.github.io/BERTopic/getting_started/embeddings/embeddings.html) and more about the underlying algorithm and assumptions [here](https://maartengr.github.io/BERTopic/algorithm/algorithm.html). -## Overview +## Functionality BERTopic has many functions that quickly can become overwhelming. To alleviate this issue, you will find an overview of all methods and a short description of its purpose. @@ -162,16 +162,16 @@ public attributes that can be used to access model information. | Attribute | Description | |------------------------|---------------------------------------------------------------------------------------------| -| topics_ | The topics that are generated for each document after training or updating the topic model. | -| probabilities_ | The probabilities that are generated for each document if HDBSCAN is used. | -| topic_sizes_ | The size of each topic | -| topic_mapper_ | A class for tracking topics and their mappings anytime they are merged/reduced. | -| topic_representations_ | The top *n* terms per topic and their respective c-TF-IDF values. | -| c_tf_idf_ | The topic-term matrix as calculated through c-TF-IDF. | -| topic_labels_ | The default labels for each topic. | -| custom_labels_ | Custom labels for each topic as generated through `.set_topic_labels`. | -| topic_embeddings_ | The embeddings for each topic if `embedding_model` was used. | -| representative_docs_ | The representative documents for each topic if HDBSCAN is used. | +| `.topics_` | The topics that are generated for each document after training or updating the topic model. | +| `.probabilities_` | The probabilities that are generated for each document if HDBSCAN is used. | +| `.topic_sizes_` | The size of each topic | +| `.topic_mapper_` | A class for tracking topics and their mappings anytime they are merged/reduced. | +| `.topic_representations_` | The top *n* terms per topic and their respective c-TF-IDF values. | +| `.c_tf_idf_` | The topic-term matrix as calculated through c-TF-IDF. | +| `.topic_labels_` | The default labels for each topic. | +| `.custom_labels_` | Custom labels for each topic as generated through `.set_topic_labels`. | +| `.topic_embeddings_` | The embeddings for each topic if `embedding_model` was used. | +| `.representative_docs_` | The representative documents for each topic if HDBSCAN is used. | ### Variations From 97c11ccefb51b6fc73c5763dc0baf5b4984d5d8d Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sun, 4 Dec 2022 13:32:57 +0100 Subject: [PATCH 29/51] Add three pillars of BERTopic animation using Manim Community --- README.md | 4 ++-- docs/index.md | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 05bcd657..3ebd7146 100644 --- a/README.md +++ b/README.md @@ -121,9 +121,9 @@ Find all possible visualizations with interactive examples in the documentation ## Modularity -By default, the main steps for topic modeling with BERTopic are sentence-transformers, UMAP, HDBSCAN, and c-TF-IDF run in sequence. However, it assumes some independence between these steps which makes BERTopic quite modular. In other words, BERTopic essentially allows you to build your own topic model: +By default, the main steps for topic modeling with BERTopic are sentence-transformers, UMAP, HDBSCAN, and c-TF-IDF run in sequence. However, it assumes some independence between these steps which makes BERTopic quite modular. In other words, BERTopic not only allows you to build your own topic model but to explore several topic modeling techniques on top of your customized topic model: - +https://user-images.githubusercontent.com/25746895/205490350-cd9833e7-9cd5-44fa-8752-407d748de633.mp4 You can swap out any of these models or even remove them entirely. Starting with the embedding step, you can find out how to do this [here](https://maartengr.github.io/BERTopic/getting_started/embeddings/embeddings.html) and more about the underlying algorithm and assumptions [here](https://maartengr.github.io/BERTopic/algorithm/algorithm.html). diff --git a/docs/index.md b/docs/index.md index 7ea3783c..820d4637 100644 --- a/docs/index.md +++ b/docs/index.md @@ -83,6 +83,16 @@ frequent topic that was generated, topic 0: **NOTE**: Use `BERTopic(language="multilingual")` to select a model that supports 50+ languages. + +## Modularity +By default, the main steps for topic modeling with BERTopic are sentence-transformers, UMAP, HDBSCAN, and c-TF-IDF run in sequence. However, it assumes some independence between these steps which makes BERTopic quite modular. In other words, BERTopic not only allows you to build your own topic model but to explore several topic modeling techniques on top of your customized topic model: + + + +You can swap out any of these models or even remove them entirely. Starting with the embedding step, you can find out how to do this [here](https://maartengr.github.io/BERTopic/getting_started/embeddings/embeddings.html) and more about the underlying algorithm and assumptions [here](https://maartengr.github.io/BERTopic/algorithm/algorithm.html). + + ## **Overview** BERTopic has many functions that quickly can become overwhelming. To alleviate this issue, you will find an overview of all methods and a short description of its purpose. From ac725fcedfa86392625e27e5c86b820f2c19acfc Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 6 Dec 2022 09:44:26 +0100 Subject: [PATCH 30/51] Doc change --- docs/getting_started/topicreduction/topicreduction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started/topicreduction/topicreduction.md b/docs/getting_started/topicreduction/topicreduction.md index 00cd48d9..0be2ff8c 100644 --- a/docs/getting_started/topicreduction/topicreduction.md +++ b/docs/getting_started/topicreduction/topicreduction.md @@ -1,4 +1,4 @@ -BERTopic uses HDSCAN for clustering the data and it cannot specify the number of clusters you would want. To a certain extent, +BERTopic uses HDBSCAN for clustering the data and it cannot specify the number of clusters you would want. To a certain extent, this is an advantage, as we can trust HDBSCAN to be better at finding the number of clusters than we are. Instead, we can try to reduce the number of topics that have been created. Below, you will find three methods of doing so. From 4a29f8aa1413d56009cecb4fcc07f23b863fc0bd Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 6 Dec 2022 09:46:28 +0100 Subject: [PATCH 31/51] . --- docs/getting_started/topicreduction/topicreduction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started/topicreduction/topicreduction.md b/docs/getting_started/topicreduction/topicreduction.md index 0be2ff8c..d9762d37 100644 --- a/docs/getting_started/topicreduction/topicreduction.md +++ b/docs/getting_started/topicreduction/topicreduction.md @@ -1,5 +1,5 @@ BERTopic uses HDBSCAN for clustering the data and it cannot specify the number of clusters you would want. To a certain extent, -this is an advantage, as we can trust HDBSCAN to be better at finding the number of clusters than we are. +this is an advantage, as we can trust HDBSCAN to be better in finding the number of clusters than we are. Instead, we can try to reduce the number of topics that have been created. Below, you will find three methods of doing so. From 61b697bea75b104e8005536f115a6ab515e5b890 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 6 Dec 2022 12:56:14 +0100 Subject: [PATCH 32/51] Add documentation on how to install cuml on google colab --- docs/getting_started/clustering/clustering.md | 15 ++++++++++++++- .../dim_reduction/dim_reduction.md | 14 ++++++++++++++ .../tips_and_tricks/tips_and_tricks.md | 13 +++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/docs/getting_started/clustering/clustering.md b/docs/getting_started/clustering/clustering.md index 79327837..1e6bf580 100644 --- a/docs/getting_started/clustering/clustering.md +++ b/docs/getting_started/clustering/clustering.md @@ -107,4 +107,17 @@ The great thing about using cuML's HDBSCAN implementation is that it supports ma !!! note As of the v0.13 release, it is not yet possible to calculate the topic-document probability matrix for unseen data (i.e., `.transform`) using cuML's HDBSCAN. - However, it is still possible to calculate the topic-document probability matrix for the data on which the model was trained (i.e., `.fit` and `.fit_transform`). \ No newline at end of file + However, it is still possible to calculate the topic-document probability matrix for the data on which the model was trained (i.e., `.fit` and `.fit_transform`). + +!!! note + If you want to install cuML together with BERTopic using Google Colab, you can run the following code: + + ```bash + !pip install bertopic + !pip install cudf-cu11 dask-cudf-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip install cuml-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip install cugraph-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip uninstall cupy-cuda115 -y + !pip uninstall cupy-cuda11x -y + !pip install cupy-cuda11x -f https://pip.cupy.dev/aarch64 + ``` diff --git a/docs/getting_started/dim_reduction/dim_reduction.md b/docs/getting_started/dim_reduction/dim_reduction.md index f113c72e..0d0c4479 100644 --- a/docs/getting_started/dim_reduction/dim_reduction.md +++ b/docs/getting_started/dim_reduction/dim_reduction.md @@ -94,6 +94,20 @@ umap_model = UMAP(n_components=5, n_neighbors=15, min_dist=0.0) topic_model = BERTopic(umap_model=umap_model) ``` +!!! note + If you want to install cuML together with BERTopic using Google Colab, you can run the following code: + + ```bash + !pip install bertopic + !pip install cudf-cu11 dask-cudf-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip install cuml-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip install cugraph-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip uninstall cupy-cuda115 -y + !pip uninstall cupy-cuda11x -y + !pip install cupy-cuda11x -f https://pip.cupy.dev/aarch64 + ``` + + ## **Skip dimensionality reduction** Although BERTopic applies dimensionality reduction as a default in its pipeline, this is a step that you might want to skip. We generate an "empty" model that simply returns the data pass it to: diff --git a/docs/getting_started/tips_and_tricks/tips_and_tricks.md b/docs/getting_started/tips_and_tricks/tips_and_tricks.md index c90d63d8..11db646b 100644 --- a/docs/getting_started/tips_and_tricks/tips_and_tricks.md +++ b/docs/getting_started/tips_and_tricks/tips_and_tricks.md @@ -167,6 +167,19 @@ embeddings = normalize(embeddings) As of the v0.13 release, it is not yet possible to calculate the topic-document probability matrix for unseen data (i.e., `.transform`) using cuML's HDBSCAN. However, it is still possible to calculate the topic-document probability matrix for the data on which the model was trained (i.e., `.fit` and `.fit_tranform`). +!!! note + If you want to install cuML together with BERTopic using Google Colab, you can run the following code: + + ```bash + !pip install bertopic + !pip install cudf-cu11 dask-cudf-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip install cuml-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip install cugraph-cu11 --extra-index-url=https://pypi.ngc.nvidia.com + !pip uninstall cupy-cuda115 -y + !pip uninstall cupy-cuda11x -y + !pip install cupy-cuda11x -f https://pip.cupy.dev/aarch64 + ``` + ## **Lightweight installation** From 3d02de32babc84d8c00ae0cf1e41d907a94720a1 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Fri, 9 Dec 2022 11:13:49 +0100 Subject: [PATCH 33/51] Fix #871 --- bertopic/_bertopic.py | 5 +++-- bertopic/plotting/__init__.py | 4 +++- bertopic/plotting/_approximate_distribution.py | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 81d68265..df2c65a5 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -1065,8 +1065,9 @@ def approximate_distribution(self, all_token_sets_ids = [] for tokenset in tokens: - if len(tokens) < window: - token_sets = tokens + if len(tokenset) < window: + token_sets = [tokenset] + token_sets_ids = [list(range(len(tokenset)))] else: # Extract tokensets using window and stride parameters diff --git a/bertopic/plotting/__init__.py b/bertopic/plotting/__init__.py index 3cc61cc5..b6702901 100644 --- a/bertopic/plotting/__init__.py +++ b/bertopic/plotting/__init__.py @@ -8,6 +8,7 @@ from ._topics_over_time import visualize_topics_over_time from ._topics_per_class import visualize_topics_per_class from ._hierarchical_documents import visualize_hierarchical_documents +from ._approximate_distribution import visualize_approximate_distribution __all__ = [ @@ -20,5 +21,6 @@ "visualize_distribution", "visualize_topics_over_time", "visualize_topics_per_class", - "visualize_hierarchical_documents" + "visualize_hierarchical_documents", + "visualize_approximate_distribution" ] diff --git a/bertopic/plotting/_approximate_distribution.py b/bertopic/plotting/_approximate_distribution.py index 7b0e459a..e84a5329 100644 --- a/bertopic/plotting/_approximate_distribution.py +++ b/bertopic/plotting/_approximate_distribution.py @@ -3,6 +3,7 @@ try: from pandas.io.formats.style import Styler + HAS_JINJA = True except ModuleNotFoundError: HAS_JINJA = False From 1a3bf049af3e88175fbc798a8a3d19c4854bda29 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Fri, 9 Dec 2022 11:47:39 +0100 Subject: [PATCH 34/51] Catch import error --- bertopic/plotting/_approximate_distribution.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bertopic/plotting/_approximate_distribution.py b/bertopic/plotting/_approximate_distribution.py index e84a5329..5c7e0f5d 100644 --- a/bertopic/plotting/_approximate_distribution.py +++ b/bertopic/plotting/_approximate_distribution.py @@ -4,7 +4,7 @@ try: from pandas.io.formats.style import Styler HAS_JINJA = True -except ModuleNotFoundError: +except (ModuleNotFoundError, ImportError): HAS_JINJA = False From e5843e23865753268ad2e721c04894270f679c50 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Fri, 9 Dec 2022 11:58:37 +0100 Subject: [PATCH 35/51] Up version --- bertopic/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bertopic/__init__.py b/bertopic/__init__.py index 2d18e0cb..b2e745e7 100644 --- a/bertopic/__init__.py +++ b/bertopic/__init__.py @@ -1,6 +1,6 @@ from bertopic._bertopic import BERTopic -__version__ = "0.12.0" +__version__ = "0.13.0" __all__ = [ "BERTopic", diff --git a/setup.py b/setup.py index ac9ee2db..dac87073 100644 --- a/setup.py +++ b/setup.py @@ -53,7 +53,7 @@ setup( name="bertopic", packages=find_packages(exclude=["notebooks", "docs"]), - version="0.12.0", + version="0.13.0", author="Maarten P. Grootendorst", author_email="maartengrootendorst@gmail.com", description="BERTopic performs topic Modeling with state-of-the-art transformer models.", From b304e217d7aa9220eda74d0a882d12e3ff3f7bfe Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Wed, 14 Dec 2022 11:53:55 +0100 Subject: [PATCH 36/51] Update sklearn pipeline documentation --- docs/getting_started/embeddings/embeddings.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/docs/getting_started/embeddings/embeddings.md b/docs/getting_started/embeddings/embeddings.md index 8afca511..dacd50d8 100644 --- a/docs/getting_started/embeddings/embeddings.md +++ b/docs/getting_started/embeddings/embeddings.md @@ -165,16 +165,6 @@ pipe = make_pipeline( topic_model = BERTopic(embedding_model=pipe) ``` -Internally, this uses the `SklearnEmbedder` that ensures the scikit-learn -pipeline is compatible. - -```python -from bertopic.backend import SklearnEmbedder - -sklearn_embedder = SklearnEmbedder(pipe) -topic_model = BERTopic(embedding_model=sklearn_embedder) -``` - !!! Warning One caveat to be aware of is that scikit-learns base `Pipeline` class does not support the `.partial_fit()`-API. If you have a pipeline that theoretically should From 32e3622663e12bae1de672b41f2c945bde7e03cd Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Thu, 15 Dec 2022 16:03:04 +0100 Subject: [PATCH 37/51] Update README --- README.md | 3 +++ docs/index.md | 16 ++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3ebd7146..68522bba 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,9 @@ BERTopic supports [**supervised**](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html), [**semi-supervised**](https://maartengr.github.io/BERTopic/getting_started/semisupervised/semisupervised.html), [**manual**](https://maartengr.github.io/BERTopic/getting_started/manual/manual.html), +[**long-document**](https://maartengr.github.io/BERTopic/getting_started/distribution/distribution.html), [**hierarchical**](https://maartengr.github.io/BERTopic/getting_started/hierarchicaltopics/hierarchicaltopics.html), +[**class-based**](https://maartengr.github.io/BERTopic/getting_started/topicsperclass/topicsperclass.html), [**dynamic**](https://maartengr.github.io/BERTopic/getting_started/topicsovertime/topicsovertime.html), and [**online**](https://maartengr.github.io/BERTopic/getting_started/online/online.html) topic modeling. It even supports visualizations similar to LDAvis! @@ -183,6 +185,7 @@ There are many different use cases in which topic modeling can be used. As such, | [Online Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/online/online.html) | `.partial_fit(doc)` | | [Semi-supervised Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/semisupervised/semisupervised.html) | `.fit(docs, y=y)` | | [Supervised Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html) | `.fit(docs, y=y)` | +| [Manual Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/manual/manual.html) | `.fit(docs, y=y)` | | [Topic Modeling per Class](https://maartengr.github.io/BERTopic/getting_started/topicsperclass/topicsperclass.html) | `.topics_per_class(docs, classes)` | | [Dynamic Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/topicsovertime/topicsovertime.html) | `.topics_over_time(docs, timestamps)` | | [Hierarchical Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/hierarchicaltopics/hierarchicaltopics.html) | `.hierarchical_topics(docs)` | diff --git a/docs/index.md b/docs/index.md index 820d4637..f5da647b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -12,11 +12,16 @@ allowing for easily interpretable topics whilst keeping important words in the t BERTopic supports [**guided**](https://maartengr.github.io/BERTopic/getting_started/guided/guided.html), -(semi-) [**supervised**](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html), -and [**dynamic**](https://maartengr.github.io/BERTopic/getting_started/topicsovertime/topicsovertime.html) topic modeling. It even supports visualizations similar to LDAvis! +[**supervised**](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html), +[**semi-supervised**](https://maartengr.github.io/BERTopic/getting_started/semisupervised/semisupervised.html), +[**manual**](https://maartengr.github.io/BERTopic/getting_started/manual/manual.html), +[**long-document**](https://maartengr.github.io/BERTopic/getting_started/distribution/distribution.html), +[**hierarchical**](https://maartengr.github.io/BERTopic/getting_started/hierarchicaltopics/hierarchicaltopics.html), +[**class-based**](https://maartengr.github.io/BERTopic/getting_started/topicsperclass/topicsperclass.html), +[**dynamic**](https://maartengr.github.io/BERTopic/getting_started/topicsovertime/topicsovertime.html), and +[**online**](https://maartengr.github.io/BERTopic/getting_started/online/online.html) topic modeling. It even supports visualizations similar to LDAvis! -Corresponding medium posts can be found [here](https://towardsdatascience.com/topic-modeling-with-bert-779f7db187e6?source=friends_link&sk=0b5a470c006d1842ad4c8a3057063a99) -and [here](https://towardsdatascience.com/interactive-topic-modeling-with-bertopic-1ea55e7d73d8?sk=03c2168e9e74b6bda2a1f3ed953427e4). +Corresponding medium posts can be found [here](https://towardsdatascience.com/topic-modeling-with-bert-779f7db187e6?source=friends_link&sk=0b5a470c006d1842ad4c8a3057063a99), [here](https://towardsdatascience.com/interactive-topic-modeling-with-bertopic-1ea55e7d73d8?sk=03c2168e9e74b6bda2a1f3ed953427e4) and [here](https://towardsdatascience.com/using-whisper-and-bertopic-to-model-kurzgesagts-videos-7d8a63139bdf?sk=b1e0fd46f70cb15e8422b4794a81161d). For a more detailed overview, you can read the [paper](https://arxiv.org/abs/2203.05794) or see a [brief overview](https://maartengr.github.io/BERTopic/algorithm/algorithm.html). ## **Installation** @@ -82,8 +87,6 @@ frequent topic that was generated, topic 0: **NOTE**: Use `BERTopic(language="multilingual")` to select a model that supports 50+ languages. - - ## Modularity By default, the main steps for topic modeling with BERTopic are sentence-transformers, UMAP, HDBSCAN, and c-TF-IDF run in sequence. However, it assumes some independence between these steps which makes BERTopic quite modular. In other words, BERTopic not only allows you to build your own topic model but to explore several topic modeling techniques on top of your customized topic model: @@ -149,6 +152,7 @@ There are many different use cases in which topic modeling can be used. As such, | [Online Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/online/online.html) | `.partial_fit(doc)` | | [Semi-supervised Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/semisupervised/semisupervised.html) | `.fit(docs, y=y)` | | [Supervised Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html) | `.fit(docs, y=y)` | +| [Manual Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/manual/manual.html) | `.fit(docs, y=y)` | | [Topic Modeling per Class](https://maartengr.github.io/BERTopic/getting_started/topicsperclass/topicsperclass.html) | `.topics_per_class(docs, classes)` | | [Dynamic Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/topicsovertime/topicsovertime.html) | `.topics_over_time(docs, timestamps)` | | [Hierarchical Topic Modeling](https://maartengr.github.io/BERTopic/getting_started/hierarchicaltopics/hierarchicaltopics.html) | `.hierarchical_topics(docs)` | From ad83b2b9956238fa8543dec294fa9e82f11c8b94 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Fri, 16 Dec 2022 09:34:11 +0100 Subject: [PATCH 38/51] Different namespace cuml --- bertopic/cluster/_utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bertopic/cluster/_utils.py b/bertopic/cluster/_utils.py index 4b3149ae..5a987346 100644 --- a/bertopic/cluster/_utils.py +++ b/bertopic/cluster/_utils.py @@ -20,8 +20,8 @@ def hdbscan_delegator(model, func: str, embeddings: np.ndarray = None): predictions, probabilities = hdbscan.approximate_predict(model, embeddings) return predictions, probabilities elif "cuml" and "hdbscan" in str(type(model)).lower(): - from cuml.cluster import approximate_predict - predictions, probabilities = approximate_predict(model, embeddings) + from cuml.cluster import hdbscan as cuml_hdbscan + predictions, probabilities = cuml_hdbscan.approximate_predict(model, embeddings) return predictions, probabilities else: predictions = model.predict(embeddings) @@ -32,8 +32,8 @@ def hdbscan_delegator(model, func: str, embeddings: np.ndarray = None): if isinstance(model, hdbscan.HDBSCAN): return hdbscan.all_points_membership_vectors(model) elif "cuml" and "hdbscan" in str(type(model)).lower(): - from cuml import cluster - return cluster.all_points_membership_vectors(model) + from cuml.cluster import hdbscan as cuml_hdbscan + return cuml_hdbscan.all_points_membership_vectors(model) else: return None From 2e0a717f1656d3d011c0b99a586b94287eaa8702 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sun, 18 Dec 2022 12:08:38 +0100 Subject: [PATCH 39/51] Added function to reduce outliers, documentation, and tests --- README.md | 1 + bertopic/_bertopic.py | 335 ++++++++++++------ docs/getting_started/clustering/clustering.md | 8 +- docs/getting_started/ctfidf/ctfidf.md | 8 +- .../dim_reduction/dim_reduction.md | 8 +- docs/getting_started/embeddings/embeddings.md | 8 +- .../outlier_reduction/fig_base.html | 7 + .../outlier_reduction/fig_reduced.html | 7 + .../outlier_reduction/outlier_reduction.md | 193 ++++++++++ .../vectorizers/vectorizers.md | 10 +- docs/index.md | 1 + docs/stylesheets/extra.css | 7 +- mkdocs.yml | 2 + tests/test_bertopic.py | 9 + 14 files changed, 482 insertions(+), 122 deletions(-) create mode 100644 docs/getting_started/outlier_reduction/fig_base.html create mode 100644 docs/getting_started/outlier_reduction/fig_reduced.html create mode 100644 docs/getting_started/outlier_reduction/outlier_reduction.md diff --git a/README.md b/README.md index 68522bba..8d437829 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,7 @@ Below, you will find an overview of common functions in BERTopic. | Set topic labels | `.set_topic_labels(my_custom_labels)` | | Merge topics | `.merge_topics(docs, topics_to_merge)` | | Reduce nr of topics | `.reduce_topics(docs, nr_topics=30)` | +| Reduce outliers | `.reduce_outliers(docs, topics)` | | Find topics | `.find_topics("vehicle")` | | Save model | `.save("my_model")` | | Load model | `BERTopic.load("my_model")` | diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index df2c65a5..6fc6f9de 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -135,7 +135,7 @@ def __init__(self, NOTE: This param will not be used if you pass in your own CountVectorizer. min_topic_size: The minimum size of the topic. Increasing this value will lead - to a lower number of clusters/topics. + to a lower number of clusters/topics. NOTE: This param will not be used if you are not using HDBSCAN. nr_topics: Specifying the number of topics will reduce the initial number of topics to the value specified. This reduction can take @@ -433,7 +433,6 @@ def transform(self, umap_embeddings = self.umap_model.transform(embeddings) logger.info("Reduced dimensionality") - # Extract predictions and probabilities if it is a HDBSCAN-like model if is_supported_hdbscan(self.hdbscan_model): predictions, probabilities = hdbscan_delegator(self.hdbscan_model, "approximate_predict", umap_embeddings) @@ -865,7 +864,7 @@ def hierarchical_topics(self, embeddings = self.c_tf_idf_[self._outliers:] X = distance_function(embeddings) - # Make sure it is the 1-D condensed distance matrix with zeros on the diagonal + # Make sure it is the 1-D condensed distance matrix with zeros on the diagonal np.fill_diagonal(X, 0) X = squareform(X) @@ -950,10 +949,10 @@ def hierarchical_topics(self, return hier_topics - def approximate_distribution(self, - documents: Union[str, List[str]], - window: int = 4, - stride: int = 1, + def approximate_distribution(self, + documents: Union[str, List[str]], + window: int = 4, + stride: int = 1, min_similarity: float = 0.1, batch_size: int = None, padding: bool = False, @@ -962,84 +961,84 @@ def approximate_distribution(self, separator: str = " ") -> Tuple[np.ndarray, Union[List[np.ndarray], None]]: """ A post-hoc approximation of topic distributions across documents. - - In order to perform this approximation, each document is split into tokens - according to the provided tokenizer in the `CountVectorizer`. Then, a - sliding window is applied on each document creating subsets of the document. - For example, with a window size of 3 and stride of 1, the sentence: - + + In order to perform this approximation, each document is split into tokens + according to the provided tokenizer in the `CountVectorizer`. Then, a + sliding window is applied on each document creating subsets of the document. + For example, with a window size of 3 and stride of 1, the sentence: + `Solving the right problem is difficult.` - - can be split up into `solving the right`, `the right problem`, `right problem is`, - and `problem is difficult`. These are called tokensets. For each of these - tokensets, we calculate their c-TF-IDF representation and find out - how similar they are to the previously generated topics. Then, the - similarities to the topics for each tokenset are summed in order to - create a topic distribution for the entire document. - - We can also dive into this a bit deeper by then splitting these tokensets - up into individual tokens and calculate how much a word, in a specific sentence, - contributes to the topics found in that document. This can be enabled by - setting `calculate_tokens=True` which can be used for visualization purposes - in `topic_model.visualize_approximate_distribution`. - - The main output, `topic_distributions`, can also be used directly in - `.visualize_distribution(topic_distributions[index])` by simply selecting - a single distribution. - + + can be split up into `solving the right`, `the right problem`, `right problem is`, + and `problem is difficult`. These are called tokensets. For each of these + tokensets, we calculate their c-TF-IDF representation and find out + how similar they are to the previously generated topics. Then, the + similarities to the topics for each tokenset are summed in order to + create a topic distribution for the entire document. + + We can also dive into this a bit deeper by then splitting these tokensets + up into individual tokens and calculate how much a word, in a specific sentence, + contributes to the topics found in that document. This can be enabled by + setting `calculate_tokens=True` which can be used for visualization purposes + in `topic_model.visualize_approximate_distribution`. + + The main output, `topic_distributions`, can also be used directly in + `.visualize_distribution(topic_distributions[index])` by simply selecting + a single distribution. + Arguments: documents: A single document or a list of documents for which we approximate their topic distributions - window: Size of the moving window which indicates the number of - tokens being considered. + window: Size of the moving window which indicates the number of + tokens being considered. stride: How far the window should move at each step. - min_similarity: The minimum similarity of a document's tokenset - with respect to the topics. - batch_size: The number of documents to process at a time. If None, - then all documents are processed at once. - NOTE: With a large number of documents, it is not - advised to process all documents at once. + min_similarity: The minimum similarity of a document's tokenset + with respect to the topics. + batch_size: The number of documents to process at a time. If None, + then all documents are processed at once. + NOTE: With a large number of documents, it is not + advised to process all documents at once. padding: Whether to pad the beginning and ending of a document with - empty tokens. - use_embedding_model: Whether to use the topic model's embedding - model to calculate the similarity between + empty tokens. + use_embedding_model: Whether to use the topic model's embedding + model to calculate the similarity between tokensets and topics instead of using c-TF-IDF. - calculate_tokens: Calculate the similarity of tokens with all topics. - NOTE: This is computation-wise more expensive and - can require more memory. Using this over batches of - documents might be preferred. + calculate_tokens: Calculate the similarity of tokens with all topics. + NOTE: This is computation-wise more expensive and + can require more memory. Using this over batches of + documents might be preferred. separator: The separator used to merge tokens into tokensets. - + Returns: - topic_distributions: A `n` x `m` matrix containing the topic distributions - for all input documents with `n` being the documents + topic_distributions: A `n` x `m` matrix containing the topic distributions + for all input documents with `n` being the documents and `m` the topics. - topic_token_distributions: A list of `t` x `m` arrays with `t` being the - number of tokens for the respective document + topic_token_distributions: A list of `t` x `m` arrays with `t` being the + number of tokens for the respective document and `m` the topics. - + Examples: - - After fitting the model, the topic distributions can be calculated regardless + + After fitting the model, the topic distributions can be calculated regardless of the clustering model and regardless of whether the documents were previously seen or not: - + ```python topic_distr, _ = topic_model.approximate_distribution(docs) ``` - - As a result, the topic distributions are calculated in `topic_distr` for the - entire document based on token set with a specific window size and stride. - + + As a result, the topic distributions are calculated in `topic_distr` for the + entire document based on token set with a specific window size and stride. + If you want to calculate the topic distributions on a token-level: - + ```python topic_distr, topic_token_distr = topic_model.approximate_distribution(docs, calculate_tokens=True) ``` - - The `topic_token_distr` then contains, for each token, the best fitting topics. - As with `topic_distr`, it can contain multiple topics for a single token. - """ + + The `topic_token_distr` then contains, for each token, the best fitting topics. + As with `topic_distr`, it can contain multiple topics for a single token. + """ if isinstance(documents, str): documents = [documents] @@ -1098,21 +1097,21 @@ def approximate_distribution(self, all_sentences.extend(sentences) all_token_sets_ids.extend(token_sets_ids) all_indices.append(all_indices[-1] + len(sentences)) - + # Calculate similarity between embeddings of token sets and the topics if use_embedding_model: embeddings = self._extract_embeddings(all_sentences, method="document", verbose=True) similarity = cosine_similarity(embeddings, self.topic_embeddings_[self._outliers:]) - + # Calculate similarity between c-TF-IDF of token sets and the topics else: bow_doc = self.vectorizer_model.transform(all_sentences) c_tf_idf_doc = self.ctfidf_model.transform(bow_doc) similarity = cosine_similarity(c_tf_idf_doc, self.c_tf_idf_[self._outliers:]) - + # Only keep similarities that exceed the minimum similarity[similarity < min_similarity] = 0 - + # Aggregate results on an individual token level if calculate_tokens: topic_distribution = [] @@ -1132,10 +1131,10 @@ def approximate_distribution(self, if token in token_val: token_val[token].append(sim) - matrix = [] + matrix = [] for _, value in token_val.items(): matrix.append(np.add.reduce(value)) - + # Take empty documents into account matrix = np.array(matrix) if len(matrix.shape) == 1: @@ -1143,7 +1142,7 @@ def approximate_distribution(self, topic_token_distribution.append(np.array(matrix)) topic_distribution.append(np.add.reduce(matrix)) - + topic_distribution = normalize(topic_distribution, norm='l1', axis=1) # Aggregate on a tokenset level indicated by the window and stride @@ -1159,7 +1158,7 @@ def approximate_distribution(self, topic_distribution.append(group) topic_distribution = normalize(np.array(topic_distribution), norm='l1', axis=1) topic_token_distribution = None - + # Combine results topic_distributions.append(topic_distribution) if topic_token_distribution is None: @@ -1396,11 +1395,11 @@ def get_topic_freq(self, topic: int = None) -> Union[pd.DataFrame, int]: ascending=False) def get_representative_docs(self, topic: int = None) -> List[str]: - """ Extract the best representing documents per topic. + """ Extract the best representing documents per topic. NOTE: This does not extract all documents per topic as all documents - are not saved within BERTopic. To get all documents, please + are not saved within BERTopic. To get all documents, please run the following: ```python @@ -1758,6 +1757,138 @@ def reduce_topics(self, return self + def reduce_outliers(self, + documents: List[str], + topics: List[int], + strategy: str = "distributions", + probabilities: np.ndarray = None, + threshold: int = 0, + embeddings: np.ndarray = None, + distributions_params: Mapping[str, Any] = {}): + """ Reduce outliers by merging them with their nearest topic according + to one of several strategies. + + When using HDBSCAN, DBSCAN, or OPTICS, a number of outlier documents might be created + that do not fall within any of the created topics. These are labeled as -1. + This function allows the user to match outlier documents with their nearest topic + using one of the following strategies using the `strategy` parameter: + * "probabilities" + This uses the soft-clustering as performed by HDBSCAN to find the + best matching topic for each outlier document. To use this, make + sure to calculate the `probabilities` beforehand by instantiating + BERTopic with `calculate_probabilities=True`. + * "distributions" + Use the topic distributions, as calculated with `.approximate_distribution` + to find the most frequent topic in each outlier document. You can use the + `distributions_params` variable to tweak the parameters of + `.approximate_distribution`. + * "c-tf-idf" + Calculate the c-TF-IDF representation for each outlier document and + find the best matching c-TF-IDF topic representation using + cosine similarity. + * "embeddings" + Using the embeddings of each outlier documents, find the best + matching topic embedding using cosine similarity. + + Arguments: + documents: A list of documents for which we reduce or remove the outliers. + topics: The topics that correspond to the documents + strategy: The strategy used for reducing outliers. + Options: + * "probabilities" + This uses the soft-clustering as performed by HDBSCAN + to find the best matching topic for each outlier document. + + * "distributions" + Use the topic distributions, as calculated with `.approximate_distribution` + to find the most frequent topic in each outlier document. + + * "c-tf-idf" + Calculate the c-TF-IDF representation for outlier documents and + find the best matching c-TF-IDF topic representation. + + * "embeddings" + Calculate the embeddings for outlier documents and + find the best matching topic embedding. + threshold: The threshold for assigning topics to outlier documents. This value + represents the minimum probability when `strategy="probabilities"`. + For all other strategies, it represents the minimum similarity. + embeddings: The pre-computed embeddings to be used when `strategy="embeddings"`. + If this is None, then it will compute the embeddings for the outlier documents. + distributions_params: The parameters used in `.approximate_distribution` when using + the strategy `"distributions"`. + + Usage: + + The default settings uses the `"distributions"` strategy: + + ```python + new_topics = topic_model.reduce_outliers(docs, topics) + ``` + + When you use the `"probabilities"` strategy, make sure to also pass the probabilities + as generated through HDBSCAN: + + ```python + from bertopic import BERTopic + topic_model = BERTopic(calculate_probabilities=True) + topics, probs = topic_model.fit_transform(docs) + + new_topics = topic_model.reduce_outliers(docs, topics, probabilities=probs, strategy="probabilities") + ``` + """ + + # Check correct use of parameters + if strategy.lower() == "probabilities" and probabilities is None: + raise ValueError("Make sure to pass in `probabilities` in order to use the probabilities strategy") + + # Reduce outliers by extracting most likely topics through the topic-term probability matrix + if strategy.lower() == "probabilities": + new_topics = [np.argmax(prob) if max(prob) >= threshold and topic == -1 else topic + for topic, prob in zip(topics, probabilities)] + + # Reduce outliers by extracting most frequent topics through calculating of Topic Distributions + elif strategy.lower() == "distributions": + outlier_ids = [index for index, topic in enumerate(topics) if topic == -1] + outlier_docs = [documents[index] for index in outlier_ids] + topic_distr, _ = self.approximate_distribution(outlier_docs, min_similarity=threshold, **distributions_params) + outlier_topics = iter([np.argmax(prob) if sum(prob) > 0 else -1 for prob in topic_distr]) + new_topics = [topic if topic != -1 else next(outlier_topics) for topic in topics] + + # Reduce outliers by finding the most similar c-TF-IDF representations + elif strategy.lower() == "c-tf-idf": + outlier_ids = [index for index, topic in enumerate(topics) if topic == -1] + outlier_docs = [documents[index] for index in outlier_ids] + + # Calculate c-TF-IDF of outlier documents with all topics + bow_doc = self.vectorizer_model.transform(outlier_docs) + c_tf_idf_doc = self.ctfidf_model.transform(bow_doc) + similarity = cosine_similarity(c_tf_idf_doc, self.c_tf_idf_[self._outliers:]) + + # Update topics + similarity[similarity < threshold] = 0 + outlier_topics = iter([np.argmax(sim) if sum(sim) > 0 else -1 for sim in similarity]) + new_topics = [topic if topic != -1 else next(outlier_topics) for topic in topics] + + # Reduce outliers by finding the most similar topic embeddings + elif strategy.lower() == "embeddings": + outlier_ids = [index for index, topic in enumerate(topics) if topic == -1] + outlier_docs = [documents[index] for index in outlier_ids] + + # Extract or calculate embeddings for outlier documents + if embeddings is not None: + outlier_embeddings = np.array([embeddings[index] for index in outlier_ids]) + else: + outlier_embeddings = self.embedding_model.embed_documents(outlier_docs) + similarity = cosine_similarity(outlier_embeddings, self.topic_embeddings_[self._outliers:]) + + # Update topics + similarity[similarity < threshold] = 0 + outlier_topics = iter([np.argmax(sim) if sum(sim) > 0 else -1 for sim in similarity]) + new_topics = [topic if topic != -1 else next(outlier_topics) for topic in topics] + + return new_topics + def visualize_topics(self, topics: List[int] = None, top_n_topics: int = None, @@ -2193,49 +2324,49 @@ def visualize_distribution(self, height=height) def visualize_approximate_distribution(self, - document: str, - topic_token_distribution: np.ndarray, + document: str, + topic_token_distribution: np.ndarray, normalize: bool = False): - """ Visualize the topic distribution calculated by `.approximate_topic_distribution` - on a token level. Thereby indicating the extend to which a certain word or phrases belong - to a specific topic. The assumption here is that a single word can belong to multiple - similar topics and as such give information about the broader set of topics within - a single document. - + """ Visualize the topic distribution calculated by `.approximate_topic_distribution` + on a token level. Thereby indicating the extend to which a certain word or phrases belong + to a specific topic. The assumption here is that a single word can belong to multiple + similar topics and as such give information about the broader set of topics within + a single document. + Arguments: topic_model: A fitted BERTopic instance. - document: The document for which you want to visualize + document: The document for which you want to visualize the approximated topic distribution. - topic_token_distribution: The topic-token distribution of the document as + topic_token_distribution: The topic-token distribution of the document as extracted by `.approximate_topic_distribution` - normalize: Whether to normalize, between 0 and 1 (summing to 1), the - topic distribution values. - + normalize: Whether to normalize, between 0 and 1 (summing to 1), the + topic distribution values. + Returns: df: A stylized dataframe indicating the best fitting topics for each token. - + Examples: - + ```python # Calculate the topic distributions on a token level # Note that we need to have `calculate_token_level=True` topic_distr, topic_token_distr = topic_model.approximate_distribution( docs, calculate_token_level=True ) - + # Visualize the approximated topic distributions df = topic_model.visualize_approximate_distribution(docs[0], topic_token_distr[0]) df ``` - - To revert this stylized dataframe back to a regular dataframe, + + To revert this stylized dataframe back to a regular dataframe, you can run the following: - + ```python df.data.columns = [column.strip() for column in df.data.columns] df = df.data - ``` + ``` """ check_is_fitted(self) return plotting.visualize_approximate_distribution(self, @@ -2398,7 +2529,7 @@ def visualize_barchart(self, topics: A selection of topics to visualize. top_n_topics: Only select the top n most frequent topics. n_words: Number of words to show in a topic - custom_labels: Whether to use custom topic labels that were defined using + custom_labels: Whether to use custom topic labels that were defined using `topic_model.set_topic_labels`. title: Title of the plot. width: The width of each figure. @@ -2600,7 +2731,7 @@ def _cluster_embeddings(self, documents: pd.DataFrame, partial_fit: bool = False, y: np.ndarray = None) -> Tuple[pd.DataFrame, - np.ndarray]: + np.ndarray]: """ Cluster UMAP embeddings with HDBSCAN Arguments: @@ -2623,7 +2754,7 @@ def _cluster_embeddings(self, self.hdbscan_model.fit(umap_embeddings, y=y) except TypeError: self.hdbscan_model.fit(umap_embeddings) - + try: labels = self.hdbscan_model.labels_ except AttributeError: @@ -2749,8 +2880,8 @@ def _save_representative_docs(self, documents: pd.DataFrame): # Convert indices to documents self.representative_docs_ = {topic: [documents.iloc[doc_id].Document for doc_id in doc_ids] - for topic, doc_ids in - representative_docs.items()} + for topic, doc_ids in + representative_docs.items()} else: documents_per_topic = documents.groupby('Topic').sample(n=500, replace=True).drop_duplicates() self.representative_docs_ = {} @@ -2759,11 +2890,11 @@ def _save_representative_docs(self, documents: pd.DataFrame): # Calculate similarity selected_docs = documents_per_topic.loc[documents_per_topic.Topic == topic, "Document"].values bow = self.vectorizer_model.transform(selected_docs) - ctfidf = self.ctfidf_model.transform(bow) + ctfidf = self.ctfidf_model.transform(bow) sim_matrix = cosine_similarity(ctfidf, self.c_tf_idf_[topic + self._outliers]) # Extract top 3 most representative documents - indices = np.argpartition(sim_matrix.reshape(1, -1)[0], + indices = np.argpartition(sim_matrix.reshape(1, -1)[0], -top_n_representative_docs)[-top_n_representative_docs:] self.representative_docs_[topic] = [selected_docs[index] for index in indices] @@ -2788,7 +2919,7 @@ def _map_representative_docs(self, original_topics: bool = False): # Update the representative documents updated_representative_docs = {mappings[old_topic]: [] - for old_topic, _ in representative_docs.items()} + for old_topic, _ in representative_docs.items()} for old_topic, docs in representative_docs.items(): new_topic = mappings[old_topic] updated_representative_docs[new_topic].extend(docs) diff --git a/docs/getting_started/clustering/clustering.md b/docs/getting_started/clustering/clustering.md index 1e6bf580..7f847cdd 100644 --- a/docs/getting_started/clustering/clustering.md +++ b/docs/getting_started/clustering/clustering.md @@ -5,10 +5,10 @@ In BERTopic, we typically use HDBSCAN as it is quite capable of capturing struct clustering model and you might want to be using something entirely different for your use case. Moreover, what if a new state-of-the-art model is released tomorrow? We would like to be able to use that in BERTopic, right? Since BERTopic assumes some independence among steps, we can allow for this modularity: -

- -

- +

+ ![Image title](clustering.svg) +
+
As a result, the `hdbscan_model` parameter in BERTopic now allows for a variety of clustering models. To do so, the class should have the following attributes: diff --git a/docs/getting_started/ctfidf/ctfidf.md b/docs/getting_started/ctfidf/ctfidf.md index d59c4c31..b14efdc6 100644 --- a/docs/getting_started/ctfidf/ctfidf.md +++ b/docs/getting_started/ctfidf/ctfidf.md @@ -11,9 +11,11 @@ Then, we take the logarithm of one plus the average number of words per class `A Since the topic representation is somewhat independent of the clustering step, we can change how the c-TF-IDF representation will look like. This can be in the form of parameter tuning, different weighting schemes, or using a diversity metric on top of it. This allows for some modularity concerning the weighting scheme: -

- -

+

+ ![Image title](ctfidf.svg) +
+
+ This class-based TF-IDF representation is enabled by default in BERTopic. However, we can explicitly pass it to BERTopic through the `ctfidf_model` allowing for parameter tuning and the customization of the topic extraction technique: diff --git a/docs/getting_started/dim_reduction/dim_reduction.md b/docs/getting_started/dim_reduction/dim_reduction.md index 0d0c4479..201dda45 100644 --- a/docs/getting_started/dim_reduction/dim_reduction.md +++ b/docs/getting_started/dim_reduction/dim_reduction.md @@ -6,9 +6,11 @@ However, there are other solutions out there, such as PCA that users might be in use any other dimensionality reduction algorithm. The image below illustrates this modularity: -

- -

+

+ ![Image title](dimensionality.svg) +
+
+ As a result, the `umap_model` parameter in BERTopic now allows for a variety of dimensionality reduction models. To do so, the class should have diff --git a/docs/getting_started/embeddings/embeddings.md b/docs/getting_started/embeddings/embeddings.md index dacd50d8..0840f598 100644 --- a/docs/getting_started/embeddings/embeddings.md +++ b/docs/getting_started/embeddings/embeddings.md @@ -4,9 +4,11 @@ BERTopic starts with transforming our input documents into numerical representat However, there is not one perfect embedding model and you might want to be using something entirely different for your use case. Since BERTopic assumes some independence among steps, we can allow for this modularity: -

- -

+

+ ![Image title](embeddings.svg) +
+
+ This modularity allows us not only to choose any embedding model to convert our documents into numerical representations, we can use essentially any data to perform our clustering. When new state-of-the-art pre-trained embedding models are released, BERTopic will be able to use them. As a result, BERTopic grows with any new models being released. diff --git a/docs/getting_started/outlier_reduction/fig_base.html b/docs/getting_started/outlier_reduction/fig_base.html new file mode 100644 index 00000000..b1964816 --- /dev/null +++ b/docs/getting_started/outlier_reduction/fig_base.html @@ -0,0 +1,7 @@ + + + +
+
+ + \ No newline at end of file diff --git a/docs/getting_started/outlier_reduction/fig_reduced.html b/docs/getting_started/outlier_reduction/fig_reduced.html new file mode 100644 index 00000000..695e540f --- /dev/null +++ b/docs/getting_started/outlier_reduction/fig_reduced.html @@ -0,0 +1,7 @@ + + + +
+
+ + \ No newline at end of file diff --git a/docs/getting_started/outlier_reduction/outlier_reduction.md b/docs/getting_started/outlier_reduction/outlier_reduction.md new file mode 100644 index 00000000..009fbf97 --- /dev/null +++ b/docs/getting_started/outlier_reduction/outlier_reduction.md @@ -0,0 +1,193 @@ +When using HDBSCAN, DBSCAN, or OPTICS, a number of outlier documents might be created +that do not fall within any of the created topics. These are labeled as -1. Depending on your use case, you might want +to decrease the number of documents that are labeled as outliers. Fortunately, there are a number of strategies one might +use to reduce the number of outliers after you have trained your BERTopic model. + +The main way to reduce your outliers in BERTopic is by using the `.reduce_outliers` function. To make it work without too much tweaking, you will only need to pass the `docs` and their corresponding `topics`. You can pass outlier and non-outlier documents together since it will only try to reduce outlier documents and label them to a non-outlier topic. + +The following is a minimal example: + +```python +from bertopic import BERTopic + +# Train your BERTopic model +topic_model = BERTopic() +topics, probs = topic_model.fit_transform(docs) + +# Reduce outliers +new_topics = topic_model.reduce_outliers(docs, topics) +``` + +!!! note + You can use the `threshold` parameter to select the minimum distance or similarity when matching outlier documents with non-outlier topics. This allows the user to change the amount of outlier documents are assigned to non-outlier topics. + + +## **Strategies** + +The default method for reducing outliers is by calculating the c-TF-IDF representations of outlier documents and assigning them +to the best matching c-TF-IDF representations of non-outlier topics. + +However, there are a number of other strategies one can use, either seperately or in conjunction that are worthwhile to explore: +* Using the topic-document probabilities to assign topics +* Using the topic-document distributions to assign topics +* Using c-TF-IDF representations to assign topics +* Using document and topic embeddings to assign topics + +### **Probabilities** +This strategy uses the soft-clustering as performed by HDBSCAN to find the +best matching topic for each outlier document. To use this, make +sure to calculate the `probabilities` beforehand by instantiating +BERTopic with `calculate_probabilities=True`. + +```python +from bertopic import BERTopic + +# Train your BERTopic model and calculate the document-topic probabilities +topic_model = BERTopic(calculate_probabilities=True) +topics, probs = topic_model.fit_transform(docs) + +# Reduce outliers using the `probabilities` strategy +new_topics = topic_model.reduce_outliers(docs, topics, probabilities=probs, strategy="probabilities") +``` + +### **Topic Distributions** +Use the topic distributions, as calculated with `.approximate_distribution` +to find the most frequent topic in each outlier document. You can use the +`distributions_params` variable to tweak the parameters of +`.approximate_distribution`. + +```python +from bertopic import BERTopic + +# Train your BERTopic model +topic_model = BERTopic() +topics, probs = topic_model.fit_transform(docs) + +# Reduce outliers using the `distributions` strategy +new_topics = topic_model.reduce_outliers(docs, topics, strategy="distributions") +``` + +### **c-TF-IDF** +Calculate the c-TF-IDF representation for each outlier document and +find the best matching c-TF-IDF topic representation using +cosine similarity. + +```python +from bertopic import BERTopic + +# Train your BERTopic model +topic_model = BERTopic() +topics, probs = topic_model.fit_transform(docs) + +# Reduce outliers using the `distributions` strategy +new_topics = topic_model.reduce_outliers(docs, topics, strategy="c-tf-idf") +``` + +### **Embeddings** +Using the embeddings of each outlier documents, find the best +matching topic embedding using cosine similarity. + +```python +from bertopic import BERTopic + +# Train your BERTopic model +topic_model = BERTopic() +topics, probs = topic_model.fit_transform(docs) + +# Reduce outliers using the `distributions` strategy +new_topics = topic_model.reduce_outliers(docs, topics, strategy="embeddings") +``` + +!!! note + If you have pre-calculated the documents embeddings you can speed up the outlier + reduction process for the `"embeddings"` strategy as it will prevent re-calculating + the document embeddings. + +## **Update Topics** + +After generating our updated topics, we can feed them back into BERTopic in one of two ways. We can either update the topic representations themselves based on the documents that now belong to new topics or we can only update the topic frequency without updating the topic representations themselves. + +!!! warning + In both cases, it is important to realize that + updating the topics this way may lead to errors if topic reduction or topic merging techniques are used afterwards. The reason for this is that when you assign a -1 document to topic 1 and another -1 document to topic 2, it is unclear how you map the -1 documents. Is it matched to topic 1 or 2. + + +### **Update Topic Representation** + +When outlier documents are generated, they are not used when modeling the topic representations. These documents are completely ignored when finding good descriptions of topics. Thus, after having reduced the number of outliers in your topic model, you might want to update the topic representations with the documents that now belong to actual topics. To do so, we can make use of the `.update_topics` function: + +```python +topic_model.update_topics(docs, topics=new_topics) +``` + +As seen above, you will only need to pass the documents on which the model was trained including the new topics that were generated using one of the above four strategies. + + +### **Update Topic Frequency** + +```python +import pandas as pd +topic_model.topics_ = new_topics +documents = pd.DataFrame({"Document": docs, "Topic": new_topics}) +topic_model._update_topic_size(documents) +``` + +topic_model.get_topic_info() + + +### **Exploration** + +When you are reducing the number of topics, it might be worthwhile to iteratively visualize the results in order to get an intuitive understanding of the effect of the above four strategies. Making use of `.visualize_documents`, we can quickly iterate over the different strategies and view their effects. Here, an example will be shown on how to approach such a pipeline. + +First, we train our model: + +```python +from umap import UMAP +from bertopic import BERTopic +from sklearn.datasets import fetch_20newsgroups +from sentence_transformers import SentenceTransformer +from sklearn.feature_extraction.text import CountVectorizer + +# Prepare data, extract embeddings, and prepare sub-models +docs = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))['data'] +umap_model = UMAP(n_neighbors=15, n_components=5, min_dist=0.0, metric='cosine', random_state=42) +vectorizer_model = CountVectorizer(stop_words="english") +sentence_model = SentenceTransformer("all-MiniLM-L6-v2") +embeddings = sentence_model.encode(docs, show_progress_bar=True) + +# We reduce our embeddings to 2D as it will allows us to quickly iterate later on +reduced_embeddings = UMAP(n_neighbors=10, n_components=2, + min_dist=0.0, metric='cosine').fit_transform(embeddings) + +# Train our topic model +topic_model = BERTopic(embedding_model=sentence_model, umap_model=umap_model, + vectorizer_model=vectorizer_model calculate_probabilities=True, nr_topics=40) +topics, probs = topic_model.fit_transform(docs, embeddings) +``` + +After having trained our model, let us take a look at the 2D representation of the generated topics: + +```python +topic_model.visualize_documents(docs, reduced_embeddings=reduced_embeddings, + hide_document_hover=True, hide_annotations=True) +``` + + + + +Next, we reduce the number of outliers using the `probabilities` strategy: + +```python +new_topics = reduce_outliers(topic_model, docs, topics, probabilities=probs, + threshold=0.05, strategy="probabilities") +topic_model.update_topics(docs, topics=new_topics) +``` + +And finally, we visualize the results: + +```python +topic_model.visualize_documents(docs, reduced_embeddings=reduced_embeddings, + hide_document_hover=True, hide_annotations=True) +``` + + diff --git a/docs/getting_started/vectorizers/vectorizers.md b/docs/getting_started/vectorizers/vectorizers.md index 7533555f..f79abcf2 100644 --- a/docs/getting_started/vectorizers/vectorizers.md +++ b/docs/getting_started/vectorizers/vectorizers.md @@ -1,5 +1,3 @@ -# Vectorizers - In topic modeling, the quality of the topic representations is key for interpreting the topics, communicating results, and understanding patterns. It is of utmost importance to make sure that the topic representations fit with your use case. @@ -7,10 +5,10 @@ In practice, there is not one correct way of creating topic representations. Som words without any stop words. The diversity in use cases also means that we need to have some flexibility in BERTopic to make sure it can be used across most use cases. The image below illustrates this modularity: -

- -

- +

+ ![Image title](vectorizers.svg) +
+
In this section, we will go through several examples of vectorization algorithms and how they can be implemented. diff --git a/docs/index.md b/docs/index.md index f5da647b..ccee9885 100644 --- a/docs/index.md +++ b/docs/index.md @@ -118,6 +118,7 @@ Below, you will find an overview of common functions in BERTopic. | Set topic labels | `.set_topic_labels(my_custom_labels)` | | Merge topics | `.merge_topics(docs, topics_to_merge)` | | Reduce nr of topics | `.reduce_topics(docs, nr_topics=30)` | +| Reduce outliers | `.reduce_outliers(docs, topics)` | | Find topics | `.find_topics("vehicle")` | | Save model | `.save("my_model")` | | Load model | `BERTopic.load("my_model")` | diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 8d90266c..fcfddce2 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -18,4 +18,9 @@ body[data-md-color-primary="black"] .svg_image svg rect { .svg_image { text-align: center; -} \ No newline at end of file +} + +.center { + display: block; + margin: 0 auto; +} diff --git a/mkdocs.yml b/mkdocs.yml index ea79ad79..4f0f5c88 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,6 +17,7 @@ nav: - Topic Representation: getting_started/topicrepresentation/topicrepresentation.md - Search Topics: getting_started/search/search.md - Parameter tuning: getting_started/parameter tuning/parametertuning.md + - Outlier reduction: getting_started/outlier_reduction/outlier_reduction.md - Tips & Tricks: getting_started/tips_and_tricks/tips_and_tricks.md - Sub-models: - Embeddings: getting_started/embeddings/embeddings.md @@ -98,6 +99,7 @@ theme: markdown_extensions: - admonition + - md_in_html - pymdownx.details - pymdownx.highlight - pymdownx.superfences diff --git a/tests/test_bertopic.py b/tests/test_bertopic.py index ba24d0e4..03f93970 100644 --- a/tests/test_bertopic.py +++ b/tests/test_bertopic.py @@ -87,3 +87,12 @@ def test_full_model(model, documents, request): topics_to_merge = [0, 1] topic_model.merge_topics(documents, topics_to_merge) assert freq < topic_model.get_topic_freq(0) + + # Test reduction of outliers + if -1 in topics: + new_topics = topic_model.reduce_outliers(documents, topics, threshold=0.0) + nr_outliers_topic_model = sum([1 for topic in topic_model.topics_ if topic == -1]) + nr_outliers_new_topics = sum([1 for topic in new_topics if topic == -1]) + + if topic_model._outliers == 1: + assert nr_outliers_topic_model < nr_outliers_new_topics From 1e78429db29d3f60fcdc91bc674b00c77641fd4e Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sun, 18 Dec 2022 13:50:25 +0100 Subject: [PATCH 40/51] Update testing and add dataframe for approximate distribution to visualization page --- .../visualization/visualization.md | 17 +++++++++++++++++ tests/test_bertopic.py | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/getting_started/visualization/visualization.md b/docs/getting_started/visualization/visualization.md index d3a5e915..126e7c68 100644 --- a/docs/getting_started/visualization/visualization.md +++ b/docs/getting_started/visualization/visualization.md @@ -601,6 +601,23 @@ topic_model.visualize_distribution(topic_distr[0]) +Although a topic distribution is nice, we may want to see how each token contributes to a specific topic. To do so, we need to first calculate topic distributions on a token level and then visualize the results: + +```python +# Calculate the topic distributions on a token-level +topic_distr, topic_token_distr = topic_model.approximate_distribution(docs, calculate_tokens=True) + +# Visualize the token-level distributions +df = topic_model.visualize_approximate_distribution(docs[1], topic_token_distr[1]) +df +``` + +

+ +

+ +!!! note + To get the stylized dataframe for `.visualize_approximate_distribution` you will need to have Jinja installed. If you do not have this installed, an unstylized dataframe will be returned instead. You can install Jinja via `pip install jinja2` !!! note The distribution of the probabilities does not give an indication to diff --git a/tests/test_bertopic.py b/tests/test_bertopic.py index 03f93970..3b7e9504 100644 --- a/tests/test_bertopic.py +++ b/tests/test_bertopic.py @@ -95,4 +95,4 @@ def test_full_model(model, documents, request): nr_outliers_new_topics = sum([1 for topic in new_topics if topic == -1]) if topic_model._outliers == 1: - assert nr_outliers_topic_model < nr_outliers_new_topics + assert nr_outliers_topic_model > nr_outliers_new_topics From f0fdf0d47a9fc1e85e983f173bf56c1cbda1533d Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sun, 18 Dec 2022 19:25:36 +0100 Subject: [PATCH 41/51] Update documentation --- bertopic/_bertopic.py | 5 ++++- docs/faq.md | 30 ++++++++---------------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 6fc6f9de..2e72f452 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -1764,7 +1764,7 @@ def reduce_outliers(self, probabilities: np.ndarray = None, threshold: int = 0, embeddings: np.ndarray = None, - distributions_params: Mapping[str, Any] = {}): + distributions_params: Mapping[str, Any] = {}) -> List[int]: """ Reduce outliers by merging them with their nearest topic according to one of several strategies. @@ -1818,6 +1818,9 @@ def reduce_outliers(self, distributions_params: The parameters used in `.approximate_distribution` when using the strategy `"distributions"`. + Returns: + new_topics: The updated topics + Usage: The default settings uses the `"distributions"` strategy: diff --git a/docs/faq.md b/docs/faq.md index 791e029f..ca45654b 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -55,34 +55,20 @@ topics, probs = topic_model.fit_transform(docs) Although this will lower outliers found in the data, this might force outliers to be put into topics where they do not belong. So make sure to strike a balance between keeping noise and reducing outliers. -Second, after training our BERTopic model, we can assign outliers to topics. By setting `calculate_probabilities=True`, we calculate the probability -of a document belonging to any topic. That way, we can select, for each document, the topic with the highest probability. Thus, although we do -generate an outlier class in our BERTopic model, we can assign documents to an actual topic. - -To do this, we can set a probability threshold and assign each document to a topic based on their probabilities: +Second, after training our BERTopic model, we can assign outliers to topics by making use of the `.reduce_outliers` function in BERTopic. An advantage of using this approach is that there are four built in strategies one can choose for reducing outliers. Moreover, this technique allows the user to experiment with reducing outliers across a number of strategies and parameters without actually having to re-train the topic model each time. You can learn more about the `.reduce_outlier` function [here](https://maartengr.github.io/BERTopic/getting_started/outlier_reduction/outlier_reduction.html). The following is a minimal example of how to use this function: ```python -import numpy as np -probability_threshold = 0.01 -new_topics = [np.argmax(prob) if max(prob) >= probability_threshold else -1 for prob in probs] -``` - -!!! note "Note" - The topics assigned using the above method can result in topics different from those using `.fit_transform()`. This is expected - behavior as HDBSCAN is merely trying to imitate soft clustering after fitting the model and it is not a core component - of assigning points to clusters. +from bertopic import BERTopic -Third, we can estimate the topic distributions after training our model and use those to assign an outlier document to the topic that has the largest distribution in that document: +# Train your BERTopic model +topic_model = BERTopic() +topics, probs = topic_model.fit_transform(docs) -```python -import numpy as np -topic_distr, _ = topic_model.approximate_distribution(docs, min_similarity=0) -new_topics = [np.argmax(prob) if topic == -1 else topic - for topic, prob in zip(topics, topic_distr)] +# Reduce outliers +new_topics = topic_model.reduce_outliers(docs, topics) ``` - -Fourth, we can replace HDBSCAN with any other clustering algorithm that we want. So we can choose a clustering algorithm, like k-Means, that +Third, we can replace HDBSCAN with any other clustering algorithm that we want. So we can choose a clustering algorithm, like k-Means, that does not produce any outliers at all. Using k-Means instead of HDBSCAN is straightforward: ```python From 6849a19bcae00a9fa221369e5ae762d4e0a0b2f3 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Mon, 19 Dec 2022 06:46:50 +0100 Subject: [PATCH 42/51] Add .get_document_info to get meta data on trained documents --- README.md | 14 +++ bertopic/_bertopic.py | 93 +++++++++++++++++++ docs/getting_started/quickstart/quickstart.md | 20 +++- docs/index.md | 16 +++- tests/test_bertopic.py | 6 ++ 5 files changed, 147 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8d437829..e5bb153e 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,19 @@ frequent topic that was generated: ('pc', 0.003047105930670237)] ``` +Using `.get_document_info`, we can also extract information on a document level, such as their corresponding topics, probabilities, whether they are representative documents for a topic, etc.: + +```python +>>> topic_model.get_document_info(docs) + +Document Topic Name Top_n_words Probability ... +I am sure some bashers of Pens... 0 0_game_team_games_season game - team - games... 0.200010 ... +My brother is in the market for... -1 -1_can_your_will_any can - your - will... 0.420668 ... +Finally you said what you dream... -1 -1_can_your_will_any can - your - will... 0.807259 ... +Think! It's the SCSI card doing... 49 49_windows_drive_dos_file windows - drive - docs... 0.071746 ... +1) I have an old Jasmine drive... 49 49_windows_drive_dos_file windows - drive - docs... 0.038983 ... +``` + > **Note** > > Use `BERTopic(language="multilingual")` to select a model that supports 50+ languages. @@ -145,6 +158,7 @@ Below, you will find an overview of common functions in BERTopic. | Access all topics | `.get_topics()` | | Get topic freq | `.get_topic_freq()` | | Get all topic information| `.get_topic_info()` | +| Get all document information| `.get_document_info(docs)` | | Get representative docs per topic | `.get_representative_docs()` | | Update topic representation | `.update_topics(docs, n_gram_range=(1, 3))` | | Generate topic labels | `.generate_topic_labels()` | diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 2e72f452..e0d98a6e 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -1394,6 +1394,94 @@ def get_topic_freq(self, topic: int = None) -> Union[pd.DataFrame, int]: return pd.DataFrame(self.topic_sizes_.items(), columns=['Topic', 'Count']).sort_values("Count", ascending=False) + def get_document_info(self, + docs: List[str], + df: pd.DataFrame = None, + meta_data: Mapping[str, Any] = None) -> pd.DataFrame: + """ Get information about the documents on which the topic was trained + including the documents themselves, their respective topics, the name + of each topic, the top n words of each topic, whether it is a + representative document, and probability of the clustering if the cluster + model supports it. + + There are also options to include other meta data, such as the topic + distributions or the x and y coordinates of the reduced embeddings. + + Arguments: + docs: The documents on which the topic model was trained. + df: A dataframe containing the metadata and the documents on which + the topic model was originally trained on. + meta_data: A dictionary with meta data for each document in the form + of column name (key) and the respective values (value). + + Returns: + document_info: A dataframe with several statistics regarding + the documents on which the topic model was trained. + + Usage: + + To get the document info, you will only need to pass the documents on which + the topic model was trained: + + ```python + document_info = topic_model.get_document_info(docs) + ``` + + There are additionally options to include meta data, such as the topic + distributions. Moreover, we can pass the original dataframe that contains + the documents and extend it with the information retrieved from BERTopic: + + ```python + from sklearn.datasets import fetch_20newsgroups + + # The original data in a dataframe format to include the target variable + data= fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) + df = pd.DataFrame({"Document": data['data'], "Class": data['target']}) + + # Add information about the percentage of the document that relates to the topic + topic_distr, _ = topic_model.approximate_distribution(docs, batch_size=1000) + distributions = [distr[topic] if topic != -1 else 0 for topic, distr in zip(topics, topic_distr)] + + # Create our documents dataframe using the original dataframe and meta data about + # the topic distributions + document_info = topic_model.get_document_info(docs, df=df, + meta_data={"Topic_distribution": distributions}) + ``` + """ + if df is not None: + document_info = df.copy() + document_info["Document"] = docs + document_info["Topic"] = self.topics_ + else: + document_info = pd.DataFrame({"Document": docs, "Topic": self.topics_}) + + # Add topic info through `.get_topic_info()` + topic_info = self.get_topic_info().drop("Count", axis=1) + document_info = pd.merge(document_info, topic_info, on="Topic", how="left") + + # Add top n words + top_n_words = {topic: " - ".join(list(zip(*self.get_topic(topic)))[0]) for topic in set(self.topics_)} + document_info["Top_n_words"] = document_info.Topic.map(top_n_words) + + # Add flat probabilities + if self.probabilities_ is not None: + if len(self.probabilities_.shape) == 1: + document_info["Probability"] = self.probabilities_ + else: + document_info["Probability"] = [max(probs) if topic != -1 else 1-sum(probs) + for topic, probs in zip(self.topics_, self.probabilities_)] + + # Add representative document labels + repr_docs = [repr_doc for repr_docs in self.representative_docs_.values() for repr_doc in repr_docs] + document_info["Representative_document"] = False + document_info.loc[document_info.Document.isin(repr_docs), "Representative_document"] = True + + # Add custom meta data provided by the user + if meta_data is not None: + for column, values in meta_data.items(): + document_info[column] = values + return document_info + def get_representative_docs(self, topic: int = None) -> List[str]: """ Extract the best representing documents per topic. @@ -2572,6 +2660,11 @@ def save(self, save_embedding_model: bool = True) -> None: """ Saves the model to the specified path + When saving the model, make sure to also keep track of the versions + of dependencies and Python used. Loading and saving the model should + be done using the same dependencies and Python. Moreover, models + saved in one version of BERTopic should not be loaded in other versions. + Arguments: path: the location and name of the file you want to save save_embedding_model: Whether to save the embedding model in this class diff --git a/docs/getting_started/quickstart/quickstart.md b/docs/getting_started/quickstart/quickstart.md index 7a9e5575..3edaf581 100644 --- a/docs/getting_started/quickstart/quickstart.md +++ b/docs/getting_started/quickstart/quickstart.md @@ -60,6 +60,19 @@ frequent topic that was generated, topic 0: ('pc', 0.003047105930670237)] ``` +Using `.get_document_info`, we can also extract information on a document level, such as their corresponding topics, probabilities, whether they are representative documents for a topic, etc.: + +```python +>>> topic_model.get_document_info(docs) + +Document Topic Name Top_n_words Probability ... +I am sure some bashers of Pens... 0 0_game_team_games_season game - team - games... 0.200010 ... +My brother is in the market for... -1 -1_can_your_will_any can - your - will... 0.420668 ... +Finally you said what you dream... -1 -1_can_your_will_any can - your - will... 0.807259 ... +Think! It is the SCSI card doing... 49 49_windows_drive_dos_file windows - drive - docs... 0.071746 ... +1) I have an old Jasmine drive... 49 49_windows_drive_dos_file windows - drive - docs... 0.038983 ... +``` + !!! Tip "Tip!" Use `BERTopic(language="multilingual")` to select a model that supports 50+ languages. @@ -91,4 +104,9 @@ topic_model = BERTopic.load("my_model") !!! Tip "Tip!" If you do not want to save the embedding model because it is loaded from the cloud, simply run `model.save("my_model", save_embedding_model=False)` instead. Then, you can load in the model - with `BERTopic.load("my_model", embedding_model="whatever_model_you_used")`. \ No newline at end of file + with `BERTopic.load("my_model", embedding_model="whatever_model_you_used")`. + +!!! Warning "Warning" + When saving the model, make sure to also keep track of the versions of dependencies and Python used. + Loading and saving the model should be done using the same dependencies and Python. Moreover, models + saved in one version of BERTopic should not be loaded in other versions. diff --git a/docs/index.md b/docs/index.md index ccee9885..57d2d3ae 100644 --- a/docs/index.md +++ b/docs/index.md @@ -83,7 +83,20 @@ frequent topic that was generated, topic 0: ('software', 0.0034415334250699077), ('email', 0.0034239554442333257), ('pc', 0.003047105930670237)] -``` +``` + +Using `.get_document_info`, we can also extract information on a document level, such as their corresponding topics, probabilities, whether they are representative documents for a topic, etc.: + +```python +>>> topic_model.get_document_info(docs) + +Document Topic Name Top_n_words Probability ... +I am sure some bashers of Pens... 0 0_game_team_games_season game - team - games... 0.200010 ... +My brother is in the market for... -1 -1_can_your_will_any can - your - will... 0.420668 ... +Finally you said what you dream... -1 -1_can_your_will_any can - your - will... 0.807259 ... +Think! It is the SCSI card doing... 49 49_windows_drive_dos_file windows - drive - docs... 0.071746 ... +1) I have an old Jasmine drive... 49 49_windows_drive_dos_file windows - drive - docs... 0.038983 ... +``` **NOTE**: Use `BERTopic(language="multilingual")` to select a model that supports 50+ languages. @@ -112,6 +125,7 @@ Below, you will find an overview of common functions in BERTopic. | Access all topics | `.get_topics()` | | Get topic freq | `.get_topic_freq()` | | Get all topic information| `.get_topic_info()` | +| Get all document information| `.get_document_info(docs)` | | Get representative docs per topic | `.get_representative_docs()` | | Update topic representation | `.update_topics(docs, n_gram_range=(1, 3))` | | Generate topic labels | `.generate_topic_labels()` | diff --git a/tests/test_bertopic.py b/tests/test_bertopic.py index 3b7e9504..e3cfc542 100644 --- a/tests/test_bertopic.py +++ b/tests/test_bertopic.py @@ -23,6 +23,10 @@ def test_full_model(model, documents, request): assert len(topic_model.get_topic_freq()) > 2 assert len(topic_model.get_topics()) == len(topic_model.get_topic_freq()) + # Test extraction of document info + document_info = topic_model.get_document_info(documents) + assert len(document_info) == len(documents) + # Test transform doc = "This is a new document to predict." topics_test, probs_test = topic_model.transform([doc]) @@ -96,3 +100,5 @@ def test_full_model(model, documents, request): if topic_model._outliers == 1: assert nr_outliers_topic_model > nr_outliers_new_topics + + \ No newline at end of file From da5a73ee50c52176856296216ef3eaed98606b92 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Mon, 19 Dec 2022 08:16:33 +0100 Subject: [PATCH 43/51] Fix spacy merge --- bertopic/backend/_spacy.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bertopic/backend/_spacy.py b/bertopic/backend/_spacy.py index 59529c96..c90bf0ed 100644 --- a/bertopic/backend/_spacy.py +++ b/bertopic/backend/_spacy.py @@ -90,7 +90,5 @@ def embed(self, for doc in tqdm(documents, position=0, leave=True, disable=not verbose): embeddings.append(self.embedding_model(doc or empty_document).vector) embeddings = np.array(embeddings) - else: - embeddings = np.array([embedding.get() for embedding in embeddings]) - return embeddings + return embeddings \ No newline at end of file From ea6c9bd9bfaea7c6b0415ff6a5aeced7490841e4 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Mon, 19 Dec 2022 08:37:55 +0100 Subject: [PATCH 44/51] Updated empty document in spacy as no vector was returned otherwise --- bertopic/backend/_spacy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bertopic/backend/_spacy.py b/bertopic/backend/_spacy.py index c90bf0ed..900109a7 100644 --- a/bertopic/backend/_spacy.py +++ b/bertopic/backend/_spacy.py @@ -75,7 +75,7 @@ def embed(self, """ # Handle empty documents, spaCy models automatically map # empty strings to the zero vector - empty_document = "" + empty_document = " " # Extract embeddings from a transformer model if "transformer" in self.embedding_model.component_names: From 8a0df2235a847596c1d56f6ddd9c74a6f86bcce4 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Mon, 19 Dec 2022 08:55:30 +0100 Subject: [PATCH 45/51] Fix gensim empty document --- bertopic/backend/_gensim.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/bertopic/backend/_gensim.py b/bertopic/backend/_gensim.py index ca5c5a98..7ceb603d 100644 --- a/bertopic/backend/_gensim.py +++ b/bertopic/backend/_gensim.py @@ -48,19 +48,19 @@ def embed(self, Document/words embeddings with shape (n, m) with `n` documents/words that each have an embeddings size of `m` """ + vector_shape = self.embedding_model.get_vector(list(self.embedding_model.index_to_key)[0]).shape[0] + empty_vector = np.zeros(vector_shape) + + # Extract word embeddings and pool to document-level embeddings = [] for doc in tqdm(documents, disable=not verbose, position=0, leave=True): - # Extract word embeddings and pool to document-level - embeddings.append( - np.mean( - [ - self.embedding_model.get_vector(word) - for word in doc.split() - if word in self.embedding_model.key_to_index - ], - axis=0, - ) - ) + embedding = [self.embedding_model.get_vector(word) for word in doc.split() + if word in self.embedding_model.key_to_index] + + if len(embedding) > 0: + embeddings.append(np.mean(embedding, axis=0)) + else: + embeddings.append(empty_vector) embeddings = np.array(embeddings) return embeddings From 7c750104de944f76d5ca190c44adaa658ec3cd52 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 20 Dec 2022 13:52:23 +0100 Subject: [PATCH 46/51] Prepare changelog, small changes --- bertopic/_bertopic.py | 2 +- docs/changelog.md | 159 ++++++++++++++++++ .../visualization/visualization.md | 8 + 3 files changed, 168 insertions(+), 1 deletion(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index d3639a7a..0bd15367 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -954,7 +954,7 @@ def approximate_distribution(self, window: int = 4, stride: int = 1, min_similarity: float = 0.1, - batch_size: int = None, + batch_size: int = 1000, padding: bool = False, use_embedding_model: bool = False, calculate_tokens: bool = False, diff --git a/docs/changelog.md b/docs/changelog.md index 7a075816..9d795efc 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -5,6 +5,165 @@ hide: # Changelog +## **Version 0.13.0** +*Release date: 4 January, 2023* + +

Highlights:

+ +* Calculate [topic distributions](https://maartengr.github.io/BERTopic/getting_started/distribution/distribution.html) with `.approximate_distribution` regardless of the cluster model used + * Generates topic distributions on a document- and token-levels + * Can be used for any document regardless of its size! +* [Fully supervised BERTopic](https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html) + * You can now use a classification model for the clustering step instead to create a fully supervised topic model +* [Manual topic modeling](https://maartengr.github.io/BERTopic/getting_started/manual/manual.html) + * Generate topic representations from labels directly + * Allows for skipping the embedding and clustering steps in order to go directly to the topic representation step +* [Reduce outliers](https://maartengr.github.io/BERTopic/getting_started/outlier_reduction/outlier_reduction.html) with 4 different strategies using `.reduce_outliers` +* Install BERTopic without `SentenceTransformers` for a [lightweight package](https://maartengr.github.io/BERTopic/getting_started/tips_and_tricks/tips_and_tricks.html#lightweight-installation): + * `pip install --no-deps bertopic` + * `pip install --upgrade numpy hdbscan umap-learn pandas scikit-learn tqdm plotly pyyaml` +* Get meta data of trained documents such as topics and probabilities using `.get_document_info(docs)` +* Added more support for cuML's HDBSCAN + * Calculate and predict probabilities during `fit_transform` and `transform` respectively + * This should give a major speed-up when setting `calculate_probabilities=True` +* More images to the documentation and a lot of changes/updates/clarifications +* Get representative documents for non-HDBSCAN models by comparing document and topic c-TF-IDF representations +* Sklearn Pipeline [Embedder](https://maartengr.github.io/BERTopic/getting_started/embeddings/embeddings.html#scikit-learn-embeddings) by [@koaning](https://github.com/koaning) in [#791](https://github.com/MaartenGr/BERTopic/pull/791) + +

Fixes:

+ +* Improve `.partial_fit` documentation ([#837](https://github.com/MaartenGr/BERTopic/issues/837)) +* Fixed scipy linkage usage ([#807](https://github.com/MaartenGr/BERTopic/issues/807)) +* Fixed shifted heatmap ([#782](https://github.com/MaartenGr/BERTopic/issues/782)) +* Fixed SpaCy backend ([#744](https://github.com/MaartenGr/BERTopic/issues/744)) +* Fixed representative docs with small clusters (<3) ([#703](https://github.com/MaartenGr/BERTopic/issues/703)) +* Typo fixed by [@timpal0l](https://github.com/timpal0l) in [#734](https://github.com/MaartenGr/BERTopic/pull/734) +* Typo fixed by [@srulikbd](https://github.com/timpal0l) in [#842](https://github.com/MaartenGr/BERTopic/pull/842) +* Correcting iframe urls by [@Mustapha-AJEGHRIR](https://github.com/Mustapha-AJEGHRIR) in [#798](https://github.com/MaartenGr/BERTopic/pull/798) +* Refactor embedding methods by [@zachschillaci27](https://github.com/zachschillaci27) in [#855](https://github.com/MaartenGr/BERTopic/pull/855) +* Added diversity parameter to update_topics() function by [@anubhabdaserrr](https://github.com/anubhabdaserrr) in [#887](https://github.com/MaartenGr/BERTopic/pull/887) + +

Documentation

+ +Personally, I believe that documentation can be seen as a feature and is an often underestimated aspect of open-source. So I went a bit overboard😅... and created an animation about the three pillars of BERTopic using Manim. There are many other visualizations added, one of each variation of BERTopic, and many smaller changes. + + + +

Topic Distributions

+ +The difficulty with a cluster-based topic modeling technique is that it does not directly consider that documents may contain multiple topics. With the new release, we can now model the distributions of topics! We even consider that a single word might be related to multiple topics. If a document is a mixture of topics, what is preventing a single word to be the same? + +To do so, we approximate the distribution of topics in a document by calculating and summing the similarities of tokensets (achieved by applying a sliding window) with the topics: + +```python +# After fitting your model run the following for either your trained documents or even unseen documents +topic_distr, _ = topic_model.approximate_distribution(docs) +``` + +To calculate and visualize the topic distributions in a document on a token-level, we can run the following: + +```python +# We need to calculate the topic distributions on a token level +topic_distr, topic_token_distr = topic_model.approximate_distribution(docs, calculate_tokens=True) + +# Create a visualization using a styled dataframe if Jinja2 is installed +df = topic_model.visualize_approximate_distribution(docs[0], topic_token_distr[0]); df +``` + +

Supervised Topic Modeling

+ +BERTopic now supports fully-supervised classification! Instead of using a clustering algorithm, like HDBSCAN, we can replace it with a classifier, like Logistic Regression: + +```python +from bertopic import BERTopic +from bertopic.dimensionality import BaseDimensionalityReduction +from sklearn.datasets import fetch_20newsgroups +from sklearn.linear_model import LogisticRegression + +# Get labeled data +data= fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) +docs = data['data'] +y = data['target'] + +# Allows us to skip over the dimensionality reduction step +empty_dimensionality_model = BaseDimensionalityReduction() + +# Create a classifier to be used instead of the cluster model +clf= LogisticRegression() + +# Create a fully supervised BERTopic instance +topic_model= BERTopic( + umap_model=empty_dimensionality_model, + hdbscan_model=clf +) +topics, probs = topic_model.fit_transform(docs, y=y) +``` + +

Manual Topic Modeling

+ +When you already have a bunch of labels and simply want to extract topic representations from them, you might not need to actually learn how those can predicted. We can bypass the `embeddings -> dimensionality reduction -> clustering` steps and go straight to the c-TF-IDF representation of our labels: + +```python +from bertopic import BERTopic +from bertopic.backend import BaseEmbedder +from bertopic.cluster import BaseCluster +from bertopic.dimensionality import BaseDimensionalityReduction + +# Prepare our empty sub-models and reduce frequent words while we are at it. +empty_embedding_model = BaseEmbedder() +empty_dimensionality_model = BaseDimensionalityReduction() +empty_cluster_model = BaseCluster() + +# Fit BERTopic without actually performing any clustering +topic_model= BERTopic( + embedding_model=empty_embedding_model, + umap_model=empty_dimensionality_model, + hdbscan_model=empty_cluster_model, +) +topics, probs = topic_model.fit_transform(docs, y=y) +``` + +

Outlier Reduction

+ +Outlier reduction is an frequently-discussed topic in BERTopic as its default cluster model, HDBSCAN, has a tendency to generate many outliers. This often helps in the topic representation steps, as we do not consider documents that are less relevant, but you might want to still assign those outliers to actual topics. In the modular philosophy of BERTopic, keeping training times in mind, it is now possible to perform outlier reduction **after** having trained your topic model. This allows for ease of iteration and prevents having to train BERTopic many times to find the parameters you are searching for. There are 4 different strategies that you can use, so make sure to check out the [documentation](https://maartengr.github.io/BERTopic/getting_started/outlier_reduction/outlier_reduction.html)! + +Using it is rather straightforward: + +```python +new_topics = topic_model.reduce_outliers(docs, topics) +``` + +

Lightweight BERTopic

+ +The default embedding model in BERTopic is one of the amazing sentence-transformers models, namely `"all-MiniLM-L6-v2"`. Although this model performs well out of the box, it typically needs a GPU to transform the documents into embeddings in a reasonable time. Moreover, the installation requires `pytorch` which often results in a rather large environment, memory-wise. + +Fortunately, it is possible to install BERTopic without `sentence-transformers` and use it as a lightweight solution instead. The installation can be done as follows: + +```bash +pip install --no-deps bertopic +pip install --upgrade numpy hdbscan umap-learn pandas scikit-learn tqdm plotly pyyaml +``` + +Then, we can use BERTopic without `sentence-transformers` as follows using a CPU-based embedding technique: + +```python +from sklearn.pipeline import make_pipeline +from sklearn.decomposition import TruncatedSVD +from sklearn.feature_extraction.text import TfidfVectorizer + +pipe = make_pipeline( + TfidfVectorizer(), + TruncatedSVD(100) +) + +topic_model = BERTopic(embedding_model=pipe) +``` + +As a result, the entire package and resulting model can be run quickly on the CPU and no GPU is necessary! + + + ## **Version 0.12.0** *Release date: 5 September, 2022* diff --git a/docs/getting_started/visualization/visualization.md b/docs/getting_started/visualization/visualization.md index 126e7c68..d1add600 100644 --- a/docs/getting_started/visualization/visualization.md +++ b/docs/getting_started/visualization/visualization.md @@ -72,6 +72,14 @@ topic_model.visualize_documents(docs, reduced_embeddings=reduced_embeddings) as saving all those documents in the visualization can be quite expensive and result in large files. However, it might be interesting to set `hide_document_hover=False` in order to hover over the points and see the content of the documents. +### **Custom Hover** + +When you visualize the documents, you might not always want to see the complete document over hover. Many documents have shorter information that might be more interesting to visualize, such as its title. To create the hover based on a documents' title instead of its content, you can simply pass a variable (`titles`) containing the title for each document: + +```python +topic_model.visualize_documents(titles, reduced_embeddings=reduced_embeddings) +``` + ## **Visualize Topic Hierarchy** The topics that were created can be hierarchically reduced. In order to understand the potential hierarchical structure of the topics, we can use `scipy.cluster.hierarchy` to create clusters and visualize how From 0bf22e66d9ae9d0418cfbca7424e094263e7b9ff Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Sun, 25 Dec 2022 08:19:30 +0100 Subject: [PATCH 47/51] Fixed seed for sampling representative docs --- bertopic/_bertopic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 0bd15367..1e05436b 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -2984,7 +2984,7 @@ def _save_representative_docs(self, documents: pd.DataFrame): for topic, doc_ids in representative_docs.items()} else: - documents_per_topic = documents.groupby('Topic').sample(n=500, replace=True).drop_duplicates() + documents_per_topic = documents.groupby('Topic').sample(n=500, replace=True, random_state=42).drop_duplicates() self.representative_docs_ = {} for topic in documents['Topic'].unique(): From 6aa2274dbc5c45a5ccc785c04cbc09bab53547fb Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 27 Dec 2022 08:28:04 +0100 Subject: [PATCH 48/51] Add testing, doc updates --- bertopic/_bertopic.py | 14 +++++++------- docs/api/cluster/base.md | 3 +++ docs/api/dimensionality/base.md | 3 +++ mkdocs.yml | 17 +++++++++++------ tests/conftest.py | 23 +++++++++++++++++++++++ tests/test_bertopic.py | 2 +- 6 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 docs/api/cluster/base.md create mode 100644 docs/api/dimensionality/base.md diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index 1e05436b..ed52bbba 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -753,9 +753,9 @@ def topics_per_class(self, Arguments: docs: The documents you used when calling either `fit` or `fit_transform` classes: The class of each document. This can be either a list of strings or ints. - global_tuning: Fine-tune each topic representation at timestamp t by averaging its c-TF-IDF matrix - with the global c-TF-IDF matrix. Turn this off if you want to prevent words in - topic representations that could not be found in the documents at timestamp t. + global_tuning: Fine-tune each topic representation for class c t by averaging its c-TF-IDF matrix + with the global c-TF-IDF matrix. Turn this off if you want to prevent words in + topic representations that could not be found in the documents for class c. Returns: topics_per_class: A dataframe that contains the topic, words, and frequency of topics @@ -2665,10 +2665,10 @@ def save(self, save_embedding_model: bool = True) -> None: """ Saves the model to the specified path - When saving the model, make sure to also keep track of the versions - of dependencies and Python used. Loading and saving the model should - be done using the same dependencies and Python. Moreover, models - saved in one version of BERTopic should not be loaded in other versions. + When saving the model, make sure to also keep track of the versions + of dependencies and Python used. Loading and saving the model should + be done using the same dependencies and Python. Moreover, models + saved in one version of BERTopic should not be loaded in other versions. Arguments: path: the location and name of the file you want to save diff --git a/docs/api/cluster/base.md b/docs/api/cluster/base.md new file mode 100644 index 00000000..466bcc32 --- /dev/null +++ b/docs/api/cluster/base.md @@ -0,0 +1,3 @@ +# `BaseCluster` + +::: bertopic.cluster._base.BaseCluster diff --git a/docs/api/dimensionality/base.md b/docs/api/dimensionality/base.md new file mode 100644 index 00000000..060dea6b --- /dev/null +++ b/docs/api/dimensionality/base.md @@ -0,0 +1,3 @@ +# `BaseDimensionalityReduction` + +::: bertopic.dimensionality._base.BaseDimensionalityReduction diff --git a/mkdocs.yml b/mkdocs.yml index 4f0f5c88..680edc9f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -39,12 +39,17 @@ nav: - API: - BERTopic: api/bertopic.md - MMR: api/mmr.md - - Vectorizers: - - cTFIDF: api/ctfidf.md - - OnlineCountVectorizer: api/onlinecv.md - - Backends: - - Base: api/backends/base.md - - Word Doc: api/backends/word_doc.md + - Sub-models: + - Backends: + - Base: api/backends/base.md + - Word Doc: api/backends/word_doc.md + - Dimensionality Reduction: + - Base: api/dimensionality/base.md + - Clustering: + - Base: api/cluster/base.md + - Vectorizers: + - cTFIDF: api/ctfidf.md + - OnlineCountVectorizer: api/onlinecv.md - Plotting: - Barchart: api/plotting/barchart.md - Documents: api/plotting/documents.md diff --git a/tests/conftest.py b/tests/conftest.py index b4d45cdb..a775a6bc 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -8,6 +8,9 @@ from sklearn.cluster import KMeans, MiniBatchKMeans from sklearn.decomposition import PCA, IncrementalPCA from bertopic.vectorizers import OnlineCountVectorizer +from bertopic.cluster import BaseCluster +from bertopic.dimensionality import BaseDimensionalityReduction +from sklearn.linear_model import LogisticRegression @pytest.fixture(scope="session") @@ -34,6 +37,13 @@ def documents(): return newsgroup_docs +@pytest.fixture(scope="session") +def targets(): + data = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) + y = data['target'][:500] + return y + + @pytest.fixture(scope="session") def base_topic_model(documents, document_embeddings, embedding_model): model = BERTopic(embedding_model=embedding_model, calculate_probabilities=True) @@ -81,6 +91,19 @@ def kmeans_pca_topic_model(documents, document_embeddings): return model +@pytest.fixture(scope="session") +def supervised_topic_model(documents, document_embeddings, embedding_model, targets): + empty_dimensionality_model = BaseDimensionalityReduction() + clf = LogisticRegression() + + model = BERTopic( + embedding_model=embedding_model, + umap_model=empty_dimensionality_model, + hdbscan_model=clf, + ).fit(documents, embeddings=document_embeddings, y=targets) + return model + + @pytest.fixture(scope="session") def online_topic_model(documents, document_embeddings, embedding_model): umap_model = IncrementalPCA(n_components=5) diff --git a/tests/test_bertopic.py b/tests/test_bertopic.py index e3cfc542..3b6d4f47 100644 --- a/tests/test_bertopic.py +++ b/tests/test_bertopic.py @@ -2,7 +2,7 @@ import pytest -@pytest.mark.parametrize('model', [('kmeans_pca_topic_model'), ('custom_topic_model'), ('merged_topic_model'), ('reduced_topic_model'), ('online_topic_model')]) +@pytest.mark.parametrize('model', [('kmeans_pca_topic_model'), ('custom_topic_model'), ('merged_topic_model'), ('reduced_topic_model'), ('online_topic_model'), ('supervised_topic_model')]) def test_full_model(model, documents, request): """ Tests the entire pipeline in one go. This serves as a sanity check to see if the default settings result in a good separation of topics. From cb36a4934e357cadb0b229fd91846564b10d0dee Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 27 Dec 2022 08:45:14 +0100 Subject: [PATCH 49/51] Small changes --- .flake8 | 2 +- .github/workflows/testing.yml | 2 +- .gitignore | 1 + LICENSE | 2 +- bertopic/_bertopic.py | 10 +++++----- docs/changelog.md | 18 ++++++++++++++++++ 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/.flake8 b/.flake8 index 1fd48933..01f47754 100644 --- a/.flake8 +++ b/.flake8 @@ -1,2 +1,2 @@ -[flake8] +[flake8] max-line-length = 160 diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index c2ce2f83..edfca558 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -25,7 +25,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --upgrade pip + python -m pip install --upgrade pip pip install -e ".[test]" - name: Run Checking Mechanisms run: make check diff --git a/.gitignore b/.gitignore index a8e93cbf..30b09012 100644 --- a/.gitignore +++ b/.gitignore @@ -73,6 +73,7 @@ ENV/ env.bak/ venv.bak/ +# Artifacts .idea .idea/ .vscode diff --git a/LICENSE b/LICENSE index 27f9436e..6bd3f051 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022, Maarten P. Grootendorst +Copyright (c) 2023, Maarten P. Grootendorst Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/bertopic/_bertopic.py b/bertopic/_bertopic.py index ed52bbba..cec81abe 100644 --- a/bertopic/_bertopic.py +++ b/bertopic/_bertopic.py @@ -1402,7 +1402,7 @@ def get_topic_freq(self, topic: int = None) -> Union[pd.DataFrame, int]: def get_document_info(self, docs: List[str], df: pd.DataFrame = None, - meta_data: Mapping[str, Any] = None) -> pd.DataFrame: + metadata: Mapping[str, Any] = None) -> pd.DataFrame: """ Get information about the documents on which the topic was trained including the documents themselves, their respective topics, the name of each topic, the top n words of each topic, whether it is a @@ -1416,7 +1416,7 @@ def get_document_info(self, docs: The documents on which the topic model was trained. df: A dataframe containing the metadata and the documents on which the topic model was originally trained on. - meta_data: A dictionary with meta data for each document in the form + metadata: A dictionary with meta data for each document in the form of column name (key) and the respective values (value). Returns: @@ -1450,7 +1450,7 @@ def get_document_info(self, # Create our documents dataframe using the original dataframe and meta data about # the topic distributions document_info = topic_model.get_document_info(docs, df=df, - meta_data={"Topic_distribution": distributions}) + metadata={"Topic_distribution": distributions}) ``` """ if df is not None: @@ -1482,8 +1482,8 @@ def get_document_info(self, document_info.loc[document_info.Document.isin(repr_docs), "Representative_document"] = True # Add custom meta data provided by the user - if meta_data is not None: - for column, values in meta_data.items(): + if metadata is not None: + for column, values in metadata.items(): document_info[column] = values return document_info diff --git a/docs/changelog.md b/docs/changelog.md index 9d795efc..1e51fdcf 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -162,6 +162,24 @@ topic_model = BERTopic(embedding_model=pipe) As a result, the entire package and resulting model can be run quickly on the CPU and no GPU is necessary! +

Document Information

+ +Get information about the documents on which the topic was trained including the documents themselves, their respective topics, the name of each topic, the top n words of each topic, whether it is a representative document, and the probability of the clustering if the cluster model supports it. There are also options to include other metadata, such as the topic distributions or the x and y coordinates of the reduced embeddings that you can learn more about here. + +To get the document info, you will only need to pass the documents on which the topic model was trained: + + +```python +>>> topic_model.get_document_info(docs) + +Document Topic Name Top_n_words Probability ... +I am sure some bashers of Pens... 0 0_game_team_games_season game - team - games... 0.200010 ... +My brother is in the market for... -1 -1_can_your_will_any can - your - will... 0.420668 ... +Finally you said what you dream... -1 -1_can_your_will_any can - your - will... 0.807259 ... +Think! It is the SCSI card doing... 49 49_windows_drive_dos_file windows - drive - docs... 0.071746 ... +1) I have an old Jasmine drive... 49 49_windows_drive_dos_file windows - drive - docs... 0.038983 ... +``` + ## **Version 0.12.0** From 637d4fee655d3684ebcad8c0c769e329be796118 Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Wed, 28 Dec 2022 12:36:29 +0100 Subject: [PATCH 50/51] Update docs --- docs/getting_started/outlier_reduction/outlier_reduction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting_started/outlier_reduction/outlier_reduction.md b/docs/getting_started/outlier_reduction/outlier_reduction.md index 009fbf97..b40944ca 100644 --- a/docs/getting_started/outlier_reduction/outlier_reduction.md +++ b/docs/getting_started/outlier_reduction/outlier_reduction.md @@ -79,7 +79,7 @@ from bertopic import BERTopic topic_model = BERTopic() topics, probs = topic_model.fit_transform(docs) -# Reduce outliers using the `distributions` strategy +# Reduce outliers using the `c-tf-idf` strategy new_topics = topic_model.reduce_outliers(docs, topics, strategy="c-tf-idf") ``` @@ -94,7 +94,7 @@ from bertopic import BERTopic topic_model = BERTopic() topics, probs = topic_model.fit_transform(docs) -# Reduce outliers using the `distributions` strategy +# Reduce outliers using the `embeddings` strategy new_topics = topic_model.reduce_outliers(docs, topics, strategy="embeddings") ``` From db8c1bec74851efd4197c2a4e9934973fc32c34f Mon Sep 17 00:00:00 2001 From: MaartenGr Date: Tue, 3 Jan 2023 12:52:52 +0100 Subject: [PATCH 51/51] Small doc change --- docs/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 57d2d3ae..b96ff873 100644 --- a/docs/index.md +++ b/docs/index.md @@ -100,7 +100,8 @@ Think! It is the SCSI card doing... 49 49_windows_drive_dos_file windows **NOTE**: Use `BERTopic(language="multilingual")` to select a model that supports 50+ languages. -## Modularity +## **Modularity** + By default, the main steps for topic modeling with BERTopic are sentence-transformers, UMAP, HDBSCAN, and c-TF-IDF run in sequence. However, it assumes some independence between these steps which makes BERTopic quite modular. In other words, BERTopic not only allows you to build your own topic model but to explore several topic modeling techniques on top of your customized topic model: