Lo stemming e la lemmatizzazione sono tecniche di pre-elaborazione del testo che riducono le varianti delle parole a un'unica forma base.
Lo stemming e la lemmatizzazione sono tecniche di pre-elaborazione del testo nell' elaborazione del linguaggio naturale (NLP). Nello specifico, riducono le forme flesse delle parole in un set di dati di testo a una radice comune o forma base, nota anche come "lemma" nella linguistica computazionale.1
Lo stemming e la lemmatizzazione sono particolarmente utili nei sistemi di recupero delle informazioni come i motori di ricerca, in cui gli utenti possono inviare una query con una parola (ad esempio, meditare) ma aspettarsi risultati che utilizzano qualsiasi forma flessa della parola (ad esempio, medita, meditazione, ecc.). Lo stemming e la lemmatizzazione mirano ulteriormente a migliorare l'elaborazione del testo negli algoritmi di machine learning.
I ricercatori discutono se l'intelligenza artificiale sia in grado di ragionare, e questo dibattito si è esteso alla linguistica computazionale. I chatbot e i modelli di deep learning possono elaborare solo forme linguistiche o sono in grado di comprendere la semantica?2 Qualunque sia la propria opinione a riguardo, resta comunque il fatto che i modelli di machine learning devono essere addestrati a riconoscere parole diverse come varianti morfologiche di una parola base. Anche a elaborare le parole in base alla morfologia, non alla semantica. Riducendo le forme derivate delle parole a un'unica radice, lo stemming e la lemmatizzazione aiutano i sistemi di recupero delle informazioni e i modelli di deep learning a equiparare parole morfologicamente correlate.
Per molte attività di text mining, tra cui classificazione del testo, clustering, indicizzazione e altro, lo stemming e la lemmatizzazione aiutano a migliorare la precisione riducendo la dimensionalità degli algoritmi di machine learning e raggruppando parole morfologicamente correlate. La riduzione della dimensionalità dell'algoritmo può, a sua volta, migliorare l'accuratezza e la precisione dei modelli statistici nell'NLP, come i modelli di argomenti e i modelli di vettori di parole.3
Lo stemming e la lemmatizzazione costituiscono una fase delle pipeline di text mining che convertono i dati di testo non elaborati in un formato strutturato per l'elaborazione automatica. Sia la derivazione che la lemmatizzazione eliminano gli affissi dalle forme flesse delle parole, lasciando solo la radice.4 Questi processi consistono nella rimozione di caratteri dall'inizio e dalla fine dei token delle parole. Le radici risultanti, o parole base, vengono quindi trasmesse per un'ulteriore elaborazione. Oltre a questa somiglianza di base, lo stemming e la lemmatizzazione presentano differenze fondamentali nel modo in cui riducono le diverse forme di una parola a una forma base comune.
Gli algoritmi di stemming differiscono notevolmente, sebbene condividano alcune modalità generali di funzionamento. Gli stemmer eliminano i suffissi delle parole confrontando i token delle parole in ingresso con un elenco predefinito di suffissi comuni. Lo stemmer rimuove quindi qualsiasi stringa di caratteri del suffisso trovato dalla parola, a condizione che quest'ultima non contravvenga a nessuna regola o condizione associata a quel suffisso. Alcuni stemmer (ad esempio, lo stemmer di Lovins) applicano i bit sottoposti a stemming risultanti a un ulteriore insieme di regole per correggere le radici malformate.
L'algoritmo più utilizzato è l'algoritmo di stemming Porter e la sua versione aggiornata è lo stemmer Snowball. Per capire meglio lo stemming, possiamo analizzare il seguente passaggio dell'Amleto di Shakespeare attraverso lo stemmer Snowball: "There is nothing either good or bad but thinking makes it so".
Il Natural Language Toolkit (NLTK) di Python contiene funzioni integrate per gli stemmer Snowball e Porter. Dopo aver tokenizzato la citazione dell'Amleto utilizzando l'NLTK, possiamo passare il testo tokenizzato attraverso lo stemmer Snowball utilizzando questo codice:
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)
L'output del codice è il seguente:
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', '.']
Gli algoritmi stemmer Snowball e Porter hanno un metodo più matematico per eliminare i suffissi rispetto ad altri stemmer. Basta dire che lo stemmer confronta ogni token di parola con un elenco di regole che specificano le stringhe di suffissi da rimuovere in base al numero di gruppi di vocali e consonanti presenti in un token.5 Naturalmente, poiché la lingua inglese segue regole lessicali generali ma non assolute, il criterio sistematico dell'algoritmo di stemming restituisce errori, ad esempio noth.
Lo stemmer rimuove -ing, essendo un suffisso comune che indica il presente progressivo. Nella citazione dell'Amleto, tuttavia, la rimozione di -ing produce erroneamente la radice noth. Ciò può impedire che un'analisi linguistica associ nothing a sostantivi simili, come anything e something. Inoltre, lo stemmer lascia invariato il verbo irregolare is. Lo Snowball stemmer lascia invariati anche altre coniugazioni di to be, come was e are. Ciò può impedire ai modelli di associare correttamente le coniugazioni irregolari di un dato verbo.
Generalmente, la letteratura definisce lo stemming come il processo di rimozione degli affissi dalle parole per ottenere stringhe di parole ridotte alla radice e la lemmatizzazione come l'operazione più ampia di ridurre le varianti morfologiche a una forma base del dizionario.6 La distinzione pratica tra stemming e lemmatizzazione è che, mentre lo stemming rimuove semplicemente i suffissi comuni dalla fine dei token delle parole, la lemmatizzazione garantisce che la parola di output sia una forma normalizzata esistente della parola (ad esempio, lemma) che può essere trovata nel dizionario.7
Poiché la lemmatizzazione mira a produrre forme base del dizionario, richiede un'analisi morfologica più solida rispetto allo stemming. L'etichettatura Part of speech (POS) è un passaggio cruciale nella lemmatizzazione. Il POS assegna essenzialmente a ogni parola un'etichetta che indica la sua funzione sintattica nella frase. NLTK di Python fornisce una funzione per l'algoritmo di lemmatizzazione di Word Net, mediante il quale possiamo lemmatizzare il passaggio dell'Amleto:
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)
Il codice restituisce:
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 .
Il WordNetLemmatizer, proprio come lo stemmer Snowball, riduce le coniugazioni dei verbi alle forme base, ad esempio thinking a think, makes a make. Tuttavia, a differenza dell'algoritmo di stemming Snowball, il lemmatizzatore identifica nothing come un sostantivo e lascia appropriatamente inalterata la sua desinenza -ing, mentre modifica ulteriormente is nella sua forma base be. In questo modo, il lemmatizzatore unisce in modo più appropriato le forme irregolari dei verbi.
Lo stemming e la lemmatizzazione supportano principalmente la normalizzazione dei dati di testo in lingua inglese. Entrambe le tecniche di normalizzazione del testo supportano anche altre lingue con caratteri latini, come il francese, il tedesco e lo spagnolo. Altri alfabeti, come quello russo, sono ulteriormente supportati dallo stemmer Snowball. Lo sviluppo di algoritmi di stemming e lemmatizzazione per altre lingue, in particolare l'arabo, è un'area di ricerca recente e in corso. L'arabo è particolarmente impegnativo a causa della sua morfologia agglutinante, delle variazioni ortografiche e dell'ambiguità lessicale, tra le altre caratteristiche.8 In generale, tali elementi mettono in discussione un metodo sistematico per identificare le forme base delle parole tra le varianti morfologiche, almeno se confrontate con le parole inglesi.
Al di là di questa limitazione generale, lo stemming e la lemmatizzazione hanno i loro rispettivi svantaggi. Come illustrato con l'esempio dell'Amleto, lo stemming è un processo relativamente euristico, basato su regole, di rimozione di stringhe di caratteri. L'over-stemming e l'under-stemming sono due errori comuni che possono presentarsi. Il primo si ha quando due parole semanticamente distinte vengono ridotte alla stessa radice (ad esempio, news a new); l'under-stemming si verifica quando due parole semanticamente correlate non vengono ridotte alla stessa radice (ad esempio, knavish e knave a knavish e knave rispettivamente).9 Inoltre, lo stemming elimina solo i suffissi dalle parole e quindi non può tenere conto delle forme verbali irregolari o dei prefissi, come fa la lemmatizzazione. Naturalmente, lo stemming è relativamente semplice e immediato da implementare, mentre la lemmatizzazione può essere più onerosa dal punto di vista computazionale e richiede molto tempo, a seconda delle dimensioni dei dati elaborati.
Progetta facilmente assistenti e agenti di AI scalabili, automatizza le attività ripetitive e semplifica i processi complessi con IBM watsonx Orchestrate.
Accelera il valore aziendale dell'intelligenza artificiale con un portfolio potente e flessibile di librerie, servizi e applicazioni.
Reinventa i flussi di lavoro e le operazioni critiche aggiungendo l'AI per massimizzare le esperienze, il processo decisionale in tempo reale e il valore di business.
IBM Granite è la nostra famiglia di modelli AI aperti, efficienti e affidabili, su misura per le aziende e ottimizzati per scalare le applicazioni di AI. Esplora le opzioni di linguaggio, codice, serie temporali e guardrail.
Scopri come l'elaborazione del linguaggio naturale può aiutarti a conversare in modo più naturale con i computer.
Abbiamo intervistato 2.000 organizzazioni in merito alle loro iniziative di AI per scoprire cosa funziona, cosa non funziona e come giocare d'anticipo.
Esplora il sito web di IBM Developer per accedere a blog, articoli, newsletter e per saperne di più sull'AI incorporabile di IBM.
Impara i concetti fondamentali e sviluppa le tue competenze con laboratori pratici, corsi, progetti guidati, prove e molto altro.
1 Nitin Indurkhya and Fred Damerau, Handbook of Natural Language Processing, 2nd edition, 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", 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", Proceedings of the 40th International Conference on Machine Learning, PMLR, Vol. 202, 2023, pagg. 337-371, https://proceedings.mlr.press/v202/aher23a.html. Emily Bender e Alexander Koller, "Climbing towards NLU: On Meaning, Form and Understanding in the Age of Data", Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics, 2020, pagg. 5185-5198, 10.18653/v1/2020.acl-main.463.
3 Gary Miner, Dursun Delen, John Elder, Andrew Fast, Thomas Hill, and Robert A. Nisbet, Practical Text Mining and Statistical Analysis for Non-Structured Text Data Applications, Academic Press, 2012.
4 Christopher Manning e Hinrich Schütze, Foundations of Statistical Natural Language Processing, MIT Press, 1999.
5 Martin Porter, "An algorithm for suffix stripping", Program: electronic library and information systems, Vol. 14, n. 3, 1980, pagg. 130-137, https://www.emerald.com/insight/content/doi/10.1108/eb046814/full/html. Martin Porter, "Snowball: A language for stemming algorithms", 2001, https://snowballstem.org/texts/introduction.html.
6 Nitin Indurkhya and Fred Damerau, Handbook of Natural Language Processing, 2nd edition, CRC Press, 2010. Christopher Manning and Hinrich Schütze, Foundations of Statistical Natural Language Processing, MIT Press, 1999.
7 Janez Brank, Dunja Mladenic and Marko Grobelnik, “Feature Construction in Text Mining,” Encyclopedia of Machine Learning and Data Mining, Springer, 2017.
8 Abed Alhakim Freihat, Gábor Bella, Mourad Abbas, Hamdy Mubarak, and Fausto Giunchiglia, "ALP: An Arabic Linguistic Pipeline," 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 and Adnan Akhunzada, "Empirical evaluation and study of text stemming algorithms," Artificial Intelligence Review, Vol. 53, 2020, pag. 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", Procedia Computer Science, Vol. 142, 2018, pag. 132-140, https://www.sciencedirect.com/science/article/pii/S1877050918321707?via%3Dihub.
9 Chris Paice, “Stemming,” Encyclopedia of Database Systems, Springer, 2020.