You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python结合Yake自动为BERTopic生成的主题标注标签?

用YAKE!为BERTopic生成的主题自动分配标签

依赖安装

首先确保安装所需库:

pip install bertopic yake

完整实现代码

假设你已经训练好BERTopic模型并得到了主题,以下是结合YAKE生成主题标签的代码:

from bertopic import BERTopic
import yake

# 1. 加载已训练的BERTopic模型(如果已保存)
# topic_model = BERTopic.load("your_trained_model_path")

# 2. 获取主题信息(示例:如果是新训练的模型,也可以直接用get_topics())
# topics是从模型获取的主题字典,key为主题ID,value是(主题词, 权重)列表
topics = topic_model.get_topics()

# 3. 配置YAKE关键词提取器
# 可根据需求调整参数:n是标签的词数范围,dedupLim是去重阈值,windowSize是上下文窗口
kw_extractor = yake.KeywordExtractor(
    lan="zh",  # 英文文本请改为"en"
    n=2,  # 生成最多2词的标签
    dedupLim=0.9,
    dedupFunc="seqm",
    windowsSize=1,
    top=5,  # 每个主题提取5个候选标签
    features=None
)

# 4. 为每个主题生成标签
topic_labels = {}
for topic_id, topic_words in topics.items():
    if topic_id == -1:
        continue  # 跳过噪声主题
    
    # 方式1:用主题词拼接成文本供YAKE提取
    topic_text = " ".join([word for word, _ in topic_words])
    
    # 方式2:如果有该主题下的原始文档,用文档拼接效果更优
    # docs = topic_model.get_representative_docs(topic_id)
    # topic_text = " ".join(docs)
    
    # 提取关键词作为标签
    keywords = kw_extractor.extract_keywords(topic_text)
    # 整理标签(只保留关键词,去掉权重值)
    topic_labels[topic_id] = [kw[0] for kw in keywords]

# 输出结果
for topic_id, labels in topic_labels.items():
    print(f"主题ID {topic_id} 的标签:{', '.join(labels)}")

关键参数说明与优化建议

  • 语言适配:根据文本语言调整lan参数,YAKE支持中英法等主流语言
  • 标签词数:修改n参数可生成单字、双字或多字标签,比如n=3会生成三字短语标签
  • 数据源选择:优先使用主题下的原始代表性文档生成标签,比仅用主题词的结果更贴合主题实际内容
  • 候选标签数量:调整top参数可控制每个主题生成的候选标签数量,按需取舍

资源推荐

  • YAKE参数调优:通过调整dedupLim、windowSize等参数,可以优化标签的相关性和多样性
  • BERTopic拓展:BERTopic本身支持结合其他关键词提取工具,但YAKE无需预训练模型,运行速度更快
  • 自定义停用词:针对特定领域文本,可添加自定义停用词表,提升标签的精准度

内容的提问来源于stack exchange,提问作者hajar hajar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:20:28