NLP 利器 Gensim 庫的使用之 Word2Vec 模型案例演示(基於 word2vec-google-news-300 預訓練模型,附下載)

Gensim 庫的使用之 Word2Vec 模型案例演示

要見識一下 Word2Vec 模型可以做什麼,那麼最好的方法就是直接下載一個預訓練模型,然後嘗試用一下看看效果。

我們在這裡獲取一個在 Google News 數據集上訓練完成的 Word2Vec 模型,覆蓋了大約 300 萬的辭彙和短語。

這樣一個模型需要幾個小時來進行訓練,但是既然 Google 已經將其公開,那直接花幾分鐘下載下來就能用了。

!!!注意:該模型大小約 2GB,而且需要科學的方法才能下載!實在無法解決網路問題的朋友,可以用我提供的本站連接下載,然後解壓到對應位置!!!


本站下載地址:

word2vec-google-news-300.zip.001
word2vec-google-news-300.zip.002
word2vec-google-news-300.zip.003
word2vec-google-news-300.zip.004
word2vec-google-news-300.zip.005
word2vec-google-news-300.zip.006
word2vec-google-news-300.zip.007
word2vec-google-news-300.zip.008
word2vec-google-news-300.zip.009
word2vec-google-news-300.zip.010


不想在本地運行的朋友,也可以選擇在線嘗試該模型的效果:

//radimrehurek.com/2014/02/word2vec-tutorial/#app

不過,如果不是科學的連接方式,不確保可以登陸該網頁 ~ ~

該模型是利用了整個 Google News 大約 1000 億個詞的語料訓練而成!

一、下載預訓練模型 word2vec-google-news-300

import gensim.downloader as api
wv = api.load('word2vec-google-news-300')

下載後的預訓練文件會存儲在:

./gensim-data/word2vec-google-news-300/word2vec-google-news-300.gz

二、查看詞表情況

2.1 查看詞表中的前 10 個詞

for i, word in enumerate(wv.vocab):
    if i == 10:
        break
    print(word)

運行結果:

</s>
in
for
that
is
on
##
The
with
said

2.2 查看詞表總數

print(len(wv.vocab))

運行結果:

3000000

2.3 查看指定詞的詞向量 vectors

vec_king = wv['king']
print(vec_king.shape)

運行結果:

(300,)

這裡我們獲得了一個 300 維的 ‘king’ 這個單詞的詞向量,包含了這個詞的語意表示

三、非常用詞的限制

Word2Vec 模型限制了非常用詞出現在詞表中,這個是出於模型使用的考慮,如果這個限制你覺得非常在意,可以嘗試使用 FastText model 進行替代。

比如我們選個很怪的單詞 ‘cameroon’ 查詢一下:

try:
    vec_cameroon = wv['cameroon']
except KeyError:
    print("The word 'cameroon' does not appear in this model")

運行結果:

The word 'cameroon' does not appear in this model

四、詞語相似度

4.1 相似度計算

我們利用 Word2Vec 模型可以非常簡單地計算詞語之間的相似度:

pairs = [
    ('car', 'minivan'),   # a minivan is a kind of car
    ('car', 'bicycle'),   # still a wheeled vehicle
    ('car', 'airplane'),  # ok, no wheels, but still a vehicle
    ('car', 'cereal'),    # ... and so on
    ('car', 'space'),
]
for w1, w2 in pairs:
    print('%r\t%r\t%.2f' % (w1, w2, wv.similarity(w1, w2)))

運行結果:

'car'	'minivan'	0.69
'car'	'bicycle'	0.54
'car'	'airplane'	0.42
'car'	'cereal'	0.14
'car'	'space'	0.08

4.2 獲取最相似的詞

比如我們想要獲得和 car,minivan 最相似的 5 個詞:

print(wv.most_similar(positive=['car', 'minivan'], topn=5))

運行結果:

[('SUV', 0.8532191514968872), ('vehicle', 0.8175784349441528), ('pickup_truck', 0.7763689160346985), ('Jeep', 0.7567334175109863), ('Ford_Explorer', 0.7565719485282898)]

4.3 選出不屬於同一類的詞

比如 ‘fire’, ‘water’, ‘land’, ‘sea’, ‘air’, ‘car’ 這 6 個詞,通過相似度計算,我們可以知道 car 不是同一類的詞:

print(wv.doesnt_match(['fire', 'water', 'land', 'sea', 'air', 'car']))

運行結果:

car