Mi IBM Inicie sesión Suscríbase

¿Qué es el stemming?

29 de noviembre de 2023

Autores

Jacob Murel Ph.D.

Senior Technical Content Creator

Eda Kavlakoglu

Program Manager

La derivación es una de las diversas técnicas de normalización de textos que convierte los datos de texto sin procesar en un formato legible para las tareas de procesamiento del lenguaje natural.

La derivación es una técnica de preprocesamiento de texto en el procesamiento del lenguaje natural (PLN). Específicamente, es el proceso de reducir la forma flexionada de una palabra a una llamada "raíz" o forma raíz, también conocida como "lema" en lingüística1. Es uno de los dos métodos principales (el otro es la lematización)que reduce las variantes flexivas dentro de un conjunto de datos de texto a un lexema morfológico. De este modo, la derivación pretende mejorar el procesamiento de textos en los sistemas de machine learning y recuperación de información.

¿Por qué usar el stemming?

Las máquinas, desde las funciones de búsqueda y localización hasta los modelos de deep learning, procesan el lenguaje en gran medida según la forma, y muchos investigadores sostienen que los ordenadores no pueden comprender el significado del lenguaje2. Aunque algunos debaten este último punto, no es menos cierto que los modelos de machine learning necesitan ser entrenados para reconocer diferentes palabras como variantes morfológicas de una palabra base. Por ejemplo, en los motores de búsqueda o en los catálogos de las bibliotecas, los usuarios pueden enviar una consulta con una palabra (por ejemplo, invertir) pero esperar resultados que utilicen cualquier forma de palabra derivada (por ejemplo, invertir, inversión, inversiones, etc.). Al reducir las formas verbales derivadas a una palabra madre, la derivación ayuda a los sistemas de recuperación de información a equiparar las palabras relacionadas morfológicamente3.

Para muchas tareas de minería de textos, como la clasificación de textos, la agrupación, la indexación y otras, la derivación ayuda a mejorar la precisión al reducir la dimensionalidad de los algoritmos de machine learning y agrupar las palabras según el concepto. La reducción de la dimensionalidad de los algoritmos puede mejorar la exactitud y la precisión de los modelos estadísticos de PNL, como los modelos temáticos y las incrustaciones de palabras4. De este modo, la derivación mejora la exactitud al realizar diversas tareas de PNL, como el análisis de sentimientos o el etiquetado de partes de la oración. De este modo, la derivación constituye un paso importante en el desarrollo de modelos de lenguaje de gran tamaño.

Diseño 3D de bolas rodando por un circuito

Las últimas noticias + conocimientos de IA 


Descubra ideas y noticias de expertos sobre IA, nube y mucho más en el boletín semanal Think. 

Cómo funciona el stemming

La derivación constituye una de las etapas de la minería de texto que convierte los datos de texto sin procesar en un formato estructurado para su procesamiento automático. Básicamente, la derivación elimina los afijos de las palabras, dejando sólo la forma base5. Esto equivale a eliminar los caracteres del final de los tokens de palabras. Sin embargo, más allá de esta similitud básica, los algoritmos de derivación varían mucho.

Mixture of Experts | Pódcast

Descifrar la IA: resumen semanal de noticias

Únase a nuestro panel de ingenieros, investigadores, responsables de producto y otros profesionales de talla mundial que se abren paso entre el bullicio de la IA para ofrecerle las últimas noticias y conocimientos al respecto.

Tipos de algoritmos de stemming

Para explorar las diferencias entre las operaciones de los algoritmos de derivación, podemos procesar esta cita en inglés de El sueño de una noche de verano de Shakespeare: “Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind.” Antes de proceder al stemming, los usuarios deben tokenizar los datos textuales sin procesar. El tokenizador incorporado en el conjunto de herramientas de lenguaje natural de Python (NLTK) produce el texto citado como:

