未验证 提交 c2d3b286 编写于 作者: 片刻小哥哥's avatar 片刻小哥哥 提交者: GitHub

Merge pull request #1 from jiangzhonglian/master

 更新gensim教程,介绍和安装
# gensim-doc-zh
gensim 中文文档
# gensim 中文文档
* [ApacheCN 组织资源](https://github.com/apachecn/home): https://github.com/apachecn/home
> **欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远**
* 原文:[prob140/textbook](https://nbviewer.jupyter.org/github/prob140/textbook/tree/gh-pages/notebooks/)
* **[ApacheCN - 学习机器学习群【629470233】](http://shang.qq.com/wpa/qunwpa?idkey=30e5f1123a79867570f665aa3a483ca404b1c3f77737bc01ec520ed5f078ddef)**
* **[Machine Learning in Action(机器学习实战)](https://github.com/apachecn/MachineLearning)| [ApacheCN(apache 中文网)](http://www.apachecn.org/)**
## 目录
这些教程被组织为一系列示例,突出了gensim的各种功能。假设读者熟悉[Python语言](https://www.python.org/)[安装了gensim](https://radimrehurek.com/gensim/install.html) 并阅读了[介绍](https://radimrehurek.com/gensim/intro.html)
这些例子分为以下部分:
* [语料库和向量空间](https://radimrehurek.com/gensim/tut1.html)
* [从字符串到向量](https://radimrehurek.com/gensim/tut1.html#from-strings-to-vectors)
* [语料库流 - 一次一个文档](https://radimrehurek.com/gensim/tut1.html#corpus-streaming-one-document-at-a-time)
* [语料库格式](https://radimrehurek.com/gensim/tut1.html#corpus-formats)
* [与NumPy和SciPy的兼容性](https://radimrehurek.com/gensim/tut1.html#compatibility-with-numpy-and-scipy)
* [主题和转换](https://radimrehurek.com/gensim/tut2.html)
* [转换界面](https://radimrehurek.com/gensim/tut2.html#transformation-interface)
* [可用的转换](https://radimrehurek.com/gensim/tut2.html#available-transformations)
* [相似性查询](https://radimrehurek.com/gensim/tut3.html)
* [相似界面](https://radimrehurek.com/gensim/tut3.html#similarity-interface)
* [下一个在哪里](https://radimrehurek.com/gensim/tut3.html#where-next)
* [英语维基百科上的实验](https://radimrehurek.com/gensim/wiki.html)
* [准备语料库](https://radimrehurek.com/gensim/wiki.html#preparing-the-corpus)
* [潜在语义分析](https://radimrehurek.com/gensim/wiki.html#latent-semantic-analysis)
* [潜在的Dirichlet分配](https://radimrehurek.com/gensim/wiki.html#latent-dirichlet-allocation)
* [分布式计算](https://radimrehurek.com/gensim/distributed.html)
* [为何分布式计算?](https://radimrehurek.com/gensim/distributed.html#why-distributed-computing)
* [先决条件](https://radimrehurek.com/gensim/distributed.html#prerequisites)
* [核心概念](https://radimrehurek.com/gensim/distributed.html#core-concepts)
* [可用分布式算法](https://radimrehurek.com/gensim/distributed.html#available-distributed-algorithms)
## [预赛](https://radimrehurek.com/gensim/tutorial.html#preliminaries "永久链接到这个标题")
所有示例都可以直接复制到Python解释器shell。[IPython](http://ipython.scipy.org/)`cpaste` 命令对于复制代码片段(包括主要 `>>>>` 字符)特别方便。
Gensim使用Python的标准 `logging` 模块来记录各种优先级的各种东西; 要激活日志记录(这是可选的),请运行
```
>>> import logging
>>> logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
```
## [快速示例](https://radimrehurek.com/gensim/tutorial.html#quick-example "永久链接到这个标题")
首先,让我们导入gensim并创建一个包含九个文档和十二个特征的小型语料库[[1]](https://radimrehurek.com/gensim/tutorial.html#id2)
```
>>> from gensim import corpora, models, similarities
>>>
>>> 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中,*语料库*只是一个对象,当迭代时,返回其表示为稀疏向量的文档。在这种情况下,我们使用元组列表的列表。如果您不熟悉[矢量空间模型](https://en.wikipedia.org/wiki/Vector_space_model),我们将在下一个关于[Corpora和Vector Spaces的](https://radimrehurek.com/gensim/tut1.html)教程中弥合**原始字符串****语料库****稀疏矢量**之间的差距。[](https://radimrehurek.com/gensim/tut1.html)
如果您熟悉向量空间模型,您可能会知道解析文档并将其转换为向量的方式会对任何后续应用程序的质量产生重大影响。
> 注意:
在此示例中,整个语料库作为Python列表存储在内存中。但是,语料库接口只表示语料库必须支持对其组成文档的迭代。对于非常大的语料库,有利的是将语料库保持在磁盘上,并且一次一个地顺序访问其文档。所有操作和转换都以这样的方式实现,使得它们在内存方面独立于语料库的大小。
接下来,让我们初始化一个*转换*
```
>>> tfidf = models.TfidfModel(corpus)
```
转换用于将文档从一个向量表示转换为另一个向量表示:
```
>>> vec = [(0, 1), (4, 1)]
>>> print(tfidf[vec])
[(0, 0.8075244), (4, 0.5898342)]
```
在这里,我们使用了[Tf-Idf](https://en.wikipedia.org/wiki/Tf%E2%80%93idf),这是一种简单的转换,它将文档表示为词袋计数,并应用对常用术语进行折扣的权重(或者等同于促销稀有术语)。它还将得到的向量缩放到单位长度(在[欧几里德范数中](https://en.wikipedia.org/wiki/Norm_%28mathematics%29#Euclidean_norm))。
[主题和转换](https://radimrehurek.com/gensim/tut2.html)教程中详细介绍了[转换](https://radimrehurek.com/gensim/tut2.html)
要通过TfIdf转换整个语料库并对其进行索引,以准备相似性查询:
```
>>> index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=12)
```
并查询我们的查询向量`<span class="pre">vec</span>`与语料库中每个文档的相似性:
```
>>> sims = index[tfidf[vec]]
>>> print(list(enumerate(sims)))
[(0, 0.4662244), (1, 0.19139354), (2, 0.24600551), (3, 0.82094586), (4, 0.0), (5, 0.0), (6, 0.0), (7, 0.0), (8, 0.0)]
```
如何阅读此输出?文档编号为零(第一个文档)的相似度得分为0.466 = 46.6%,第二个文档的相似度得分为19.1%等。
因此,根据TfIdf文档表示和余弦相似性度量,最类似于我们的查询文档vec是文档号。3,相似度得分为82.1%。请注意,在TfIdf表示中,任何不具有任何共同特征的 `vec` 文档(文档编号4-8)的相似性得分均为0.0。有关更多详细信息,请参阅[Similarity Queries](https://radimrehurek.com/gensim/tut3.html)教程。
---
| [[1]](https://radimrehurek.com/gensim/tutorial.html#id1) | 这与 [Deerwester等人](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf) 使用的语料库相同[](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf)[(1990):通过潜在语义分析进行索引](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf),表2。
## 联系方式
> 负责人
* [@片刻](https://github.com/jiangzhonglian): 529815144
> 加入方式
* 企鹅: 529815144(片刻) 1042658081(那伊抹微笑) 190442212(瑶妹)
* [ApacheCN(apache中文网) 维护更新](http://www.apachecn.org) : [关于我们](http://cwiki.apachecn.org/pages/viewpage.action?pageId=2887240) && [加入我们](http://cwiki.apachecn.org/pages/viewpage.action?pageId=2887239)
## 免责声明 - 【只供学习参考】
* ApacheCN 纯粹出于学习目的与个人兴趣翻译本书
* ApacheCN 保留对此版本译文的署名权及其它相关权利
---
资料来源:
* https://radimrehurek.com/gensim/tutorial.html
## 赞助我们
![](http://www.apachecn.org/img/about/donate.jpg)
# 安装
## [快速安装](https://radimrehurek.com/gensim/install.html#quick-install "永久链接到这个标题")
在您的终端中运行(推荐):
`pip install --upgrade gensim`
或者,对于conda环境:
`conda install -c conda-forge gensim`
而已!恭喜,您可以继续学习本[教程](https://radimrehurek.com/gensim/tutorial.html)
如果失败,请确保您正在安装到可写位置(或使用sudo)。
---
## [代码依赖](https://radimrehurek.com/gensim/install.html#code-dependencies "永久链接到这个标题")
Gensim在Linux,Windows和Mac OS X上运行,并且应该在支持Python 2.7+和NumPy的任何其他平台上运行。Gensim取决于以下软件:
* [Python](https://www.python.org/) >= 2.7 (tested with versions 2.7, 3.5 and 3.6)
* [NumPy](http://www.numpy.org/) >= 1.11.3
* [SciPy](https://www.scipy.org/) >= 0.18.1
* [Six](https://pypi.org/project/six/) >= 1.5.0
* [smart_open](https://pypi.org/project/smart_open/) >= 1.2.1
## 测试Gensim [](https://radimrehurek.com/gensim/install.html#testing-gensim "永久链接到这个标题")
Gensim使用持续集成,在每个pull请求上自动运行完整的测试套件
| CI service | Task | Build badge |
| :-- | :-- | :-- |
| Travis | 在Linux上运行测试并检查[代码样式](https://www.python.org/dev/peps/pep-0008/?) | ![Travis](/imgs/Introduction/gensim.svg) |
| AppVeyor | 在Windows上运行测试 | ![AppVeyor](/imgs/Introduction/develop_1.svg) |
| CircleCI | 构建文档 | ![CircleCI](/imgs/Introduction/develop.svg) |
## [问题?](https://radimrehurek.com/gensim/install.html#problems "永久链接到这个标题")
使用[Gensim讨论组](https://groups.google.com/group/gensim/)进行问题和故障排除。有关商业支持,请参阅[支持页面](https://radimrehurek.com/gensim/support.html)
# 介绍
Gensim是一个[免费的](https://radimrehurek.com/gensim/intro.html#availability) Python库,旨在从文档中自动提取语义主题,尽可能高效(计算机方面)和 painlessly(人性化)。
Gensim旨在处理原始的非结构化数字文本(**`纯文本`**)。
在Gensim的算法,比如[`Word2Vec`](https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec "gensim.models.word2vec.Word2Vec")[`FastText`](https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.FastText "gensim.models.fasttext.FastText"),潜在语义分析(LSI,LSA,see [`LsiModel`](https://radimrehurek.com/gensim/models/lsimodel.html#gensim.models.lsimodel.LsiModel "gensim.models.lsimodel.LsiModel")),隐含狄利克雷分布(LDA,见[`LdaModel`](https://radimrehurek.com/gensim/models/ldamodel.html#gensim.models.ldamodel.LdaModel "gensim.models.ldamodel.LdaModel"))等,自动训练文档的躯体内检查统计共生模式发现的文件的语义结构。这些算法是**无监督的**,这意味着不需要人工输入 - 您只需要一个纯文本文档。
一旦找到这些统计模式,任何纯文本文档(句子,短语,单词......)都可以在新的语义表示中简洁地表达,并查询与其他文档(单词,短语......)的主题相似性。
> 注意
如果前面的段落让您感到困惑,您可以在Wikipedia上阅读有关[向量空间模型](https://en.wikipedia.org/wiki/Vector_space_model)[无监督文档分析的](https://en.wikipedia.org/wiki/Latent_semantic_indexing)更多信息。
## [功能](https://radimrehurek.com/gensim/intro.html#features "永久链接到这个标题")
* **内存独立性** - 任何时候都不需要整个训练语料库完全驻留在RAM中(可以处理大型的Web级语料库)。
* **内存共享** - 经过训练的模型可以持久保存到磁盘并通过[mmap](https://en.wikipedia.org/wiki/Mmap)加载回来。多个进程可以共享相同的数据,从而减少RAM占用空间。
* 一些流行的向量空间算法的高效实现,包括[`Word2Vec`](https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec "gensim.models.word2vec.Word2Vec")[`Doc2Vec`](https://radimrehurek.com/gensim/models/doc2vec.html#gensim.models.doc2vec.Doc2Vec "gensim.models.doc2vec.Doc2Vec")[`FastText`](https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.FastText "gensim.models.fasttext.FastText"),TF-IDF,潜在语义分析(LSI,LSA,见[`LsiModel`](https://radimrehurek.com/gensim/models/lsimodel.html#gensim.models.lsimodel.LsiModel "gensim.models.lsimodel.LsiModel")),隐含狄利克雷分布(LDA,见[`LdaModel`](https://radimrehurek.com/gensim/models/ldamodel.html#gensim.models.ldamodel.LdaModel "gensim.models.ldamodel.LdaModel"))或随机投影(见[`RpModel`](https://radimrehurek.com/gensim/models/rpmodel.html#gensim.models.rpmodel.RpModel "gensim.models.rpmodel.RpModel"))。
* 来自几种流行数据格式的I / O包装器和读卡器。
* 在语义表示中对文档进行快速相似性查询。
Gensim背后的**主要设计目标**是:
1. 为开发人员提供简单的接口和低API学习曲线。适合原型设计。
2. 记忆独立性与输入语料库的大小有关; 所有中间步骤和算法都以流式方式运行,一次访问一个文档。
也可以看看
我们还为NLP,文档分析,索引,搜索和集群构建了一个高性能的商业服务器:[https](https://scaletext.ai/)[//scaletext.ai](https://scaletext.ai/)。ScaleText既可以在本地使用,也可以作为SaaS使用。
到达 info@scaletext.com 如果你需要专业支持的工业级NLP工具。
## [可用性](https://radimrehurek.com/gensim/intro.html#availability "永久链接到这个标题")
Gensim根据OSI批准的[GNU LGPLv2.1许可证授权](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html),可以从其[Github存储库](https://github.com/piskvorky/gensim/) 或[Python Package Index下载](https://pypi.python.org/pypi/gensim)
也可以看看
有关Gensim部署的更多信息,请参阅[安装](https://radimrehurek.com/gensim/install.html)页面。
## [核心概念](https://radimrehurek.com/gensim/intro.html#core-concepts "永久链接到这个标题")
> 文集
数字文档的集合。Corpora在Gensim担任两个角色:
1. 模型训练的输入语料库用于自动训练机器学习模型,例如 [`LsiModel`](https://radimrehurek.com/gensim/models/lsimodel.html#gensim.models.lsimodel.LsiModel "gensim.models.lsimodel.LsiModel")[`LdaModel`](https://radimrehurek.com/gensim/models/ldamodel.html#gensim.models.ldamodel.LdaModel "gensim.models.ldamodel.LdaModel")
模型使用此*培训语料库*来查找共同的主题和主题,初始化其内部模型参数。
Gensim专注于*无监督*模型,因此无需人工干预,例如昂贵的注释或手工标记文件。
2. 要组织的文件。训练之后,可以使用主题模型从新文档中提取主题(培训语料库中未见的文档)。
这样的语料库可以通过语义相似性,聚类等进行[索引](https://radimrehurek.com/gensim/tut3.html),查询。
> 向量空间模型
在向量空间模型(VSM)中,每个文档由一系列要素表示。例如,单个功能可以被视为问答配对:
1. 单词*splonge*在文档中出现了多少次?零。
2. 该文件包含多少段?二。
3. 该文档使用了多少种字体?五。
问题通常只能由它的一个整数标识符(如所表示1,2和3在此),因此,该文件的表示变得一系列像`(1, 0.0), (2, 2.0), (3, 5.0)` 对。
如果我们提前知道所有问题,我们可能会隐瞒并简单地写成 `(0.0, 2.0, 5.0)`
该答案序列可以被认为是 **向量(vector)**(在这种情况下是三维密集矢量)。出于实际目的,Gensim中只允许答案(或可以转换为)*单个浮点数的问题*
每个文档的问题都是相同的,所以看两个向量(代表两个文档),我们希望能够得出结论,例如“这两个向量中的数字非常相似,因此原始文档必须类似“也是”。当然,这些结论是否与现实相符取决于我们选择问题的程度。
> Gensim 稀疏向量,Bag-of-words 向量
为了节省空间,在Gensim中我们省略了值为0.0的所有向量元素。例如,我们只写(注意缺失的)而不是三维密集向量。每个向量元素是一对(2元组)。此稀疏表示中所有缺失特征的值可以明确地解析为零。`(0.0,<span> 2.0,<span> 5.0)``[(2,<span> 2.0),<span> (3,<span> 5.0)]``(1,<span> 0.0)``(feature_id,feature_value)``0.0`
Gensim中的文档由稀疏向量(有时称为词袋向量)表示。
> Gensim流式语料库
Gensim没有规定任何特定的语料库格式。语料库只是一个稀疏向量序列(见上文)。
例如 `[ [(2, 2.0), (3, 5.0)], [(3, 1.0)] ]` 是两个文档的简单语料库=两个稀疏向量:第一个具有两个非零元素,第二个具有一个非零元素。这个特定的语料库表示为普通的Python 。
然而,Gensim的全部功能来自于语料库不必是a `list`,或`NumPy`数组,或`Pandas`数据帧等等。Gensim *接受任何对象,当迭代时,连续产生这些稀疏的袋子向量*
这种灵活性允许您创建自己的语料库类,直接从磁盘,网络,数据库,数据帧...流式传输稀疏向量。实现Gensim中的模型,使得它们不需要所有向量一次驻留在RAM中。你甚至可以动态创建稀疏矢量!
请参阅我们的[Python流数据处理教程](https://rare-technologies.com/data-streaming-in-python-generators-iterators-iterables/)
有关直接从磁盘流式传输的高效语料库格式的内置示例,请参阅中的Matrix Market格式[`mmcorpus`](https://radimrehurek.com/gensim/corpora/mmcorpus.html#module-gensim.corpora.mmcorpus "gensim.corpora.mmcorpus:矩阵市场格式的语料库")。有关如何创建自己的流式语料库的最小蓝图示例,请查看[CSV语料库](https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/corpora/csvcorpus.py)[源代码](https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/corpora/csvcorpus.py)
> 模型,转型
Gensim使用**模型**来引用将一个文档表示转换为另一个文档表示所需的代码和相关数据(模型参数)。
在Gensim中,文档被表示为向量(见上文),因此模型可以被认为是从一个向量空间到另一个向量空间的转换。从训练语料库中学习该变换的参数。
训练有素的模型(数据参数)可以持久保存到磁盘,然后加载回来,以继续培训新的培训文档或转换新文档。
Gensim实现多种模式,如[`Word2Vec`](https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec "gensim.models.word2vec.Word2Vec"), [`LsiModel`](https://radimrehurek.com/gensim/models/lsimodel.html#gensim.models.lsimodel.LsiModel "gensim.models.lsimodel.LsiModel")[`LdaModel`](https://radimrehurek.com/gensim/models/ldamodel.html#gensim.models.ldamodel.LdaModel "gensim.models.ldamodel.LdaModel"), [`FastText`](https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.FastText "gensim.models.fasttext.FastText")等见[API参考](https://radimrehurek.com/gensim/apiref.html)的完整列表。
也可以看看
有关如何在代码中解决所有问题的一些示例,请转到[教程](https://radimrehurek.com/gensim/tutorial.html)
# 教程
这些教程被组织为一系列示例,突出了gensim的各种功能。假设读者熟悉[Python语言](https://www.python.org/)[安装了gensim](https://radimrehurek.com/gensim/install.html) 并阅读了[介绍](https://radimrehurek.com/gensim/intro.html)
这些例子分为以下部分:
* [语料库和向量空间](https://radimrehurek.com/gensim/tut1.html)
* [从字符串到向量](https://radimrehurek.com/gensim/tut1.html#from-strings-to-vectors)
* [语料库流 - 一次一个文档](https://radimrehurek.com/gensim/tut1.html#corpus-streaming-one-document-at-a-time)
* [语料库格式](https://radimrehurek.com/gensim/tut1.html#corpus-formats)
* [与NumPy和SciPy的兼容性](https://radimrehurek.com/gensim/tut1.html#compatibility-with-numpy-and-scipy)
* [主题和转换](https://radimrehurek.com/gensim/tut2.html)
* [转换界面](https://radimrehurek.com/gensim/tut2.html#transformation-interface)
* [可用的转换](https://radimrehurek.com/gensim/tut2.html#available-transformations)
* [相似性查询](https://radimrehurek.com/gensim/tut3.html)
* [相似界面](https://radimrehurek.com/gensim/tut3.html#similarity-interface)
* [下一个在哪里](https://radimrehurek.com/gensim/tut3.html#where-next)
* [英语维基百科上的实验](https://radimrehurek.com/gensim/wiki.html)
* [准备语料库](https://radimrehurek.com/gensim/wiki.html#preparing-the-corpus)
* [潜在语义分析](https://radimrehurek.com/gensim/wiki.html#latent-semantic-analysis)
* [潜在的Dirichlet分配](https://radimrehurek.com/gensim/wiki.html#latent-dirichlet-allocation)
* [分布式计算](https://radimrehurek.com/gensim/distributed.html)
* [为何分布式计算?](https://radimrehurek.com/gensim/distributed.html#why-distributed-computing)
* [先决条件](https://radimrehurek.com/gensim/distributed.html#prerequisites)
* [核心概念](https://radimrehurek.com/gensim/distributed.html#core-concepts)
* [可用分布式算法](https://radimrehurek.com/gensim/distributed.html#available-distributed-algorithms)
## [预赛](https://radimrehurek.com/gensim/tutorial.html#preliminaries "永久链接到这个标题")
所有示例都可以直接复制到Python解释器shell。[IPython](http://ipython.scipy.org/)`cpaste` 命令对于复制代码片段(包括主要 `>>>>` 字符)特别方便。
Gensim使用Python的标准 `logging` 模块来记录各种优先级的各种东西; 要激活日志记录(这是可选的),请运行
```
>>> import logging
>>> logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
```
## [快速示例](https://radimrehurek.com/gensim/tutorial.html#quick-example "永久链接到这个标题")
首先,让我们导入gensim并创建一个包含九个文档和十二个特征的小型语料库[[1]](https://radimrehurek.com/gensim/tutorial.html#id2)
```
>>> from gensim import corpora, models, similarities
>>>
>>> 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中,*语料库*只是一个对象,当迭代时,返回其表示为稀疏向量的文档。在这种情况下,我们使用元组列表的列表。如果您不熟悉[矢量空间模型](https://en.wikipedia.org/wiki/Vector_space_model),我们将在下一个关于[Corpora和Vector Spaces的](https://radimrehurek.com/gensim/tut1.html)教程中弥合**原始字符串****语料库****稀疏矢量**之间的差距。[](https://radimrehurek.com/gensim/tut1.html)
如果您熟悉向量空间模型,您可能会知道解析文档并将其转换为向量的方式会对任何后续应用程序的质量产生重大影响。
> 注意:
在此示例中,整个语料库作为Python列表存储在内存中。但是,语料库接口只表示语料库必须支持对其组成文档的迭代。对于非常大的语料库,有利的是将语料库保持在磁盘上,并且一次一个地顺序访问其文档。所有操作和转换都以这样的方式实现,使得它们在内存方面独立于语料库的大小。
接下来,让我们初始化一个*转换*
```
>>> tfidf = models.TfidfModel(corpus)
```
转换用于将文档从一个向量表示转换为另一个向量表示:
```
>>> vec = [(0, 1), (4, 1)]
>>> print(tfidf[vec])
[(0, 0.8075244), (4, 0.5898342)]
```
在这里,我们使用了[Tf-Idf](https://en.wikipedia.org/wiki/Tf%E2%80%93idf),这是一种简单的转换,它将文档表示为词袋计数,并应用对常用术语进行折扣的权重(或者等同于促销稀有术语)。它还将得到的向量缩放到单位长度(在[欧几里德范数中](https://en.wikipedia.org/wiki/Norm_%28mathematics%29#Euclidean_norm))。
[主题和转换](https://radimrehurek.com/gensim/tut2.html)教程中详细介绍了[转换](https://radimrehurek.com/gensim/tut2.html)
要通过TfIdf转换整个语料库并对其进行索引,以准备相似性查询:
```
>>> index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=12)
```
并查询我们的查询向量`<span class="pre">vec</span>`与语料库中每个文档的相似性:
```
>>> sims = index[tfidf[vec]]
>>> print(list(enumerate(sims)))
[(0, 0.4662244), (1, 0.19139354), (2, 0.24600551), (3, 0.82094586), (4, 0.0), (5, 0.0), (6, 0.0), (7, 0.0), (8, 0.0)]
```
如何阅读此输出?文档编号为零(第一个文档)的相似度得分为0.466 = 46.6%,第二个文档的相似度得分为19.1%等。
因此,根据TfIdf文档表示和余弦相似性度量,最类似于我们的查询文档vec是文档号。3,相似度得分为82.1%。请注意,在TfIdf表示中,任何不具有任何共同特征的 `vec` 文档(文档编号4-8)的相似性得分均为0.0。有关更多详细信息,请参阅[Similarity Queries](https://radimrehurek.com/gensim/tut3.html)教程。
---
| [[1]](https://radimrehurek.com/gensim/tutorial.html#id1) | 这与 [Deerwester等人](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf) 使用的语料库相同[](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf)[(1990):通过潜在语义分析进行索引](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf),表2。
<svg xmlns="http://www.w3.org/2000/svg" width="102" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><mask id="a"><rect width="102" height="20" rx="3" fill="#fff"/></mask><g mask="url(#a)"><path fill="#555" d="M0 0h49v20H0z"/><path fill="#4c1" d="M49 0h53v20H49z"/><path fill="url(#b)" d="M0 0h102v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"><text x="24.5" y="15" fill="#010101" fill-opacity=".3">circleci</text><text x="24.5" y="14">circleci</text><text x="74.5" y="15" fill="#010101" fill-opacity=".3">passing</text><text x="74.5" y="14">passing</text></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" width="106" height="20" style="shape-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="106" height="20" rx="3" fill="#fff"/>
</mask>
<g mask="url(#a)">
<path fill="#555" d="M0 0h53v20H0z"/>
<path fill="#4c1" d="M53 0h84v20H53z"/>
<path fill="url(#b)" d="M0 0h106v20H0z"/>
</g>
<g transform="matrix(0.045,0,0,0.045,0,1.0227272)">
<path fill="#ccc" d="M242 48c86,0 155,69 155,154 0,86 -69,155 -155,155 -85,0 -154,-69 -154,-155 0,-85 69,-154 154,-154zm38 184c-17,22 -48,26 -69,9 -21,-16 -24,-47 -7,-69 18,-21 49,-25 70,-9 21,17 24,48 6,69zm-82 101l59 -57c-22,5 -45,1 -63,-14 -21,-16 -30,-43 -27,-68l-53 58c0,0 -7,-13 -9,-37l93 -73c28,-20 66,-21 93,0 30,24 36,68 14,101l-68 97c-10,0 -30,-3 -39,-7z"/>
</g>
<g fill="#fff" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="22" y="15" fill="#010101" fill-opacity=".3">build</text>
<text x="22" y="14">build</text>
<text x="58" y="15" fill="#010101" fill-opacity=".3">passing</text>
<text x="58" y="14">passing</text>
</g>
</svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" width="90" height="20"><linearGradient id="a" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><rect rx="3" width="90" height="20" fill="#555"/><rect rx="3" x="37" width="53" height="20" fill="#4c1"/><path fill="#4c1" d="M37 0h4v20h-4z"/><rect rx="3" width="90" height="20" fill="url(#a)"/><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"><text x="19.5" y="15" fill="#010101" fill-opacity=".3">build</text><text x="19.5" y="14">build</text><text x="62.5" y="15" fill="#010101" fill-opacity=".3">passing</text><text x="62.5" y="14">passing</text></g></svg>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册