Tokenizarea în procesarea limbajului natural

Publicat: 2020-12-01

Când aveți de-a face cu date textuale, cel mai de bază pas este tokenizarea textului. „Jetoanele” pot fi considerate cuvinte individuale, propoziții sau orice unitate minimă. Prin urmare, împărțirea propozițiilor în unități separate nu este altceva decât tokenizare.

Până la sfârșitul acestui tutorial, veți cunoaște următoarele:

  • Ce este tokenizarea
  • Diferite tipuri de tokenizări
  • Diferite moduri de tokenizare

Tokenizarea este cel mai fundamental pas într-o conductă NLP.

Dar de ce este asta?

Aceste cuvinte sau jetoane sunt ulterior convertite în valori numerice, astfel încât computerul să poată înțelege și să le dea sens. Aceste jetoane sunt curățate, preprocesate și apoi convertite în valori numerice prin metodele de „Vectorizare”. Acești vectori pot fi apoi alimentați algoritmilor de învățare automată și rețelelor neuronale.

Tokenizarea nu poate fi doar la nivel de cuvânt, ci și la nivel de propoziție. Adică, textul poate fi fie tokenizat cu cuvinte ca simboluri, fie cu propoziții ca simboluri. Să discutăm câteva moduri de a efectua tokenizarea.

Cuprins

Python Split()

Funcția split() din Python returnează lista de jetoane împărțite de caracterul menționat. În mod implicit, împarte cuvintele prin spații.

Tokenizarea cuvintelor

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”
Jetoane = Mystr.split()

#Ieșire:
>> [ „Acesta” , „este” , „a” , „tokenizare” , „tutorial”. , „Noi” , „suntem” , „învățăm” , „diferiți” , „tokenizare” , „metode” , „și” , „căi?” , „Tokenizare” , „este” , „esențial” , „în” , „NLP” , „sarcini”. ]

Tokenizare propoziție

Același text poate fi împărțit în propoziții trecând separatorul ca „.”.

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”

Jetoane = Mystr.split( „.” )

#Ieșire:
>> [ „Acesta este un tutorial de tokenizare” , „Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP , ]

Deși pare simplu și simplu, are o mulțime de defecte. Și dacă observi, se împarte după ultimul „.” de asemenea. Și nu ia în considerare „?” ca un indicator al următoarei propoziții, deoarece ia doar un caracter, care este „.”.

Datele text din scenariile din viața reală sunt foarte murdare și nu sunt bine plasate în cuvinte și propoziții. Este posibil să fie prezent o mulțime de text gunoi, ceea ce vă va face foarte dificil să vă tokenizați în acest fel. Prin urmare, să mergem mai departe către modalități mai bune și mai optimizate de tokenizare.

Trebuie să citiți: Top 10 tehnici de învățare profundă pe care ar trebui să le cunoașteți

Expresie uzuala

Expresia regulată (RegEx) este o secvență de caractere care sunt utilizate pentru a se potrivi cu un model de caractere. Folosim RegEx pentru a găsi anumite modele, cuvinte sau caractere pentru a le înlocui sau pentru a face orice altă operație asupra lor. Python are modulul re care este folosit pentru lucrul cu RegEx. Să vedem cum putem tokeniza textul folosind re .

Tokenizarea cuvintelor

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”

