# Chapter 8: Topic Modelling

## 8.3 Hierarchical Dirichlet Process (HDP)

The Hierarchical Dirichlet Process (HDP) is an advanced, non-parametric extension of Latent Dirichlet Allocation (LDA) that has revolutionized the field of topic modeling in recent years. Unlike LDA, HDP does not require the number of topics to be specified beforehand, making it a flexible and powerful tool for researchers working with large, complex datasets. Instead, HDP infers the number of topics based on the data at hand, enabling it to identify and classify an unlimited number of distinct topics with ease.

Furthermore, HDP's ability to adapt to new data and identify new topics as they emerge makes it an ideal choice for researchers who need to stay on top of the latest trends and developments in their field. Whether you're working with text data, images, or other types of unstructured data, HDP can help you gain new insights and uncover hidden patterns that might otherwise have gone undiscovered.

**8.3.1 How HDP Works**

The Hierarchical Dirichlet Process (HDP) is a probabilistic model that partitions data into an unknown number of clusters. This is accomplished through the use of a Dirichlet Process. When used in the context of topic modelling, each cluster represents a unique topic. The goal of HDP is to assign each word in each document to a topic, much like Latent Dirichlet Allocation (LDA).

However, the HDP model is unique in that it can share clusters, or topics, across multiple groups or documents. This means that topics are not specific to a particular document, but rather are shared across all documents, creating a hierarchy. This hierarchical structure allows for a more nuanced analysis of topics, as well as the ability to identify relationships between topics that may not be immediately apparent in a traditional LDA model. Furthermore, the hierarchical nature of HDP allows for the possibility of discovering higher-level themes or concepts that emerge from the underlying topics.

**8.3.2 Implementing HDP with Gensim**

Gensim provides a straightforward way to apply HDP. Here's an example of how to use it:

`from gensim.models import HdpModel`

from gensim.corpora import Dictionary

# Let's assume that 'texts' is a list of lists, where each inner list contains the tokens from a single document

dictionary = Dictionary(texts)

# Convert the list of lists into a Document Term Matrix using the dictionary prepared above.

doc_term_matrix = [dictionary.doc2bow(doc) for doc in texts]

# Creating the HDP model object

hdpmodel = HdpModel(corpus=doc_term_matrix, id2word=dictionary)

# Print the topics

for i, topic in hdpmodel.show_topics(formatted=True, num_topics=10, num_words=10):

print(f'Topic {i} -> {topic}')

In the above code, we first create a dictionary from our texts. Then we convert our texts into a document-term matrix. Finally, we create an HDP model and print the resulting topics.

**8.3.3 Evaluating HDP Models**

Evaluating Hierarchical Dirichlet Process (HDP) models can be more challenging than evaluating Latent Dirichlet Allocation (LDA) models because the number of topics is not fixed. With LDA, we would typically know the number of topics beforehand which can help us evaluate the model. However, with HDP, the number of topics is not fixed and will depend on the data.

One approach to evaluating HDP models is to look at the coherence of the topics produced. High coherence generally indicates that the topics make sense and are distinct from each other.

Another approach is to look at the perplexity score, which measures how well the model predicts unseen data. In this way, we can get a better sense of how well the model will generalize to new data. Both of these approaches can give us insights into the quality of the HDP model and how well it is performing in comparison to other models.

**Example:**

`from gensim.models.coherencemodel import CoherenceModel`

# Compute Coherence Score

coherence_model_hdp = CoherenceModel(model=hdpmodel, texts=texts, dictionary=dictionary, coherence='c_v')

coherence_hdp = coherence_model_hdp.get_coherence()

print('Coherence Score: ', coherence_hdp)

**8.3.4 Limitations of HDP**

While HDP is a powerful method for topic modelling, it does have some limitations. One of the main concerns is that it can be computationally intensive and slower to run than LDA, which can make it challenging to work with large datasets. This means that HDP may not be the best choice for researchers who are working with limited resources or who need to analyze large amounts of data quickly.

Another potential drawback is that HDP can be harder to fine-tune than LDA, which has fewer hyperparameters. This can make it more difficult to achieve optimal results, especially for researchers who are new to topic modelling or who are working on complex projects. Despite these limitations, HDP remains a valuable tool for topic modelling, and it is widely used by researchers in a range of fields.

## 8.3 Hierarchical Dirichlet Process (HDP)

The Hierarchical Dirichlet Process (HDP) is an advanced, non-parametric extension of Latent Dirichlet Allocation (LDA) that has revolutionized the field of topic modeling in recent years. Unlike LDA, HDP does not require the number of topics to be specified beforehand, making it a flexible and powerful tool for researchers working with large, complex datasets. Instead, HDP infers the number of topics based on the data at hand, enabling it to identify and classify an unlimited number of distinct topics with ease.

