En una oración, proporcione mucha información, como lo que significan en el mundo real, cómo se conectan con otras palabras, cómo cambian el significado de otras palabras y, a veces, su verdadero significado puede ser ambiguo, ¡e incluso puede confundir a los humanos!
Todo esto debe ser resuelto para construir aplicaciones con Comprensión del lenguaje natural capacidades. Tres tareas principales ayudan a capturar diferentes tipos de información del texto:
- Etiquetado de parte de voz (POS)
- Analizador de dependencia
- Reconocimiento de entidad nombrado
Parte del etiquetado del discurso (POS)
En el etiquetado POS, clasificamos palabras bajo ciertas categorías, en función de su función en una oración. Por ejemplo, queremos diferenciar un sustantivo de un verbo. Esto puede ayudarnos a comprender el significado de algún texto.
Las etiquetas más comunes son las siguientes.
- SUSTANTIVO: Nombra a una persona, lugar, cosa o idea (por ejemplo, “perro”, “ciudad”).
- VERBO: Describe una acción, estado o ocurrencia (por ejemplo, “ejecutar”, “is”).
- Adj: Modifica un sustantivo para describir su calidad, cantidad o extensión (por ejemplo, “grande”, “feliz”).
- Adv: Modifica un verbo, adjetivo u otro adverbio, a menudo indicando la manera, el tiempo o el grado (por ejemplo, “rápidamente”, “muy”).
- Pron: Reemplaza un sustantivo o frase sustantivo (por ejemplo, “él”, “ellos”).
- Detener: Introduce o especifica un sustantivo (por ejemplo, “el”, “a”).
- ADP: Muestra la relación de un sustantivo o pronombre con otra palabra (por ejemplo, “en”, “encendido”).
- Numer: Representa un número o cantidad (por ejemplo, “uno”, “cincuenta”).
- Conjunto: Conecta palabras, frases o cláusulas (por ejemplo, “y”, “pero”).
- PRT: Una partícula, a menudo parte de una frase o preposición verbal (por ejemplo, “arriba” en “rendirse”).
- Pegar: Marca los símbolos de puntuación (por ejemplo, “.”, “,”).
- incógnita: Catch-All para otras categorías o poco claras (por ejemplo, palabras extranjeras, símbolos).
Estos se llaman Etiquetas universales. Entonces cada idioma puede tener más etiquetas granulares. Por ejemplo, podemos expandir la etiqueta “sustantivo” para agregar la información singular/plural, etc.
En las etiquetas Spacy se representan con acrónimos como “VBD”. Si no está seguro de a qué se refiere un acrónimo, puede pedirle a Spacy que explique con Spacy.explan ()
Veamos algunos ejemplos.
import spacy
spacy.explain("VBD")
>>> verb, past tense
Intentemos ahora investigar las etiquetas POS de una oración completa
nlp = spacy.load("en_core_web_sm")
doc = nlp("I love Rome, it is the best city in the world!"
)
for token in doc:
print(f"{token.text} --> {token.tag_}--> {spacy.explain(token.tag_)}")
La etiqueta de una palabra depende de las palabras cercanas, sus etiquetas y la palabra misma.
Los etiquetas POS se basan en modelos estadísticos. Tenemos principalmente
- Taggers basados en reglas: use reglas lingüísticas hechas a mano (por ejemplo, “una palabra después de ‘el’ es a menudo un sustantivo”).
- Taggers estadísticos: use modelos probabilísticos como modelos Hidden Markov (HMMS) o campos aleatorios condicionales (CRF) para predecir etiquetas basadas en secuencias de palabras y etiquetas.
- Taggers de red neuronal: use modelos de aprendizaje profundo como redes neuronales recurrentes (RNN), redes de memoria a corto plazo a largo plazo (LSTM) o transformadores (por ejemplo, BERT) para capturar el contexto y predecir etiquetas.
Analizador de dependencia
Con el etiquetado de POS podemos clasificar las palabras en el documento de salida, pero no sabemos cuáles son las relaciones entre las palabras. Esto es exactamente lo que hace el análisis de dependencia. Esto nos ayuda a comprender la estructura de una oración.
Podemos pensar una dependencia como un borde/enlace directo que va de una palabra principal a un niño, lo que define la relación entre los dos. Es por eso que usamos árboles de dependencia para representar la estructura de las oraciones. Ver la siguiente imagen.
En una relación de dependencia, siempre tenemos un padreaLso llamó al cabezay un dependientetambién llamado el niño. En la frase “coche rojo”, el automóvil es la cabeza y el rojo es el niño.
En espacios, la relación siempre se asigna al niño y se puede acceder con el atributo token.dep_
doc = nlp("red car")
for token in doc:
print(f"{token.text}, {token.dep_} ")
>>> red, amod
>>> car, ROOT
Como puede ver en una oración, la palabra principal, generalmente un verbo, en este caso un sustantivo, tiene el papel de la raíz. Desde la raíz, construimos nuestro árbol de dependencia.
Es importante saber, también que una palabra puede tener varios hijos pero solo uno de los padres.
Entonces, en este caso, ¿qué hace el amod ¿Nos dice la relación?
La relación se aplica si el significado del sustantivo se modifica de manera compositiva (por ejemplo, casa grande) o una forma idiomática (perros calientes).
De hecho, el “rojo” es una palabra que modifica la palabra “automóvil” al agregarle información.
Ahora enumeraré la relación más fundamental que puede encontrar en un análisis de dependencia y su significado.
FOT una lista completa verifique este sitio web: https://universaldependencies.org/u/dep/index.html
- raíz
- Significado: el predicado principal o la cabeza de la oración, típicamente un verbo, anclando el árbol de dependencia.
- Ejemplo: en “She Runs”, “Runs” es la raíz.
- nsubj (Asunto nominal)
- Significado: una frase nominal que actúa como sujeto de un verbo.
- Ejemplo: en “The Cat Sleeps”, “Cat” es el nsubj de “Sleeps”.
- obj (Objeto)
- Significado: una frase nominal que recibe directamente la acción de un verbo.
- Ejemplo: en “Ella pateó la pelota”, “Ball” es el OBJ de “Kicked”.
- iobj (Objeto indirecto)
- Significado: una frase sustantiva afectada indirectamente por el verbo, a menudo un destinatario.
- Ejemplo: en “Ella le dio un libro”, “él” es el iobj de “dio”.
- acuático (Oblicuo nominal)
- Significado: una frase sustantiva que actúa como un argumento o adjunto no es-core (por ejemplo, tiempo, lugar).
- Ejemplo: en “She Runs in the Park”, “Park” es el obl de “carreras”.
- abogado (Modificador adverbial)
- Significado: un adverbio que modifica un verbo, adjetivo o adverbio.
- Ejemplo: en “Ella corre rápidamente”, “Rápidamente” es el Advmod de “Runs”.
- amod (Modificador adjunto)
- Significado: un adjetivo que modifica un sustantivo.
- Ejemplo: en “una manzana roja”, “rojo” es el amod de “manzana”.
- detener (Determinador)
- Significado: una palabra que especifica la referencia de un sustantivo (por ejemplo, artículos, demostraciones).
- Ejemplo: en “The Cat”, “The” es el det de “Cat”.
- caso (Marcado de casos)
- Significado: una palabra (por ejemplo, preposición) que marca el papel de una frase nominal.
- Ejemplo: en “In the Park”, “In” es el caso de “Park”.
- conjunto (Conjunto)
- Significado: una palabra o frase coordinada vinculada a través de una conjunción.
- Ejemplo: en “She Runs and Jumps”, “Jumps” es el conjunto de “carreras”.
- CC (Conjunción de coordinación)
- Significado: una conjunción que vincula elementos coordinados.
- Ejemplo: en “Ella corre y salta”, “y” es el CC.
- aux (Auxiliar)
- Significado: un verbo auxiliar que respalda el verbo principal (tenso, estado de ánimo, aspecto).
- Ejemplo: en “ella ha comido”, “ha” es el auxiliar de “comido”.
Podemos visualizar el árbol de dependencia en Spacy usando el mostrar módulo. Veamos un ejemplo.
from spacy import displacy
sentence = "A dependency parser analyzes the grammatical structure of a sentence."
nlp = spacy.load("en_core_web_sm")
doc = nlp(sentence)
displacy.serve(doc, style="dep")
Reconocimiento de entidad nombrado (NER)
Una etiqueta POS proporciona información sobre el papel de una palabra en una oración. Cuando realizamos NER, buscamos palabras que representen objetos en el mundo real: el nombre de una empresa, un nombre propio, una ubicación, etc.
Nos referimos a estas palabras como entidad nombrada. Ver este ejemplo.
En la oración “Roma es la capital de Italia“, Roma e Italia son nombradas entidad, mientras que capital no es porque sea un sustantivo genérico.
Spacy ya admite muchas entidades nombradas, para visualizarlas:
nlp.get_pipe("ner").labels
La entidad nombrada es accesible en Spacy con el doc.ents atributo
sentence = "A dependency parser analyzes the grammatical structure of a sentence."
nlp = spacy.load("en_core_web_sm")
doc = nlp("Rome is the bast city in Italy based on my Google search")
doc.ents
>>> (Rome, Italy, Google)
También podemos pedirle a Spacy proporcionar alguna explicación sobre las entidades nombradas.
doc[0], doc[0].ent_type_, spacy.explain(doc[0].ent_type_)
>>> (Rome, 'GPE', 'Countries, cities, states')
Nuevamente, podemos confiar en la desplazamiento para visualizar los resultados de NER.
displacy.serve(doc, style="ent")
Pensamientos finales
Comprender cómo está estructurado el lenguaje y cómo funciona es clave para construir mejores herramientas que puedan manejar el texto de manera significativa. Las técnicas como el etiquetado de la parte del discurso, el análisis de dependencia y el reconocimiento de entidad nombrado ayudan a romper las oraciones para que podamos ver cómo funcionan las palabras, cómo se conectan y a qué cosas del mundo real se refieren.
Estos métodos nos dan una forma práctica de sacar información útil del texto, cosas como identificar quién hizo qué a quién, o detectar nombres, fechas y lugares. Bibliotecas como Spacy facilitan la exploración de estas ideas, ofreciendo formas claras de ver cómo el lenguaje se ajusta.