Tokenizzazione nell'elaborazione del linguaggio naturale

Pubblicato: 2020-12-01

Quando si tratta di dati testuali, il passaggio più semplice è tokenizzare il testo. I "token" possono essere considerati come singole parole, frasi o qualsiasi unità minima. Pertanto, spezzare le frasi in unità separate non è altro che tokenizzazione.

Alla fine di questo tutorial, avrai la conoscenza di quanto segue:

  • Cos'è la tokenizzazione
  • Diversi tipi di tokenizzazioni
  • Diversi modi per tokenizzare

La tokenizzazione è il passaggio più fondamentale in una pipeline NLP.

Ma perché?

Queste parole o token vengono successivamente convertiti in valori numerici in modo che il computer possa capirli e dargli un senso. Questi token vengono puliti, pre-elaborati e quindi convertiti in valori numerici mediante i metodi di “Vectorization”. Questi vettori possono quindi essere inviati agli algoritmi di Machine Learning e alle reti neurali.

La tokenizzazione non può essere solo a livello di parola, ma anche a livello di frase. Cioè, il testo può essere tokenizzato con parole come token o frasi come token. Discutiamo di alcuni modi per eseguire la tokenizzazione.

Sommario

Python Split()

La funzione split() di Python restituisce l'elenco dei token divisi dal carattere menzionato. Per impostazione predefinita, divide le parole per spazi.

Tokenizzazione delle parole

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".
Token = Mystr.split()

#Produzione:
>> [ 'Questo' , 'è' , 'a' , 'tokenizzazione' , 'tutorial.' , 'Noi' , 'siamo' , 'apprendimento' , 'diverso' , 'tokenizzazione' , 'metodi' , 'e' , 'modi?' , 'Tokenizzazione' , 'è' , 'essenziale' , 'in' , 'NLP' , 'attività.' ]

Tokenizzazione delle frasi

Lo stesso testo può essere suddiviso in frasi passando il separatore come “.”.

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".

Token = Mystr.split( "." )

#Produzione:
>> [ 'Questo è un tutorial sulla tokenizzazione' , ' Stiamo imparando diversi metodi e modi di tokenizzazione? La tokenizzazione è essenziale nelle attività della PNL' , ]

Anche se questo sembra semplice e diretto, ha molti difetti. E se noti, si divide dopo l'ultimo "." anche. E non considera il "?" come indicatore della frase successiva perché richiede solo un carattere, che è ".".

I dati di testo negli scenari della vita reale sono molto sporchi e non ben inseriti in parole e frasi. Potrebbe essere presente molto testo spazzatura che renderà molto difficile la tokenizzazione in questo modo. Pertanto, andiamo avanti verso modalità di tokenizzazione migliori e più ottimizzate.

Da leggere: le 10 migliori tecniche di deep learning che dovresti conoscere

Espressione regolare

L'espressione regolare (RegEx) è una sequenza di caratteri utilizzata per la corrispondenza con uno schema di caratteri. Usiamo RegEx per trovare determinati schemi, parole o caratteri per sostituirli o per eseguire qualsiasi altra operazione su di essi. Python ha il modulo re che viene utilizzato per lavorare con RegEx. Vediamo come possiamo tokenizzare il testo usando re .

Tokenizzazione delle parole

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".

