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