El stemming y la lematización son técnicas de preprocesamiento de texto que reducen las variantes de palabras a una forma base.
El stemming y la lematización son técnicas de preprocesamiento de textos en el procesamiento del lenguaje natural (PLN). En concreto, reducen las formas flexivas de las palabras de un conjunto de datos de texto a una palabra raíz común o forma de diccionario, también conocida como "lema" en lingüística computacional1.
La derivación y la lematización son especialmente útiles en sistemas de recuperación de información como los motores de búsqueda, en los que los usuarios pueden enviar una consulta con una sola palabra (por ejemplo, meditar), pero esperan resultados que utilicen cualquier forma declinada de la palabra (por ejemplo, medita, meditación, etc.). El stemming y la lematización también tienen como objetivo mejorar el procesamiento de texto en algoritmos de machine learning.
Los investigadores debaten si la inteligencia artificial puede razonar, y este debate se ha extendido a la lingüística computacional. ¿Pueden los chatbots y los modelos de deep learning procesar únicamente formas lingüísticas o pueden entender la semántica?2 Independientemente de lo que se opine al respecto, lo cierto es que los modelos de machine learning deben entrenarse para reconocer distintas palabras como variantes morfológicas de una palabra base. Incluso procesar las palabras en función de la morfología, no de la semántica. Al reducir las formas derivadas de las palabras a una raíz, el stemming y la lematización ayudan a los sistemas de recuperación de información y a los modelos de deep learning a equiparar palabras morfológicamente relacionadas.
Para muchas tareas de minería de textos, como la clasificación, agrupación e indexación de textos, entre otras, el stemming y la lematización ayudan a mejorar la precisión al reducir la dimensionalidad de los algoritmos de machine learning y agrupar palabras relacionadas morfológicamente. La reducción de la dimensionalidad de los algoritmos puede, a su vez, mejorar la exactitud y precisión de los modelos estadísticos en el PLN, como los modelos temáticos y los modelos vectoriales de palabras3.
El stemming y la lematización funcionan como una etapa en los procesos de minería de textos que convierten los datos de texto sin procesar en un formato estructurado para su procesamiento automático. Tanto el stemming como la lematización eliminan los afijos de las formas flexivas de las palabras, dejando solo una forma raíz4. Estos procesos consisten en eliminar caracteres del principio y el final de los tokens de palabra. Las raíces resultantes, o palabras base, se transmiten para su posterior procesamiento. Más allá de esta similitud básica, el stemming y la lematización tienen diferencias clave en la forma en que reducen las diferentes formas de una palabra a una forma base común.
Los algoritmos de stemming difieren ampliamente, aunque comparten algunos modos generales de funcionamiento. Los stemmers eliminan los sufijos de las palabras cotejando los tokens de las palabras de entrada con una lista predefinida de sufijos comunes. A continuación, el stemmer elimina de la palabra las cadenas de caracteres sufijo encontradas, en caso de que estas no desafíen ninguna regla o condición asociada a dicho sufijo. Algunos stemmers (por ejemplo, el stemmer de Lovins) pasan los pedacitos resultantes por un conjunto adicional de reglas para corregir las raíces malformadas.
El algoritmo más utilizado es el algoritmo stemming de Porter, y su versión actualizada, el stemmer Snowball. Para entender mejor la lematización, podemos repasar el siguiente pasaje del Hamlet de Shakespeare a través de la lematización Snowball: "No hay nada bueno o malo, pero el pensamiento lo hace así".
El kit de herramientas de lenguaje natural de Python (NLTK) contiene funciones integradas para los stemmers Snowball y Porter. Después de tokenizar la cita de Hamlet utilizando NLTK, podemos pasar el texto tokenizado a través del lematizador Snowball utilizando este código:
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]
print("Original:", text)
print("Tokenized:", words)
print("Stemmed:", stemmed_words)
El código genera:
Original: There is nothing either good or bad but thinking makes it so. Tokenized: ['There', 'is', 'nothing', 'either', 'good', 'or', 'bad', 'but', 'thinking', 'makes', 'it', 'so', '.'] Stemmed: ['there', 'is', 'noth', 'either', 'good', 'or', 'bad', 'but', 'think', 'make', 'it', 'so', '.']
Los algoritmos de Snowball y Porter tienen un método más matemático para eliminar sufijos que otros stemmers. Basta decir que el stemmer compara cada token de palabra con una lista de reglas que especifican las cadenas de sufijos que se deben eliminar en función del número de grupos de vocales y consonantes en un token5. Por supuesto, como la lengua inglesa sigue reglas léxicas generales pero no absolutas, el criterio sistemático del algoritmo de stemming devuelve errores, como noth.
La raíz elimina -ing, siendo una terminación común que indica el presente progresivo. En la cita de Hamlet, sin embargo, al eliminar -ing se obtiene erróneamente la raíz noth. Esto puede impedir que el análisis lingüístico posterior asocie nothing a sustantivos similares, como anything y something. Además, el stemmer deja el verbo irregular is sin cambios. Del mismo modo, el stemmer Snowball deja otras conjugaciones de to be, como was y are, sin raíz. Esto puede impedir que los modelos asocien correctamente las conjugaciones irregulares de un verbo determinado.
La literatura define generalmente el stemming como el proceso de eliminar los afijos de las palabras para obtener cadenas de palabras derivadas, y la lematización como la empresa más amplia de reducir las variantes morfológicas a una forma base del diccionario6. La distinción práctica entre el stemming y la lematización es que, mientras que el stemming simplemente elimina los sufijos comunes del final de los tokens de palabra, la lematización garantiza que la palabra resultante sea una forma normalizada existente de la palabra (por ejemplo, lema) que se puede encontrar en el diccionario7.
Dado que el objetivo de la lematización es obtener las formas base del diccionario, requiere un análisis morfológico más sólido que la separación de palabras. El etiquetado de partes del discurso (POS) es un paso crucial en la lematización. Básicamente, POS asigna cada etiqueta de palabra a su función sintáctica en la oración. El NLTK de Python proporciona una función para el algoritmo de lematización de Word Net, mediante el cual podemos lematizar el pasaje de Hamlet:
from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet
from nltk import word_tokenize, pos_tag
def get_wordnet_pos(tag):
if tag.startswith('J'):
return wordnet.ADJ
elif tag.startswith('V'):
return wordnet.VERB
elif tag.startswith('N'):
return wordnet.NOUN
elif tag.startswith('R'):
return wordnet.ADV
else:
return wordnet.NOUN
def lemmatize_passage(text):
words = word_tokenize(text)
pos_tags = pos_tag(words)
lemmatizer = WordNetLemmatizer()
lemmatized_words = [lemmatizer.lemmatize(word, get_wordnet_pos(tag)) for word, tag in pos_tags]
lemmatized_sentence = ' '.join(lemmatized_words)
return lemmatized_sentence
text = "There is nothing either good or bad but thinking makes it so."
result = lemmatize_passage(text)
print("Original:", text)
print("Tokenized:", word_tokenize(text))
print("Lemmatized:", result)
El código devuelve:
Original: There is nothing either good or bad but thinking makes it so. Tokenized: ['There', 'is', 'nothing', 'either', 'good', 'or', 'bad', 'but', 'thinking', 'makes', 'it', 'so', '.'] Lemmatized: There be nothing either good or bad but think make it so.
El WordNetLemmatizer, al igual que el stemmer Snowball, reduce las conjugaciones verbales a formas básicas, por ejemplo, thinking en think, makes en make. Sin embargo, a diferencia del algoritmo de stemming de Snowball, el lematizador no identifica nothing como un sustantivo y deja su terminación -ing inalterada, mientras que cambia is a su forma base be. De este modo, el lematizador combina de forma más adecuada las formas verbales irregulares.
El stemming y la lematización sirven principalmente para normalizar los datos de texto en inglés. Ambas técnicas de normalización de texto también son compatibles con otras lenguas de escritura latina, como el francés, el alemán y el español. Otras escrituras, como la rusa, son compatibles con el stemmer de Snowball. El desarrollo de algoritmos de stemming y lematización para otros idiomas, en particular el árabe, es un área de investigación reciente y en curso. El árabe es particularmente difícil debido a su morfología aglutinante, variaciones ortográficas y ambigüedad léxica, entre otras características8. En conjunto, estos elementos dificultan la existencia de un método sistemático para identificar las formas de palabras base entre las variantes morfológicas, al menos en comparación con las palabras en inglés.
Más allá de esta limitación general, el stemming y la lematización tienen sus respectivas desventajas. Como se ilustra con el ejemplo de Hamlet, el stemming es un proceso de eliminación de cadenas de caracteres relativamente heurístico y basado en reglas. El overstemming y el understemming son dos errores comunes que surgen. El primero se da cuando dos palabras semánticamente distintas se reducen a la misma raíz (por ejemplo, de news a new); el understemming se da cuando dos palabras relacionadas semánticamente no se reducen a la misma raíz (por ejemplo, knavish y knave a knavish y knave respectivamente)9. Además, el stemming solo elimina sufijos de las palabras y, por lo tanto, no puede tener en cuenta las formas verbales irregulares o los prefijos como hace la lematización. Por supuesto, el stemming es relativamente simple y fácil de aplicar, mientras que la lematización puede ser más costosa en términos de computación y requerir más tiempo, en función del tamaño de los datos procesados.
Diseñe asistentes y agentes de IA escalables con facilidad, automatice tareas repetitivas y simplifique procesos complejos con IBM watsonx Orchestrate.
Acelere el valor empresarial de la inteligencia artificial con una cartera potente y flexible de bibliotecas, servicios y aplicaciones.
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.
1 Nitin Indurkhya y Fred Damerau. Handbook of Natural Language Processing [Manual de procesamiento del lenguaje natural]. 2a edición. CRC Press. 2010.
2 Zhaofeng Wu, Linlu Qiu, Alexis Ross, Ekin Akyürek, Boyuan Chen, Bailin Wang, Najoung Kim, Jacob Andreas, Yoon Kim. "Reasoning or Reciting? Exploring the Capabilities and Limitations of Language Models Through Counterfactual Tasks" [¿Razonamiento o recitación? Exploración de las capacidades y limitaciones de los modelos de lenguaje a través de tareas contrafactuales]. 2023. https://arxiv.org/abs/2307.02477. Gati Aher, Rosa Arriaga, Adam Kalai. "Using Large Language Models to Simulate Multiple Humans and Replicate Human Subject Studies" [Uso de modelos de lenguaje de gran tamaño para simular múltiples humanos y replicar estudios de sujetos humanos]. Proceedings of the 40th International Conference on Machine Learning. PMLR. Vol. 202. 2023. pp. 337-371. https://proceedings.mlr.press/v202/aher23a.html. Emily Bender y Alexander Koller. “Climbing towards NLU: On Meaning, Form and Understanding in the Age of Data” [Acercándonos a la NLU: sobre el significado, la forma y la comprensión en la era de los datos]. Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. 2020. pp. 5185-5198. 10.18653/v1/2020.acl-main.463.
3 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 [Minería de texto práctica y análisis estadístico para aplicaciones de datos de texto no estructurado]. Academic Press. 2012.
4 Christopher Manning y Hinrich Schütze. Foundations of Statistical Natural Language Processing [Fundamentos del procesamiento del lenguaje natural]. MIT Press. 1999.
5 Martin Porter. "An algorithm for suffix stripping" [Un algoritmo para la eliminación de sufijos]. 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. Martin Porter. “Snowball: A language for stemming algorithms” [Snowball: un lenguaje para algoritmos de stemming]. 2001. https://snowballstem.org/texts/introduction.html.
6 Nitin Indurkhya y Fred Damerau. Handbook of Natural Language Processing [Manual de procesamiento del lenguaje natural]. 2a edición. CRC Press. 2010.
Christopher Manning y Hinrich Schütze, Foundations of Statistical Natural Language Processing [Fundamentos del procesamiento del lenguaje natural estadístico]. MIT Press. 1999.
7 Janez Brank, Dunja Mladenic y Marko Grobelnik. “Feature Construction in Text Mining” [Construcción de características en la minería de texto]. Encyclopedia of Machine Learning and Data Mining. Springer. 2017.
8 Abed Alhakim Freihat, Gábor Bella, Mourad Abbas, Hamdy Mubarak y Fausto Giunchiglia. "ALP: An Arabic Linguistic Pipeline" [ALP: un pipeline lingüístico árabe]. Analysis and Application of Natural Language and Speech Processing. 2022. pp. 67-99. https://link.springer.com/chapter/10.1007/978-3-031-11035-1_4. Abdul Jabbar, Sajid Iqbal, Manzoor Ilahi Tamimy, Shafiq Hussain y Adnan Akhunzada. "Empirical evaluation and study of text stemming algorithms" [Evaluación empírica y estudio de algoritmos de stemming de texto]. Artificial Intelligence Review. Vol. 53. 2020. pp. 5559–5588. https://link.springer.com/article/10.1007/s10462-020-09828-3. Abed Alhakim Freihat, Mourad Abbas, G'abor Bella, Fausto Giunchiglia. "Towards an Optimal Solution to Lemmatization in Arabic" [Hacia una solución óptima para la lematización en árabe]. Procedia Computer Science. Vol. 142. 2018. pp. 132-140. https://www.sciencedirect.com/science/article/pii/S1877050918321707?via%3Dihub.
9 Chris Paice. “Stemming”. Encyclopedia of Database Systems. Springer. 2020.