Etiquetado de POS con NLTK y fragmentación en NLP [EJEMPLOS]

⚡ Resumen inteligente

El etiquetado POS asigna una parte de la oración a cada palabra en una oración, mientras que el agrupamiento agrupa esas palabras etiquetadas en frases significativas, como frases nominales, agregando una estructura superficial que NLTK construye con expresiones regulares en Python.

  • 🏷️ Etiquetado de POS: Cada palabra recibe un token gramatical como NN, VB o JJ de su contexto.
  • 🌿 Fragmentación: Las palabras etiquetadas se agrupan en frases, un proceso que también se denomina análisis sintáctico superficial.
  • 🔤 Flujo de trabajo: Primero, tokeniza el texto, luego aplica pos_tag y, finalmente, analízalo con una gramática RegexpParser.
  • 📊 Conteo de etiquetas: Counter y FreqDist revelan las frecuencias de etiquetas y palabras para la ingeniería de características.
  • 🔗 Colocaciones: Los bigramas y trigramas capturan pares y tríos de palabras para obtener características textuales más sólidas.
  • 🤖 Uso de la IA: Los etiquetadores basados ​​en aprendizaje automático y HMM manejan las palabras ambiguas de forma probabilística.

Etiquetado POS con NLTK y segmentación en PLN

Etiquetado POS

Etiquetado POS El etiquetado gramatical (Parts of Speech Tagging) es un proceso que marca las palabras en un texto según su categoría gramatical, basándose en su definición y contexto. Se encarga de leer el texto y asignar una categoría gramatical específica a cada palabra. También se conoce como etiquetado gramatical.

Aprendamos con un ejemplo de categoría gramatical de NLTK:

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

Pasos involucrados en el ejemplo de etiquetado POS

  • Tokenizar texto (word_tokenize)
  • Aplique pos_tag al paso anterior, es decir, nltk.pos_tag(tokenize_text)

A continuación se muestran ejemplos de etiquetas POS de NLTK:

Abreviatura Significado
CC conjunción de coordinación
CD dígito cardinal
DT determinante
EX existencial allí
FW palabra extranjera
IN preposición/conjunción subordinante
JJ adjetivo
JJR adjetivo, comparativo
JJS adjetivo, superlativo
LS lista de mercado
MD modal
NN sustantivo singular
NNS sustantivo plural
PNN nombre propio, singular
NNPS nombre propio, plural
PDT predeterminador
TPV terminación posesiva
Plasma Rico en Plaquetas (PRP) pronombre personal
PPR$ pronombre posesivo
RB adverbio
RBR adverbio, comparativo
RBS adverbio, superlativo
RP partícula
A marcador infinito
UH interjección
VB verbo
JBV verbo gerundio
VBD verbo en pasado
VBN participio pasado del verbo
VBP verbo, presente simple, no tercera persona del singular
VBZ verbo, presente con tercera persona del singular
WDT determinante wh
WP pronombre interrogativo
WRB adverbio interrogativo

La lista de etiquetas NLTK POS anterior contiene todas las etiquetas NLTK POS. El etiquetador NLTK POS se utiliza para asignar información gramatical a cada palabra de la oración. La instalación, importación y descarga de todos los paquetes de POS NLTK ya se ha completado.

¿Qué es la fragmentación en PNL?

Chunking En PLN, la segmentación es un proceso que consiste en tomar pequeñas piezas de información y agruparlas en unidades más grandes. Su uso principal es la creación de grupos de "sintagmas nominales". Se utiliza para añadir estructura a la oración mediante el etiquetado de partes de la oración (POS Tagging) combinado con expresiones regulares. El grupo de palabras resultante se denomina "fragmento". También se conoce como análisis sintáctico superficial.

En el análisis superficial, existe un máximo de un nivel entre las raíces y las hojas, mientras que el análisis profundo comprende más de un nivel. El análisis superficial también se conoce como análisis ligero o segmentación.

Reglas para fragmentar

No existen reglas predefinidas, pero puedes combinarlas según tus necesidades. Por ejemplo, supongamos que necesitas identificar el sustantivo, el verbo (en pasado), el adjetivo y la conjunción coordinante de la oración. Puedes usar la siguiente regla:

chunk:{***?}

La siguiente tabla muestra el significado de los distintos símbolos:

Nombre del símbolo Mareas Ideales para Lecciones
. Cualquier carácter excepto nueva línea
* Combina 0 o más repeticiones
? Combina 0 o 1 repeticiones

