为什么BERTopic话题缩减后特征词出现大量没意义的泛词?

2026-6-15 13:18| 发布者: Fuller| 查看: 12| 评论: 0

摘要: 一个电商评论的数据集初始发现了198个话题,缩减到5个主题,发现特征词出现了太多泛词。对比下面两图,分别是未缩减话题时的特征词和缩减话题后的特征词。可以发现差别很明显。 ...

【BERTopic话题聚类功能隶属于分词扩展模块

比如,一个电商评论的数据集初始发现了198个话题,缩减到5个主题,发现特征词出现了太多泛词。对比下面两图,分别是未缩减话题时的特征词和缩减话题后的特征词。可以发现差别很明显。

1. 缩减后特征词为何变“泛”?

BERTopic使用函数model.reduce_topics()把发现的原始话题合并成目标数目的少量几个话题,就是把多个语义相近的话题合并成一个新话题。合并后,这个新话题的文档集合会变大、内容更杂。随后,会把隶属这个话题的所有文档串接成一个大文档,然后才从中提取特征词。

  • 特征词提取:合并后,新话题的特征词是基于合并后所有文档重新计算的,而不是简单合并原有特征词。提取特征词的常用算法是 c-TF-IDF 算法。
  • 泛词现象:合并后,原本在小话题中有区分度的“专有词”被稀释,而“的、了、很”等高频词在大集合中反而更容易被选为特征词,导致“泛化”。

2. c-TF-IDF(class-based TF-IDF)提取特征词的特征

BERTopic 默认用 c-TF-IDF 提取每个话题的特征词。

  • 计算方式:把每个话题下所有文档拼成一个“超级文档”,对每个话题做 TF-IDF,最后选得分最高的词作为特征词。
  • 优点:能反映“该话题相对其它话题更有代表性”的词。
  • 缺点:如果话题很大、内容很杂,TF-IDF 也会被高频泛词主导,尤其是没有去停用词时。

3. 避免泛词的方法

GooSeeker分词扩展模块的界面上有一个调参按钮。如上图。红框中的参数都是跟c-TF-IDF选词有关的。

  • 按照词性过滤:这是最有效的一种手段,可以只选有意义的名词、动词等
  • 特征提取器CountVectorizer的参数:c-TF-IDF利用CountVectorizer做特征提取,可以为这个特征提取器设置参数
    • max_features:特征提取器将符合条件的词按照词频大小排序,只取词频最高的前面N个词
    • max_df:用于过滤掉普遍出现的词,就是出现在太多文档中了,对于将一条文档归属于特定一个类别没有任何帮助,反而有混淆的作用。凡是出现频率高于设定值的就会被过滤掉。如果输入一个小于1的小数,那么这个小数表示含有这个词的文档比例;如果是整数,应该是大于等于1的整数,表示多少个文档含有这个词。
    • min_df:用于过滤掉冷词,就是含有这个词的文档太少了,比如,整个文档集中只有一个文档含有这个词,有可能对于文档归类也有反作用。所以,低于设定值的也要被过滤掉。跟max_df一样,既可以输入小数也可以输入整数。

上图采用了缺省的选词参数,在一个京东商品评论小样本数据集上测试的,可以看到BERTopic的效果非常好,聚类生成的类别有很好的解读性。


鲜花

握手

雷人

路过

鸡蛋

最新评论

GMT+8, 2026-6-15 14:27