Gensim是一个免费的Python库,它可以用来从文档中自动提取语义主题,并且尽可能地做到轻松(对人)高效(对电脑)。

Gensim致力于处理原始的、非结构化的数字文本(普通文本)。Gensim中用到的算法,如潜在语义分析(Latent

Semantic Analysis,LSA)、隐含狄利克雷分配(Latent Dirichlet Allocation,LDA)或随机预测(Random

Projections)等,是通过检查单词在训练语料库的同一文档中的统计共现模式来发现文档的语义结构。这些算法都是无监督算法,也就是无需人工输入——你仅需一个普通文本的语料库即可。

一旦这些统计模式被发现了,所有的普通文本就可以被用一个新的、语义代号简洁地表示,并用其查询某一文本与其他文本的相似性。

特性

内存占用低——任何时候都不会将整个语料库全部读入内存中,可以处理大规模、网络规模的语料库。

有效实现了几种流行的向量空间算法,包括Tf-idf、分布式增量潜在语义分析、分布式增量隐含狄利克雷分配或随机预测;增加新的模型也十分方便(没骗你!)。

预置了几种流行的数据格式的I/O封装器和转换器。

利用文档的语义代表计算其相似性。

创立Gensim的主要动力是(作者)认识到缺乏一个可用的、可扩展的软件框架来实现主题建模,现有的软件都有难以承受的内部复杂性(hail java!——不会翻译)。你可以通过阅读我们的LREC

2010 workshop paper来了解更多的动机,如果你想在自己的工作中引用gensim请引用这篇文章(BibTeX)。

欢迎通过mailing list分享你的结果与实验。

Gensim的主要设计理念是:

1.      对于开发者而言,提供简单的接口,降低API学习曲线。Good forprototyping.

2.      考虑到输入语料库的大小,尽量降低内存占用;所有中间步骤和算法操作以流的方式,一次访问一个文档。

核心概念

整个gensim包围绕语料库(Corpus)、向量(Vector)、模型(Model)三个概念展开。

语料库

指所有数字文档的集合。该集合被用来自动推断文档的结构、主题等,因此也被称为训练语料库。推断出来的潜在结构可以在接下来为新的没有出现在训练语料库中的文档分配主题,无需人工干预(包括标引或创建其他元数据)。

向量

在向量空间模型中,每个文档都用一组属性代表。例如,每个单一的属性都可以被认为是一个问答对:

1. 文档中splonge这个单词出现了几次?0

2. 文档中有几个段落?2

3. 文档中有几种字体?5

这些问题通常用它的整数编号来代表(如这里是1,2和3),以便这些文档的代表变成一系列类似(1, 0.0), (2, 2.0), (3, 5.0)的数对。如果我们预先知道所有的问题,我们可以将他们简单地表示为(0.0, 2.0, 5.0),以隐含的方式省略问题的编号。这些答案的序列可以被看做是高维空间的向量(本例中是三维)。实际应用中,只有答案是单个实数(或者可以转化为单个实数)的问题才被允许。

每个文档的问题是相同的,以便对比两个向量(代表两个文档)。我们希望可以得到类似“这两个向量的数字非常相似,因此源文档也一定相似”这样的结论。当然,这个结论是否符合现实取决于我们选择的问题是否恰当。

稀疏向量

通常情况下,大多数问题的答案是0.0。为了节约空间,我们将这些问题省略,只记录(2, 2.0), (3, 5.0) (请注意(1, 0.0)被省略了).。由于问题集合已经提前知道了,在稀疏表示中所有缺失的属性都可以明确地解析为0.0。

Gensim没有规定任何特殊的语料库格式,一个语料库可以是任何能够连续产生这些稀疏向量的迭代器。例如,set([(2, 2.0), (3, 5.0)], ([0, -1.0], [3, -1.0]))就是一个很平常的有两个文档的语料库,每个文档有两个非0属性-答案对。

模型