0


【自然语言处理】主题建模:BERTopic(理论篇)

主题建模:BERTopic(理论篇)

在我的博客中已经写了很多关于 主题建模 的内容,当你准备了解 BERTopic 时,默认你已经知道了

LSA

pLSA

NFM

LDA

等传统的主题建模方法。关于主题建模的前置知识我在这里不做赘述,感兴趣的同学可以看看我前几篇博客。学习 BERTopic 需要一定的机器学习基础,让我们一起开始吧!

1.总体概述

利用 BERTopic 进行主题建模可按照以下五个步骤进行:嵌入

Embeddings

)、降维

Dimensionality Reduction

)、聚类

Clustering

)、分词

Tokenizer

)、加权

Weighting scheme

)。

在这里插入图片描述
尽管上述步骤有默认的处理方法,但 BERTopic 在一定程度上是模块化的,你可以自主选择每个步骤的处理方法,构建属于自己的主题模型。

在这里插入图片描述

2.代码示例

下面的代码演示了如何使用 BERTopic 算法。使用 BERTopic 的一个优点是算法中的每个主要步骤都可以明确定义,从而使过程透明且直观。

from sentence_transformers import SentenceTransformer
from umap import UMAP
from hdbscan import HDBSCAN
from sklearn.feature_extraction.text import CountVectorizer
from bertopic.vectorizers import ClassTfidfTransformer
from bertopic import BERTopic

