使用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模型,該模型具有預訓練資料。然後我們使用該程式來獲得合適的詞語類比。

更新於:2023年10月6日

244 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.