Mejorando los Pipelines de Procesamiento del Lenguaje Natural con spaCy

Mejorando Pipelines de Procesamiento de Lenguaje Natural con spaCy

Introducción

spaCy es una biblioteca de Python para el Procesamiento del Lenguaje Natural (NLP). Los pipelines de NLP con spaCy son gratuitos y de código abierto. Los desarrolladores lo utilizan para crear sistemas de extracción de información y comprensión del lenguaje natural, como en Cython. Utiliza la herramienta para producción, presume de una API concisa y fácil de usar.

Si trabajas con mucho texto, querrás aprender más sobre ello. ¿Qué es, por ejemplo? ¿En qué contexto se usan los términos? ¿Qué se está haciendo a quién? ¿Qué empresas y bienes se mencionan? ¿Qué textos son comparables entre sí?

spaCy está destinado para uso en producción y te ayuda a desarrollar aplicaciones que procesan y “comprenden” enormes cantidades de texto. Se puede utilizar para crear sistemas de extracción de información, interpretación del lenguaje natural y preprocesamiento de texto para el aprendizaje profundo.

Objetivos de aprendizaje

  • Descubrir los fundamentos de spaCy, como la tokenización, el etiquetado de partes del discurso y la identificación de entidades nombradas.
  • Comprender la arquitectura de procesamiento de texto de spaCy, que es eficiente y rápida, lo que la hace adecuada para trabajos de NLP a gran escala.
  • En spaCy, puedes explorar pipelines de NLP y crear pipelines personalizados para tareas específicas.
  • Explorar las capacidades avanzadas de spaCy, como la coincidencia basada en reglas, el análisis sintáctico y la vinculación de entidades.
  • Aprender sobre los diferentes modelos de lenguaje pre-entrenados disponibles en spaCy y cómo utilizarlos para diversas aplicaciones de NLP.
  • Aprender estrategias de reconocimiento de entidades nombradas (NER) para identificar y categorizar entidades en texto utilizando spaCy.

Este artículo fue publicado como parte del Data Science Blogathon.

Modelos Estadísticos

Algunas características de spaCy funcionan de forma autónoma, mientras que otras requieren la carga de modelos estadísticos. Estos modelos permiten a spaCy predecir anotaciones lingüísticas, como determinar si una palabra es un verbo o un sustantivo. Actualmente, spaCy ofrece modelos estadísticos para varios idiomas, y puedes instalarlos como módulos individuales de Python. Por lo general, incorporan los siguientes elementos:

  • Para predecir esas anotaciones en contexto, asigna los pesos binarios al etiquetador de partes del discurso, al analizador de dependencias y al reconocedor de entidades nombradas.
  • Las entradas léxicas en el vocabulario son palabras y sus características independientes del contexto, como la forma o la ortografía.
  • Las reglas de lematización y las tablas de búsqueda son ejemplos de archivos de datos.
  • Los vectores de palabras son representaciones de significado multidimensionales de palabras que te permiten identificar qué tan similares son.
  • Utiliza opciones de configuración, como el idioma y la configuración del pipeline de procesamiento, para poner spaCy en la condición adecuada cuando se carga el modelo.

Para importar un modelo, simplemente ejecuta spacy.load(‘nombre_del_modelo’), como se muestra a continuación:

!python -m spacy download es_core_news_lg

!python -m spacy download es_core_news_sm

import spacy
nlp = spacy.load('es_core_news_sm')

Anotaciones Lingüísticas

spaCy ofrece varias anotaciones lingüísticas para ayudarte a comprender la estructura gramatical de un documento. Esto incluye los tipos de palabras, como las partes del discurso, y cómo están conectadas las palabras. Por ejemplo, al analizar texto, marca una gran diferencia si un sustantivo es el sujeto o el objeto de una frase, o si “Google” se usa como verbo o se refiere a un sitio web o corporación específica.

import spacy
nlp = spacy.load("es_core_news_sm")

doc = nlp("La compañía Y planea adquirir una participación en la compañía X por $23 mil millones")
for token in doc:
    print(token.text, token.pos_, token.dep_)

Incluso después de que un Doc ha sido procesado (por ejemplo, dividido en palabras individuales y anotado), conserva todos los metadatos del texto original, como los caracteres de espacio en blanco. Siempre puedes obtener la posición de un token dentro de la cadena original o reconstruirlo fusionando los tokens y su espacio en blanco posterior. De esta manera, nunca perderás información al utilizar spaCy para analizar texto.

El Pipeline de Procesamiento de spaCy

Cuando trabajamos con spaCy, el primer paso es darle una cadena de texto a un objeto NLP. Este objeto es un pipeline de actividades de preprocesamiento de texto por las que debe pasar la cadena de texto de entrada.

