python 数据挖掘篇 三 gensim 使用

  • A+
所属分类:python数据分析

python 数据挖掘篇 一 结巴分词

python 数据挖掘篇 二 词云统计


第三章 Genism

3.1字符串列表到分词向量的转换

python 数据挖掘篇 三 gensim 使用

将每一个文档进行分词,形成2维列表形式,列表的每一项是子列表,子列表存储的文档的分词

python 数据挖掘篇 三 gensim 使用

到此为止,我们已经将字符串列表,转换为了分词向量的形式。

但是,这样计算机还是不好处理,而且,也不好进行数学运算,如果能将他们表示成数学的方式,岂不是非常美妙的一件事。

3.2分词向量转换为数学空间整形向量(语料)

怎么转换成数学表达形式呢?

其实这个肯定都用过,你没用过?不太可能吧,你肯定压缩过文件吧

python 数据挖掘篇 三 gensim 使用

压缩文件时,就有个字典选项,没错,就是通过字典,将文件中常用字用数字替代,这样就节省空间了。

这里的字典是什么呢?简单来说,就是字符串和数字的对应

3.2.1 字符串转换成整形向量

而gensim提供了字符串向量向字典转换的函数

python 数据挖掘篇 三 gensim 使用

python 数据挖掘篇 三 gensim 使用

打印这个字典,可以看到,字符串与数字对应起来了 数字11 代表的就是字符串minors

有了字典,我们就可以将字符串用字典表示成数学整形向量了

python 数据挖掘篇 三 gensim 使用

Doc2bow 作用就是将字符串分词向量,转换为对应的整形向量

Bowbag of word 直译为词袋,为啥叫词袋呢?个人以为是将字典作为原料,编织成袋子,将字典表示的各个分词向量,装在这个袋子里,个人理解,不必纠结。

下面将所有的文档,转换为词袋形式

python 数据挖掘篇 三 gensim 使用

3.2.2 文件流的形式,分解转换语料

上述转换为词袋语料用的是

corpus = [dictionary.doc2bow(text) for text in texts]

texts 是分词向量列表,这个分词向量列表所有的子分词列表,都是加载到内存中的,对于大文件来说,很吃内存。

对此,gensim提供了流的形式,每次从硬盘上读取一段数据流,进行词袋转换,比如我想将上千本古典小说转换为词袋的形式,只能用这种方式一本本的转换,不能一下子放在内存中,我的内存才可怜的2G,一下子就撑爆了。

python 数据挖掘篇 三 gensim 使用

自定义一个类,迭代的方式读取文件数据。

python 数据挖掘篇 三 gensim 使用

python 数据挖掘篇 三 gensim 使用

这有啥作用呢?

用处就是,你可以不局限于内存大小,可以将任意数量的文本转换为整形向量了。比如我以后打算将1000本古典小说转换为整形向量,使用这种方法就可以了。

3.2.3 文件流的形式,扩展字典

如果想构建一个大字典,比如上千本古典小说的大字典,也不可能一下子将上千本书加载到内存中,gensim也提供了流加载,逐步扩展字典的方法。

python 数据挖掘篇 三 gensim 使用

到目前为止,已经可以将字符串转换成整形向量语料形式了。

3.3 向量空间转换

初始的向量空间,是由字典生成的整形向量空间

(字典ID, 该词在此子分词列表中出现的次数)

初始的向量空间,我自己称为初始语料,初始语料可以使用模型加工成其它语料

python 数据挖掘篇 三 gensim 使用

MmCorpus(9 documents, 12 features, 28 non-zero entries)

最简单的就是tfidf语料,除此之外还有lsi,lda等

Tfidf

python 数据挖掘篇 三 gensim 使用

这个转换很简单,使用初始语料,遍历一遍,计算频率

获取的结果是一个对象,使用这个对象,可以对初始的语料空间中的向量进行转换。

python 数据挖掘篇 三 gensim 使用

将初始语料,全部转换为tfidf语料

python 数据挖掘篇 三 gensim 使用

3.4 models 模型

模型是干嘛的呢,简单的说,是对语料进行进一步的处理,从中利用数学关系,计算机算法,挖掘出潜在的信息。

常用的模型:tf-idf模型,lsi模型,lda模型

Tfidf模型

使用举例:

python 数据挖掘篇 三 gensim 使用

目前,只是传入了初始语料参数,生成了一个新的对象,但并没有进行语料的处理。真正的语料处理,还得调用如下方式实现

python 数据挖掘篇 三 gensim 使用

类似的还有:

LSI模型

python 数据挖掘篇 三 gensim 使用

num_topic的选项,指的潜在主题(topic)的数目,默认是300,在真实大量语料情况下,200-500,被认为是黄金标准。

python 数据挖掘篇 三 gensim 使用

LDA模型

python 数据挖掘篇 三 gensim 使用

Word2Vec模型

这个模型也很有意思,可以对词的相近性做比较,还有部分推理关系

python 数据挖掘篇 三 gensim 使用

3.5 字典、语料、模型的保存

字典、词袋的形成都是很耗费时间的,所以要将其保存起来,下次直接加载使用就可以了。

3.5.1 语料与文档 对应关系的保存与加载

生成字典后,将文档转换为语料,然后利用这些语料进行后期的数学运算,最终用于相似性询问查找。

但是最终给出的结果,是索引的形式。

python 数据挖掘篇 三 gensim 使用

这时候,语料与文档的对应关系,需要我们自己解决

我是用来查询小说的,将小说每段作为文档来处理,这时候,我就要记录下段落在语料中的索引。

在此,我是用字典记录的,不同的应用,这个要做不同的处理,针对这个应用,我是这样处理的。

{0:第一段,1:第二段}

python 数据挖掘篇 三 gensim 使用

python 数据挖掘篇 三 gensim 使用

3.5.2 字典的保存与加载

保存

python 数据挖掘篇 三 gensim 使用

加载

python 数据挖掘篇 三 gensim 使用

如:

python 数据挖掘篇 三 gensim 使用

3.5.3 语料的保存与加载

保存

python 数据挖掘篇 三 gensim 使用

加载

python 数据挖掘篇 三 gensim 使用

3.5.4 模型的保存与加载

python 数据挖掘篇 三 gensim 使用

python 数据挖掘篇 三 gensim 使用

python 数据挖掘篇 三 gensim 使用

3.5.5 索引保存

在相似性查询时,对语料进行索引编码,索引信息也可以保存与加载

python 数据挖掘篇 三 gensim 使用

python 数据挖掘篇 三 gensim 使用

3.6 查询—Similarity

其实,就是搜索引擎,输入文字,查询与这个文字最相近的文档。

3.6.1 初始化

既然要查询哪些文档与输入的文字最相近,首先你得有这些文档吧,有了这些文档,还得转换成语料空间吧,这样才方便利用数学关系进行相似度查找吧。

首先,对语料进行索引编码

这里使用lsi语料为例

python 数据挖掘篇 三 gensim 使用

语料索引编码后,可以保存

python 数据挖掘篇 三 gensim 使用

3.6.2 对查询字符串做语料转换

如上,我们使用的lsi语料做的索引,所以查询字符串也要转换成lsi语料

查询的字符串---》初始整形语料----》ti-idf语料---》lsi语料

python 数据挖掘篇 三 gensim 使用

python 数据挖掘篇 三 gensim 使用

python 数据挖掘篇 三 gensim 使用

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: