转自:https://zhuanlan.zhihu.com/p/40991165

1:什么是文本聚类

先说说聚类的概念,聚类又称群分析,是数据挖掘的一种重要的思想,聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是多维空间中的一个点。聚类分析以相似性为基础,在一个聚类中的模式之间比不在同一聚类中的模式之间具有更多的相似性。(以上来自百度百科).

再说到文本聚类,文本聚类其实也就是在文本方向上的应用,首先我们要把一个个文档的自然语言转换成数学信息,这样形成高维空间点之后再去计算点与点之间的距离,然后将这些距离比较近的聚成一个簇,这些簇的中心成为簇心.而我们做的就是保证簇内点的距离足够近,簇与簇的距离足够远.

我接到的任务是在评论文本上进行聚类操作,起初以为很简单,但是发现其实还是不是很好操作的,有几个原因,一方面是评论有些部分语义其实是重复的,这样导致一些类别会重合,这样使用聚类的方法往往是不准确的,另一方面是一些评论上的词语使用近义词和一些音译字来替换词语,比如”微信”会转成”V信”等这些在分词的时候会有一些问题.并且又因为聚类是一种非监督学习,往往给我们的数据太多(给我的评论数据有80w,有多少类,什么类)我们都不知道,我们也只能轮廓系数不断地测试,找到一个合适的结果出来.

并且我们用的一些算法也有一些问题,比如我们使用的K-means方法,每一次选取的簇心是随机的,这样一来得到的结果也是每次不一样的,所以聚类算法也是比较难评价,这也是一些困难的部分.

2:文本聚类的过程

主要的过程如图所示,其实主要的部分有三个:

第一部分,分词处理,我们要把中文文章要进行分词,这一点中文文章和英文文章有一些区别,因为英文单词是单个构成的,也就不需要分词了,而我们中文是需要分词的,并且中文之间有一些词尽管大量出现,但是对于文章的分类结构起不到太大的意义,比如”的”,”了”,”么””应该”,这些词去计算他们既浪费空间又浪费时间,出于+1s的因素,我们也要节约时间啊,首先我们就加入一个停用词表,在进行分词的时候进行去掉.

第二部分:分词后将分词转换为词向量

关于词向量我们有一些比较常用的模型,比如one-hotm,BOW词袋模型,连续词袋模型(CBOW)和Skip-Gram模型和Word2vec模型,在这次任务中我是用的是BOW词袋模型,在转换为词向量值我们要将其转换成tfidf矩阵,tfidf其实可以看作是提取的特征的一次加权,是根据一个单词在当前文章中出现的频率和该单词在所有语料中出现的频率评估一个单词的重要性,当一个单词在这篇文章中出现的次数很多的时候,这个词语更加重要;但如果它在所有文章中出现的次数都很多,那么它就显得不那么重要

第三部分:选择聚类算法

这里的算法大家常用的是K-means和DBSCAN,这两种算法用的最多,但是在高维空间里边K-means似乎并不是很好,究其原因是因为维度太高,簇与簇之间的距离太小了,如果直接去聚类,这一部分似乎效果不太好,这时候就需要用到主成分分析PCA,大致的思路是大致意思就是取这个高维向量中方差最大的方向经过一些数学变换将有用的部分保留,没用的部分舍弃,这种办法同样适合分类算法中寻找最大的特征.

这一部分似乎也得单独拿出一篇文章好好写一下,毕竟太多坑了.

最后算法评测,对于K-means,我们使用的是簇的距离进行评定,对于Brich层次聚类,我们使用的是轮廓系数来评定,最后发现,这真是一个调参活,感叹真不容易.

最后效果:

红色虚线是轮廓系数,柱状图是类别,尽量多的让柱状在轮廓系数附近,我们可以认为结果取得不错.