Ahora escribamos el código para comprender mejor la regla.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{***?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Salida:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       '***?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

La conclusión del etiquetado de la parte del discurso anterior Python Por ejemplo, "make" es un verbo que no está incluido en la regla, por lo que no se etiqueta como mychunk.

Caso de uso de fragmentación

La segmentación se utiliza para la detección de entidades. Una entidad es la parte de la oración mediante la cual una máquina obtiene el valor de una intención.

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

En otras palabras, la segmentación se utiliza para seleccionar subconjuntos de tokens. Siga el código a continuación para comprender cómo se utiliza la segmentación para seleccionar los tokens. En este ejemplo, verá un gráfico que corresponde a un fragmento de una frase nominal.

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking

Salida:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

Gráfico de fragmentación de frases sustantivas

Gráfico de fragmentación de frases sustantivas

A partir del gráfico, podemos concluir que «aprender» y «guru99» son dos tokens distintos, pero se clasifican como sintagmas nominales, mientras que el token «de» no pertenece a un sintagma nominal. La segmentación se utiliza para agrupar distintos tokens en un mismo fragmento. El resultado dependerá de la gramática seleccionada. Además, en NLTK, la segmentación se utiliza para etiquetar patrones y explorar corpus de texto.

Conteo de etiquetas POS

Hemos discutido varios pos_etiqueta valores previamente. Aquí estudiarás cómo contar estas etiquetas. Contar etiquetas es crucial para la clasificación de texto y para preparar características para operaciones de lenguaje natural. Primero escribimos el código funcional y luego explicamos los pasos.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Salida:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1, 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Elaboración del código:

  1. Utilice el paquete Counter del módulo collections. Counter es una subclase de diccionario que almacena elementos como claves y sus recuentos como valores.
  2. Importa nltk para tokenizar el texto.
  3. Escribe el texto cuyo pos_tag quieres contar.
  4. Transforma todas las palabras a minúsculas antes de la tokenización.
  5. Pasa las palabras por word_tokenize y calcula la etiqueta pos_tag de cada token.
  6. A continuación, el contador cuenta el número total de veces que aparece cada etiqueta en el texto.

Distribución de frecuencias

La distribución de frecuencia se refiere al número de veces que ocurre un resultado de un experimento. Se utiliza para encontrar la frecuencia de cada palabra que aparece en un documento. Utiliza la FreqDist clase definida por el nltk.probabilidad módulo. El contador se incrementa en uno cada vez que se toma una muestra.

Para cualquier palabra, podemos comprobar cuántas veces aparece en un documento. Por ejemplo:

  • Método de conteo: freq_dist.count('and') devuelve el número de veces que apareció 'and'. Se le llama método de conteo.
  • Método de frecuencia: freq_dist.freq('and') devuelve la frecuencia de una muestra dada.

Escribiremos un pequeño programa que calcule la distribución de frecuencia de cada palabra en el texto.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Explicación del código:

  1. Importa el módulo nltk.
  2. Escribe el texto cuya distribución de palabras necesitas encontrar.
  3. Tokeniza cada palabra del texto, que se utiliza como entrada para el módulo FreqDist de nltk.
  4. Aplique cada palabra a nltk.FreqDist en forma de lista.
  5. Representa gráficamente las palabras usando plot().

NOTA: Es necesario tener instalada la biblioteca matplotlib para visualizar el gráfico. Esta biblioteca cuenta la frecuencia de cada palabra en el texto y facilita el análisis de sentimientos basado en texto. El término clave es "tokenizar": tras la tokenización, se comprueba cuántas veces aparece cada palabra.

Colocaciones: bigramas y trigramas

Las colocaciones son pares de palabras que aparecen juntas muchas veces en un documento. Se calculan mediante la proporción entre el número de pares que aparecen juntos y el número total de palabras del documento.

Consideremos palabras como rayos ultravioleta y rayos infrarrojos. Las palabras ultravioleta y rayos no se usan individualmente y, por lo tanto, pueden tratarse como una colocación. Otro ejemplo es la tomografía computarizada (TC), ya que no decimos TC y tomografía por separado. Las colocaciones se pueden clasificar en dos tipos:

  • Bigramas: combinación de dos palabras
  • Trigramas: combinación de tres palabras

Los bigramas y trigramas proporcionan características más significativas y útiles para la función extracetapa de análisis. Son especialmente útiles en el análisis de sentimientos basado en texto.

Ejemplo de bigramas Code:

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Salida:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Ejemplo de trigramas Code:

A veces resulta importante ver un par de tres palabras en la oración para el análisis estadístico y el recuento de frecuencia. Esto nuevamente juega un papel crucial en la formación PNL (procesamiento del lenguaje natural) características así como predicción de sentimiento basada en texto. El mismo código se ejecuta para calcular los trigramas.

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Salida:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

Oraciones de etiquetado

Etiquetar una oración consiste en añadir etiquetas como verbo o sustantivo según el contexto. Identificar las etiquetas de categoría gramatical es complejo, por lo que no es posible realizar un etiquetado genérico manualmente, ya que algunas palabras tienen significados ambiguos dependiendo de la estructura de la oración. Convertir el texto en una lista es un paso importante antes de etiquetar, ya que cada palabra se analiza y se contabiliza para una etiqueta específica.

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Code Explicación:

  1. Code importar nltk (el Natural Language Toolkit, que contiene submódulos como tokenizar oraciones y tokenizar palabras).
  2. Texto cuyas etiquetas se van a imprimir.
  3. Tokenización de oraciones.
  4. Se implementa un bucle for donde las palabras se tokenizan a partir de la oración y la etiqueta de cada palabra se imprime como resultado.

En un corpus, existen dos tipos de etiquetadores POS:

1. Etiquetador POS basado en reglas: Para palabras con significado ambiguo, se aplica un enfoque basado en reglas que utiliza información contextual. Esto se logra analizando el significado de la palabra anterior o siguiente. Por lo tanto, las palabras se etiquetan según las reglas gramaticales de un idioma en particular, como el uso de mayúsculas y la puntuación. Por ejemplo, el etiquetador de Brill.

2. Etiquetador POS estocástico: Este método emplea enfoques como la frecuencia o la probabilidad. Si una palabra se etiqueta mayoritariamente con una etiqueta específica en el conjunto de entrenamiento, se le asigna esa etiqueta en la oración de prueba. La etiqueta de la palabra depende no solo de su propia etiqueta, sino también de la etiqueta anterior, por lo que este método no siempre es preciso.

Etiquetado POS con modelo oculto de Markov

Los problemas de etiquetado también pueden modelarse mediante un Modelo Oculto de Markov (HMM). Este modelo considera los tokens de entrada como una secuencia observable, mientras que las etiquetas se consideran estados ocultos, y el objetivo es determinar la secuencia de estados ocultos. Por ejemplo, x = x1, x2, ..., xn, donde x es una secuencia de tokens, mientras que y = y1, y2, y3, y4... yn es la secuencia oculta.

¿Cómo funciona el modelo oculto de Markov (HMM)?

El modelo oculto de Markov (HMM) utiliza una distribución conjunta P(x, y), donde x es la secuencia de tokens de entrada e y es la secuencia de etiquetas. La secuencia de etiquetas para x será el máximo exponencial sobre y1…yn de p(x1,x2,…xn,y1,y2,y3,…). Hemos categorizado las etiquetas del texto, pero las estadísticas de dichas etiquetas son fundamentales, por lo que el siguiente paso consiste en contarlas para el estudio estadístico.

Preguntas Frecuentes

El etiquetado POS asigna a cada palabra su categoría gramatical, como sustantivo o verbo. La segmentación va un paso más allá y agrupa esas palabras etiquetadas en frases, como sintagmas nominales, lo que confiere a la oración una estructura básica.

El análisis superficial, también llamado segmentación o análisis ligero, mantiene un máximo de un nivel entre raíces y hojas. Identifica los límites de las frases sin construir un árbol de análisis completo, lo que lo hace más rápido que el análisis profundo.

La segmentación agrupa palabras etiquetadas en frases, lo que permite al sistema detectar entidades como personas, ubicaciones, fechas o productos. El reconocimiento de entidades nombradas se basa en estos segmentos para...tract valores significativos del texto sin formato.

La función nltk.pos_tag() asigna etiquetas de categoría gramatical. Primero, se tokeniza el texto con word_tokenize y luego se pasa la lista de tokens a pos_tag, que devuelve cada palabra emparejada con su etiqueta, como NN, VB o JJ.

Sí. Los etiquetadores de IA modernos, entrenados con aprendizaje automático y redes neuronales profundas, resuelven las palabras ambiguas aprendiendo el contexto de grandes corpus, logrando una mayor precisión que los métodos basados ​​en reglas en textos del mundo real.

Los etiquetadores estocásticos utilizan probabilidades aprendidas a partir de datos de entrenamiento. El aprendizaje automático estima la probabilidad de que cada etiqueta corresponda a una palabra dadas las etiquetas circundantes, y luego selecciona la secuencia con la mayor probabilidad general.

Además de NLTKLas opciones populares incluyen: spacy Para procesos de producción rápidos, se utilizan Stanford CoreNLP y Hugging Face Transformers para el etiquetado basado en transformadores.

En una gramática de fragmentos, un punto coincide con cualquier carácter excepto un salto de línea, un asterisco coincide con cero o más repeticiones, y un signo de interrogación coincide con cero o una repetición del patrón de etiqueta POS precedente.

Resumir este post con: