El procesamiento del lenguaje natural, o PNL, es parte de la IA que se centra en la comprensión del texto. Se trata de ayudar a las máquinas a leer, procesar y encontrar patrones o información útiles dentro de un texto, para nuestras aplicaciones. Extirpado es una biblioteca que hace que este funcione sea más fácil y rápido.
Muchos desarrolladores de hoy usan modelos enormes como ChatGPT o LLAMA para la mayoría de las tareas de PNL. Estos modelos son poderosos y pueden hacer mucho, pero a menudo son costosos y lentos. En proyectos del mundo real, necesitamos algo más enfocado y rápido. Aquí es donde Spacy ayuda mucho.
Ahora, Spacy incluso te permite combinar sus fortalezas con grandes modelos como Chatgpt a través del spacy-llm módulo. Es una excelente manera de obtener velocidad y potencia.
Instalación de Spacy
Copie y pegue los siguientes comandos para instalar Spacy con PIP.
En las siguientes células, sustituya el “& ndash” con “-“.
python &ndashm venv. env
source .env/bin/activate
pip install &ndashU pip setuptools wheel
pip install &ndashU spacy
Spacy no viene con un modelo de lenguaje estadístico, que es necesario para realizar operaciones en un idioma en particular. Para cada idioma, hay muchos modelos basados en el tamaño de los recursos utilizados para construir el modelo en sí.
Todos los idiomas compatibles se enumeran aquí: https://spacy.io/usage/models
Puede descargar un modelo de idioma a través de la línea de comandos. En este ejemplo, estoy descargando un modelo de idioma para el idioma inglés.
python &ndashm spacy download en_core_web_sm
En este punto, está listo para usar el modelo con la funcionalidad Load ()
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a text example I want to analyze")
Tubería de spacy
Cuando carga un modelo de idioma en Spacy, procesa su texto a través de una tubería que puede personalizar. Esta tubería está compuesta por varios componentescada uno manejando una tarea específica. En esencia el núcleo está el tokenizador, que divide el texto en tokens individuales (palabras, puntuación, etc.).
El resultado de esta tubería es un Doc Objeto, que sirve como base para un análisis posterior. Se pueden incluir otros componentes, como el etiquetador (para el etiquetado de parte del voz), el analizador (para el análisis de la dependencia) y el ner (para el reconocimiento de entidades con nombre) en función de lo que desea lograr. Veremos qué significa Tagger, Parser y Ner en los próximos artículos.
Para crear un objeto DOC, simplemente puede hacer lo siguiente
import spacy
nlp = spacy.load("en_core_web_md")
doc = nlp("My name is Marcello")
Nos familiarizaremos con muchos más objetos de contenedores proporcionados por Spacy.
Las estructuras de datos centrales en Spacy son la clase de idioma, el vocabulario y el objeto DOC.
Al verificar la documentación, encontrará la lista completa de objetos de contenedores.
Tokenización con Spacy
En PNL, el primer paso en el texto del texto es la tokenización. Esto es crucial porque todas las tareas de PNL posteriores dependen de trabajar con tokens. Los tokens son las unidades de texto más pequeñas y significativas en las que se puede romper una oración. Intuitivamente, podría pensar en los tokens como palabras individuales divididas por espacios, pero no es tan simple.
La tokenización a menudo depende de patrones estadísticos, donde los grupos de caracteres que aparecen con frecuencia juntos se tratan como tokens individuales para un mejor análisis.
Puedes jugar con diferentes tokenizer en este espacio para la cara abrazada: https://huggingface.co/spaces/xenova/the-tokenizizer-playground
Cuando aplicamos NLP () a algún texto en Spacy, el texto se toca automáticamente. Veamos un ejemplo.
doc = nlp("My name is Marcello Politi")
for token in doc:
print(token.text)
Del ejemplo parece una simple división hecha con texto.split (“”). Así que intentemos tokenizar una oración más compleja.
doc = nlp("I don't like cooking, I prefer eating!!!")
for i, token in enumerate(doc):
print(f"Token {i}:",token.text)
El tokenizador de Spacy está basado en reglas, lo que significa que utiliza reglas y patrones lingüísticos para determinar cómo dividir el texto. No se basa en métodos estadísticos como LLMS modernos.
Lo interesante es que las reglas son personalizables; Esto le brinda el control total sobre el proceso de tokenización.
Además, los tokenizadores de espacios no son destructivos, lo que significa que desde el token podrá recuperar el texto original.
Veamos como Personaliza el tokenizador. Para lograr esto, solo necesitamos definir una nueva regla para nuestro tokenizador, podemos hacerlo utilizando el símbolo de orth de especial.
import spacy
from spacy.symbols import ORTH
nlp = spacy.load("en_core_web_sm")
doc = nlp("Marcello Politi")
for i, token in enumerate(doc):
print(f"Token {i}:",token.text)
Quiero tokenizar la palabra “Marcello” de manera diferente.
special_case = [{ORTH:"Marce"},{ORTH:"llo"}]
nlp.tokenizer.add_special_case("Marcello", special_case)
doc = nlp("Marcello Politi")
for i, token in enumerate(doc):
print(f"Token {i}:",token.text)
En la mayoría de los casos, el tokenizador predeterminado funciona bien, y es raro que cualquiera necesite modificarlo, por lo general, solo los investigadores lo hacen.
Dividir texto en tokens es más fácil que dividir un párrafo en oraciones. Spacy puede lograr esto utilizando un analizador de dependencia; Puede obtener más información al respecto en la documentación. Pero veamos cómo funciona esto en la práctica.
import spacy
nlp = spacy.load("en_core_web_sm")
text = "My name is Marcello Politi. I like playing basketball a lot!"
doc = nlp(text)
for i, sent in enumerate(doc.sents):
print(f"sentence {i}:", sent.text)
Lemmatización con Spacy
Las palabras/tokens pueden tener diferentes formas. Un lema es la forma base de una palabra. Por ejemplo, “Dance” es el lema de las palabras “Dancing”, “Danced”, “Dancer”, “Dances”.
Cuando reducimos las palabras a su forma base, estamos aplicando lemmatización.
En Spacy podemos tener acceso a las palabras Lema fácilmente. Verifique el siguiente código.
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("I like dancing a lot, and then I love eating pasta!")
for token in doc:
print("Text :", token.text, "--> Lemma :", token.lemma_)
Pensamientos finales
Al finalizar esta primera parte de esta serie de Spacy, he compartido los conceptos básicos que me engancharon en esta herramienta para PNL.
Cubrimos la configuración de Spacy, cargando un modelo de idioma y cavando en la tokenización y la lematización, los pasos principales que hacen que el procesamiento de texto se sienta menos como un cuadro negro.
A diferencia de aquellos modelos masivos como ChatGPT que pueden sentirse exagerados para proyectos más pequeños, el enfoque Lean y Rápido de Spacy se ajusta perfectamente a las necesidades de muchos proyectos, especialmente con la opción de usar también esos grandes modelos a través de Spacy-LLM cuando desea potencia adicional.
En la siguiente parte, te guiaré a través de cómo uso el análisis de reconocimiento y dependencia de la entidad nombrado de Spacy para abordar las tareas de texto del mundo real. ¡Quédate conmigo para la Parte 2, será aún más práctico!
LinkedIn ️ | X (Twitter) | Sitio web