达观动态

达观愿与业内同行分享 助力各企业在大数据浪潮来临之际一起破浪前行

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

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

注意,这里的文本挖掘任务主要指的是如文本分类、文本聚类、信息抽取、情感分类等等的常规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

 

文章来源:https://blog.csdn.net/scotfield_msn/article/details/72904092