文本聚类是将一个个文档由原有的自然语言文字信息转化成数学信息,以高维空间点的形式展现出来,通过计算哪些点距离比较近,从而将那些点聚成一个簇,簇的中心叫做簇心。一个好的聚类要保证簇内点的距离尽量的近,但簇与簇之间的点要尽量的远。
如下图,以 K、M、N 三个点分别为聚类的簇心,将结果聚为三类,使得簇内点的距离尽量的近,但簇与簇之间的点尽量的远。
开发环境,我们选择::
- MAC 系统
- Python 3.6
- Jupyter Notebook
本文继续沿用上篇文本分类中的语料来进行文本无监督聚类操作。
整个过程分为以下几个步骤:
- 语料加载
- 分词
- 去停用词
- 抽取词向量特征
- 实战 TF-IDF 的中文文本 K-means 聚类
- 实战 word2Vec 的中文文本 K-means 聚类
下面开始项目实战。
1. 首先进行语料加载,在这之前,引入所需要的 Python 依赖包,并将全部语料和停用词字典读入内存中。
第一步,引入依赖库,有随机数库、jieba 分词、pandas 库等:
import random
import jieba
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import gensim
from gensim.models import Word2Vec
from sklearn.preprocessing import scale
import multiprocessing
第二步,加载停用词字典,停用词词典为 stopwords.txt 文件,可以根据场景自己在该文本里面添加要去除的词(比如冠词、人称、数字等特定词):
#加载停用词
stopwords=pd.read_csv('stopwords.txt',index_col=False,quoting=3,sep="\t",names=['stopword'], encoding='utf-8')
stopwords=stopwords['stopword'].values
第三步,加载语料,语料是4个已经分好类的 csv 文件,直接用 pandas 加载即可,加载之后可以首先删除 nan 行,并提取要