Tokenized: ['Love', 'looks', 'not', 'with', 'the', 'eyes', 'but', 'with', 'the', 'mind', ',', 'and', 'therefore', 'is', 'winged', 'Cupid', 'painted', 'blind', '.']

Al pasar la salida tokenizada por varios lematizadores, podemos observar cómo difieren los algoritmos de derivación.

Stemmer de Lovins

La raíz de Lovins es el primer algoritmo de derivación publicado. Básicamente, funciona como una función de búsqueda y reemplazo muy parametrizada. Compara cada token de entrada con una lista de sufijos comunes, y cada sufijo está condicionado por una de las 29 reglas. Si uno de los sufijos de la lista se encuentra en un token y eliminar el sufijo no infringe ninguna de las condiciones del sufijo asociado, el algoritmo elimina ese sufijo del token. El token con tallo pasa entonces por otro conjunto de reglas, corrigiendo las malformaciones comunes en las raíces con tallo, como las letras dobles (por ejemplo, hopping se convierte en hopp y después en hop)6.

 Este código utiliza la biblioteca de derivación de Python7, para derivar la cita de Shakespeare tokenizada:

from stemming.lovins import stem
from nltk.tokenize import word_tokenize
text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind."
words = word_tokenize(text)
stemmed_words = [stem(word) for word in words]

El código genera:

Stemmed: ['Lov', 'look', 'not', 'with', 'th', 'ey', 'but', 'with', 'th', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'Cupid', 'paint', 'blind', '.']

El resultado muestra cómo el lematizador de Lovins convierte correctamente las conjugaciones y los tiempos en formas base (por ejemplo, painted se convierte en paint) mientras elimina la pluralización (por ejemplo, eyes se convierte en eye). Pero el algoritmo de derivación de Lovins también devuelve una serie de raíces mal formadas, como lov, th y ey. Estas palabras raíz mal formadas son el resultado de la eliminación de demasiados caracteres. Como suele ocurrir en el machine learning, estos errores ayudan a revelar los procesos subyacentes.

En comparación con la lista de sufijos del lematizador de Lovins, el sufijo más largo que se ajusta tanto a love como a the es el de un solo carácter -e. La única condición que se le aplica a este sufijo es “Sin restricciones en la raíz”, lo que significa que el lematizador puede eliminar -e sin importar la longitud de la raíz restante. Desafortunadamente, ninguna de las raíces lov o th contiene ninguna de las características que el algoritmo de Lovins usa para identificar palabras mal formadas, como letras dobles o plurales irregulares8.

Cuando estas raíces malformadas escapan al algoritmo, el lematizador de Lovins puede reducir palabras no relacionadas semánticamente a la misma raíz, por ejemplo, the, these y this se reducen a th. Por supuesto, estas tres palabras son todas demostrativas y, por lo tanto, comparten una función gramatical. Pero otros demostrativos, como that y these, no se reducen a th. Esto significa que las raíces generadas por Lovins no representan correctamente los grupos de palabras.

Stemmer de Porter

En comparación con el lematizador de Lovins, el algoritmo de derivación de Porter utiliza un algoritmo de derivación más matemático. Básicamente, este lematizador clasifica cada carácter de un token dado como consonante (c) o vocal (v), agrupando las consonantes subsiguientes como C y las vocales subsiguientes como V. Así, el lematizador representa cada token de palabra como una combinación de grupos de consonantes y vocales. Una vez enumeradas de esta manera, el lematizador pasa cada token de palabra por una lista de reglas que especifican los caracteres finales que se deben eliminar según el número de grupos de vocales y consonantes de un token 9. Debido a que el inglés en sí mismo sigue reglas léxicas generales pero no absolutas, el criterio sistemático del algoritmo del lematizador de Porter para determinar la eliminación de sufijos puede generar errores.

Python NLTK contiene una función de lematización de Porter integrada. Este código implementa el algoritmo de derivación de Porter en la cita de Shakespeare tokenizada:

from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
porter_stemmer = PorterStemmer()
text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind."
words = word_tokenize(text)
stemmed_words = [porter_stemmer.stem(word) for word in words]

