Skip to content

[Python] 將 Glove 模型轉換成 Gensim 可以讀取的格式

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


Read More

Tags:

Leave a Reply