gensim介绍(翻译)
原文
gensim是一个用于从文档中自动提取语义话题的python包,高效而且准确。
gensim用于处理未加工过的纯文本。gensim中的算法,如潜在语义分析(LSA)、潜在狄利克雷分配(LDA)和随机投影通过检测文档语料中词语的统计共现性模式来发现文档的语义结构。这些算法都是无监督的,即无需人类输入,你仅仅需要一段纯文本语料。
一旦这些统计模型被找到,任意的纯文本都可以有新的语义表示,并可以查看和其他文档的相似性。
特性
- 不依赖内存 -语料无须一次加载进内存,可流式处理大量的语料数据。
- 高效的实现了几种流行的向量空间算法,包括Tf-Idf,分布式增量潜在语义分析、分布式增量隐含狄利克雷分配或随机预测;增加新的模型也十分方便。
- 预置了 几种流行的数据格式的I/O封装器和转换器。
- 利用文档的语义代表计算其相似性。
创立Gensim的主要动力是(作者)认识到缺乏一个可用的、可扩展的软件框架来实现主题建模,现有的软件都有难以承受的内部复杂性。
Gensim的主要设计理念是:
1. 对于开发者而言,提供简单的接口,降低API学习曲线。
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属性-答案对。
模型
对于我们的目的来说,一个模型就是一种文档表示方法的转化(或者说,从一个向量空间转化到另一个)。原型和目标表示方法都是向量——只是问题与答案不同。转化规则从训练语料库中自动学习,无需人工监督。并且我们希望最终的文档表示方法将更加简洁有用:即相似的文档相似的表示。