聚类
将相似的数据归档到一起.属于无监督学习
分为硬聚类(直接区分0与1)和软聚类(对于一个数据,为其可能属于每个类计算一个值,取最大的值)
NLP中更多使用硬聚类
实际应用
数据归档,预处理,筛选等.对于数据量大,标注成本高的情况,聚类是唯一的方案
词袋模型
词袋模型完成从文本到向量的转化
分词以后统计各个词语的词频(也可为TFIDF值等),生成一个向量,向量的每个元素的值为该词对应词频
优点是计算成本很低,缺点是忽略了词序(比如“我吃鱼”和“鱼吃我”两个句子在词袋模型中表达出来的向量完全一致)
n_gram模型是词袋模型的改进,其将文档看作相邻n个词语的集合.词袋模型也可视作1-gram
聚类算法–k-means
传统的k均值算法的步骤:
1.随机选择k个点作为质心(k需要认为指定)
2.将每个点分配给最近的质心的簇(此处计算距离的公式是欧式距离)
3.分配结束后,重新为每一个簇生成质心
4.重复2,3直到质心不再变化
k均值算法的改进
首先,质心的选取,传统方法是随机选取,若选取不当,容易导致结构收敛到一个较差的结果.
改进:初始只设置一个质心,在迭代的过程中,若有某个点能使准则函数下降一定值,则该点设为新的质心,直达质心数目达到要求.这么做可以使准则函数每次都有所下降
改进:准则函数的计算.初始准则函数为每一个数据点到其对应的质心的距离求和.而将准则函数中的欧式距离替换为余弦距离(即计算数据点和质心的余弦距离并求和),进行一系列化简后,只需要计算合成向量的长度即可
另外,k-means算法只能发现球状簇(根据其聚类过程,球状簇难以分离),且抗噪声能力不够强.针对这两点,可以使用dbscan算法(但是dbscan算法的时间复杂度较高)
重复二分聚类
也是k-means算法的一种改进,通过二分的方法加强了其效率
基本原理
1.挑选一个簇
2.用k均值将其分为两个簇
3.重复1,2,直到达到簇数量的要求
如果簇的数量难以估计,则可以指定簇进行二分时最小的增幅值,小于这个值则不进行继续二分.
经测试,
二分显然比遍历的时间复杂度更低,重复二分聚类的准确率高于传统k-means并且消耗时间大大减少
语料库
hanlp使用的语料库是搜狗文本分类语料库.下载并打开以后是这个格式