在对文本数据进行处理时,很大一部分精力都用在数据集的特征提取上,因此记录一下常用的文本特征提取方法。
文本特征提取一般分为两部分
(1)文本本身属性:元音字数数、辅音字母数、···
(2)基于文本的特征提取:TF-IDF等
01 文本本身特征
比如提取以上文档的特征,基于文本本身可以提取特征:
(1)字数:统计每一行text文本的词汇数量(有多少个单词)
(2)非重复单词数量:统计每一行text文本中只出现一次的单词个数
(3)长度:每一行text的长度,占了多少存储空间(包含空格、符号、字母等的长度)
(4)停止词数量统计:between、but、about、very等词汇的数量统计
(5)标点符号数量:每一行text中包含的标点符号数量
(6)大写单词数量:统计大写单词数量
(7)标题式单词数量:统计单词拼写首字母是否为大写,且其他字母为小写的单词数量
(8)单词的平均长度:每一行text中每个单词长度的平均值
这些特征的提取不涉及复杂的函数计算,基于文本本身属性提取直观信息作为模型训练的特征。
·
02 基于文本的特征提取
TF-IDF算法
TF-IDF算法:计算单词权重最为有效的实现方法就是TF-IDF, 它是由Salton在1988 年提出的,以特征词在文档d中出现的次数与包含该特征词的文档数之比作为该词的权重。
- TF(term frequency)
TF(term frequency)词频统计
区别文档最有意义的词语应该是那些在文档中出现频率高,而在整个文档集合的其他文档中出现频率少的词语,因此引入TF,计算单词的词频。
- IDF(inverse document frequency)
IDF(inverse document frequency)逆文本频度:一个单词出现的文本频数越小,它区别不同类别文本的能力就越大。因此引入了逆文本频度IDF的概念。
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0,说明这个词不那么重要。分母之所以要加1,是为了避免分母为0。
- TF-IDF
TF和IDF的乘积作为特征空间坐标系的取值测度。使用IDF作为权重乘以TF,实现对单词权重的调整,调整权值的目的在于突出重要单词,抑制次要单词。
python中使用TfidfVectorizer函数实现TF-IDF特征的提取,生成每个text的TF-IDF特征。
·
03 SVD 奇异值分解:压缩数据
经过TF-IDF特征提取后,数据集的特征变量超级多(TF-IDF计算了整个数据集出现的所有单词对每个test的权重),面对这样庞大的特征数据,可以通过SVD实现对数据集的压缩。
SVD的原理是将庞大的TF-IDF生成的数据集A进行拆分,设置K值(想要压缩得到的维度,例如K=20,压缩后得到20列的特征数据集)X就是只有K个特征转换后的数据集。
经过压缩后的TF-IDF只有K列,与01中基于文本本身特征合并,即为文本数据集的特征向量。