(预训练)用于语义词相似度的python包

数据挖掘 Python nlp 词嵌入
2022-03-02 19:43:22

我正在寻找一个计算单词之间语义相似度的python包。我不想训练模型(大多数软件包似乎都提供)——该软件包应该已经在理想情况下在数千本自然语言书籍和文档上进行了预训练(例如,单词在培训材料)并且易于安装/使用。例如在下面的伪代码中:

import XYZ

assessor = XYZ.loadPreTrainedModel("standard_text")
assessor.scoreWords("pilot", "airplane")  # returns 0.94 (I made up these numbers)
assessor.scoreWords("student", "university")  # returns 0.91
assessor.scoreWords("cat", "dog")  # returns 0.82 
assessor.scoreWords("cat", "airplane")  # returns 0.13
assessor.scoreWords("student", "apple")  # returns 0.25
...
1个回答

spaCy Python 包可能适合您它允许您轻松“安装”大型预训练语言模型,并提供一个很好的高级界面来比较词向量。

安装 spaCy:

pip install spacy

然后你需要下载一个语言模型我相信这些模型是在 Common Crawl 上训练的,这是一个海量数据集。您应该选择中型或大型模型之一,因为小型模型不附带词向量。

python -m spacy download en_core_web_md

使用 spacy 模型来计算单词相似度是一件轻而易举的事:

import spacy

# load the language model
nlp = spacy.load('en_core_web_md')

word1 = 'cat'
word2 = 'dog'

# convert the strings to spaCy Token objects
token1 = nlp(word1)[0]
token2 = nlp(word2)[0]

# compute word similarity
token1.similarity(token2)  # returns 0.80168

这是一个与您问题中的示例更相似的示例:

import spacy

nlp = spacy.load('en_core_web_md')
token = lambda word: nlp(word)[0]  # shortcut to convert string to spacy.Token
score_words = lambda w1, w2: token(w1).similarity(token(w2))

score_words("pilot", "airplane")      # 0.5998
score_words("student", "university")  # 0.7238
score_words("cat", "dog")             # 0.8017
score_words("cat", "airplane")        # 0.2654
score_words("student", "apple")       # 0.0928