使用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模型,该模型具有预训练数据。然后我们使用该程序来获得合适的词语类比。