词袋(bags of words)
- 用一个固定的整数id来标记在所有文档中出现的所有单词,形成字典
- 对于#i 个文档,计算每个单词w在文档中出现的次数n,并将n存放在X[i, id] 中。
构建词袋的过程中会遇到的问题
一般feature的数量都能达到100,000,这是如果有10,000个样本的话就需要相当大的内存。但实际上,样本的特征向量X[i] 有很多特征都是零(称之为稀疏矩阵)。
这时候需要使用scipy.sparse来存储这样的数据结构。luckily,scipy和sklearn都是同一家项目底下的,所以毫无疑问地互相兼容了。
用sklearn来对文本的每个单词做标记
在构建词袋的过程中,构建字典是很重要的一步。
将文本数值化在sklearn中用到的是CountVectorizer
导入方式如下
1. 英文文本
毕竟是歪果仁发明的,当然sklearn对英语的文本就可以直接做标记了。
只需要三步走就可以直接构建词袋字典了
2. 中文文本
针对中文文本,我们其实也不难做,只需要多加一步【分词】。在中文分词领域,结巴是个不错的选择。
安装好 jieba 分词后,直接调用
出来的效果如下
以分词后的dataset作为输入就可以构建用来标记词语的字典
count_vect的模型训练完毕之后可以通过 id 查找单词
详见 这里
或者反过来,通过 单词 查找 id
tf-idf
根据词语的出现次数来构建词袋会出现一个问题:长的文章词语出现的次数会比短的文章要多,而实际上两篇文章可能谈论的都是同一个主题。
于是乎,我们用tf(term frequencies)——单词出现次数除以文章总单词数——这样的方法来代替出现次数来构建词袋字典。
除此之外,还有一个问题就是一个词如果在很多文章中都有出现,那么它对于区分文章的类别效果就微乎其微了。也就是说它对于我们识别文章所提供的信息就非常地少了。
于是乎就有了——tf-idf(Term Frequency times Inverse Document Frequency)——每个词再加上权重来构建词标记。
tf – idf算法在python中的模块就是 TfidfTransformer
(谜之声:真心佩服sklearn啊,机器学习常用的模块基本都应用尽有)
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览208940 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!