📜  Python|使用 spaCy 的单词相似度

📅  最后修改于: 2022-05-13 01:54:50.908000             🧑  作者: Mango

Python|使用 spaCy 的单词相似度

单词相似度是一个介于 0 到 1 之间的数字,它告诉我们两个单词在语义上的接近程度。这是通过在向量空间中找到词向量之间的相似性来完成的。 spaCy 是当今广泛使用的最快的 NLP 库之一,它为这项任务提供了一种简单的方法。

spaCy的模型——
spaCy 支持两种查找单词相似度的方法:使用上下文敏感的张量和使用单词向量。下面是下载这些模型的代码。

# Downloading the small model containing tensors.
python -m spacy download en_core_web_sm

# Downloading over 1 million word vectors.
python -m spacy download en_core_web_lg

下面是查找单词相似度的代码,可以扩展到句子和文档。

import spacy
  
nlp = spacy.load('en_core_web_md')
  
print("Enter two space-separated words")
words = input()
  
tokens = nlp(words)
  
for token in tokens:
    # Printing the following attributes of each token.
    # text: the word string, has_vector: if it contains
    # a vector representation in the model, 
    # vector_norm: the algebraic norm of the vector,
    # is_oov: if the word is out of vocabulary.
    print(token.text, token.has_vector, token.vector_norm, token.is_oov)
  
token1, token2 = tokens[0], tokens[1]
  
print("Similarity:", token1.similarity(token2))

输出:

cat True 6.6808186 False
dog True 7.0336733 False
Similarity: 0.80168545

'en_core_web_md' 模型为 'dog' 和 'cat' 生成维度为 300*1 的向量。也可以使用更大的模型“en_vectors_web_lg”,它为相同的两个词产生更大维度的向量。

使用自定义语言模型 –
通过简单地切换语言模型,我们可以找到拉丁文、法文或德文文档之间的相似性。 spaCy 目前总共支持 49 种语言。 spaCy 还允许根据用户需要为单词修复单词向量。下面是一个例子。

import spacy
import numpy as np
from spacy.vocab import Vocab
  
nlp = spacy.load('en_core_web_md')
new_word = 'bucrest'
  
print('Before custom setting')
print(vocab.get_vector('bucrest'))
  
custom_vector = np.random.uniform(-1, 1, (300, ))
  
vocab.set_vector(new_word, custom_vector)
  
print('After custom setting')
print(vocab.get_vector('bucrest'))

输出:

Before custom setting
array([0., 0., 0., 0., 0., 0., 0., 0., --- ])

After custom setting
array([ 0.68106073,  0.6037007,  0.9526876, -0.25600302, -0.24049562, --- ])