大婷电子分析网

主页
分享数据分析资讯
大婷电子分析网-书数据挖掘,人工智能

数据挖掘—特征工程之文本数据处理(一)

更新时间:2021-12-28 03:10:37点击:

前言

对于文本数据,可以建立一个单独的研究领域,包括词袋模型(Bag of word)、TF-IDF(Term Frequency-Inverse Document Frequency)、主题模型(Topic Model)、词嵌入模型(Word Embedding)等。
本篇主要使用最简单的词袋模型对文本数据处理。

元素袋——将自然文本转成扁平向量

1.词袋

词袋:对于文本数据,单词数量的统计列表被称为词袋

数据挖掘—特征工程之文本数据处理(一)(图1)

举个例子,如果某个单词(比如:“aardvark”)在文档中出现了三次,那么特征向量在对应于这个单词的位置就有一个计数值3;如果词汇表中的某个单词没有出现在文档中,那么他的计数值就是0。

    再举个完整的例子:
    文本:it is a puppy and it is extremely cute
    对应的词袋向量如下图:

数据挖掘—特征工程之文本数据处理(一)(图2)

原始文本是一个单词序列,但词袋中没有任何序列,它只记录每个单词在文本中出现的次数,因此向量中单词的顺序根本不重要,只要它在数据集的所有文档之间保持一致即可。

词袋的缺点:很明显,因词袋是以每一个单词维一个向量,所以这样分解会破坏语义。
举个例子:“not bad”整体放在一起为褒义,但是根据词袋,将会拆解成“not”和“bad”,这就变成了贬义。
下面介绍的n元词袋可以在某种程度上解决这种问题。

n元词袋

n元词袋(bag-of-n-grams)是词袋的一种自然扩展。n-granm(n元词)是由n个标记(token)组成的序列。经过分词(tokenization)之后,计数机制将会单独标记转换为单词计数,或将有重叠的序列作为n-gram进行计数。(不太好理解,但是看完下面的代码,就能懂了)

例如:“Emma knocked on the door” 会生成2-gram “Emma knocked” “knocked on”“on the”和“the door”。


简单来说,n越大,能表示的信息月丰富,相应的成本(计算、存储等)也会越高。

这块使用原文使用的数据集(yelp_academic_dataset_review.json)作为举例代码数据:

加载数据集:
数据挖掘—特征工程之文本数据处理(一)(图3)

创建n-gram词袋,这里创建了一元,二元和三元:

数据挖掘—特征工程之文本数据处理(一)(图4)

打印结果如下:

>>> words[:10]['0', '00', '000', '0002', '00am', '00ish', '00pm', '01', '01am', '02']
>>> bigrams[-10:]['zucchinis at','zucchinis took','zucchinis we','zuma over','zuppa di','zuppa toscana','zuppe di','zurich and','zz top','à la']
>>> trigrams[:10]['0 10 definitely','0 2 also','0 25 per','0 3 miles','0 30 a','0 30 everything','0 30 lb','0 35 tip','0 5 curry','0 5 pork']

使用过滤获取清洁特征

即使用过滤将文本中的信号和噪声准确地区分开。

1.停用词

简单地说,停用词列表是一种剔除形成无意义特征的单词的方法。
这块针对粗粒度任务,下面解释粗粒度:

例如:在句子“Emma knocked on the door”中,单词“on”和“the”并不能改变这个句子是关于一个人和一扇门这样的事实。

关于停用词,已经有经语言专家定义好的停用词列表——NLP包NLTK,适用于多种语言。例如,下面是英语停用词列表中的一些词(小写,有撇号):

a, about, above, am, an, been, didn't, couldn't, i'd, i'll, itself, let's, myself,our, they, through, when's, whom, ...

2.基于频率的过滤

基于统计性的方法可以找出没有实际意义的单词。

高频词检查一下出现频率最高的单词,可以发现文本解析时的问题,并能标记出那些碰巧在预料库中出现多次的通常有用的词。
举例子:下表统计出了YeLp点评数据集中出现频率最高的40个词。(注:这里的频率是指包含这个词的文档(点评)数,并不是它在一篇文档中出现的次数)

可以看到,这个表中有很多停用词,而且因把撇号作为了分词的分隔符,所以出现了“s”、“t”这样的,于是像“Mary’s”或“didn’t”这样的词就被解析为“Mary s”和"didn t”。此外,“good”和“greate”都出现了,但是有用要保留。

数据挖掘—特征工程之文本数据处理(一)(图5)

数据挖掘—特征工程之文本数据处理(一)(图6)

结论:可以将基于频率的过滤技术和停用词列表结合起来。

罕见词

罕见词可能是真正的生僻词,也可能是拼写错误的普通词。
针对特征工程,常见情况以及处理方式如下:

只在一两篇文档中出现的词:可以视为噪声,不是有用信息,剔除

如果一个文本文档非常短:视为不包含有用信息,剔除。

词干提取解决问题:文本的简单解析有一个问题,就是同一个单词的各种变体会被视为不同的词而分别计数。
例如,“flower”和“flowers”在技术上是两个不同的标记,“swimmer”“swimming”和
“swim”也是一样的情况,尽管它们的含义非常相近。如果这些不同变体能映射为同一单词,那文本解析的效果会更好。
词干提取有多种方法,有的基于语言学规则,有的基于统计观测。有一种算法子类综合了词性标注和语言规则,这种处理过程称为词形还原。Porterstemmer 是应用最为广泛的免费英语词干提取工具。

下面是一个通过Python 的NLTK 包运行Porter stemmer 的例子,它适用于
很多情况,但不是万能的。“goes”被映射到了“goe”,而“go”被映射到了它本身。
数据挖掘—特征工程之文本数据处理(一)(图7)

结果:

数据挖掘—特征工程之文本数据处理(一)(图8)

总结

关于文本的处理方式内容较多,这里分成多篇幅来具体及说明。下面的内容在接下来的几篇中更新!

推荐文章