Como se muestra en la figura anterior, el pipeline de NLP consta de varios componentes, como un tokenizador, etiquetador, analizador, reconocedor de entidades nombradas, etc. Por lo tanto, antes de poder hacer cualquier cosa con la cadena de texto de entrada, debe pasar por todos los componentes.

Permíteme mostrarte cómo crear un objeto nlp:

import spacy
nlp = spacy.load('en_core_web_sm')

# Crear un objeto nlp
doc = nlp("Él fue a jugar cricket con amigos en el estadio")

Utiliza el siguiente código para determinar los componentes activos del pipeline:

nlp.pipe_names

Si solo quieres que se ejecute el tokenizador, utiliza el siguiente código para desactivar los componentes del pipeline:

nlp.disable_pipes('tagger', 'parser')

Verifica nuevamente los componentes activos del pipeline:

nlp.pipe_names

Tokenización

SpaCy comienza el procesamiento dividiendo el texto en tokens, lo que significa segmentarlo en palabras, puntuación, etc. Esto se logra utilizando reglas específicas del lenguaje. Segmentar el texto en palabras, signos de puntuación, etc.

#import cimport spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Reliance está considerando comprar una startup de análisis con sede en el Reino Unido por $7 mil millones")
for token in doc:
    print(token.text)

Primero, el texto sin procesar se divide en caracteres de espacio en blanco, como text.split(’ ’). Luego, el tokenizador lee el texto de izquierda a derecha. Realiza dos pruebas en cada subcadena:

  • ¿La subcadena coincide con una regla de excepción del tokenizador? Por ejemplo, “Don’t” no incluye espacios en blanco y debe dividirse en dos tokens, “do” y “n’t”, aunque “U.K.” siempre debe permanecer como un solo token.
  • ¿Se puede separar un prefijo, sufijo o infijo? Por ejemplo, comas, puntos, guiones y comillas.

Si se encuentra una coincidencia, se aplica la regla y se reinicia el bucle del tokenizador, comenzando con las subcadenas que acaban de dividirse. SpaCy puede usar este método para distinguir tokens complejos y anidados, como abreviaturas y múltiples signos de puntuación.

Etiquetado de Partes de la Oración (POS)

Una parte de la oración (POS) es un rol gramatical que representa cómo se utiliza una palabra específica en una oración. Esta clasificación comprende ocho partes distintas.

  • Sustantivo
  • Pronombre
  • Adjetivo
  • Verbo
  • Adverbio
  • Preposición
  • Conjunción
  • Interjección

El etiquetado de partes de la oración asigna una etiqueta POS a cada token según su uso en la oración. Las etiquetas POS son útiles para asignar una categoría sintáctica, como un sustantivo o verbo, a cada palabra.

El etiquetado POS asigna automáticamente etiquetas POS a todas las palabras de una oración. Se utiliza para diversas tareas de procesamiento de lenguaje natural, como la ingeniería de características, la interpretación del lenguaje y la extracción de información.

El etiquetado POS es pan comido en spaCy. En spaCy, las etiquetas POS están disponibles como un atributo en el objeto Token:

import spacy 
nlp = spacy.load('en_core_web_sm')

# Crear un objeto nlp
doc = nlp("Reliance está considerando comprar una startup de análisis con sede en el Reino Unido por $7 mil millones")
 
# Iterar sobre los tokens
for token in doc:
    # Imprimir el token y su etiqueta de parte de la oración
    print(token, token.tag_, token.pos_, spacy.explain(token.tag_))

El enfoque más fácil para visualizar un Doc es utilizar displacy.serve, que se integra fácilmente en spaCy. Esto iniciará un servidor web simple y te permitirá ver los resultados en tu navegador. Como primer parámetro, displaCy puede tomar un objeto Doc único o una lista de objetos Doc. Esto te permite construirlos de la manera que desees, utilizando cualquier modelo o cambios que desees. Así es como se ven nuestra declaración de muestra y sus dependientes:

import spacy
from spacy import displacy

doc = nlp("miembro de la junta se reúne con el gerente senior")
displacy.render(doc, style="dep" , jupyter=True)

Detección de entidades

La detección de entidades, también conocida como reconocimiento de entidades, es un tipo de procesamiento de lenguaje sofisticado que distingue características esenciales de una cadena de texto, como lugares, individuos, organizaciones e idiomas. Esto es particularmente beneficioso para extraer rápidamente información de texto, ya que te ayuda a identificar sujetos significativos o partes importantes del texto de inmediato.

Vamos a intentar la detección de entidades utilizando estos fragmentos de un artículo reciente del Washington Post. Utilizaremos .label para obtener una etiqueta para cada cosa reconocida en el texto y luego utilizaremos el visualizador displaCy de spaCy para analizar estas entidades de manera más visual.

