王小草SparkML笔记
笔记整理时间:2017年1月8日
笔记整理者:王小草
今日计事:
阴天,不寒冷。给古筝换上断了的新弦,调音,然后“当”地在第一根就又断了。
恩,天意,坐回电脑前。
1. 特征提取概述
什么是特征提取?
特征提取在英文的表述里就做feature extraction。
我们在做机器学习模型的时候,都会用的“特征”,对于有些对象,比如征信系统中预测贷款人是否会违约,可以使用特征:违约人的年龄,收入,家庭状况,固定资产价值等等指标来作为模型的特征,这些特征都是显而易见的可以被直接用数字与向量来表示的。但是如果我们要对一篇文本来做分析,就需要我们使用一些方法来提取文本中隐含的特征了。也就是说,模型本省是无法识别整篇文本在讲什么,有什么特征,需要我们人为地去提取特征,将文本转换成计算机能读懂的数字与向量的表征,才能进入下一步的建模。
那么我们要如何去提取文本的特征呢?关于文本的表征有许多方法,本文主要介绍一种最常用,效果也是比较好的方法:建立词项-文档矩阵。
2.词项-文档矩阵
2.1 概念
词项-文档矩阵,简写为TF-IDF(term frequency times inverse document frequency)
矩阵中的每个元素值代表了相应行上的词项对应于相应列上的文档的权重,即这个词对于这篇文章来说的重要程度。
2.2 原理
一个词对于一篇文章是否重要,体现在两个方面:
一个词项在一个文档中出现次数越多,他相对于文档的重要性就越大,这个指标就是我们的TF值
TF = 词项在该文档中出现的次数/这篇文档所有的词项数若词项在整个语料库中出现的次数越多,那么对于某一篇文章而言这个词就越没有意义,即越不重要。我们用逆文档频率idf来表示这个词在整个语料库中的重要程度,故,出现越多的词,idf值会越低,出现越少的词,idf值会越高
IDF = log(N/d)
N为所有文档的总数;d为出现过某个单词的文档的总数。
在现实中,词项在语料中的频率往往呈指数型。一个常用词出现的次数往往是一个次常用词出现次数的几十倍,这样常用词的权重会非常低(如“的”这样的词N/D几乎可能几乎等于1),故我们对逆文档频率取对数log,如此,文档频率的差别就从乘数变成了加数级了。
综上所述,我们在计算词项在一个文档中的重要程度,要考虑以上两个因素,用TF-IDF值来共同衡量
TF-IDF = TF * IDF
2.3 假设
该算法将每个文档看成是词项的集合,并没有考虑词项的顺序,句式结构和否定情况
2.4 存储格式
由于词项的数目非常之大,而文档数目远远小于词项,所以词项-文档矩阵应该是一个稀疏向量组成的行矩阵,每个向量代表一个文档
2.5 计算过程
(1)读入文档
在本地存储着的数据应该是一篇文章占一行,读入后,每篇文章是一个元素。
富途证券提供了安全性与可靠性的投资方式。
王宝强离婚案遭广大网友关注。大家表示心疼宝宝。
陆家嘴事件网友疑是炒作嫌疑。优衣库表示不服。
...
...
(2)分词
在计算词项-文档矩阵之前,我们需要将每篇文章进行分词,使得每篇文档都转换为了由词项组成的向量。因为我们往往是针对中文分词,比英文分词的难度与复杂度都大许多。一般使用词库加隐马模型或条件随机场来做中文分词与词性标注,这个在我的机器学习笔记中都有详细介绍,在此不赘述。分词后的效果如下:
[富途证券,提供,了,安全性,与,可靠性,的,投资,方式]
[王宝强,离婚