使用 Word2Vec 嵌入从给定单词中查找单词 Analogy

pythonserver side programmingprogramming

在本文中,我们将学习可以从提供的单词中找到单词 Analogy 的机器学习程序。以"Apple : fruit :: car :vehicle"为例。

在这个类比中,"apple"和"car"是被比较的两件事。"Fruit"和"vehicle"是被比较的事物所属的两个类别。类比是说苹果是一种水果,就像汽车是一种车辆一样。

因此,人类大脑可以识别模式,但训练机器执行相同的任务将非常困难,因为我们需要非常大量的数据。在本文中,我们将使用 Word2Vec 模型和谷歌提供的模型 googlenewsvectorsnegative300,其中包含大量预先训练的单词。 这是 GoogleNews-vectors-negative300 数据集的链接。让我们看看针对同一问题的程序实现:

Word2Vec 的安装

要安装 Word2Vec,我们将执行 gensim 库安装命令,因为 Word2Vec 是 gensim 库的一个模型。

pip install gensim

现在我们将使用 gensim 库的 Word2Vec 模型提供的 most_similar() 方法。

示例

from gensim.models import KeyedVectors, Word2Vec

# 加载预先训练的 Word2Vec 模型
model = KeyedVectors.load_word2vec_format('googlenews-vectors-negative300.bin', binary=True, limit=50000)

# 词语类比函数
def word_analogy(w_a, w_b, w_c):
   try:
      # 进行词语类比计算
      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,这限制了加载的词向量数量以减少内存使用量。我们还可以根据我们的选择调整限制变量的参数。因此,在上面的程序中,我们首先使用 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 模型。然后我们使用该程序来获取合适的单词类比。


相关文章


有用资源