Last Updated on 2021-07-11 by Clay
埋首於自然語言處理 (NLP) 工作的人們,想必都對 Glove 和 Gensim 不陌生。
Glove (Global Vectors for Word Representation),一個由 Stanford NLP Group 所發表的一篇論文、同時也是開放出來的一個 Pre-trained 詞嵌入模型。現在網路上常看到的大家討論的 Glove,多半就是指這一個開源的預訓練模型。
Gensim 則是 Google 於 2013 提出的 Word2Vec 論文的 Python 實現,讓我們可以很方便地透過該套件,使用自己的語料訓練 Word Vector 模型。
那麼接下來,就要進入今天這篇文章的主題了:我們該如何在 Python 中使用 Glove 呢?從官網載下來的 Glove 是無法被 Gensim 直接讀取的。
這時候,我們可以透過 Gensim 內建的函式進行轉換。以下就一步步地紀錄該如何轉換 Glove 模型成 Gensim 可以讀取的格式。
使用 Gensim 轉換 Glove 模型
首先,我們需要下載 Glove。可以透過這個網頁下載:https://nlp.stanford.edu/projects/glove/
或者直接透過以下指令下載:
wget http://nlp.stanford.edu/data/glove.6B.zip
unzip glove.6B.zip
rm glove.6B.zip
下載結束之後,會看到資料夾底下有數個不同維度的 glove 模型。
那麼,我們若要轉換這些 Glove 模型,我們可以使用以下程式轉換 (若是環境中沒有 gensim,請先使用 pip3 install gensim 安裝):
# coding: utf-8 from gensim.models import KeyedVectors from gensim.scripts.glove2word2vec import glove2word2vec # Convert input_file = 'glove.6B.300d.txt' output_file = 'gensim_glove.6B.300d.txt' glove2word2vec(input_file, output_file) # Test Glove model model = KeyedVectors.load_word2vec_format(output_file, binary=False) word = 'cat' print(word) print('Most similar:\n{}'.format(model.most_similar(word)))
Output:
cat
Most similar:
[('dog', 0.6816747188568115),
('cats', 0.6815836429595947),
('pet', 0.5870364904403687),
('dogs', 0.540766716003418),
('feline', 0.48979705572128296),
('monkey', 0.48794347047805786),
('horse', 0.4732130467891693),
('pets', 0.4634858965873718),
('rabbit', 0.4608757495880127),
('leopard', 0.4585462808609009)]
可以看到,原先的 Glove 模型已經可以正常被 Gensim 所讀取了。為了測試,還印出了與 cat 在向量上最相近的幾個詞彙。
References
- https://www.aclweb.org/anthology/D14-1162/
- https://nlp.stanford.edu/projects/glove/
- https://code.google.com/archive/p/word2vec/