Este código devuelve:

Stemmed: ['love', 'look', 'not', 'with', 'the', 'eye', 'but', 'with', 'the', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'cupid', 'paint', 'blind', '.']

Al igual que con Lovins, Porter cambia correctamente las conjugaciones de los verbos y las pluralizaciones de los sustantivos. Aunque carece de otras raíces malformadas de Lovins (por ejemplo, love a lov), el algoritmo de derivación de Porter elimina erróneamente -e del final de Therefore.

Según el método de agrupamiento consonante-vocal de lematizador de Porter, therefore, se representa como CVCVCVCV o C (VC)3V, donde el exponente significa las repeticiones de los grupos de consonantes-vocales.

Uno de los últimos pasos del algoritmo establece que, si una palabra no tiene ninguna raíz y tiene un valor de exponente superior a 1, se elimina -e del final de la palabra (si está presente). El valor del exponente de Therefore es igual a 3 y no contiene ninguno de los sufijos que figuran en las demás condiciones del algoritmo10. Por lo tanto, therefore, pasa a ser therefor

.

Hay que reconocer que este es el único error del algoritmo de Porter, lo que demuestra por qué es el algoritmo de derivación más utilizado. De hecho, el lematizador de Porter ha servido de base para posteriores algoritmos de derivación.

Stemmer Snowball

El lematizador de Snowball es una versión actualizada del lematizador de Porter. Aunque pretende aplicar un conjunto de reglas más sólido para determinar la eliminación de sufijos, sigue siendo propenso a muchos de los mismos errores. Al igual que el lematizador de Porter, Python NLTK contiene una función del lematizador de Snowball integrada:

from nltk.stem.snowball import SnowballStemmer
from nltk.tokenize import word_tokenize
stemmer = SnowballStemmer("english", True)
text = "There is nothing either good or bad but thinking makes it so."
words = word_tokenize(text)
stemmed_words = [stemmer.stem(word) for word in words]

Produce el mismo resultado del texto de Shakespeare que el lematizador de Porter, reduciendo incorrectamente therefore a therefor:

Stemmed: ['love', 'look', 'not', 'with', 'the', 'eye', 'but', 'with', 'the', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'cupid', 'paint', 'blind', '.']

El lematizador Snowball difiere de Porter en dos aspectos principales. En primer lugar, mientras que los lematizadores Lovins y Porter solo derivan palabras en inglés, el lematizador Snowball puede derivar textos en otros idiomas de escritura romana, como el holandés, el alemán, el francés e incluso el ruso. En segundo lugar, el lematizador Snowball, cuando se implementa a través de la biblioteca NLTK de Python, puede ignorar las palabras vacías. Las palabras vacías son una colección no universal de palabras que se eliminan de un conjunto de datos durante el preprocesamiento. La lista de palabras irrelevantes predefinidas del lematizador de Snowball contiene palabras sin una definición conceptual directa y que cumplen una función más gramatical que semántica. Las palabras vacías incluidas en la lista de palabras vacías en inglés del lematizador de Snowball son las siguientes the, a, being, y similares11.

Stemmer de Lancaster

Muchas fuentes describen el lematizador de Lancaster (también conocido como lematizador de Paice) como el más agresivo de los lematizadores en lengua inglesa. El lematizador de Lancaster contiene una lista de más de 100 reglas que dictan qué cadenas de caracteres finales, si están presentes, deben sustituirse por otras cadenas, si las hay. El lematizador itera a través de cada token de palabra, comprobándola con todas las reglas. Si la cadena final del token coincide con la de una regla, el algoritmo ejecuta la operación descrita en la regla y, a continuación, vuelve a pasar la nueva palabra transformada por todas las reglas. El lematizador itera a través de todas las reglas hasta que un token determinado las supera todas sin transformarse12.

Aunque no está disponible en Python NLTK, el lematizador de Lancaster está disponible en la biblioteca de derivación13.

