中文文本关键词提取与聚类:TF-IDF与K-Means实践

9 次阅读

随着互联网中文内容规模不断增长,如何从大量文本中快速发现核心信息,已经成为自然语言处理领域的重要任务。中文文本关键词提取与文本聚类技术,可以帮助企业进行舆情分析、文章推荐、知识管理、搜索优化等工作。其中,TF-IDF(Term Frequency-Inverse Document Frequency)是一种经典的关键词提取算法,而K-Means则是一种常用的无监督聚类算法,两者结合能够实现从文本特征提取到内容分类的完整流程。

本文将围绕中文文本关键词提取与聚类实践,详细介绍TF-IDF算法原理、中文文本预处理方法,以及如何利用K-Means算法完成文本聚类任务,帮助开发者建立一套完整的中文文本分析方案。

中文文本分析的基本流程

中文文本处理与英文文本处理存在明显差异。英文文本通常通过空格划分单词,而中文句子中的词语之间没有天然分隔,因此需要额外的分词处理。

一个完整的中文文本关键词提取与聚类流程通常包括以下几个步骤:

  1. 文本数据采集

  2. 中文分词处理

  3. 去除停用词

  4. 文本特征转换

  5. TF-IDF关键词权重计算

  6. 文本向量构建

  7. K-Means模型训练

  8. 聚类结果分析与优化

其中,关键词提取主要解决“文本中哪些词最重要”的问题,而聚类主要解决“哪些文本具有相似主题”的问题。

中文文本预处理的重要性

文本预处理是中文自然语言处理任务中的基础环节,处理质量会直接影响后续关键词提取和聚类效果。

中文分词

由于中文文本没有明显的词语边界,需要使用分词工具将连续字符转换为词语序列。

例如:

原始文本:

人工智能技术正在改变软件开发方式

分词结果:

人工智能 / 技术 / 正在 / 改变 / 软件开发 / 方式

常见中文分词工具包括:

  • jieba

  • HanLP

  • THULAC

  • pkuseg

其中,jieba由于使用简单、生态成熟,在文本分析项目中应用较为广泛。

示例代码:

Python
运行
import jieba

text = "人工智能技术正在改变软件开发方式"

words = jieba.cut(text)

print(list(words))

输出:

['人工智能', '技术', '正在', '改变', '软件开发', '方式']

去除停用词

中文文本中存在大量高频但没有实际分析价值的词,例如:

  • 的

  • 是

  • 了

  • 我们

  • 可以

这些词会降低关键词提取效果,因此通常需要过滤。

示例:

Python
运行
stop_words = {"的", "是", "了", "我们"}

words = [
    word for word in words
    if word not in stop_words
]

经过停用词处理后,文本中的有效信息比例会明显提高。

TF-IDF关键词提取原理

TF-IDF是一种基于统计方法的关键词提取算法,通过衡量词语在当前文本中的重要程度来确定关键词。

TF-IDF由两个部分组成:

词频TF

TF(Term Frequency)表示某个词在当前文本中出现的频率。

计算公式:

TF = 某词出现次数 / 文档总词数

例如,一篇文章共有100个词,其中“人工智能”出现5次:

TF = 5 / 100 = 0.05

词频越高,说明该词在当前文章中的重要性越高。

逆文档频率IDF

IDF(Inverse Document Frequency)用于降低常见词的权重。

计算公式:

IDF = log(文档总数量 / 包含该词的文档数量)

如果一个词在很多文章中都出现,例如“技术”“系统”等,它的区分能力较低。

相反,如果某个词只在少数文章中出现,它往往具有更高的信息价值。

TF-IDF计算公式

最终:

TF-IDF = TF × IDF

TF-IDF值越高,表示该词越具有代表性。

例如,在科技文章中:

词语TF-IDF权重
人工智能0.82
机器学习0.76
今天0.12
我们0.05

可以明显看出,专业领域词汇通常拥有更高权重。

使用Python实现TF-IDF关键词提取

Python中可以使用scikit-learn中的TfidfVectorizer完成文本向量化。

示例:

Python
运行
from sklearn.feature_extraction.text import TfidfVectorizer

documents = [
    "人工智能推动科技发展",
    "机器学习是人工智能的重要方向",
    "软件开发需要结合人工智能技术"
]

vectorizer = TfidfVectorizer()

tfidf_matrix = vectorizer.fit_transform(documents)

words = vectorizer.get_feature_names_out()

print(words)

通过TF-IDF转换后,每篇文本都会生成对应的数字向量:

文本1 -> [0.5, 0.3, 0.2]
文本2 -> [0.6, 0.4, 0.1]
文本3 -> [0.4, 0.7, 0.3]

这些向量可以作为后续聚类模型的输入。

K-Means文本聚类算法介绍

K-Means是一种经典的无监督学习算法,主要用于将数据划分为多个类别。

它的核心思想是:

将相似的数据归入同一个簇,使同一类别内部的数据距离尽可能小,不同类别之间距离尽可能大。

K-Means主要流程:

  1. 指定聚类数量K

  2. 随机初始化K个中心点

  3. 计算每个样本与中心点的距离

  4. 将样本分配到最近的类别

  5. 更新聚类中心

  6. 重复迭代直到结果稳定

文本聚类中,通常使用TF-IDF生成的文本向量作为K-Means输入。

TF-IDF结合K-Means实现文本聚类

下面通过Python实现一个简单案例。

导入依赖

Python
运行
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans

准备中文文本数据

Python
运行
documents = [
    "人工智能技术推动未来发展",
    "机器学习算法提升数据分析能力",
    "深度学习应用于图像识别",
    "股票市场投资风险分析",
    "基金投资需要关注市场变化"
]

中文分词

Python
运行
def chinese_cut(text):
    return " ".join(jieba.cut(text))


texts = [
    chinese_cut(doc)
    for doc in documents
]

TF-IDF特征提取

Python
运行
vectorizer = TfidfVectorizer()

X = vectorizer.fit_transform(texts)

K-Means聚类

Python
运行
model = KMeans(
    n_clusters=2,
    random_state=42
)

model.fit(X)

查看分类结果:

Python
运行
for doc, label in zip(documents, model.labels_):
    print(label, doc)

可能输出:

0 人工智能技术推动未来发展
0 机器学习算法提升数据分析能力
0 深度学习应用于图像识别

1 股票市场投资风险分析
1 基金投资需要关注市场变化

可以发现,模型能够自动识别科技类文本和金融类文本之间的主题差异。

如何选择K值

K-Means需要提前指定聚类数量K,但实际项目中通常不知道应该分成多少类。

常见方法包括:

肘部法

通过计算不同K值下的误差平方和(SSE),寻找下降趋势明显减缓的位置。

示例:

Python
运行
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

sse = []

for k in range(2,10):
    km = KMeans(n_clusters=k)
    km.fit(X)
    sse.append(km.inertia_)

当曲线出现明显拐点时,可以作为最佳K值参考。

轮廓系数

轮廓系数用于评价聚类质量:

  • 越接近1,说明聚类效果越好

  • 接近0,说明类别边界不明显

  • 小于0,说明分类可能存在问题

代码:

Python
运行
from sklearn.metrics import silhouette_score

score = silhouette_score(
    X,
    model.labels_
)

print(score)

中文文本聚类中的常见问题

关键词权重不准确

TF-IDF依赖词频统计,对于短文本或者专业领域文本可能效果有限。

优化方法:

  • 建立领域词典

  • 增加关键词权重调整

  • 使用TextRank、BERT等深度学习方法

分词结果影响聚类

如果分词错误,会导致文本特征偏差。

例如:

“机器学习模型”

错误分词:

机器 / 学习模 / 型

正确分词:

机器学习 / 模型

因此需要根据业务场景优化词典。

高维稀疏问题

TF-IDF通常会产生大量维度,例如:

10000篇文章
+
50000个词
=
50000维向量

高维数据可能影响K-Means效果。

解决方案:

  • 删除低频词

  • 使用PCA降维

  • 使用LSA主题模型

  • 使用词向量替代传统TF-IDF

TF-IDF与深度学习方法的对比

虽然TF-IDF是一种经典方法,但近年来BERT等预训练模型也被广泛应用。

方法优势不足
TF-IDF速度快、解释性强无法理解语义
Word2Vec能够表达词语关系依赖训练数据
BERT理解上下文语义能力强计算成本较高

对于新闻分类、文章聚类等大规模任务,TF-IDF依然具有较高实用价值。

中文文本关键词提取与聚类的应用场景

该技术目前广泛应用于:

内容推荐系统

通过文本聚类识别文章主题,为用户推荐相似内容。

舆情分析

对大量新闻、评论进行分类,快速发现热点事件。

企业知识管理

自动整理内部文档,提高知识检索效率。

搜索引擎优化

通过关键词分析了解用户搜索需求,优化内容结构。

实际项目中的优化建议

如果需要构建稳定的中文文本分析系统,可以采用以下方案:

  1. 使用专业中文分词工具提升文本质量;

  2. 建立行业领域词库;

  3. TF-IDF用于快速关键词筛选;

  4. K-Means完成基础文本分类;

  5. 使用人工评估优化聚类结果;

  6. 对复杂场景引入BERT等语义模型。

TF-IDF与K-Means结合是一种经典、稳定且容易落地的中文文本分析方案。通过合理的数据预处理、特征提取和模型调优,可以有效完成关键词发现和文本自动分类任务。对于数据量较大的中文内容场景,这套方法仍然具有较高的应用价值。