Token = re.findall( “[\w']+” , Mystr)

#Produzione:
>> [ 'Questo' , 'è' , 'a' , 'tokenizzazione' , 'tutorial' , 'Noi' , 'siamo' , 'apprendimento' , 'diverso' , 'tokenizzazione' , 'metodi' , 'e' , 'modi' , 'Tokenizzazione' , 'è' , 'essenziale' , 'in' , 'NLP' , 'compiti' ]

Allora, cosa è successo qui?

La funzione re.findall() confronta tutte le sequenze che corrispondono ad essa e le memorizza in un elenco. L'espressione “[\w]+” significa che qualsiasi carattere, sia esso alfabetico o numerico o underscore (“_”). Il simbolo “+” indica tutte le occorrenze del pattern. Quindi essenzialmente analizzerà tutti i caratteri e li inserirà nell'elenco come un token quando colpisce uno spazio bianco o qualsiasi altro carattere speciale a parte un trattino basso.

Si prega di notare che la parola "NLP's" è una singola parola, ma la nostra espressione regolare l'ha divisa in "NLP" e "s" a causa dell'apostrofo.

Tokenizzazione delle frasi

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".

Token = re.compile( '[.!?] ' ).split(Mystr)

#Produzione:
>> [ 'Questo è un tutorial sulla tokenizzazione' , 'Stiamo imparando diversi metodi e modi di tokenizzazione' , 'La tokenizzazione è essenziale nelle attività NLP.' ]

Ora, qui abbiamo combinato più caratteri di divisione in un'unica condizione e abbiamo chiamato la funzione re.split. Pertanto, quando colpisce uno di questi 3 caratteri, lo tratterà come una frase separata. Questo è un vantaggio di RegEx rispetto alla funzione di divisione python in cui non è possibile passare più caratteri in cui dividere.

Leggi anche: Applicazioni dell'elaborazione del linguaggio naturale

Tokenizer NLTK

Natural Language Toolkit (NLTK) è una libreria Python specifica per la gestione delle attività NLP. NLTK è costituito da funzioni e moduli integrati che sono realizzati per alcuni processi specifici dell'intera pipeline NLP. Diamo un'occhiata a come NLTK gestisce la tokenizzazione.

Tokenizzazione delle parole

NLTK ha un modulo separato, NLTK.tokenize, per gestire le attività di tokenizzazione. Per la tokenizzazione delle parole, uno dei metodi in cui è composto è word_tokenize.

da nltk.tokenize import word_tokenize

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".
word_tokenize(Mystr)

#Produzione:
>>[ 'Questo' , 'è' , 'a' , 'tokenizzazione' , 'tutorial' , '.' , 'Noi' , 'siamo' , 'apprendimento' , 'diverso' , 'tokenizzazione' , 'metodi' , ',' , 'e' , 'modi' , '?' , 'Tokenizzazione' , 'è' , 'essenziale' , 'in' , 'NLP' , 'attività' , '.' ]

Si noti che word_tokenize considerava i segni di punteggiatura come token separati. Per evitare che ciò accada, dobbiamo rimuovere tutti i segni di punteggiatura e i caratteri speciali prima di questo passaggio stesso.

Tokenizzazione delle frasi

da nltk.tokenize import sent_tokenize

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".
send_tokenize(Mystr)

#Produzione:
>> [ 'Questo è un tutorial sulla tokenizzazione.' , "Stiamo imparando diversi metodi e modalità di tokenizzazione?" , "La tokenizzazione è essenziale nelle attività della PNL". ]

Tokenizer SpaCy

SpaCy è probabilmente una delle librerie più avanzate per le attività di NLP. Consiste nel supporto per quasi 50 lingue. Pertanto il primo passo è scaricare il core per la lingua inglese. Successivamente, dobbiamo importare il modulo inglese che carica tokenizer, tagger, parser, NER e vettori di parole.

Tokenizzazione delle parole

da spacy.lang.en importa l'inglese

nlp = inglese()
Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".
mio_doc = nlp(Mystr)

Gettoni = []
per token in my_doc:
Tokens.append(token.text)
Token

#Produzione:
>> [ 'Questo' , 'è' , 'a' , 'tokenizzazione' , 'tutorial' , '.' , 'Noi' , 'siamo' , 'apprendimento' , 'diverso' , 'tokenizzazione' , 'metodi' , ',' , 'e' , 'modi' , '?' , 'Tokenizzazione' , 'è' , 'essenziale' , 'in' , 'NLP' , “'s” , 'attività' , '.' ]

Qui, quando chiamiamo la funzione nlp con MyStr passato, crea i token di parola per essa. Quindi li indicizziamo e li archiviamo in un elenco separato.

Tokenizzazione delle frasi

da spacy.lang.en importa l'inglese

nlp = inglese()
send_tokenizer = nlp.create_pipe( 'senentizer' )
nlp.add_pipe(sent_tokenizer)

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".

mio_doc = nlp(Mystr)

Inviati = []
per inviato in doc.sents:
Sends.append(sent.text)
Invia

#Produzione:
>> [ 'Questo è un tutorial sulla tokenizzazione.' , "Stiamo imparando diversi metodi e modalità di tokenizzazione?" , "La tokenizzazione è essenziale nelle attività della PNL". ]

Per la tokenizzazione delle frasi, chiama il metodo creat_pipe per creare il componente sentenizer che crea i token delle frasi. Quindi aggiungiamo la pipeline all'oggetto nlp. Quando passiamo la stringa di testo all'oggetto nlp, questa volta crea dei token di frase. Ora possono essere aggiunti a un elenco nello stesso modo dell'esempio precedente.

Tokenizzazione Keras

Keras è attualmente uno dei framework di deep learning più preferiti. Keras offre anche una classe dedicata per le attività di elaborazione del testo: keras.preprocessing.text. Questa classe ha la funzione text_to_word_sequence che crea token a livello di parola dal testo. Diamo una rapida occhiata.

da keras.preprocessing.text import text_to_word_sequence

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".
Token = sequenza_da_testo_a_parola(Mystr)
Token

#Produzione:
>> [ 'questo' , 'è' , 'a' , 'tokenizzazione' , 'tutorial' , 'noi' , 'siamo' , 'apprendimento' , 'diverso' , 'tokenizzazione' , 'metodi' , 'e' , 'modi' , 'tokenizzazione' , 'è' , 'essenziale' , 'in' , “nlp's” , 'compiti' ]

Si noti che ha trattato la parola "PNL" come un singolo token. Inoltre, questo tokenizzatore keras ha ridotto in minuscolo tutti i token, il che è un ulteriore vantaggio.

Gettone Gensim

Gensim è un'altra libreria popolare per la gestione di attività basate sulla NLP e la modellazione degli argomenti. La classe gensim.utils offre un metodo tokenize, che può essere utilizzato per le nostre attività di tokenizzazione.

Tokenizzazione delle parole

da gensim.utils import tokenize
Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".

list(tokenize(Mystr))

#Produzione:
>> [ 'Questo' , 'è' , 'a' , 'tokenizzazione' , 'tutorial' , 'Noi' , 'siamo' , 'apprendimento' , 'diverso' , 'tokenizzazione' , 'metodi' , 'e' , 'modi' , 'Tokenizzazione' , 'è' , 'essenziale' , 'in' , 'NLP' , 's' , 'compiti' ]

Tokenizzazione delle frasi

Per la tokenizzazione delle frasi, utilizziamo il metodo split_sentences della classe gensim.summarization.textcleaner .

da gensim.summarization.textcleaner import split_sentences

Mystr = “Questo è un tutorial sulla tokenizzazione. Stiamo imparando diversi metodi di tokenizzazione e modi? La tokenizzazione è essenziale nelle attività della PNL".

Token = split_sentences( Mystr )
Token

#Produzione:
>> [ 'Questo è un tutorial sulla tokenizzazione.' , "Stiamo imparando diversi metodi e modalità di tokenizzazione?" , "La tokenizzazione è essenziale nelle attività della PNL". ]

Prima che tu vada

In questo tutorial abbiamo discusso vari modi per tokenizzare i dati di testo in base alle applicazioni. Questo è un passaggio essenziale della pipeline NLP, ma è necessario pulire i dati prima di procedere alla tokenizzazione.

Se sei interessato a saperne di più sull'apprendimento automatico e sull'intelligenza artificiale, dai un'occhiata al Diploma PG di IIIT-B e upGrad in Machine Learning e AI, progettato per i professionisti che lavorano e offre oltre 450 ore di formazione rigorosa, oltre 30 casi di studio e incarichi, Status di Alumni IIIT-B, oltre 5 progetti pratici pratici e assistenza sul lavoro con le migliori aziende.

Guida la rivoluzione tecnologica guidata dall'intelligenza artificiale

DIPLOMA PG IN MACHINE LEARNING E INTELLIGENZA ARTIFICIALE
Per saperne di più