假设documents是分词后的二维列表

📅 发布时间:2026/7/7 10:31:26 👁️ 浏览次数:
假设documents是分词后的二维列表
文本聚类算法LDA主体提取采用了gensim库jieba分词可自定义主题个数用户词效果非常好文本聚类这事听起来玄乎实际操作起来比想象中简单。咱们直接从代码开撸拿gensim和jieba这两个神器搞事情。先说说这个jieba分词这玩意儿处理中文是真香特别是加上自定义词典之后。比如咱们要分析一批科技新闻先把行业术语喂给分词器import jieba jieba.add_word(量子计算, freq2000) # 不加这个会切成量子和计算 jieba.add_word(AI芯片, freq2000) text 量子计算推动AI芯片发展 print(jieba.lcut(text)) # [量子计算, 推动, AI芯片, 发展]看专业术语完美切割。这个add_word的freq参数挺有意思数值越大越不容易被切开处理垂直领域文本的时候能救命。文本聚类算法LDA主体提取采用了gensim库jieba分词可自定义主题个数用户词效果非常好接下来进入重头戏LDA模型。这里有个坑要注意gensim需要的输入不是原始文本得先转成词袋格式。咱们走个完整流程from gensim import corpora, models documents [ [量子计算, AI芯片, 算法优化], [深度学习, GPU, 训练效率], [自动驾驶, 传感器融合, 高精地图] ] # 建词典的时候记得过滤掉高频词 dictionary corpora.Dictionary(documents) dictionary.filter_extremes(no_below5, no_above0.5) # 出现少于5次不要超过50%文档的不要 # 转成稀疏向量 bow_corpus [dictionary.doc2bow(doc) for doc in documents] # 重点来了LDA模型训练 lda_model models.LdaModel( bow_corpus, num_topics3, # 这个参数随便改想分几个主题就填几 id2worddictionary, passes20 # 迭代次数数据量大可以调高 )跑完模型别急着关得看看它学成啥样了for idx, topic in lda_model.print_topics(-1): print(f主题{idx}: {topic})输出可能长这样主题0: 0.4*AI芯片 0.3*量子计算 0.2*算法优化 主题1: 0.5*自动驾驶 0.3*传感器融合 0.2*高精地图 主题2: 0.6*GPU 0.3*训练效率 0.1*深度学习这时候会发现个神奇的现象——就算你设了num_topics5实际有效的主题可能更少。这时候该上coherence score了from gensim.models import CoherenceModel coherence CoherenceModel( modellda_model, textsdocuments, dictionarydictionary, coherencec_v ).get_coherence() print(f连贯性得分: {coherence:.3f})得分在0.6以上算不错要是低于0.4可能得回头调参。个人经验是no_above参数对结果影响贼大处理短文本时建议设到0.3以下。最后说个实战技巧处理长文本时试试把passes调到50以上配合batch模式训练速度能快三倍。不过内存小的机器悠着点分分钟教你做人。