使用Word2Vec嵌入查詢給定單詞的詞語類比
在本文中,我們將學習一個機器學習程式,該程式可以從提供的單詞中找到詞語類比。例如,“蘋果:水果 :: 汽車:車輛”。
在這個類比中,“蘋果”和“汽車”是兩個被比較的事物。“水果”和“車輛”是這兩個被比較的事物所屬的兩個類別。這個類比的意思是,蘋果是一種水果,就像汽車是一種車輛一樣。
因此,人腦可以識別這種模式,但是訓練機器來完成同樣的任務將非常困難,因為我們將需要非常非常大量的資料。在本文中,我們將使用Word2Vec模型以及谷歌提供的googlenewsvectorsnegative300模型,該模型包含大量預訓練的單詞。這裡 是GoogleNews-vectors-negative300資料集的連結。讓我們看看針對同一問題的程式實現。
Word2Vec的安裝
要安裝Word2Vec,我們將執行gensim庫的安裝命令,因為Word2Vec是gensim庫的一個模型。
pip install gensim
現在我們將使用gensim庫的Word2Vec模型提供的most_similar()方法。
示例
from gensim.models import KeyedVectors, Word2Vec
# Loading the pre-trained Word2Vec model
model = KeyedVectors.load_word2vec_format('googlenews-vectors-negative300.bin', binary=True, limit=50000)
# Word analogy function
def word_analogy(w_a, w_b, w_c):
try:
# Performing word analogy calculation
word_analogy = model.most_similar(positive=[w_b, w_c], negative=[w_a], topn=1)
return word_analogy[0][0]
except KeyError:
return "One or more words not found in the vocabulary."
w_a = 'king'
w_b = 'queen'
w_c = 'woman'
w_d = word_analogy(w_a, w_b, w_c)
print("Word analogy is- ",f"{w_a}:{w_b} :: {w_c}:{w_d}")
輸出
Word analogy is- king:queen :: woman:man
解釋
在繼續進行程式之前,請確保從Kaggle資料集網站下載“googlenews-vectors-negative300.bin”模型檔案。下載模型後,將其複製到當前正在執行的Python程式檔案所在的路徑。由於該模型檔案由於在各種影像上進行訓練而非常大,因此如果我們載入它,它將消耗所有記憶體資源,這就是為什麼我們將限制大小設定為50,000,這將載入的詞向量數量限制為減少記憶體使用。我們也可以根據自己的選擇調整limit變數的引數。因此,在上面的程式中,我們首先使用KeyedVectors類的load_word2vec_format()載入預訓練的Word2Vec模型。該模型是從我們下載到本地系統的googlenewsvectorsnegative300.bin資料集中載入的。
在find_word_analogy()函式中,我們以三個單詞作為輸入,並使用Word2Vec模型的most_similar()方法計算詞語類比。它透過將word_b和word_c視為正例,將word_a視為反例來執行類比計算。我們將topn引數設定為1以獲得最相似的單詞。這就是我們獲得類比詞的方式。
因此,我們瞭解了使用Word2Vec模型查詢詞語類比的方法。我們使用了google-news-vectors-negative300模型,該模型具有預訓練資料。然後我們使用該程式來獲得合適的詞語類比。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP