Python | Similitud de palabras usando spaCy

La similitud de palabras es un número entre 0 y 1 que nos dice qué tan cerca semánticamente están dos palabras. Esto se hace encontrando similitudes entre vectores de palabras en el espacio vectorial. spaCy, una de las bibliotecas de NLP más rápidas y ampliamente utilizadas en la actualidad, proporciona un método simple para esta tarea.

Modelo de spaCy:
spaCy admite dos métodos para encontrar similitudes de palabras: usar tensores sensibles al contexto y usar vectores de palabras. A continuación se muestra el código para descargar estos modelos.

# 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

A continuación se muestra el código para encontrar la similitud de palabras, que se puede extender a oraciones y documentos.

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))

Producción:

cat True 6.6808186 False
dog True 7.0336733 False
Similarity: 0.80168545

El modelo ‘en_core_web_md’ produce vectores de dimensión 300*1 para ‘perro’ y ‘gato’. También se puede usar el modelo más grande, ‘en_vectors_web_lg’, que produce vectores de mayor dimensión para las mismas dos palabras.

Uso de modelos de idioma personalizados:
simplemente cambiando el modelo de idioma, podemos encontrar una similitud entre los documentos en latín, francés o alemán. spaCy admite un total de 49 idiomas en la actualidad. spaCy también permite fijar vectores de palabras para palabras según las necesidades del usuario. A continuación se muestra un ejemplo.

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'))

Producción:

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, --- ])

Publicación traducida automáticamente

Artículo escrito por Anannya Uberoi 1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *