BERTopic 通过聚类来减少异常值

kqhtkvqz  于 3个月前  发布在  其他
关注(0)|答案(8)|浏览(50)

这是一个问题,而不仅仅是一个议题。如果它应该在SO上,请告诉我,我会在那里发布。如果真是这样,我提前道歉。

我有一个社交媒体内容的数据集,它产生了合理的聚类。当我观察这些聚类随时间的变化(不是使用内置方法,而是按原始帖子的月份对主题数量求和)时,我看到了一些有意义的主题峰值。然而,有一个时期,当我看到许多聚类都在峰值时,包括异常值。也许这只是社交媒体使用量增加的一个阶段,但我怀疑我的异常值组中至少有一个潜在有价值的聚类。

我想做的是尝试通过仅在异常值数据上运行另一个主题模型来减少异常值的数量。当我这样做时,我得到了五个新的主题,其中三个在新活动期间似乎增加了活动。

我知道这不在减少异常值的方法中涵盖,我在想这是否是一个可行的方法,或者我只是生成了垃圾或不相称的数据。我的希望是随后手动合并异常值和基本模型,这样我就得到了基本模型中的所有主题,再加上来自异常值模型的五个新主题,现在将异常值减少到仅保留在异常值模型中的那些?我看到你建议为获得更大的粒度在大型聚类中实现类似的东西,但我找不到关于这样做与异常值相关的任何信息。在我看来,这应该有效,但也许我不得不将分析拆分为两个单独的模型。

值得一提,我尝试了内置的异常值减少方法,它成功地将异常值分配给了现有的主题。然而,这只是让我的主题变得更少合理,因为它们包含的内容差异很大。我还尝试降低最小聚类大小,但这给我带来了更少有用的结果。

最后,我应该指出的是,当我运行异常值模型时,我使用的是与基本模型相同的超参数。

感谢你们在这个包上的出色工作。

wztqucjr

wztqucjr1#

我知道这不在减少离群值的方法范围内,我想知道这是否是一个可行的方法,或者我只是生成了垃圾数据或不相称的数据。我的希望是随后手动合并离群值和基准模型,这样我就得到了基准模型中的所有主题,再加上离群值模型中的五个新主题,现在离群值被减少到仅剩下那些仍然在离群值模型中的内容?

当然,这是一个有效的方法,我也曾经自己使用过!某事物是否为离群值很大程度上取决于超参数,所以有时候它们可能会有点过于严格。结果是,一些微观簇可能没有被考虑在内,在那个子集中再次运行BERTopic肯定有意义。这也是合并功能存在的原因之一,供像你这样的用户使用这些创造性的方式来扩展BERTopic的功能。

值得一提,我尝试了内置的离群值减少方法,它成功地将离群值分配给了现有的主题。然而,这只是让我的主题变得不太合理,因为它们内容的多样性。我还尝试减少最小簇大小,但这给我带来了更少有用的结果。

这确实通常会发生,也展示了为什么离群值一开始就存在的原因。尽管许多人根本不想有任何离群值,但将它们放入“各自的”簇中实际上可能会损害性能。

iyfamqjs

iyfamqjs2#

太棒了,非常感谢你的回复!

dluptydi

dluptydi3#

你好@morrisseyj和@MaartenGr!
感谢你们分享了这些富有洞察力的想法。我目前正面临一个类似的情况,我已经使用异常文档训练了一个单独的模型,现在正想将有价值的主题整合到基础模型中。然而,我不确定将新主题与基础模型合并的最佳方法。我尝试使用BERTopic.merge_models([topic_model_1, topic_model_2, topic_model_3]),但似乎这个功能是针对在相同数据集的不同子集上训练的模型设计的。
请问如何用异常模型中创建的新主题更新基础模型?

lnlaulya

lnlaulya4#

@tajkiatoma 我会请 @MaartenGr 纠正我,但我认为你是对的。如果你尝试将离群值模型与基本模型合并,你最终会在模型中得到两次离群数据。
我所做的是根据 topic_model_1.get_document_info(documents_1)topic_model_2.get_document_info(documents_2) 的结果手动连接模型;其中 topic_model_1 是基本模型,topic_model_2 是离群值模型。本质上,我从 topic_model_1.get_document_info(documents_1) 中过滤掉了 Topic == -1 ,然后用 topic_model_2.get_document_info(documents_2) 的输出结果与 pd.concat 进行连接。中间步骤是更改 topic_model_2.get_document_info(documents_2) 的主题编号 - 基本上使它们从 topic_model_1 的最大值 + 1 开始。我保持了 -1 值(即离群值)不变,因为它们只是新生成模型中的离群值。
使用完全格式为 topic_model.get_document_info(docs) 的 df,我构建了一个监督模型( https://maartengr.github.io/BERTopic/getting_started/supervised/supervised.html ),并在文档和主题编号上对其进行了训练。这给了我一个功能齐全的主题模型,其中离群值更加明确地分离出来。
@MaartenGr 请告诉我是否做错了,或者是否有更简单的方法实现这个目标。

yrwegjxp

yrwegjxp5#

@tajkiatoma 我会请 @MaartenGr 纠正我,但我认为你是正确的。如果你尝试将离群点模型与基本模型合并,你最终会在模型中得到两次离群点数据。

我可能在这里犯了错误(这个仓库里的代码很多,而且在过去的几周里有很多更新😅),但我认为如果你尝试将离群点模型与基本模型合并,你不会得到模型中的离群点数据两次。在 v0.16.2(或 0.16.1,不确定)中,仅在几天前发布了一些修复此过程的更改。当它检测到 -1 主题时,它会自动将其与任何现有的离群点主题合并。因此,我相信现在这个问题应该已经解决了。

oo7oh9g9

oo7oh9g96#

在v0.16.2(或0.16.1,不确定)中,仅在几天前发布了一些修复此过程的补丁。当它检测到-1主题时,它会自动将其与任何现有的离群主题合并。因此,我相信现在应该已经修复了这个问题。
你是说在v0.16.2中的BERTopic.merge_models([...])应该可以用于合并基础模型和离群模型吗?

unhi4e5o

unhi4e5o7#

感谢你的超级好主意👍

iaqfqrcu

iaqfqrcu8#

你是否指的是在v0.16.2版本中,BERTopic.merge_models([...])应该可以合并基础模型和离群模型?
确实如此。现在它应该能正确地将离群点合并在一起。

相关问题