BERTopic 只有一个主题聚类?

vs3odd8k  于 23天前  发布在  其他
关注(0)|答案(3)|浏览(22)

Below code printed out [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], don't know why...

from sklearn.feature_extraction.text import CountVectorizer
import jieba
from bertopic import BERTopic
from sentence_transformers import SentenceTransformer

embedding_model = 'BAAI/bge-large-zh-v1.5'

def tokenize_zh(text):
    words = jieba.lcut(text)
    return words

vectorizer = CountVectorizer(tokenizer=tokenize_zh)
topic_model = BERTopic(language="multilingual", embedding_model=embedding_model, verbose=True, vectorizer_model=vectorizer, min_topic_size=3)

docs = [
        "12月12日,阳光电源公告,公司控股股东、实际控制人曹仁贤将其持有本公司的380万股股份办理了质押业务,目前合计质押公司股份3277万股,占其所持股比7.22%。",
        "这只是一个案例而已。实际上,曹仁贤近年来依托公司主业,围绕光伏与储能、半导体等产业链,全面展开个人投资业务,完全媲美顶级投资机构,堪称一代大师。",
        "今年的胡润百富榜上,阳光电源董事长曹仁贤及夫人苏蕾,以480亿位列第86位,蝉联安徽省首富。胡润百富统计曹老师的财富,只采集了其持有的阳光电源股权的信息,这其实并不全面。",
        "公司主要为银行、航空、保险、快消等行业的企业客户实施忠诚度计划提供服务。报告期内,公司对前五大客户(同一控制合并口径下)的销售金额占比分别为61.30%、66.91%及64.98%。",
        "永辉超市(601933):拟向大连御锦贸易有限公司出售公司持有的万达商管1.43%股份。永辉超市公告,拟向大连御锦贸易有限公司出售公司持有的万达商管1.43%股份,转让价格为45.3亿元;截止至本公告日,该股权投资账面价值为39.18亿元。",
        "Nox聚星基于自身6300w+网红数据库,对东南亚、中东、北美、日韩、拉美五地区网红营销概况等相关数据进行分析,帮助中国出海品牌洞察行业营销趋势,助力品牌获得更好的营销效果。",
        "印尼作为东南亚最大经济体,具有较高的人口红利优势,集中了全东南亚超半数的网红;东南亚地区网红主要分布在印尼、泰国、越南三个国家;YouTube网红区域分布Instagram网红区域分布TikTok网红区域分布。",
        "从平均互动率、平均观看量、粉丝粘性三个数据维度上来看,YouTube综合表现明显优于TikTok、Instagram;虽然TikTok综合表现相较YouTube略微逊色,但随着TikTok在东南亚布局逐渐完善,相信其还存在着极大的增长潜力",
        "这家公司的困境说明了新冠病毒危机是如何撼动了亚洲电子供应链(亚洲电子供应链已经在过去的国际贸易新变数中受到了影响),以及中国工厂生态系统所扮演的不可或缺的角色。",
        "首先,最初的疫情爆发迫使其位于中国的工厂关闭了近三周,并导致中国工厂对本公司越南工厂的供应开始枯竭。然后,当病毒传播到韩国时,旅行限制阻止了其工人在位于港口城市海防的工厂继续提升产能。",
        "这就是三星的担忧所在,它建议员工不要在周末与家人和朋友外出,要求他们戴上口罩,相互交谈时保持2米以上的距离。",
        "根据极光iapp数据显示,从生鲜电商app渗透率来看,排名前五的主要是以线下社区型为主,包括生鲜O2O型、社区便利店和新零售,当然也包括部分仅有线上运营的前置仓模式的叮咚买菜和朴朴。",
        "可以预见的是,社区生鲜电商行业将是一场持久战,究其原因在于中国地域广阔,生鲜线下实体店/市场作为国民基础设施区域布局完善程度不同,各线城市对于生鲜需求倾向性有较大的区别。"
        ]
sentence_model = SentenceTransformer(embedding_model)
embeddings = sentence_model.encode(docs, show_progress_bar=False)
topics, _ = topic_model.fit_transform(docs, embeddings=embeddings)

print(topics)
vwhgwdsa

vwhgwdsa1#

这是因为您只有几个文档,而 min_topic_size 对于您的用例来说太高了。当您使用 HDBSCAN 时,它不会生成固定数量的聚类,而是利用其 min_cluster_size 来决定一个聚类的最小大小应该是多少。如果您只有很少的文档,HDBSCAN 通常效果不佳。
相反,使用像 k-Means 这样的聚类算法会更有价值,因为您可以决定主题的数量,并防止异常值被建模。

igetnqfo

igetnqfo2#

谢谢,如果没有min_topic_size参数,结果是一样的。这就是为什么我尝试了这个参数,我猜最小文档数量是12?实际上最好不要指定主题的数量。我的场景是对于传入的文章,我会进行语义分割,将内容切割成段落,理想情况下会有10到20个块,我想在嵌入之前对这些块的主题进行聚类。有没有人推荐使用Bertopic的解决方案?

ipakzgxi

ipakzgxi3#

谢谢,如果不设置min_topic_size,结果是一样的。这就是为什么我尝试了这个参数,我猜最小的文档数量是12?
min_topic_size 太高了,你应该降低它到2或3,这样才能与你的数据集一起工作。记住这个参数的作用,它指定了任何簇的最小大小。将它设置为12,你实际上是在说任何簇至少需要有文档。因为你有12个文档,所以可能只创建了一个簇。换句话说,你应该降低min_topic_size的值。
话虽如此,我还是建议你增加数据集的大小,降低min_topic_size的值或者使用一个可以处理小数据集的不同聚类算法,比如k-Means。

相关问题