Python文本特征抽取与向量化算法学习文本特征抽取与向量化算法学习
主要为大家详细介绍了Python文本特征抽取与向量化算法,具有一定的参考价值,感兴趣的小伙伴们可以参考
一下
本文为大家分享了Python文本特征抽取与向量化的具体代码,供大家参考,具体内容如下
假设我们刚看完诺兰的大片《星际穿越》,设想如何让机器来自动分析各位观众对电影的评价到底是“赞”(positive)还
是“踩”(negative)呢?
这类问题就属于情感分析问题。这类问题处理的第一步,就是将文本转换为特征。
因此,这章我们只学习第一步,如何从文本中抽取特征,并将其向量化。
由于中文的处理涉及到分词问题,本文用一个简单的例子来说明如何使用Python的机器学习库,对英文进行特征提取。
1、数据准备、数据准备
Python的sklearn.datasets支持从目录读取所有分类好的文本。不过目录必须按照一个文件夹一个标签名的规则放好。比如本
文使用的数据集共有2个标签,一个为“net”,一个为“pos”,每个目录下面有6个文本文件。目录如下所示:
neg
1.txt
2.txt
......
pos
1.txt
2.txt
....
12个文件的内容汇总起来如下所示:
neg:
shit.
waste my money.
waste of money.
sb movie.
waste of time.
a shit movie.
pos:
nb! nb movie!
nb!
worth my money.
I love this movie!
a nb movie.
worth it!
2、文本特征、文本特征
如何从这些英文中抽取情感态度而进行分类呢?
最直观的做法就是抽取单词。通常认为,很多关键词能够反映说话者的态度。比如上面这个简单的数据集,很容易发现,凡是
说了“shit”的,就一定属于neg类。
当然,上面数据集是为了方便描述而简单设计的。现实中一个词经常会有穆棱两可的态度。但是仍然有理由相信,某个单词在
neg类中出现的越多,那么他表示neg态度的概率越大。
同样我们注意到有些单词对情感分类是毫无意义的。比如上述数据中的“of”,“I”之类的单词。这类词有个名字,
叫“Stop_Word”(停用词)。这类词是可以完全忽略掉不做统计的。显然忽略掉这些词,词频记录的存储空间能够得到优化,
而且构建速度也更快。
把每个单词的词频作为重要的特征也存在一个问题。比如上述数据中的”movie“,在12个样本中出现了5次,但是出现正反两边
次数差不多,没有什么区分度。而”worth“出现了2次,但却只出现在pos类中,显然更具有强烈的刚晴色彩,即区分度很高。
因此,我们需要引入TF-IDF(Term Frequency-Inverse Document Frequency,词频和逆向文件频率词频和逆向文件频率)对每个单词做进一步考
量。
TF(词频)(词频)的计算很简单,就是针对一个文件t,某个单词Nt 出现在该文档中的频率。比如文档“I love this movie”,单
词“love”的TF为1/4。如果去掉停用词“I"和”it“,则为1/2。
IDF(逆向文件频率)(逆向文件频率)的意义是,对于某个单词t,凡是出现了该单词的文档数Dt,占了全部测试文档D的比例,再求自然对
数。
比如单词“movie“一共出现了5次,而文档总数为12,因此IDF为ln(5/12)。
很显然,IDF是为了凸显那种出现的少,但是占有强烈感情色彩的词语。比如“movie”这样的词的IDF=ln(12/5)=0.88,远小