from stemming.paicehusk import stem
from nltk.tokenize import word_tokenize
text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind."
words = word_tokenize(text)
stemmed_words = [stem(word) for word in words]

El código deriva el pasaje de Shakespeare tokenizado como:

Stemmed: ['Lov', 'look', 'not', 'with', 'the', 'ey', 'but', 'with', 'the', 'mind', ',', 'and' , 'theref', '', 'wing', 'Cupid', 'paint', 'blind', '.']

Está claro que el enfoque iterativo del lematizador de Lancaster es el más agresivo, como se muestra con theref. En primer lugar, el lematizador de Lancaster tiene la regla "e1 >". Esta regla elimina la-e de un solo carácter sin sustituirla. Después de que el algoritmo elimine -e de therefore, aplica el nuevo therefor en cada regla. La palabra recién transformada se ajusta a la regla "ro2>". Esta regla elimina el sufijo -o sin sustituirlo. La raíz resultante theref no se ajusta a ninguna de las demás reglas del algoritmo y, por lo tanto, se devuelve como base derivada. A diferencia de Lovins, el algoritmo de Lancaster no tiene forma de explicar las palabras malformadas.

Limitaciones del stemming

Soporte de idiomas

Existen muchos lematizadores en inglés, así como lematizadores para otras lenguas de escritura romana. Más recientemente, la investigación se ha centrado en el desarrollo y la evaluación de algoritmos de derivación para lenguajes de escritura no romana. El árabe, en particular, puede ser difícil debido a su compleja morfología y variaciones ortográficas. Un puñado de estudios comparan la eficacia de diferentes lematizadores árabes en relación con tareas como la clasificación14. Además, los investigadores investigan la precisión de la derivación para mejorar las tareas de recuperación de información en tamil15 y sánscrito16.

Over-stemming y under-stemming

Aunque la investigación evidencia el papel de la derivación en la mejora de la precisión de las tareas de PNL, la derivación presenta dos problemas principales que los usuarios deben vigilar. El exceso de derivación se produce cuando dos palabras semánticamente distintas se reducen a la misma raíz y, por tanto, se confunden17. Un ejemplo de exceso de derivación es la reducción de wander a wand por parte del derivador de Lancaster, dos términos semánticamente distintos en inglés. Sin embargo, tanto el lematizador de Porter como el de Lovins no modifican en absoluto wander. Un ejemplo de "under-stemming" es la no reducción de knavish a knavish y de knave a knave, que comparten la misma raíz semántica. En comparación, el lematizador de Lovins reduce ambas palabras a knav.

Formación de bases

Aunque tienen usos y objetivos similares, la derivación y la lematización difieren en aspectos pequeños pero fundamentales. En la literatura se suele describir la derivación como algo más heurístico, que consiste esencialmente en eliminar los sufijos comunes de las palabras para producir una palabra raíz. En comparación, la lematización realiza un análisis morfológico más detallado de las distintas palabras para determinar la forma base del diccionario, eliminando no sólo los sufijos, sino también los prefijos. Aunque la derivación es más rápida y más fácil de implementar, muchos desarrolladores de herramientas de deep learning prefieren la lematización por su proceso de eliminación más matizado.

Soluciones relacionadas

Soluciones relacionadas

IBM watsonx Orchestrate

Diseñe asistentes y agentes de IA escalables con facilidad, automatice tareas repetitivas y simplifique procesos complejos con IBM watsonx Orchestrate.

Descubra watsonx Orchestrate
Herramientas y API de procesamiento del lenguaje natural

Acelere el valor empresarial de la inteligencia artificial con una cartera potente y flexible de bibliotecas, servicios y aplicaciones.

Explore soluciones de PLN
Consultoría y servicios de IA

Reinvente las operaciones y flujos de trabajo críticos añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.

Explore los servicios de IA
Dé el siguiente paso

Diseñe asistentes y agentes de IA escalables con facilidad, automatice tareas repetitivas y simplifique procesos complejos con IBM watsonx Orchestrate.

