如何用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
相关产品推荐
相关产品推荐

