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