import spacy
from spacy import displacy
nlp = spacy.load("en_core_web_sm")
doc= nlp(u"""La selva amazónica,[a] alternativamente, 
la Selva Amazónica, también conocida en inglés como Amazonia, 
es una selva tropical húmeda de hoja ancha en la Amazonia
 bioma que cubre la mayor parte de la cuenca del Amazonas en Sudamérica.
  Esta cuenca abarca 7,000,000 km2 (2,700,000 millas cuadradas), de
   las cuales 5,500,000 km2 (2,100,000 millas cuadradas) están cubiertas por la selva. 
   Esta región incluye territorio perteneciente a nueve naciones.""")

entidades=[(i, i.label_, i.label) for i in doc.ents]
entidades

Utilizando displaCy, también podemos ver nuestro texto de entrada, con cada objeto detectado resaltado en color y con nombre. En este escenario, utilizaremos style = “ent” para indicarle a DisplaCy que queremos ver las entidades.

displacy.render(doc, style = "ent",jupyter = True)

Similitud

Comparamos vectores de palabras o “incrustaciones de palabras”, que son representaciones semánticas multidimensionales de una palabra, para evaluar la similitud. A menudo creamos vectores de palabras utilizando un algoritmo como word2vec, y se ven así

Spacy también incorpora vectores densos y de valores reales que transmiten información de similitud distribucional.

import spacy

nlp = spacy.load("en_core_web_lg")
tokens = nlp("perro gato banana afskfsd")

for token in tokens:
    print(token.text, token.has_vector, token.vector_norm, token.is_oov)

import spacy

nlp = spacy.load("en_core_web_lg")  # ¡asegúrate de usar un modelo más grande!
tokens = nlp("perro gato banana")

for token1 in tokens:
    for token2 in tokens:
        print(token1.text, token2.text, token1.similarity(token2))

En esta situación, las predicciones del modelo son bastante precisas. Un perro es bastante similar a un gato. Sin embargo, una banana no lo es en absoluto. Los tokens idénticos son idénticos (aunque no necesariamente exactamente 1.0 debido a las matemáticas vectoriales y las imprecisiones de punto flotante).

Conclusión

spaCy es un conocido programa de procesamiento de lenguaje natural (NLP) de código abierto que permite un procesamiento de texto eficiente y robusto. Debido a su escalabilidad, soporte multilingüe y características listas para usar, spaCy ha ganado amplia aceptación tanto en aplicaciones académicas como industriales. Su fácil interacción con marcos de aprendizaje profundo, tuberías flexibles y comunidad activa lo convierten en una buena alternativa para diversas actividades de NLP, lo que permite a los usuarios obtener resultados precisos y efectivos en el procesamiento del lenguaje.

  • Tiene capacidades de procesamiento de texto rápidas y escalables.
  • Se admiten varios idiomas y hay modelos preentrenados disponibles.
  • Funciones listas para utilizar en tareas estándar de NLP.
  • Personalice y entrene modelos específicos del dominio.
  • La integración con marcos de aprendizaje profundo es perfecta.
  • Se utiliza ampliamente en aplicaciones de NLP del mundo real.

Finalmente, spaCy es una biblioteca de NLP altamente eficiente, adaptable y fácil de usar que ofrece diversas características y modelos preentrenados para el procesamiento de texto en varios idiomas. Es una opción popular para aplicaciones de NLP a nivel de investigación y producción debido a su velocidad, escalabilidad y posibilidades de personalización.

Preguntas frecuentes

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Investigadores encuentran vulnerabilidades en las implementaciones de Windows Hello

Los investigadores encontraron vulnerabilidades en las implementaciones de Windows Hello, la función de inicio de ses...

Inteligencia Artificial

Google AI presenta STUDY Un sistema recomendador consciente socialmente y causal-temporal para audiolibros en un entorno educativo

La lectura beneficia enormemente a los estudiantes jóvenes, desde una mejora en las habilidades lingüísticas y de vid...

Ciencias de la Computación

El nuevo profesor de Ciencias de la Computación de Harvard es un chatbot.

Los estudiantes inscritos en el curso insignia de CS50 de la universidad tendrán como profesor de Inteligencia Artifi...

Inteligencia Artificial

Microsoft lanza TypeChat una biblioteca de IA que facilita la creación de interfaces de lenguaje natural utilizando tipos.

La biblioteca TypeChat de Microsoft es un intento de facilitar la creación de interfaces de lenguaje natural basadas ...

Inteligencia Artificial

Investigadores de NTU Singapur proponen OtterHD-8B un innovador modelo de IA multimodal evolucionado a partir de Fuyu-8B

Investigadores de S-Lab, Universidad Tecnológica de Nanyang, Singapur, presentan OtterHD-8B, un innovador modelo mult...