Furthermore, HDP's ability to adapt to new data and identify new topics as they emerge makes it an ideal choice for researchers who need to stay on top of the latest trends and developments in their field. Whether you're working with text data, images, or other types of unstructured data, HDP can help you gain new insights and uncover hidden patterns that might otherwise have gone undiscovered.

**8.3.1 How HDP Works**

The Hierarchical Dirichlet Process (HDP) is a probabilistic model that partitions data into an unknown number of clusters. This is accomplished through the use of a Dirichlet Process. When used in the context of topic modelling, each cluster represents a unique topic. The goal of HDP is to assign each word in each document to a topic, much like Latent Dirichlet Allocation (LDA).

However, the HDP model is unique in that it can share clusters, or topics, across multiple groups or documents. This means that topics are not specific to a particular document, but rather are shared across all documents, creating a hierarchy. This hierarchical structure allows for a more nuanced analysis of topics, as well as the ability to identify relationships between topics that may not be immediately apparent in a traditional LDA model. Furthermore, the hierarchical nature of HDP allows for the possibility of discovering higher-level themes or concepts that emerge from the underlying topics.

**8.3.2 Implementing HDP with Gensim**

Gensim provides a straightforward way to apply HDP. Here's an example of how to use it:

`from gensim.models import HdpModel`

from gensim.corpora import Dictionary

# Let's assume that 'texts' is a list of lists, where each inner list contains the tokens from a single document

dictionary = Dictionary(texts)

# Convert the list of lists into a Document Term Matrix using the dictionary prepared above.

doc_term_matrix = [dictionary.doc2bow(doc) for doc in texts]

# Creating the HDP model object

hdpmodel = HdpModel(corpus=doc_term_matrix, id2word=dictionary)

# Print the topics

for i, topic in hdpmodel.show_topics(formatted=True, num_topics=10, num_words=10):

print(f'Topic {i} -> {topic}')

In the above code, we first create a dictionary from our texts. Then we convert our texts into a document-term matrix. Finally, we create an HDP model and print the resulting topics.

**8.3.3 Evaluating HDP Models**

Evaluating Hierarchical Dirichlet Process (HDP) models can be more challenging than evaluating Latent Dirichlet Allocation (LDA) models because the number of topics is not fixed. With LDA, we would typically know the number of topics beforehand which can help us evaluate the model. However, with HDP, the number of topics is not fixed and will depend on the data.

One approach to evaluating HDP models is to look at the coherence of the topics produced. High coherence generally indicates that the topics make sense and are distinct from each other.

Another approach is to look at the perplexity score, which measures how well the model predicts unseen data. In this way, we can get a better sense of how well the model will generalize to new data. Both of these approaches can give us insights into the quality of the HDP model and how well it is performing in comparison to other models.

**Example:**

`from gensim.models.coherencemodel import CoherenceModel`

# Compute Coherence Score

coherence_model_hdp = CoherenceModel(model=hdpmodel, texts=texts, dictionary=dictionary, coherence='c_v')

coherence_hdp = coherence_model_hdp.get_coherence()

print('Coherence Score: ', coherence_hdp)

**8.3.4 Limitations of HDP**

While HDP is a powerful method for topic modelling, it does have some limitations. One of the main concerns is that it can be computationally intensive and slower to run than LDA, which can make it challenging to work with large datasets. This means that HDP may not be the best choice for researchers who are working with limited resources or who need to analyze large amounts of data quickly.

Another potential drawback is that HDP can be harder to fine-tune than LDA, which has fewer hyperparameters. This can make it more difficult to achieve optimal results, especially for researchers who are new to topic modelling or who are working on complex projects. Despite these limitations, HDP remains a valuable tool for topic modelling, and it is widely used by researchers in a range of fields.

## 8.3 Hierarchical Dirichlet Process (HDP)

The Hierarchical Dirichlet Process (HDP) is an advanced, non-parametric extension of Latent Dirichlet Allocation (LDA) that has revolutionized the field of topic modeling in recent years. Unlike LDA, HDP does not require the number of topics to be specified beforehand, making it a flexible and powerful tool for researchers working with large, complex datasets. Instead, HDP infers the number of topics based on the data at hand, enabling it to identify and classify an unlimited number of distinct topics with ease.

Furthermore, HDP's ability to adapt to new data and identify new topics as they emerge makes it an ideal choice for researchers who need to stay on top of the latest trends and developments in their field. Whether you're working with text data, images, or other types of unstructured data, HDP can help you gain new insights and uncover hidden patterns that might otherwise have gone undiscovered.

**8.3.1 How HDP Works**

The Hierarchical Dirichlet Process (HDP) is a probabilistic model that partitions data into an unknown number of clusters. This is accomplished through the use of a Dirichlet Process. When used in the context of topic modelling, each cluster represents a unique topic. The goal of HDP is to assign each word in each document to a topic, much like Latent Dirichlet Allocation (LDA).

However, the HDP model is unique in that it can share clusters, or topics, across multiple groups or documents. This means that topics are not specific to a particular document, but rather are shared across all documents, creating a hierarchy. This hierarchical structure allows for a more nuanced analysis of topics, as well as the ability to identify relationships between topics that may not be immediately apparent in a traditional LDA model. Furthermore, the hierarchical nature of HDP allows for the possibility of discovering higher-level themes or concepts that emerge from the underlying topics.

**8.3.2 Implementing HDP with Gensim**

Gensim provides a straightforward way to apply HDP. Here's an example of how to use it:

`from gensim.models import HdpModel`

from gensim.corpora import Dictionary

# Let's assume that 'texts' is a list of lists, where each inner list contains the tokens from a single document

dictionary = Dictionary(texts)

# Convert the list of lists into a Document Term Matrix using the dictionary prepared above.

doc_term_matrix = [dictionary.doc2bow(doc) for doc in texts]

# Creating the HDP model object

hdpmodel = HdpModel(corpus=doc_term_matrix, id2word=dictionary)

# Print the topics

for i, topic in hdpmodel.show_topics(formatted=True, num_topics=10, num_words=10):

print(f'Topic {i} -> {topic}')

In the above code, we first create a dictionary from our texts. Then we convert our texts into a document-term matrix. Finally, we create an HDP model and print the resulting topics.

**8.3.3 Evaluating HDP Models**

Evaluating Hierarchical Dirichlet Process (HDP) models can be more challenging than evaluating Latent Dirichlet Allocation (LDA) models because the number of topics is not fixed. With LDA, we would typically know the number of topics beforehand which can help us evaluate the model. However, with HDP, the number of topics is not fixed and will depend on the data.

One approach to evaluating HDP models is to look at the coherence of the topics produced. High coherence generally indicates that the topics make sense and are distinct from each other.

Another approach is to look at the perplexity score, which measures how well the model predicts unseen data. In this way, we can get a better sense of how well the model will generalize to new data. Both of these approaches can give us insights into the quality of the HDP model and how well it is performing in comparison to other models.

**Example:**

`from gensim.models.coherencemodel import CoherenceModel`

# Compute Coherence Score

coherence_model_hdp = CoherenceModel(model=hdpmodel, texts=texts, dictionary=dictionary, coherence='c_v')

coherence_hdp = coherence_model_hdp.get_coherence()

print('Coherence Score: ', coherence_hdp)

**8.3.4 Limitations of HDP**

While HDP is a powerful method for topic modelling, it does have some limitations. One of the main concerns is that it can be computationally intensive and slower to run than LDA, which can make it challenging to work with large datasets. This means that HDP may not be the best choice for researchers who are working with limited resources or who need to analyze large amounts of data quickly.

Another potential drawback is that HDP can be harder to fine-tune than LDA, which has fewer hyperparameters. This can make it more difficult to achieve optimal results, especially for researchers who are new to topic modelling or who are working on complex projects. Despite these limitations, HDP remains a valuable tool for topic modelling, and it is widely used by researchers in a range of fields.

## 8.3 Hierarchical Dirichlet Process (HDP)

Furthermore, HDP's ability to adapt to new data and identify new topics as they emerge makes it an ideal choice for researchers who need to stay on top of the latest trends and developments in their field. Whether you're working with text data, images, or other types of unstructured data, HDP can help you gain new insights and uncover hidden patterns that might otherwise have gone undiscovered.

**8.3.1 How HDP Works**

**8.3.2 Implementing HDP with Gensim**

Gensim provides a straightforward way to apply HDP. Here's an example of how to use it:

`from gensim.models import HdpModel`

from gensim.corpora import Dictionary

# Let's assume that 'texts' is a list of lists, where each inner list contains the tokens from a single document

dictionary = Dictionary(texts)

# Convert the list of lists into a Document Term Matrix using the dictionary prepared above.

doc_term_matrix = [dictionary.doc2bow(doc) for doc in texts]

# Creating the HDP model object

hdpmodel = HdpModel(corpus=doc_term_matrix, id2word=dictionary)

# Print the topics

for i, topic in hdpmodel.show_topics(formatted=True, num_topics=10, num_words=10):

print(f'Topic {i} -> {topic}')

**8.3.3 Evaluating HDP Models**

**Example:**

`from gensim.models.coherencemodel import CoherenceModel`

# Compute Coherence Score

coherence_model_hdp = CoherenceModel(model=hdpmodel, texts=texts, dictionary=dictionary, coherence='c_v')

coherence_hdp = coherence_model_hdp.get_coherence()

print('Coherence Score: ', coherence_hdp)