Descubra watsonx Orchestrate Explore soluciones de PLN
Notas a pie de página

1 Ruslan Mitkov. Oxford Handbook of Computational Linguistics. 2.a edition. Oxford University Press. 2014.

2 Emily Bender y Alexander Koller. “Climbing towards NLU: On Meaning, Form, and Understanding in the Age of Data,” Actas de la 58.ª reunión anual de la Asociación de Lingüística Computacional. 2020. PP. 5185-5198. https://aclanthology.org/2020.acl-main.463

3 Steven Bird, Ewan Klein y Edward Loper. Natural Language Processing with Python. O’Reilley. 2009.

4 Gary Miner, Dursun Delen, John Elder, Andrew Fast, Thomas Hill, y Robert A. Nisbet. Practical Text Mining and Statistical Analysis for Non-Structured Text Data Applications. Academic Press. 2012.

5 Christopher Manning y Hinrich Schütze. Foundations of Statistical Natural Language Processing. MIT Press. 1999.

6 Julie Beth Lovins. "Development of a stemming algorithm". Mechanical Translation and Computational Linguistics. Vol. 11.Nos. 1 y 2. 1968. PP. 22-31. https://aclanthology.org/www.mt-archive.info/MT-1968-Lovins.pdf.

7, 13 https://pypi.org/project/stemming/1.0

8 Julie Beth Lovins. "Development of a stemming algorithm". Mechanical Translation and Computational Linguistics. Vol. 11. Nos. 1 y 2. 1968. PP. 22-31. https://aclanthology.org/www.mt-archive.info/MT-1968-Lovins.pdf

9 Martin Porter. "An algorithm for suffix stripping". Program: electronic library and information systems. Vol. 14. N.º 3. 1980. PP. 130-137. https://www.emerald.com/insight/content/doi/10.1108/eb046814/full/html 

10 Martin Porter. "An algorithm for suffix stripping". Program: electronic library and information systems. Vol. 14. N.º 3. 1980. PP. 130-137. https://www.emerald.com/insight/content/doi/10.1108/eb046814/full/html 

11 Martin Porter. “Snowball: A language for stemming algorithms”. 2001. https://snowballstem.org/texts/introduction.html

12 Chris Paice. “Another stemmer". ACM SIGIR Forum. Vol. 24. N.º 3. 1990. PP.56-61, https://dl.acm.org/doi/10.1145/101306.101310

14 Y. A. Alhaj, J. Xiang, D. Zhao, M. A. A. Al-Qaness, M. Abd Elaziz y A. Dahou. "A Study of the Effects of Stemming Strategies on Arabic Document Classification". IEEE Access. Vol. 7. PP. 32664-32671. https://ieeexplore.ieee.org/document/8664087. Janneke van der Zwaan, Maksim Abdul Latif, Dafne van Kuppevelt, Melle Lyklema, Christian Lange. "Are you sure your tool does what it is supposed to do? Validating Arabic root extraction". Digital Scholarship in the Humanities. Vol. 36. 2021. PP.137-150. https://academic.oup.com/dsh/article/36/Supplement_1/i137/5545478

15 Ratnavel Rajalakshmi, Srivarshan Selvaraj, Faerie Mattins, Pavitra Vasudevan, Anand Kumar. "HOTTEST: Hate and Offensive content identification in Tamil using Transformers and Enhanced Stemming". Computer Speech & Language. Vol. 78. 2023. https://www.sciencedirect.com/science/article/abs/pii/S0885230822000870?via%3Dihub

16 Siba Sankar Sahu y Sukomal Pal. "Building a text retrieval system for the Sanskrit language: Exploring indexing, stemming, and searching issues". Computer Speech & Language. Vol. 81. 2023. https://www.sciencedirect.com/science/article/abs/pii/S0885230823000372?via%3Dihub

17 Chris Paice. “Stemming”. Encyclopedia of Database Systems. Springer. 2020.