系统学习NLP(二十)--文本聚类相关推荐

  1. 系统学习NLP(十八)--文本分类概述

    转自:https://blog.csdn.net/u014248127/article/details/80774668 文本分类问题: 给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多 ...

  2. 系统学习NLP(十二)--文本表示综述

    文本表示,简单的说就是不将文本视为字符串,而视为在数学上处理起来更为方便的向量(也就是文本特征抽取).而怎么把字符串变为向量,就是文本表示的核心问题. 文本表示,基于类型分为: 长文本表示 短文本表示 ...

  3. 系统学习NLP(十九)--文本分类之FastText

    转自:https://blog.csdn.net/sinat_26917383/article/details/54850933 FastText是Facebook开发的一款快速文本分类器,提供简单而 ...

  4. 系统学习NLP(十四)--句子向量与篇章向量

    转自:https://blog.csdn.net/qq_35082030/article/details/72582103 Doc2Vec 或者叫做 paragraph2vec, sentence e ...

  5. 系统学习NLP(十)--词性标注算法综述

    词性标注:将句子中兼类词的词性根据上下文唯一地确定下来.词性(part-of-speech)是词汇基本的语法属性,通常也称为词类.词性标注就是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过 ...

  6. 系统学习NLP(十六)--DSSM

    转自:http://blog.csdn.net/u013074302/article/details/76422551 导语 在NLP领域,语义相似度的计算一直是个难题:搜索场景下query和Doc的 ...

  7. 系统学习NLP(十五)--seq2seq

    转自:https://blog.csdn.net/aliceyangxi1987/article/details/73420477 本文结构: 什么是 seq2seq? Encoder–Decoder ...

  8. Unreal Engine 4 —— GAS系统学习 (二十八) 创建Lazer招式与GameplayEffect

    欢迎大家加入Unreal Engine C++ & Blueprint群一起交流:1143575617 为Lazer招式新建一个GA招式,继承自BP_GameplayAbility,这个类是前 ...

  9. 无人驾驶汽车系统入门(二十六)——基于深度学习的实时激光雷达点云目标检测及ROS实现

    无人驾驶汽车系统入门(二十六)--基于深度学习的实时激光雷达点云目标检测及ROS实现 在前两篇文章中,我们使用PCL实现了在点云中对地面的过滤和点云的分割聚类,通常来说,在这两步以后我们将对分割出来的 ...

  10. 无人驾驶汽车系统入门(二十五)——基于欧几里德聚类的激光雷达点云分割及ROS实现

    无人驾驶汽车系统入门(二十五)--基于欧几里德聚类的激光雷达点云分割及ROS实现 上一篇文章中我们介绍了一种基于射线坡度阈值的地面分割方法,并且我们使用pcl_ros实现了一个简单的节点,在完成了点云 ...

最新文章

  1. 管道:介绍和基本服务
  2. 嵌套 思维导图_工作小Tips:如何用思维导图来整理你的汇报
  3. 时光煮雨 Unity3D实现2D人物移动-总结篇
  4. 来源oa_骨性关节炎(OA)的初期管理——早点行动起来
  5. [Leetcode]笔记
  6. 特邀丨前阿里巴巴产品运营专家、中国计算机学会专业会员,揭秘增长共同点
  7. 也发一个自定义分页控件
  8. 原则,策略,规范也是构架的一部分
  9. 面试中关于多线程同步,你必须要思考的问题
  10. python算法和数据结构_Python中的数据结构和算法
  11. java学习(61):适配器
  12. UE4--多线程的实现方式
  13. 虚拟机vCPU和vNUMA调整大小-经验法则
  14. Mycat 不适应场景
  15. CSS @font-face性能优化
  16. 实操教程|Pytorch - 弹性训练极简实现( 附源码)
  17. vs2015安装vs assist 教程
  18. android腾讯微博客户端开发,基于android系统的腾讯微博客户端的开发
  19. 光线追踪渲染技术能听懂的介绍
  20. java文字生成图片

热门文章

  1. android8.1 audio hal关键结构分析(二十五)
  2. 高通平台Bring-up
  3. Android Multimedia框架总结(二十八)NuPlayer到OMX过程
  4. git创建分支合并到master分支步骤
  5. Android源码中常用的系统广播
  6. Android中的跨进程调用技术AIDL
  7. SpringBoot之实例程序
  8. VALSE学习(十六): Visual Question Generation and Answering-视觉问题生成和视觉问题
  9. 哲学家晚餐问题的Haskell求解
  10. Mock生成随机数据常用的类型规则