# Step 1 - Extract embeddings
embedding_model = SentenceTransformer("all-MiniLM-L6-v2")# Step 2 - Reduce dimensionality
umap_model = UMAP(n_neighbors=15, n_components=5, min_dist=0.0, metric='cosine')# Step 3 - Cluster reduced embeddings
hdbscan_model = HDBSCAN(min_cluster_size=15, metric='euclidean', cluster_selection_method='eom', prediction_data=True)# Step 4 - Tokenize topics
vectorizer_model = CountVectorizer(stop_words="english")# Step 5 - Create topic representation
ctfidf_model = ClassTfidfTransformer()# All steps together
topic_model = BERTopic(
  embedding_model=embedding_model,# Step 1 - Extract embeddings
  umap_model=umap_model,# Step 2 - Reduce dimensionality
  hdbscan_model=hdbscan_model,# Step 3 - Cluster reduced embeddings
  vectorizer_model=vectorizer_model,# Step 4 - Tokenize topics
  ctfidf_model=ctfidf_model,# Step 5 - Extract topic words
  diversity=0.5# Step 6 - Diversify topic words)

3.步骤详解

3.1 文档嵌入(Embed documents)

我们首先需要将文档转换为数字表示。BERTopic 中的默认处理方法是

sentence-transformers

。其中的模型通常针对语义相似性进行了优化,有助于后续的聚类任务。此外,它们也非常适合创建文档或句子嵌入。

在这里插入图片描述

在 BERTopic 中,可以选择任何一个

sentence-transformers

模型,但有两个模型被设置为默认值:

  • all-MiniLM-L6-v2
  • paraphrase-multilingual-MiniLM-L12-v2

第一个是专门为语义相似性任务训练的英语语言模型,它对大多数用例都非常有效。第二种模型与第一种模型非常相似,主要区别在于多语言模型适用于

     50 
    
   
  
    50 
   
  
50 多种语言。该模型比第一个模型大很多,只有在选择英语以外的语言时才会被选中。

3.2 降维(Dimensionality reduction)

降维作为机器学习的四大任务(分类、回归、聚类、降维)之一,应该并不陌生了哈。

在将文档数字化表示后,必须降低表示的维度。由于维数灾难,聚类模型通常难以处理高维数据。降维的方法有很多,但 BERTopic 默认选择的是

UMAP

。这是一种在降维时可以保留数据的局部和全局结构的技术。保留此结构很重要,因为它包含创建语义相似文档集群所需的信息。

3.3 聚类(Cluster Documents)

降维后,我们可以对数据进行聚类。基于密度的聚类技术

HDBSCAN

可以找到不同形状的簇,并在一定情况下可以识别异常值。因此,我们不会强制文档进入它们可能不属于的集群。这将改进生成的主题表示,因​​为可以从中提取的噪音更少。

3.4 词袋表示(Bag-of-words)

在开始创建主题表示之前,首先需要选择一种允许 BERTopic 算法模块化的技术。当我们使用 HDBSCAN 作为聚类模型时,我们可能会假设我们的聚类具有不同程度的密度和不同的形状。这意味着基于质心的主题表示技术可能不是最合适的模型。换句话说,我们想要一种主题表示技术,该技术对集群的预期结构几乎不做任何假设。

首先,将一个聚类中的所有文档组合成一个长文档。然后,计算每个词在每个聚类中出现的频率。结果即是词袋表示,其中可以找到每个聚类中每个词的频率。因此,这种词袋表示是在聚类级别而不是文档级别。这种区别很重要,因为我们对主题级别(即集群级别)的单词感兴趣。通过使用词袋表示,没有对聚类的结构做出任何假设。此外,词袋表示是

     L 
    
   
     1 
    
   
  
    L1 
   
  
L1 归一化的,以考虑具有不同大小的聚类。

3.5 主题表示(Topic representation)

从生成的词袋表示中,我们想知道是什么让一个集群与另一个集群不同。哪些词对于集群

     1 
    
   
  
    1 
   
  
1 是典型的,而对于所有其他集群不是那么多?为了解决这个问题,我们需要修改 TF-IDF,使其考虑主题(即集群)而不是文档。

当您像往常一样在一组文档上应用 TF-IDF 时,您所做的是比较文档之间单词的重要性。现在,如果我们改为将单个类别(例如,一个集群)中的所有文档视为单个文档,然后应用 TF-IDF 怎么办?结果将是集群中单词的重要性分数。聚类中的单词越重要,它就越能代表该主题。换句话说,如果我们提取每个聚类中最重要的词,我们就会得到主题的描述!

该模型称为基于类的 TF-IDF(class-based TF-IDF,c-TF-IDF):

       W 
      
      
      
        x 
       
      
        , 
       
      
        c 
       
      
     
    
      = 
     
    
      ∣ 
     
    
      ∣ 
     
    
      t 
     
     
     
       f 
      
      
      
        x 
       
      
        , 
       
      
        c 
       
      
     
    
      ∣ 
     
    
      ∣ 
     
    
      × 
     
    
      l 
     
    
      o 
     
    
      g 
     
    
      ( 
     
    
      1 
     
    
      + 
     
     
     
       A 
      
      
      
        f 
       
      
        x 
       
      
     
    
      ) 
     
    
   
     W_{x,c}=||tf_{x,c}||×log(1+\frac{A}{f_x}) 
    
   
 Wx,c​=∣∣tfx,c​∣∣×log(1+fx​A​)
  •                                     t                                       f                                           x                                  ,                                  c                                                       tf_{x,c}                     tfx,c​ 表示在聚类                                         c                                  c                     c 中单词                                         x                                  x                     x 的频次。
    
  •                                                f                               x                                            f_x                     fx​ 表示单词                                         x                                  x                     x 在所有聚类中的频次。
    
  •                                     A                                  A                     A 表示每个聚类所包含的平均单词数。
    

每个集群都被转换为单个文档而不是一组文档。然后,我们提取词

     x 
    
   
  
    x 
   
  
x 在类  
 
  
   
   
     c 
    
   
  
    c 
   
  
c 中的频率,其中  
 
  
   
   
     c 
    
   
  
    c 
   
  
c 指的是我们之前创建的集群。这种表示是  
 
  
   
   
     L 
    
   
     1 
    
   
  
    L1 
   
  
L1 标准化的,以说明主题大小的差异。

然后,我们取

     1 
    
   
  
    1 
   
  
1 加上每个类别  
 
  
   
   
     A 
    
   
  
    A 
   
  
A 的平均单词数除以所有类别中单词  
 
  
   
   
     x 
    
   
  
    x 
   
  
x 的频率的对数。我们在对数中加  
 
  
   
   
     1 
    
   
  
    1 
   
  
1 以强制值为正。与经典的 TF-IDF 一样,我们然后将  
 
  
   
   
     t 
    
   
     f 
    
   
  
    tf 
   
  
tf 与  
 
  
   
   
     i 
    
   
     d 
    
   
     f 
    
   
  
    idf 
   
  
idf 相乘以获得每个类别中每个单词的重要性分数。换句话说,这里没有使用经典的  
 
  
   
   
     T 
    
   
     F 
    
   
     − 
    
   
     I 
    
   
     D 
    
   
     F 
    
   
  
    TF-IDF 
   
  
TF−IDF 过程,而是使用了算法的修改版本,可以提供更好的表示。

3.6 (可选)最大边际相关性(Maximal Marginal Relevance)

在生成

c-TF-IDF

表示后,我们有一组描述文档集合的词。从技术上讲,这并不意味着这个单词集合描述了一个连贯的主题。在实践中,我们会看到很多词确实描述了一个相似的主题,但有些词在某种程度上会过拟合文档。例如,如果您有一组由同一个人撰写的文档,其签名将出现在主题描述中。

为了提高单词的连贯性,使用最大边际相关性来找到最连贯的单词,而单词本身之间没有太多重叠。这导致删除对主题没有贡献的单词。

您还可以使用此技术使主题表示中生成的单词多样化。有时,同一个词的许多变体可能会出现在主题表示中。为了减少同义词的数量,我们可以增加单词之间的多样性,同时仍然与主题表示相似。


本文转载自: https://blog.csdn.net/be_racle/article/details/128910229
版权归原作者 G皮T 所有, 如有侵权,请联系我们删除。

“【自然语言处理】主题建模:BERTopic(理论篇)”的评论:

还没有评论