# 介紹
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)更多信息。
## 功能
* **內存獨立性**?- 任何時候都不需要整個訓練語料庫完全駐留在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工具。
## 可用性
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)頁面。
## 核心概念
> 文集
數字文檔的集合。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)。