资讯动态

文本聚类技术全解析:从向量化到K-Means的实践指南

发布时间:2026/10/21 23:56:00 来源:尧图企业网站定制
简介一套北京大学研究生课程《文本挖掘》全套PPT课件共134页聚焦第五章文本自动聚类技术同时覆盖特征提取、检索、分类、话题检测、过滤、关联分析、自动摘要、信息抽取、智能问答等完整教学模块。课程面向文本挖掘、数据挖掘方向的研究生及研究人员适合系统学习无监督学习与文本聚类的理论基础和实战方法。资源包内含1个PPTX文件压缩后约1.68MB便于离线学习。已有745人学习下载。教程从聚类的基本概念与数学描述出发讲解文档表示、降维、聚类算法流程以及精度、召回率、F-Measure等评价指标并结合市场销售、保险、城市规划、地震研究等应用案例帮助读者掌握从文本表示到结果评估的完整聚类分析链路全书章节还系统覆盖文本挖掘主要技术领域适合作为研究生课程教学和科研入门的配套材料。1. 文本聚类不是分类看懂无监督分组的第一步文本挖掘课程里最容易让人产生误解的就是“分类”和“聚类”。文本自动分类有标签是监督学习文本自动聚类没有标签只靠文档间相似度分组是无监督学习。这套课件第五章《文本自动聚类技术》用134页的篇幅把聚类从数学定义、典型应用到评价指标完整串了一遍尤其适合正在做文本挖掘作业、要写课程报告或者第一次碰无标注语料的工程师。它的价值不在给你现成算法代码而在于把“聚类为什么能成立、相似度怎么定义、结果怎么评估”讲清楚。对新手来说先在这里建立完整坐标系再看调包文档会少很多迷惑。2. 文档表示与降维把自然语言变成能算距离的向量2.1 文本聚类的第一步不是选算法而是文档表示课件里给了一个很直观的例子用“aabbccefg”这类符号代表文档经过映射变成等长向量向量里的每个位置对应一个特征维度。这在文本挖掘里就是文档表示Document Representation也叫文本向量化。聚类算法处理的只能是数字向量所以你必须先把文档分词、统计词频、构造成矩阵后面的相似度才有计算基础。这里要强调一个容易被忽略的点文本聚类的文档表示跟文本分类的表示在目标上有细微差别。分类时你往往知道类别可以做有监督特征选择聚类时没有任何先验知识完全靠数据的内在分布所以特征更容易被高频词干扰。课件在“文本聚类基本步骤”里列出的第2步“特征选取”其实就是提醒你无监督场景下特征维度质量直接决定簇的边界。2.2 词袋模型和稀疏矩阵为什么维度上万是常态最简单的文档表示是词袋模型Bag of Words把语料里所有去重后的词作为特征每篇文档表示成一个向量每个维度填这个词在这篇文档中出现的次数。中文场景下一个几千篇的语料分词后去重词表往往有几万个。于是特征矩阵变成超高维且极其稀疏的矩阵——大部分格子是0。稀疏本身不是坏事但如果不加处理会出现两个实际麻烦距离计算时非零维度较少少量共现词就能主导相似度导致结果不稳定。存储和计算开销随着维度线性上升跑一次层次聚类的代价难以接受。所以课件里的“维度降低”是标准流程里的一步。常见降维思路有两条一是特征选择用词频、文档频率或卡方检验筛掉无区分力的词二是特征抽取用截断SVD潜在语义分析把原矩阵映射到低维稠密空间。文本聚类里我一般先做特征选择不行再上SVD因为SVD之后维度含义变模糊需要靠聚类结果反推主题。2.3 实操步骤从原始文档到聚类矩阵我固定走四步假设你手里有一个txt文档集想跑文本聚类。以下是我会做的四步每步都可执行步骤具体操作常用参数设定分词用分词工具按词切分保留词性为名词、动词、形容词的候选词最小词长2加入领域词典去停用词去除标点、数字、单字、高频无意义虚词使用通用停用词表并追加领域高频词向量化计算TF-IDF值而非直接用词频词频下限 min_df2上限 max_df0.8降维用卡方选择Top N特征或截断SVDN取5002000或保留95%方差这四步做完你会得到一个形状为“文档数×特征数”的矩阵。每一行代表一篇文档每一列代表一个特征。矩阵可以直接喂给聚类算法。关于TF-IDF多说一句TF是词频IDF是逆文档频率。一个词在某篇文档里出现多同时在越少文档里出现它的TF-IDF值就越高说明这个词对这篇文档有区分度。反过来像“我们”“进行”这种每篇都出现的词IDF趋近于0权重被压下去。这正好弥补了纯词频矩阵的缺陷。2.4 容易踩的边界min_df和max_df怎么调这里给一些我调参的血泪经验。min_df设成1等于保留只出现一次的词噪声很大聚类结果容易被长尾词带偏设得太高又可能把某些小主题的特征词全部滤掉导致那个簇直接消失。一般来说语料篇数在1000以内时min_df2或3比较稳。max_df设成0.8表示“在超过80%的文档里出现的词都去掉”这个数可以按领域调整如果领域文档用词高度一致把它降到0.6会更明显。判断调没调好的办法也很直接跑完聚类后打印每个簇的代表词。如果代表词里还有“可以”“这样”“问题”这类词说明停用词和IDF环节还没到位。如果每个簇的代表词一眼就能看出主题那这个参数基本是能用的。2.5 三种表示方式的效果对比为了更直接地说明选择我把常见做法整理成一张对比表表示方式特点文本聚类里的典型表现词频矩阵计算简单但高频无意义词权重过高簇内代表词多为“我们”“进行”主题模糊TF-IDF矩阵降低常见词权重突出区分词簇内代表词开始与业务相关效果明显提升TF-IDF SVD维度降低保留潜在语义关系簇更平滑但代表词需要从因子载荷反推我的使用原则是先用TF-IDF矩阵做一次聚类看代表词如果代表词可解释性足够就不做SVD。只有出现“簇间打架”或聚类结果过于稀疏依赖单特征时才用SVD。因为SVD会改变原始特征的稀疏结构让你失去“哪些词对分簇贡献最大”的直接可见性。3. 相似性度量与算法选型余弦、K-Means和准则函数的真实取舍3.1 相似性度量为什么文本聚类默认用余弦相似度课件在聚类数学描述中给出数据点间“相似程度”作为分组依据但没有深挖相似度怎么定义。文本向量是高维稀疏的常用的相似度度量有三种欧氏距离、余弦相似度、杰卡德相似度。文本场景我几乎只用余弦。原因是欧氏距离要求向量模长相近才有意义。两篇文档内容相同一篇是完整版、一篇是摘要词频向量模长差很多欧氏距离会很大但余弦相似度只看方向计算出的相似度接近1。文本聚类本来就是按主题分组不是按文档长度分组所以余弦更合理。杰卡德相似度适合二元向量只关心词是否存在对词频不敏感在文本聚类里不如余弦TF-IDF效果好。计算余弦时要注意向量是否为零向量。全零向量的模长为0除零会出错需要特殊处理——要么删除过短文档要么给一个极小值兜底。3.2 聚类算法选型先跑K-Means再按规模换算法课件没有贴具体算法代码但评价聚类方法时列了可伸缩性、能处理高维、对输入顺序不敏感等要求。K-Means满足其中一部分但有很多细节约束可伸缩性好几万篇文档也能在可接受时间内跑完。高维文本向量用余弦相似度时K-Means的质心更新需要小心。标准K-Means用平均值更新质心但平均值会改变向量的稀疏性。通常做法是先对向量做L2归一化更新质心后再归一化。局限也很明显需要预先指定k值而且只能发现凸的、大小相近的簇。文本主题分布往往不是标准的球形所以K-Means的结果需要靠后续评估判断是否可靠。层次聚类不需要预设k可以输出树状图观察不同粒度下的分组。缺点是复杂度高通常是O(n^2)在几千篇文本上还能接受再大就吃力。谱聚类理论上能处理任意形状但要先构建相似度矩阵、做特征分解当文档数上万时内存开销巨大。所以对大多数文本聚类任务尤其是快速探索K-Means仍是第一选择。3.3 准则函数误差平方和怎么用课件给出了误差平方和准则形式是 Je 所有样本到所属簇质心距离平方之和。这里 mi 是簇Ci的质心X是该簇内的样本点。K-Means的迭代优化目标就是让Je越来越小。实际使用中Je有两个用途一是判断K-Means是否收敛。每次迭代后Je下降幅度小于阈值比如0.1%就可以停。 二是帮助选k。画Je随k变化的曲线理论上会出现一个拐点拐点附近的k就是推荐值。但文本数据往往没有明显拐点曲线平滑下降这时候要结合业务目标看簇的可解释性。注意标准Je用的是欧氏距离不是余弦。如果向量做了归一化欧氏距离的平方与余弦差有数学关联可以近似但严格说准则函数还是面向欧氏空间的。3.4 评价指标Precision、Recall与F-Measure在聚类里怎么落地课件给出了准确率P、召回率R、F-Measure公式。在聚类场景里P和R不是自然定义的因为聚类没有真实标签。要评价聚类质量通常的做法是先有一个参考分类人工标注再把每个簇映射到参考类别上然后计算。映射逻辑对每个簇选取与该簇重叠度最高的参考类别作为“预测类别”然后统计TP簇内该参考类别的文档数FP簇内其他类别的文档数FN参考类别里有但没分到这个簇的文档数然后 P TP/(TPFP)R TP/(TPFN)F1 2PR/(PR)。课件中的公式带一个alpha参数调节P和R的权重默认情况就是标准F1。整体评价有两种口径宏平均和微平均。宏平均先对每个簇算F1再取平均每个簇权重相同微平均先把所有簇的TP、FP、FN汇总再算总体F1文档多的簇影响更大。报告建议两个都写否则别人难以判断你的聚类质量。4. 常见问题排查五个看起来玄学但能定位的文本聚类坑4.1 结果簇几乎一样去掉高频词后仍然不分离现象聚类跑完几个簇的代表词高度重叠看不出主题差异。原因停用词表太通用领域内的高频词比如某行业报告里的“市场”“数据”没被去掉或者TF-IDF没做词频主导了相似度。解决先按文档频率排序把出现超过60%文档的词加入领域停用词表再做TF-IDF并观察特征词排序实在不行做降维后再跑。另外可以检查分词阶段的词性过滤如果只保留名词和动词能有效减少“进行”“可以”这类虚词残留。4.2 相同文档被分进不同簇随机种子导致结果不可复现现象每次运行K-Means簇的划分都不一样甚至有几篇文档来回换。原因K-Means初始质心是随机选的不同的初始化会落到不同局部最优。文本向量高维且局部极多这个问题更明显。解决固定随机种子或用K-Means初始化也可以多次运行取误差平方和最小的一组结果。在报告里写明随机种子和初始化方式否则别人复现不了你的实验。4.3 k值怎么定都是玄学拐点不明显现象误差平方和曲线没有明显拐点k5和k8看起来都行。原因真实文本主题边界模糊纯数学拐点根本不存在。尤其当文档主题粒度跨度大时Je曲线几乎单调下降。解决结合业务目标判断。想按话题分就观察每个簇的代表词是否有区分度也可以用轮廓系数辅助但同样不能只看分数。我的习惯是跑3到5个k值人工抽查每个簇的文档选“可解释性最好的”那个。4.4 相似度计算出现NaN或负值全零向量在捣乱现象相似度矩阵里有NaN或者聚类结果包含空簇。原因文档向量全零。常见于太短的文档或特征选择把所有词都砍掉了。另外余弦公式要除以模长模长为0就出问题。解决保留至少一个特征维度给空文档加一个特殊标记维度或者在预处理时把过短文档剔除。检查特征选择的min_df是否设得过高导致某些短文档没有词留下来。4.5 评价指标和别人对不上宏平均和微平均算混了现象自己按公式算出的F值跟工具包输出不一致。原因计算宏平均时把“按簇计算”和“按类别计算”混用或者加权方式不对。有时候还会把“每一个簇”和“每一篇文档”的计数搞混。解决先明确参考类别与簇的映射关系再按“每个簇算一次P和R”的方式计算宏平均微平均则先汇总所有簇的TP、FP、FN再加总计算。两种口径都要标注清楚。5. 进阶验证把PPT公式变成可落地的聚类检查流程看完这套第五章PPT后最容易犯的错误是把概念停留在纸面。我建议你按下面这个流程把知识跑通一遍取一个小数据集比如几百篇新闻稿人工标好5个主题。按第2章的步骤做分词、去停用词、TF-IDF、降维。用余弦相似度跟K-Means聚类k设为5固定随机种子。算宏平均F和微平均F同时输出每个簇前5个代表词。这个流程做完你才能真正理解“无监督”的三个关键点没有标签怎么验证、相似度怎么影响结果、评价指标在表达什么。PPT里那些公式只有在对比真实结果时才有意义。我自己的血泪教训是一开始只调包不看簇内文档结果是数字漂亮但业务上完全没法用。后来我强制自己每轮实验都做两件事——打印每个簇的5篇代表文档原文以及把误分样本翻出来对比相似度矩阵。从那以后我做文本聚类无论数据集大小都会强制走一遍“先可视化簇内文档再谈评价指标”的验证流程。这套课件虽然只是课堂PPT但把聚类的理论边界讲得很清楚读透第五章再去看工具库的参数说明会发现那些参数突然都好理解了。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