<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 如何使用 Gensim 在 Python 中開發詞嵌入 > 原文: [https://machinelearningmastery.com/develop-word-embeddings-python-gensim/](https://machinelearningmastery.com/develop-word-embeddings-python-gensim/) 詞嵌入是一種在自然語言處理中表示文本的現代方法。 嵌入算法如 word2vec 和 GloVe 是神經網絡模型在機器翻譯等自然語言處理問題上獲得的最先進結果的關鍵。 在本教程中,您將了解如何使用 Gensim 在 Python 中為自然語言處理應用程序訓練和加載字嵌入模型。 完成本教程后,您將了解: * 如何在文本數據上訓練自己的 word2vec 單詞嵌入模型。 * 如何使用主成分分析可視化訓練的單詞嵌入模型。 * 如何加載谷歌和斯坦福的預訓練 word2vec 和 GloVe 字嵌入模型。 讓我們開始吧。 ![How to Develop Word Embeddings in Python with Gensim](img/33cc3e32854514592a90afc05c1aa9c8.jpg) 如何使用 Gensim 在 Python 中開發詞嵌入照片由 [dilettantiquity](https://www.flickr.com/photos/flyingblogspot/15361704293/) ,保留一些權利。 ## 教程概述 本教程分為 6 個部分;他們是: 1. 詞嵌入 2. Gensim 庫 3. 開發 Word2Vec 嵌入 4. 可視化詞嵌入 5. 加載 Google 的 Word2Vec 嵌入 6. 加載斯坦福的 GloVe 嵌入 ## 詞嵌入 單詞嵌入是一種提供單詞的密集向量表示的方法,可以捕獲關于其含義的單詞。 字嵌入是對簡單的字袋模型字編碼方案(如字數和頻率)的改進,這些方案導致描述文檔而不是字的含義的大且稀疏的向量(通常為 0 值)。 詞嵌入通過使用算法來訓練一組基于大的文本語料庫的固定長度密集和連續值向量。每個單詞由嵌入空間中的一個點表示,并且這些點基于圍繞目標單詞的單詞被學習和移動。 它正在由公司定義一個單詞,它保留了允許單詞嵌入來學習單詞含義的東西。單詞的向量空間表示提供了一個投影,其中具有相似含義的單詞在空間內局部聚類。 在其他文本表示中使用單詞嵌入是導致機器翻譯等問題的深度神經網絡突破性表現的關鍵方法之一。 在本教程中,我們將研究斯坦福大學的研究人員如何使用 Google 和 GloVe 的研究人員使用兩種不同的詞嵌入方法 word2vec。 ## Gensim Python 庫 [Gensim](https://radimrehurek.com/gensim/index.html) 是一個用于自然語言處理的開源 Python 庫,主要關注主題建模。 它被稱為: > 人類主題建模 Gensim 由捷克自然語言處理研究員[Radim?eh??ek](https://www.linkedin.com/in/radimrehurek/)及其公司 [RaRe Technologies](https://rare-technologies.com/) 開發并維護。 它不是一個包括廚房水槽的 NLP 研究庫(如 NLTK);相反,Gensim 是一個成熟,專注,高效的 NLP 工具套件,用于主題建模。最值得注意的是,本教程支持 Word2Vec 單詞嵌入的實現,用于從文本中學習新的單詞向量。 它還提供了用于加載幾種格式的預訓練單詞嵌入以及使用和查詢加載嵌入的工具。 我們將在本教程中使用 Gensim 庫。 如果您沒有 Python 環境設置,可以使用本教程: * [如何使用 Anaconda 設置用于機器學習和深度學習的 Python 環境](http://machinelearningmastery.com/setup-python-environment-machine-learning-deep-learning-anaconda/) 使用 _pip_ 或 _easy_install_ 可以輕松安裝 Gensim。 例如,您可以通過在命令行上鍵入以下內容來使用 pip 安裝 Gensim: ```py pip install --upgrade gensim ``` 如果您需要在系統上安裝 Gensim 的幫助,可以查看 [Gensim 安裝說明](https://radimrehurek.com/gensim/install.html)。 ## 開發 Word2Vec 嵌入 [Word2vec](https://en.wikipedia.org/wiki/Word2vec) 是一種用于從文本語料庫中學習單詞嵌入的算法。 有兩種主要的訓練算法可用于學習從文本嵌入;它們是連續的單詞(CBOW)和跳過克。 我們不會深入研究算法,只是說它們通常會查看每個目標詞的單詞窗口,以提供上下文,反過來又意味著單詞。該方法由 [Tomas Mikolov](https://en.wikipedia.org/wiki/Word2vec) 開發,以前在谷歌,目前在 Facebook。 Word2Vec 模型需要大量文本,例如整個維基百科語料庫。然而,我們將使用一個小的內存中的文本示例來演示原理。 Gensim 提供 [Word2Vec](https://radimrehurek.com/gensim/models/word2vec.html) 類用于處理 Word2Vec 模型。 學習從文本嵌入的單詞涉及將文本加載和組織成句子并將它們提供給新的 _Word2Vec()_ 實例的構造函數。例如: ```py sentences = ... model = Word2Vec(sentences) ``` 具體地,每個句子必須被分詞,意味著被分成單詞并準備好(例如,可能預先過濾并且可能轉換為優選情況)。 句子可以是加載到內存中的文本,也可以是逐步加載文本的迭代器,這是非常大的文本語料庫所必需的。 這個構造函數有很多參數;您可能希望配置的一些值得注意的參數是: * **尺寸** :(默認為 100)嵌入的尺寸數,例如:表示每個標記(單詞)的密集向量的長度。 * **窗口** :(默認值 5)目標字與目標字周圍的字之間的最大距離。 * **min_count** :(默認值 5)訓練模型時要考慮的最小字數;出現小于此計數的單詞將被忽略。 * **worker** :(默認 3)訓練時使用的線程數。 * **sg** :(默認為 0 或 CBOW)訓練算法,CBOW(0)或跳過克(1)。 剛開始時,默認值通常足夠好。如果您擁有大量核心,就像大多數現代計算機那樣,我強烈建議您增加工作人員以匹配核心數量(例如 8)。 訓練模型后,可通過“ _wv_ ”屬性訪問該模型。這是可以進行查詢的實際單詞向量模型。 例如,您可以打印所學習的令牌(單詞)詞匯,如下所示: ```py words = list(model.wv.vocab) print(words) ``` 您可以查看特定標記的嵌入向量,如下所示: ```py print(model['word']) ``` 最后,通過調用單詞向量模型上的 _save_word2vec_format()_ 函數,可以將訓練好的模型保存到文件中。 默認情況下,模型以二進制格式保存以節省空間。例如: ```py model.wv.save_word2vec_format('model.bin') ``` 入門時,您可以將學習的模型保存為 ASCII 格式并查看內容。 您可以通過在調用 _save_word2vec_format()_ 函數時設置 _binary = False_ 來執行此操作,例如: ```py model.wv.save_word2vec_format('model.txt', binary=False) ``` 然后可以通過調用 _Word2Vec.load()_ 函數再次加載保存的模型。例如: ```py model = Word2Vec.load('model.bin') ``` 我們可以將所有這些與一個有效的例子結合在一起。 我們不會從文件中加載大型文本文檔或語料庫,而是使用預先分詞的小型內存列表。訓練模型并將單詞的最小計數設置為 1,這樣就不會忽略單詞。 學習模型后,我們總結,打印詞匯表,然后為單詞'_ 句子 _'打印單個向量。 最后,模型以二進制格式保存到文件中,加載,然后進行匯總。 ```py from gensim.models import Word2Vec # define training data sentences = [['this', 'is', 'the', 'first', 'sentence', 'for', 'word2vec'], ['this', 'is', 'the', 'second', 'sentence'], ['yet', 'another', 'sentence'], ['one', 'more', 'sentence'], ['and', 'the', 'final', 'sentence']] # train model model = Word2Vec(sentences, min_count=1) # summarize the loaded model print(model) # summarize vocabulary words = list(model.wv.vocab) print(words) # access vector for one word print(model['sentence']) # save model model.save('model.bin') # load model new_model = Word2Vec.load('model.bin') print(new_model) ``` 運行該示例將打印以下輸出。 ```py Word2Vec(vocab=14, size=100, alpha=0.025) ['second', 'sentence', 'and', 'this', 'final', 'word2vec', 'for', 'another', 'one', 'first', 'more', 'the', 'yet', 'is'] [ -4.61881841e-03 -4.88735968e-03 -3.19508743e-03 4.08568839e-03 -3.38211656e-03 1.93076557e-03 3.90265253e-03 -1.04349572e-03 4.14286414e-03 1.55219622e-03 3.85653134e-03 2.22428422e-03 -3.52565176e-03 2.82056746e-03 -2.11121864e-03 -1.38054823e-03 -1.12888147e-03 -2.87318649e-03 -7.99703528e-04 3.67874932e-03 2.68940022e-03 6.31021452e-04 -4.36326629e-03 2.38655557e-04 -1.94210222e-03 4.87691024e-03 -4.04118607e-03 -3.17813386e-03 4.94802603e-03 3.43150692e-03 -1.44031656e-03 4.25637932e-03 -1.15106850e-04 -3.73274647e-03 2.50349124e-03 4.28692997e-03 -3.57313151e-03 -7.24728088e-05 -3.46099050e-03 -3.39612062e-03 3.54845310e-03 1.56780297e-03 4.58260969e-04 2.52689526e-04 3.06256465e-03 2.37558200e-03 4.06933809e-03 2.94650183e-03 -2.96231941e-03 -4.47433954e-03 2.89590308e-03 -2.16034567e-03 -2.58548348e-03 -2.06163677e-04 1.72605237e-03 -2.27384618e-04 -3.70194600e-03 2.11557443e-03 2.03793868e-03 3.09839356e-03 -4.71800892e-03 2.32995977e-03 -6.70911541e-05 1.39375112e-03 -3.84263694e-03 -1.03898917e-03 4.13251948e-03 1.06330717e-03 1.38514000e-03 -1.18144893e-03 -2.60811858e-03 1.54952740e-03 2.49916781e-03 -1.95435272e-03 8.86975031e-05 1.89820060e-03 -3.41996481e-03 -4.08187555e-03 5.88635216e-04 4.13103355e-03 -3.25899688e-03 1.02130906e-03 -3.61028523e-03 4.17646067e-03 4.65870230e-03 3.64110398e-04 4.95479070e-03 -1.29743712e-03 -5.03367570e-04 -2.52546836e-03 3.31060472e-03 -3.12870182e-03 -1.14580349e-03 -4.34387522e-03 -4.62882593e-03 3.19007039e-03 2.88707414e-03 1.62976081e-04 -6.05802808e-04 -1.06368808e-03] Word2Vec(vocab=14, size=100, alpha=0.025) ``` 您可以看到,通過一些準備文本文檔的工作,您可以使用 Gensim 輕松創建自己的單詞嵌入。 ## 可視化詞嵌入 在學習了文本數據的單詞嵌入之后,可以通過可視化來探索它。 您可以使用經典投影方法將高維字向量縮減為二維圖并將其繪制在圖形上。 可視化可以為您的學習模型提供定性診斷。 我們可以從訓練有素的模型中檢索所有向量,如下所示: ```py X = model[model.wv.vocab] ``` 然后我們可以在向量上訓練投影方法,例如 scikit-learn 中提供的那些方法,然后使用 matplotlib 將投影繪制為散點圖。 讓我們看一下使用 Principal Component Analysis 或 PCA 的示例。 ### 使用 PCA 繪制單詞向量 我們可以使用 scikit-learn [PCA 類](http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html)創建單詞向量的二維 PCA 模型,如下所示。 ```py pca = PCA(n_components=2) result = pca.fit_transform(X) ``` 可以使用 matplotlib 如下繪制得到的投影,將兩個維度拉出為 x 和 y 坐標。 ```py pyplot.scatter(result[:, 0], result[:, 1]) ``` 我們可以更進一步,用圖標本身注釋圖表上的點。沒有任何良好偏移的粗略版本如下所示。 ```py words = list(model.wv.vocab) for i, word in enumerate(words): pyplot.annotate(word, xy=(result[i, 0], result[i, 1])) ``` 將這一切與上一節中的模型結合在一起,下面列出了完整的示例。 ```py from gensim.models import Word2Vec from sklearn.decomposition import PCA from matplotlib import pyplot # define training data sentences = [['this', 'is', 'the', 'first', 'sentence', 'for', 'word2vec'], ['this', 'is', 'the', 'second', 'sentence'], ['yet', 'another', 'sentence'], ['one', 'more', 'sentence'], ['and', 'the', 'final', 'sentence']] # train model model = Word2Vec(sentences, min_count=1) # fit a 2d PCA model to the vectors X = model[model.wv.vocab] pca = PCA(n_components=2) result = pca.fit_transform(X) # create a scatter plot of the projection pyplot.scatter(result[:, 0], result[:, 1]) words = list(model.wv.vocab) for i, word in enumerate(words): pyplot.annotate(word, xy=(result[i, 0], result[i, 1])) pyplot.show() ``` 運行該示例將創建一個散點圖,其中的點用單詞注釋。 鑒于這樣一個小小的語料庫用于擬合模型,很難從圖中得出很多意義。 ![Scatter Plot of PCA Projection of Word2Vec Model](img/4d6dd74b98672c2171973dfd36fe09bb.jpg) Word2Vec 模型 PCA 投影的散點圖 ## 加載 Google 的 Word2Vec 嵌入 訓練自己的單詞向量可能是給定 NLP 問題的最佳方法。 但它可能需要很長時間,一臺具有大量 RAM 和磁盤空間的快速計算機,并且可能在輸入數據和訓練算法方面具有一些專業知識。 另一種方法是簡單地使用現有的預訓練單詞嵌入。 除了 word2vec 的論文和代碼,谷歌還在 [Word2Vec 谷歌代碼項目](https://code.google.com/archive/p/word2vec/)上發布了預訓練的 word2vec 模型。 預先訓練的模型只不過是包含令牌及其相關詞向量的文件。預先訓練的 Google word2vec 模型接受了谷歌新聞數據(約 1000 億字)的訓練;它包含 300 萬個單詞和短語,并且使用 300 維單詞向量。 它是一個 1.53 千兆字節的文件。你可以在這里下載: * [GoogleNews-vectors-negative300.bin.gz](https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing) 解壓縮后,二進制文件(GoogleNews-vectors-negative300.bin)為 3.4 千兆字節。 Gensim 庫提供了加載此文件的工具。具體來說,您可以調用 _KeyedVectors.load_word2vec_format()_ 函數將此模型加載到內存中,例如: ```py from gensim.models import KeyedVectors filename = 'GoogleNews-vectors-negative300.bin' model = KeyedVectors.load_word2vec_format(filename, binary=True) ``` 在我的現代工作站上,加載大約需要 43 秒。 你可以做的另一個有趣的事情是用單詞做一點線性代數算法。 例如,講座和介紹文章中描述的一個流行的例子是: ```py queen = (king - man) + woman ``` 這就是女王這個詞是最接近的一個詞,因為人們從國王那里減去了男人的概念,并添加了女人這個詞。國王的“男人”被“女人”所取代,給了我們女王。一個非常酷的概念。 Gensim 提供了一個接口,用于在訓練或加載的模型上的 _most_similar()_ 函數中執行這些類型的操作。 例如: ```py result = model.most_similar(positive=['woman', 'king'], negative=['man'], topn=1) print(result) ``` 我們可以將所有這些放在一起如下。 ```py from gensim.models import KeyedVectors # load the google word2vec model filename = 'GoogleNews-vectors-negative300.bin' model = KeyedVectors.load_word2vec_format(filename, binary=True) # calculate: (king - man) + woman = ? result = model.most_similar(positive=['woman', 'king'], negative=['man'], topn=1) print(result) ``` 運行該示例加載 Google 預訓練的 word2vec 模型,然后計算(王者)+女人=?對這些單詞的單詞向量進行操作。 正如我們所料,答案是女王。 ```py [('queen', 0.7118192315101624)] ``` 請參閱更多閱讀部分中的一些帖子,了解您可以探索的更有趣的算術示例。 ## 加載斯坦福的 GloVe 嵌入 斯坦福大學的研究人員也有自己的單詞嵌入算法,如 word2vec,稱為[全局向量字表示](https://nlp.stanford.edu/projects/glove/),或簡稱 GloVe。 我不會在這里詳細介紹 word2vec 和 GloVe 之間的差異,但一般來說,NLP 從業者似乎更喜歡基于結果的 GloVe。 與 word2vec 一樣,GloVe 研究人員也提供預訓練的單詞向量,在這種情況下,可供選擇。 您可以下載 GloVe 預訓練的單詞向量,并使用 gensim 輕松加載它們。 第一步是將 GloVe 文件格式轉換為 word2vec 文件格式。唯一的區別是添加了一個小標題行。這可以通過調用 _glove2word2vec()_ 函數來完成。例如: ```py from gensim.scripts.glove2word2vec import glove2word2vec glove_input_file = 'glove.txt' word2vec_output_file = 'word2vec.txt' glove2word2vec(glove_input_file, word2vec_output_file) ``` 轉換后,文件可以像上面的 word2vec 文件一樣加載。 讓我們以一個例子來具體化。 您可以從 [GloVe 網站](https://nlp.stanford.edu/projects/glove/)下載最小的 GloVe 預訓練模型。它是一個 822 兆字節的 zip 文件,有 4 種不同的模型(50,100,200 和 300 維向量),在維基百科數據上訓練有 60 億個令牌和 400,000 個單詞詞匯。 直接下載鏈接在這里: * [手套.6B.zip](http://nlp.stanford.edu/data/glove.6B.zip) 使用模型的 100 維版本,我們可以將文件轉換為 word2vec 格式,如下所示: ```py from gensim.scripts.glove2word2vec import glove2word2vec glove_input_file = 'glove.6B.100d.txt' word2vec_output_file = 'glove.6B.100d.txt.word2vec' glove2word2vec(glove_input_file, word2vec_output_file) ``` 您現在擁有 word2vec 格式的 GloVe 模型副本,文件名為 _glove.6B.100d.txt.word2vec_ 。 現在我們可以加載它并執行相同的(國王 - 男人)+女人=?按照上一節進行測試。完整的代碼清單如下。請注意,轉換后的文件是 ASCII 格式,而不是二進制格式,因此我們在加載時設置 _binary = False_ 。 ```py from gensim.models import KeyedVectors # load the Stanford GloVe model filename = 'glove.6B.100d.txt.word2vec' model = KeyedVectors.load_word2vec_format(filename, binary=False) # calculate: (king - man) + woman = ? result = model.most_similar(positive=['woman', 'king'], negative=['man'], topn=1) print(result) ``` 運行該示例將打印“queen”的相同結果。 ```py [('queen', 0.7698540687561035)] ``` ## 進一步閱讀 如果您要深入了解,本節將提供有關該主題的更多資源。 * [詞嵌入維基百科](https://en.wikipedia.org/wiki/Word2vec) * [維基百科上的 Word2Vec](https://en.wikipedia.org/wiki/Word2vec) * [谷歌 word2vec 項目](https://code.google.com/archive/p/word2vec/) * [Stanford GloVe 項目](https://nlp.stanford.edu/projects/glove/) ### Gensim * [gensim Python Library](https://radimrehurek.com/gensim/index.html) * [models.word2vec gensim API](https://radimrehurek.com/gensim/models/keyedvectors.html) * [models.keyedvectors gensim API](https://radimrehurek.com/gensim/models/keyedvectors.html) * [scripts.glove2word2vec gensim API](https://radimrehurek.com/gensim/scripts/glove2word2vec.html) ### 帖子 * [使用 Word2vec](https://quomodocumque.wordpress.com/2016/01/15/messing-around-with-word2vec/) ,2016 年 * [數字人文學科的向量空間模型](http://bookworm.benschmidt.org/posts/2015-10-25-Word-Embeddings.html),2015 * [Gensim Word2vec 教程](https://rare-technologies.com/word2vec-tutorial/),2014 ## 摘要 在本教程中,您了解了如何使用 Gensim 在 Python 中開發和加載字嵌入層。 具體來說,你學到了: * 如何在文本數據上訓練自己的 word2vec 單詞嵌入模型。 * 如何使用主成分分析可視化訓練的單詞嵌入模型。 * 如何加載谷歌和斯坦福的預訓練 word2vec 和 GloVe 字嵌入模型。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看