0%

gensim — 入门

gensim 是一个python平台的语义分析库,可以文本统计,分析文档语义结构,比较文档相似性。这是一篇ubuntu 16.04 LTS平台下gensim入门学习笔记,内容来源于官网

安装

1
sudo pip3 install -U gensim

设置日志

1
2
In [1]: import logging
In [2]: logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

快速示例

首先导入gensim,建立一个文档库,该文档库包含9个文档,12个关键词:

1
2
3
4
5
6
7
8
9
10
In [3]: from gensim import corpora, models, similarities
In [4]: corpus = [[(0, 1.0), (1, 1.0), (2, 1.0)],
[(2, 1.0), (3, 1.0), (4, 1.0), (5, 1.0), (6, 1.0), (8, 1.0)],
[(1, 1.0), (3, 1.0), (4, 1.0), (7, 1.0)],
[(0, 1.0), (4, 2.0), (7, 1.0)],
[(3, 1.0), (5, 1.0), (6, 1.0)],
[(9, 1.0)],
[(9, 1.0), (10, 1.0)],
[(9, 1.0), (10, 1.0), (11, 1.0)],
[(8, 1.0), (10, 1.0), (11, 1.0)]]

在gensim中,文档库(corpus)是一个对象,当它迭代时,返回表示为稀疏向量的文档。在这种情况下,我们使用元组列表的列表。

如果您熟悉向量空间模型( vector space model),您可能会知道解析文档并将其转换为向量的方式会对后续应用程序的质量产生重大影响。

下一步,初始化一个转换(transformation):

1
In [5]: tfidf = model.TfidfModel(corpus)

Tf-idf ( term frequency–inverse document frequency)意为词频—逆向文档频率

转换用于将文档从一个向量表示转换为另一个向量表示:

1
2
3
In [10]: vec = [(0,1),(4,1)]
In [11]: print(tfidf[vec])
[(0, 0.8075244024440723), (4, 0.5898341626740045)]

在这里,我们使用Tf-Idf,一种简单的变换,其采用表示为词包计数的文档并在常用术语(或者等同地,不常出现的术语)上加权。它还将所得到的向量缩放为单位长度(欧几里德范数 )。

为了通过TfIdf转换整个语料库并为之建立索引,为相似性查询做准备:

1
2
3
4
5
6
In [14]: index=similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=12)
2016-11-28 16:13:18,113 :INFO : creating sparse index
2016-11-28 16:13:18,113 :INFO : creating sparse matrix from corpus
2016-11-28 16:13:18,114 :INFO : PROGRESS: at document #0
2016-11-28 16:13:18,116 :INFO : created <9x12 sparse matrix of type '<class 'numpy.float32'>'
with 28 stored elements in Compressed Sparse Row format>

查询我们的查询向量vec与文档库中的每个文档的相似性:
1
2
3
4
In [15]: sims=index[tfidf[vec]]

In [16]: print(list(enumerate(sims)))
[(0, 0.4662244), (1, 0.19139354), (2, 0.24600551), (3, 0.82094592), (4, 0.0), (5, 0.0), (6, 0.0), (7, 0.0), (8, 0.0)]

如何理解这个输出结果?文档号0(第一个文档)具有0.466 = 46.6%的相似性分数,第二个文档具有19.1%的相似性分数等。 因此,根据TfIdf文档表示和余弦相似性度量,与我们的查询文档vec最相似的是编号为3的文档,相似性分值为82.1%。注意,在TfIdf表示中,任何不与vec共享任何共同特征的文档(文档编号4-8)得到的相似性分数为0.0。有关更多详细信息,请参阅相似性查询教程