数据挖掘 NLP 之 文本挖掘 文本处理 通用流程

原创作品, 转载请注明出处:[ Mr.Scofield  http://blog.csdn.net/scotfield_msn/article/details/72904092  ]

From RxNLP.

数据挖掘中的文本挖掘不论是对于企业应用,还是研究者工作,或者是参与数据竞赛项目,都是基础的工作。通过前面的一些实践工作,现总结出文本挖掘文本处理的通用流程。

注意,这里的文本挖掘任务主要指的是如文本分类、文本聚类、信息抽取、情感分类等等的常规NLP问题。

一、获取语料

获取文本语料通常有以下几种方式:

1. 标准开放公开测试数据集,比如国内的中文汉语有搜狗语料、人民日报语料;国际English的有stanford的语料数据集、semavel的数据集等等

2. 爬虫抓取,获取网络文本,主要是获取网页HTML的形式,利用网络爬虫在相关站点爬取目标文本数据。

二、文本预处理

1.数据清洗

对于爬虫爬取的HTML原始文本,需要进行数据清洗过滤掉标签文本。网页中存在很多不必要的信息,比如说一些广告,导航栏,html、js代码,注释等等,我们并不感兴趣的信息,可以delete掉。如果是需要正文提取,可以利用标签用途、标签密度判定、数据挖掘思想、视觉网页块分析技术等等策略抽取出正文。

2.分词(只针对中文文本)

对于中文文本数据,比如一条中文的句子,词语词之间是连续的,而数据分析的最小单位粒度我们希望是词语,所以我们需要进行分词工作,这样就给下一步的工作做准备。而对于英文文本句子,就不存在分词这一说法了,应为英文的句子的最小单位就是词语,词语之间是有空格隔开的。

3.词性标注(可选)

词性标注POS的目的是为了让句子在后面的处理中融入更多的有用的语言信息。词性标注是一个经典的序列标注问题。不过对于有些文本处理任务,词性标注不是非必需的。

4.去停用词

停用词stopword是指那些对文本特征没有任何贡献作用的词语,比如:啊、的、是的、你、我、…………还有一些标点符号,这些我们不想在文本分析的时候引入,因此需要去掉,这些词就是停用词。因为这些词在所有的文章中都大量存在,并不能反应出文本的意思,可以处理掉。当然针对不同的应用还有很多其他词性也是可以去掉的,比如形容词等。

三、构造文本特征

接下来,我们将考虑如何将文本符号转换成或者表示成能让学习模型能够处理的数据类型。很明显,我们需要将文本符号串转变为数字,更确切滴说是向量阵列:矩阵。

1.词袋表示

词袋表示(bag of word, BOW), 即不考虑词语的原本在句子中的顺序,直接将每一个词语或者符号按照计数的方式,即出现的次数来进行统计。当然了,统计词频这只是最基本的方式。还有很多的处理,具体如下。

1.1 count

先将关键的keywords作为文本特征,然后再用此最直接的方式进行句子表示,就是直接统计词频,然后将每一个句子或者文本篇章按照每一个特征出现的频率进行统计,这样处理后将得到句子或者文档对应的一个特征向量,向量的每个元素便是对应特征词的出现频数。

1.2 tf-idf

与count类似,不过对其进行了改进。TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TFIDF,TF词频(Term Frequency),IDF反文档频率(Inverse DocumentFrequency)。TF表示词条,在文档d中出现的频率。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。

不进行更多的描述,网上一大把。同样的,处理后将得到一个句子的特征向量,不过每个元素应该是一个[0, 1]的实数,表示一个概率。一个好的tf-idf需要进行很多的处理,比如进行光滑处理。

2.词向量表示

词向量又名词嵌入word embedding,具体的无门槛科普请参考隔壁一篇博客《DeepNLP的表示学习·词嵌入来龙去脉·深度学习(Deep Learning)·自然语言处理(NLP)·表示(Representation)》。分布式表示的优点就是1.维度低,节省计算等等一堆资源;2.capture了相对位置的语义信息,这一点革命性的。当然了,不同类型的词向量有不同的能力,这里不啰嗦。下面举两个例子。

2.1 word2vec

不是说word2vec只能用于神经网络的输入,词向量只是一种词的表示方式,同样适用于经典的ML模型。具体请参考博客《DeepNLP的表示学习·词嵌入来龙去脉·深度学习(Deep Learning)·自然语言处理(NLP)·表示(Representation)》

2.2 glove

likewise.

四、特征选择处理

1.特征选择

在文本挖掘与文本分类的有关问题中,常采用特征选择方法。原因是文本的特征一般都是单词(term),具有语义信息,使用特征选择找出的k维子集,仍然是单词作为特征,保留了语义信息,而特征提取则找k维新空间,将会丧失了语义信息。
          在解决一个实际问题的过程中,选择合适的特征或者构建特征的能力特别重要。这成为特征选择或者特征工程。特征选择时一个很需要创造力的过程,更多的依赖于直觉和专业知识,并且有很多现成的算法来进行特征的选择。 对于一个语料而言,我们可以统计的信息包括文档频率和文档类比例,所有的特征选择方法均依赖于这两个统计量,             目前,文本的特征选择方法主要有:DF, MI, IG, CHI,WLLR,WFO六种。

1)DF(Document Frequency)
                    2)MI(Mutual Information)
                    3)IG(Information Gain)
                    4)CHI(Chi-square)
                    5)WLLR(Weighted Log Likelihood Ration)

具体地不过多地赘述,网络有资料,可以查阅相关论文。还有这些:WET(文档证据权重),OI,CC(相关系数)等常用的特征选择。

除此之外还可以利用LDA进行特征优化。

2.特征降维(非必须)

对于文本类的数据挖掘项目,基本不考虑降维的问题。

具体地有这些:LDA(线性特征抽取),PCA(主成分分析),FA(因子分析),SVD(奇异值分解),NMF(非负矩阵分解),LSI或者LSA(潜在语义分析)

五、学习模型训练&适用

接下来的工作就很清晰明了了,一旦将文本表示成了常规的广义特征数据结构后,我们所要做的就是跟其他的类型的数据挖掘一样,将这些特征喂入学习模型,然后适用于心得测试数据集,最后得到结果。

1.模型训练学习

对于文本分类问题,我们可以采用KNN,SVM,Naive Bayes,决策树,GBDT,当然,直接上xgboost也是杠杠滴。

对于文本聚类问题,可选择K-means,agent,divided,DBSCAN 等模型。

2.模型评估

当然最后也需要对模型进行必要的评估,以让模型optimized。

具体有这些指标可以参考:

2.1 保持、随机二次抽样、交叉验证、自助法

2.2 准确率,错误率,精确度,召回率

2.3 ROC曲线、AUC曲线。

refs:

http://www.cnblogs.com/wangbogong/p/3251132.html

http://blog.csdn.net/u011274209/article/details/51896757

http://blog.csdn.net/u011955252/article/details/50802437

数据挖掘 NLP 之 文本挖掘 文本处理 通用流程相关推荐

  1. NLP自然语言处理—文本分类入门

    前言 NLP作为机器学习三大热门领域之一,现在的发展也是越来越完备,从2012年神经网络崛起之后,自然语言领域就迎来了春天,特别是当预训练方法横空出世之后,NLP作为最先尝到预训练甜头的先锋,可以说是 ...

  2. BI笔记之---BI通用流程zz

    此图是根据个人经验总结出的一个BI通用流程,适用于报表方案,多维分析方案,但不适用于数据挖掘的方案. BI项目关键资源:业务专家,BI开发人员,业务开发人员. 业务专家的参与有助于提高需求的准确性,B ...

  3. 零基础入门NLP - 天池新闻文本分类Task3笔记

    零基础入门NLP - 天池新闻文本分类 以下以Datawhale与天池举办的新闻文本分类这个NLP赛题做的NLP入门Task2笔记 赛题链接:https://tianchi.aliyun.com/co ...

  4. flowable笔记 - 简单的通用流程

    简介 通用流程可以用于一些基本的申请,例如请假.加班. 大致过程是: 1. 创建申请 2. 分配给审批人(需要审批人列表,当前审批人) -> 有下一个审批人 -> 3 -> 无 -& ...

  5. Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)

    开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...

  6. 利用python处理pdf文本_Python用于NLP :处理文本和PDF文件

    原标题:Python用于NLP :处理文本和PDF文件 提示:代码图片可以点击全屏查看,双指操作还可以放大缩小. 这是我的Python用于自然语言处理(NLP)系列文章的第一篇文章.在本文中,我们将从 ...

  7. 流程编排、如此简单-通用流程编排组件JDEasyFlow介绍

    作者:李玉亮 JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排.工作流.审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-ea ...

  8. Unity Android平台下插件/SDK开发通用流程

    本文主要面向对Android开发不甚了解的Unity开发者,介绍了基于最新的Android Studio的标准Android开发环境与项目结构的配置流程,在此基础上,开发者可以快速的进行SDK的接入与 ...

  9. 【MOT】多目标跟踪通用流程方法总结

    从整体框架分类: TBD(Tracking-by-Detecton),或者DBT(Detection-based-Tracking),具体来说首先使用物体检测器检测目标,然后,利用运动.位置.外观线索 ...

  10. 架构抽象之通用流程管理抽象

    通用流程管理要做些什么 通用流程管理旨在抽象出流程部分,让流程与业务进行松耦合,那么这个抽象过程就需要考虑出完整的结构,以适合尽可能多的业务. 我们通常做项目的时候,都把业务流程两个词儿放到一起考虑, ...

最新文章

  1. power 芯片 运行linux,IBM Power系列的是不是只能用linux?
  2. 异步委托实现多线程winform控件编程
  3. uni 根目录路径_如何解决uniapp图片路径错误问题
  4. Linux / openwrt / Ubuntu 18.04 虚拟机中的 openwrt 如何联网
  5. idea将maven项目打包成war包的方式,以及使用war包
  6. Angular2官网项目 (4)--路由
  7. Promise源码实现
  8. WM_CREATE消息响应函数和WM_INITDIALOG消息响应函数之区别
  9. 如何下载陕西省卫星地图高清版大图
  10. 软件开发人员的能力模型
  11. 软考中级-数据库系统工程师复习知识点汇总
  12. STM32实现水下四旋翼(七)传感任务3——MS5837水深传感器读水深(超详细)
  13. docker提交比赛记录
  14. ios 打包 验证应用失败原因汇总
  15. vue 浏览器调试 样式如何定位样式_Vue项目骨架屏注入实践和方法总结
  16. 卡莱特led显示屏调试教程_卡莱特5A接收卡调屏步骤.doc
  17. 如何区分显卡新旧和配置?
  18. STM32开发基础知识入门
  19. Android传输助手,电脑手机传输助手
  20. Qt 之 QVideoFrame转换为QImage

热门文章

  1. iMeta封面 | 宏蛋白质组学分析一站式工具集iMetaLab Suite(加拿大渥太华大学Figeys组)...
  2. 基于Redis的推荐系统开发
  3. 计算机管理储存u盘无法使用,小编教你无法格式化u盘怎么解决
  4. 华为自带浏览器书签删除了怎么恢复_1 秒钟,这个工具能导出你浏览器全部重要数据...
  5. tushare获取上证50成分股与权重写入mysql
  6. matlab中simulink耦合线圈,基于AMESim和Matlab/Simulink的耦合振动台建模仿真
  7. 梦幻西游进入游戏显示服务器程序停止工作,win7系统提示“梦幻西游已停止工作”的解决方法...
  8. Word文件的OpenXML解析(以Python3为例)
  9. 祝贺父亲节快乐的python代码_父亲节快乐的祝福语贺词(最新)
  10. IT经理人:提高团队工作效率的11个方法