Jetoane = re.findall( „[\w']+” , Mystr)

#Ieșire:
>> [ „Acesta” , „este” , „a” , „tokenizare” , „tutorial” , „Noi” , „sunt” , „învățare” , „diferit” , „tokenizare” , „metode” , „și” , „căi” , „Tokenizare” , „este” , „esențial” , „în” , „NLP” , „sarcini” ]

Deci, ce sa întâmplat aici?

Funcția re.findall() se potrivește cu toate secvențele care se potrivesc cu ea și le stochează într-o listă. Expresia „[\w]+” înseamnă că orice caracter – fie că este vorba de alfabete sau numere sau caractere de subliniere („_”). Simbolul „+” înseamnă toate aparițiile modelului. Deci, în esență, va scana toate caracterele și le va pune în listă ca un simbol atunci când atinge un spațiu alb sau orice alt caracter special în afară de un caracter de subliniere.

Vă rugăm să rețineți că cuvântul „NLP” este un singur cuvânt, dar expresia noastră regex l-a împărțit în „NLP” și „s” din cauza apostrofului.

Tokenizare propoziție

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”

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

#Ieșire:
>> [ 'Acesta este un tutorial de tokenizare' , 'Învățăm diferite metode și moduri de tokenizare' , 'Tokenizarea este esențială în sarcinile NLP.' ]

Acum, aici am combinat mai multe caractere de împărțire într-o singură condiție și am numit funcția re.split. Prin urmare, atunci când lovește oricare dintre aceste 3 caractere, îl va trata ca pe o propoziție separată. Acesta este un avantaj al RegEx față de funcția de împărțire python în care nu puteți trece mai multe caractere pentru a le împărți.

Citește și: Aplicații ale procesării limbajului natural

Tokenizatoare NLTK

Natural Language Toolkit (NLTK) este o bibliotecă Python special pentru gestionarea sarcinilor NLP. NLTK constă din funcții și module încorporate care sunt realizate pentru unele procese specifice ale întregii conducte NLP. Să aruncăm o privire la modul în care NLTK gestionează tokenizarea.

Tokenizarea cuvintelor

NLTK are un modul separat, NLTK.tokenize, pentru a gestiona sarcinile de tokenizare. Pentru tokenizarea cuvintelor, una dintre metodele din care constă este word_tokenize.

din nltk.tokenize import word_tokenize

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”
word_tokenize(Mystr)

#Ieșire:
>>[ „Acesta” , „este” , „a” , „tokenizare” , „tutorial” , „.' , „Noi” , „suntem” , „învățăm” , „diferiți” , „tokenizare” , „metode” , „,” , „și” , „căi” , „?” , „Tokenizare” , „este” , „esențial” , „în” , „NLP” , „sarcini” , „.' ]

Vă rugăm să rețineți că word_tokenize a considerat semnele de punctuație ca simboluri separate. Pentru a preveni acest lucru, trebuie să eliminăm toate semnele de punctuație și caracterele speciale înainte de acest pas în sine.

Tokenizare propoziție

din nltk.tokenize import sent_tokenize

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”
send_tokenize(Mystr)

#Ieșire:
>> [ 'Acesta este un tutorial de tokenizare.' , „Învățăm diferite metode și moduri de tokenizare?” , „Tokenizarea este esențială în sarcinile NLP”. ]

Tokenizatoare SpaCy

SpaCy este probabil una dintre cele mai avansate biblioteci pentru sarcini NLP. Constă în suport pentru aproape 50 de limbi. Prin urmare, primul pas este descărcarea de bază pentru limba engleză. Apoi, trebuie să importăm modulul englez care încarcă tokenizer, tagger, parser, NER și vectori de cuvinte.

Tokenizarea cuvintelor

din spacy.lang.en import engleză

nlp = engleză ()
Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”
my_doc = nlp(Mystr)

Jetoane = []
pentru token în my_doc:
Tokens.append(token.text)
Jetoane

#Ieșire:
>> [ 'Acesta' , 'este' , 'a' , 'tokenizare' , 'tutorial' , '.' , „Noi” , „suntem” , „învățăm” , „diferiți” , „tokenizare” , „metode” , „,” , „și” , „căi” , „?” , „Tokenizare” , „este” , „esențial” , „în” , „NLP” , „e” , „sarcini” , „.' ]

Aici, când apelăm funcția nlp cu MyStr trecut, creează cuvântul tokens pentru aceasta. Apoi le indexăm și le stocăm într-o listă separată.

Tokenizare propoziție

din spacy.lang.en import engleză

nlp = engleză ()
sent_tokenizer = nlp.create_pipe( 'sentencizer' )
nlp.add_pipe(sent_tokenizer)

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”

my_doc = nlp(Mystr)

Trimiteri = []
pentru trimis în doc.sents:
Sents.append(trimis.text)
Trimite

#Ieșire:
>> [ 'Acesta este un tutorial de tokenizare.' , „Învățăm diferite metode și moduri de tokenizare?” , „Tokenizarea este esențială în sarcinile NLP.” ]

Pentru tokenizarea propoziției, apelați metoda creat_pipe pentru a crea componenta sentencizer care creează simboluri de propoziție. Apoi adăugăm conducta la obiectul nlp. Când trecem șirul de text către obiectul nlp, acesta creează simboluri de propoziție pentru acesta de data aceasta. Acum pot fi adăugate la o listă în același mod ca în exemplul anterior.

Tokenizare Keras

Keras este unul dintre cele mai preferate cadre de învățare profundă în prezent. Keras oferă, de asemenea, o clasă dedicată sarcinilor de procesare a textului – keras.preprocessing.text. Această clasă are funcția text_to_word_sequence care creează simboluri la nivel de cuvânt din text. Să aruncăm o privire rapidă.

din keras.preprocessing.text import text_to_word_sequence

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”
Tokens = text_to_word_sequence(Mystr)
Jetoane

#Ieșire:
>> [ 'acest' , 'este' , 'a' , 'tokenizare' , 'tutorial' , 'noi' , 'suntem' , 'invatare' , 'diferit' , 'tokenizare' , 'metode' , 'si' , „căi” , „tokenizare” , „este” , „esențial” , „în” , „nlp” , „sarcini” ]

Vă rugăm să rețineți că a tratat cuvântul „NLP” ca un singur simbol. În plus, acest tokenizer Keras a redus toate jetoanele cu litere mici, ceea ce este un bonus suplimentar.

Gensim Tokenizer

Gensim este o altă bibliotecă populară pentru gestionarea sarcinilor bazate pe NLP și modelarea subiectelor. Clasa gensim.utils oferă o metodă tokenize, care poate fi folosită pentru sarcinile noastre de tokenizare.

Tokenizarea cuvintelor

din gensim.utils import tokenize
Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”

listă(tokenize(Mystr))

#Ieșire:
>> [ „Acesta” , „este” , „a” , „tokenizare” , „tutorial” , „Noi” , „sunt” , „învățare” , „diferit” , „tokenizare” , „metode” , „și” , „căi” , „Tokenizare” , „este” , „esențial” , „în” , „NLP” , „s” , „sarcini” ]

Tokenizare propoziție

Pentru tokenizarea propoziției, folosim metoda split_sentences din clasa gensim.summarization.textcleaner .

din gensim.summarization.textcleaner import split_sentences

Mystr = „Acesta este un tutorial de tokenizare. Învățăm diferite metode și moduri de tokenizare? Tokenizarea este esențială în sarcinile NLP.”

Tokens = split_sentences( Mystr )
Jetoane

#Ieșire:
>> [ 'Acesta este un tutorial de tokenizare.' , „Învățăm diferite metode și moduri de tokenizare?” , „Tokenizarea este esențială în sarcinile NLP.” ]

Inainte sa pleci

În acest tutorial am discutat despre diferite moduri de a vă tokeniza datele text pe baza aplicațiilor. Acesta este un pas esențial al conductei NLP, dar este necesar să curățați datele înainte de a trece la tokenizare.

Dacă sunteți interesat să aflați mai multe despre învățarea automată și inteligența artificială, consultați Diploma PG în Învățare automată și inteligență artificială a IIIT-B și upGrad, care este concepută pentru profesioniști care lucrează și oferă peste 450 de ore de pregătire riguroasă, peste 30 de studii de caz și sarcini, Statut de absolvenți IIIT-B, peste 5 proiecte practice practice și asistență pentru locuri de muncă cu firme de top.

Conduceți revoluția tehnologică condusă de inteligența artificială

PG DIPLOMĂ ÎN ÎNVĂŢAREA MACHINĂ ŞI INTELIGENTĂ ARTIFICIALĂ
Aflați mai multe