Etichetarea POS cu NLTK și Chunking în NLP [EXEMPLE]
Etichetarea POS
Etichetarea POS (Etichetarea părților de vorbire) este un proces de marcare a cuvintelor în format text pentru o anumită parte a discursului, pe baza definiției și contextului acesteia. Este responsabil pentru citirea textului într-o limbă și alocarea unui anumit simbol (părți de vorbire) fiecărui cuvânt. Se mai numește și etichetare gramaticală.
Să învățăm cu un exemplu NLTK Part of Speech:
Intrare: Totul pentru a ne permite.
ieșire: [(„Totul”, NN),(„către”, TO), („permis”, VB), („noi”, PRP)]
Pași implicați în exemplul de etichetare POS
- Tokenizare text (word_tokenize)
- aplicați pos_tag la pasul de mai sus care este nltk.pos_tag(tokenize_text)
Exemplele de etichete NLTK POS sunt următoarele:
Abreviere | Sens |
---|---|
CC | conjuctie coordonatoare |
CD | cifră cardinală |
DT | determinant |
EX | existențială acolo |
FW | cuvânt străin |
IN | prepoziţie/conjuncţie de subordonare |
JJ | Această etichetă POS NLTK este un adjectiv (mare) |
JJR | adjectiv, comparativ (mai mare) |
JJS | adjectiv, superlativ (cel mai mare) |
LS | piața de listă |
MD | modal (ar putea, va) |
NN | substantiv, singular (pisica, copac) |
NNS | substantiv plural (birouri) |
NNP | substantiv propriu, singular (sarah) |
NNPS | substantiv propriu, plural (indieni sau americani) |
PDT | predeterminator (tot, ambele, jumătate) |
POS | terminație posesivă (părinte) |
PRP | pronume personal (a ei, ea însăși, el, el însuși) |
PRP$ | pronume posesiv (ea, a lui, a mea, a mea, a noastră) |
RB | adverb (ocazional, rapid) |
extensia RBR | adverb, comparativ (mai mare) |
RBS | adverb, superlativ (cel mai mare) |
RP | particulă (aproximativ) |
LA | marker infinit (la) |
UH | interjecție (la revedere) |
VB | verb (a intreba) |
GBV | verb gerunziu (a judeca) |
VBD | verbul trecut (a pledat) |
VBN | verb participiu trecut (reunificat) |
VBP | verb, timpul prezent nu persoana a 3-a singular (înfășurare) |
VBZ | verb, timpul prezent cu persoana a 3-a singular (baze) |
WDT | determinant wh (care, ce) |
WP | wh- pronume (cine) |
WRB | wh- adverb (cum) |
Lista de etichete NLTK POS de mai sus conține toate etichetele NLTK POS. Etichetatorul NLTK POS este folosit pentru a atribui informații gramaticale fiecărui cuvânt din propoziție. Instalarea, importarea și descărcarea tuturor pachetelor POS NLTK este completă.
Ce este Chunking în NLP?
chunking în NLP este un proces prin care se iau mici informații și le grupează în unități mari. Utilizarea principală a Chunking este formarea de grupuri de „expresii substantive”. Este folosit pentru a adăuga o structură propoziției urmând etichetarea POS combinată cu expresii regulate. Grupul de cuvinte rezultat se numește „bucăți”. Se mai numește și analiza superficială.
În analiza superficială, există maximum un nivel între rădăcini și frunze, în timp ce analiza profundă cuprinde mai mult de un nivel. Analiza superficială se mai numește și parsare ușoară sau fragmentare.
Reguli pentru Chunking
Nu există reguli predefinite, dar le puteți combina în funcție de necesități și cerințe.
De exemplu, trebuie să etichetați substantivul, verbul (timpul trecut), adjectivul și joncțiunea de coordonare din propoziție. Puteți folosi regula ca mai jos
bucată mare:{ * * * ?}
Următorul tabel arată ce înseamnă diferitele simboluri:
Numele simbolului | Descriere |
---|---|
. | Orice caracter, cu excepția liniei noi |
* | Potriviți 0 sau mai multe repetări |
? | Potriviți 0 sau 1 repetări |
Acum să scriem codul pentru a înțelege mai bine regula
from nltk import pos_tag from nltk import RegexpParser text ="learn php from guru99 and make study easy".split() print("After Split:",text) tokens_tag = pos_tag(text) print("After Token:",tokens_tag) patterns= """mychunk:{<NN.?>*<VBD.?>*<JJ.?>*<CC>?}""" chunker = RegexpParser(patterns) print("After Regex:",chunker) output = chunker.parse(tokens_tag) print("After Chunking",output)
ieșire:
After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy'] After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')] After Regex: chunk.RegexpParser with 1 stages: RegexpChunkParser with 1 rules: <ChunkRule: '<NN.?>*<VBD.?>*<JJ.?>*<CC>?'> After Chunking (S (mychunk learn/JJ) (mychunk php/NN) from/IN (mychunk guru99/NN and/CC) make/VB (mychunk study/NN easy/JJ))
Concluzia din partea de mai sus a etichetării vorbirii Python exemplu: „make” este un verb care nu este inclus în regulă, deci nu este etichetat ca mychunk
Cazul de utilizare al fragmentării
Chunking este folosit pentru detectarea entităților. O entitate este acea parte a propoziției prin care mașina obține valoarea pentru orice intenție.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
Cu alte cuvinte, fragmentarea este folosită ca selectare a subseurilor de jetoane. Vă rugăm să urmați codul de mai jos pentru a înțelege cum se utilizează fragmentarea pentru a selecta jetoanele. În acest exemplu, veți vedea graficul care va corespunde unei părți dintr-o frază nominală. Vom scrie codul și vom desena graficul pentru o mai bună înțelegere.
Cod pentru a demonstra cazul de utilizare
import nltk text = "learn php from guru99" tokens = nltk.word_tokenize(text) print(tokens) tag = nltk.pos_tag(tokens) print(tag) grammar = "NP: {<DT>?<JJ>*<NN>}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking
ieșire:
['learn', 'php', 'from', 'guru99'] -- These are the tokens [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')] -- These are the pos_tag (S (NP learn/JJ php/NN) from/IN (NP guru99/NN)) -- Noun Phrase Chunking
Grafic
Din grafic, putem concluziona că „learn” și „guru99” sunt două simboluri diferite, dar sunt clasificate drept Expresie substantivală, în timp ce simbolul „de la” nu aparține Expresiei substantivale.
Chunking este folosit pentru a clasifica diferite jetoane în aceeași bucată. Rezultatul va depinde de gramatica care a fost selectată. Further Chunking NLTK este folosit pentru a eticheta modele și pentru a explora corpuri de text.
NUMĂRARE Etichete POS
Am discutat despre diverse pos_tag în secțiunea anterioară. În acest tutorial special, veți studia cum să numărați aceste etichete. Numărarea etichetelor este crucială pentru clasificarea textului, precum și pentru pregătirea caracteristicilor pentru operațiunile bazate pe limbajul natural. Voi discuta cu dumneavoastră despre abordarea pe care a urmat-o guru99 în timpul pregătirii codului, împreună cu o discuție despre rezultate. Sper că acest lucru vă va ajuta.
Cum se numără etichetele:
Aici vom scrie mai întâi codul de lucru și apoi vom scrie diferiți pași pentru a explica codul.
from collections import Counter import nltk text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online." lower_case = text.lower() tokens = nltk.word_tokenize(lower_case) tags = nltk.pos_tag(tokens) counts = Counter( tag for word, tag in tags) print(counts)
ieșire:
Contor({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1 , „DT”: 1, „JJS”: 1, „JJ”: 1, „JJR”: 1, „IN”: 1, „VB”: 1, „RB”: 1})
Elaborarea codului
- Pentru a număra etichetele, puteți folosi pachetul Counter din modulul colecției. Un contor este o subclasă de dicționar care funcționează pe principiul operațiunii cheie-valoare. Este o colecție neordonată în care elementele sunt stocate ca o cheie de dicționar, în timp ce numărul este valoarea lor.
- Importați nltk care conține module pentru tokenizarea textului.
- Scrieți textul al cărui post_tag doriți să îl numărați.
- Unele cuvinte sunt cu majuscule, iar altele cu litere mici, deci este potrivit să transformați toate cuvintele cu litere mici înainte de a aplica tokenizarea.
- Treceți cuvintele prin word_tokenize din nltk.
- Calculați pos_tag-ul fiecărui jeton
Output = [('guru99', 'NN'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('best', 'JJS'), ('site', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('web', 'NN'), (',', ','), ('sap', 'NN'), (',', ','), ('ethical', 'JJ'), ('hacking', 'NN'), ('and', 'CC'), ('much', 'RB'), ('more', 'JJR'), ('online', 'JJ')]
- Acum vine rolul de contor de dicționar. Am importat în linia de cod 1. Cuvintele sunt cheia și etichetele sunt valoarea și contorul va număra fiecare număr total de etichete prezent în text.
Distribuția de frecvență
Distribuția de frecvență este denumită numărul de ori când apare un rezultat al unui experiment. Este folosit pentru a găsi frecvența fiecărui cuvânt care apare într-un document. Folosește FreqDistclass și definit de nltk.probabilitatea modul.
O distribuție de frecvență este de obicei creată prin numărarea eșantioanelor derulate în mod repetat a experimentului. Numărul de contorizări este crescut cu unul, de fiecare dată. De exemplu
freq_dist = FreqDist()
pentru simbolul din document:
freq_dist.inc(token.type())
Pentru orice cuvânt, putem verifica de câte ori a apărut într-un anumit document. De exemplu
- Metoda de numărare: freq_dist.count('and')Această expresie returnează valoarea de câte ori a apărut 'şi'. Se numește metoda numărării.
- Metoda de frecvență: freq_dist.freq('și') Aceasta expresie returnează frecvența unui eșantion dat.
Vom scrie un mic program și vom explica în detaliu funcționarea acestuia. Vom scrie ceva text și vom calcula distribuția de frecvență a fiecărui cuvânt din text.
import nltk a = "Guru99 is the site where you can find the best tutorials for Software Testing Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please visit the site guru99.com and much more." words = nltk.tokenize.word_tokenize(a) fd = nltk.FreqDist(words) fd.plot()
Explicația codului:
- Importă modulul nltk.
- Scrieți textul a cărui distribuție a cuvintelor trebuie să găsiți.
- Tokenizați fiecare cuvânt din text care este servit ca intrare în modulul FreqDist al nltk.
- Aplicați fiecare cuvânt la nlk.FreqDist sub forma unei liste
- Trasează cuvintele din grafic folosind plot()
Vă rugăm să vizualizați graficul pentru o mai bună înțelegere a textului scris
NOTĂ: Trebuie să aveți instalat matplotlib pentru a vedea graficul de mai sus
Observați graficul de mai sus. Ea corespunde numărării apariției fiecărui cuvânt din text. Ajută în studiul textului și în continuare la implementarea analizei sentimentale bazate pe text. Pe scurt, se poate concluziona că nltk are un modul pentru numărarea apariției fiecărui cuvânt din text, care ajută la pregătirea statisticilor caracteristicilor limbajului natural. Joacă un rol important în găsirea cuvintelor cheie în text. De asemenea, puteți extrage textul din pdf folosind biblioteci precum extract, PyPDF2 și puteți alimenta textul la nlk.FreqDist.
Termenul cheie este „tokenizare”. După tokenizare, verifică fiecare cuvânt dintr-un anumit paragraf sau document text pentru a determina numărul de ori a apărut. Nu aveți nevoie de setul de instrumente NLTK pentru aceasta. Puteți face acest lucru și cu propriile abilități de programare Python. Setul de instrumente NLTK oferă doar un cod gata de utilizare pentru diferitele operațiuni.
Numărarea fiecărui cuvânt poate să nu fie foarte utilă. În schimb, ar trebui să se concentreze pe alocarea și bigramele care se ocupă cu o mulțime de cuvinte dintr-o pereche. Aceste perechi identifică cuvinte cheie utile pentru caracteristici mai bune ale limbajului natural care pot fi alimentate mașinii. Vă rugăm să căutați mai jos detaliile lor.
Colocații: bigrame și trigrame
Ce este Colocations?
Colocările sunt perechile de cuvinte care apar împreună de mai multe ori într-un document. Se calculează prin numărul de perechi care apar împreună cu numărul total de cuvinte din document.
Luați în considerare spectrul electromagnetic cu cuvinte precum raze ultraviolete, raze infraroșii.
Cuvintele ultraviolete și raze nu sunt folosite individual și, prin urmare, pot fi tratate ca Colocare. Un alt exemplu este scanarea CT. Nu spunem CT și Scan separat și, prin urmare, sunt tratate și ca colocare.
Putem spune că găsirea colocațiilor necesită calcularea frecvențelor cuvintelor și a apariției lor în contextul altor cuvinte. Aceste colecții specifice de cuvinte necesită filtrare pentru a păstra termenii de conținut utili. Fiecare gram de cuvinte poate fi apoi punctat în funcție de o măsură de asociere, pentru a determina probabilitatea relativă ca fiecare Ingram să fie o colocare.
Colocarea poate fi clasificată în două tipuri:
- Bigramele ccombinarea a două cuvinte
- Trigramecombinație de trei cuvinte
Bigramele și Trigramele oferă caracteristici mai semnificative și mai utile pentru etapa de extragere a caracteristicilor. Acestea sunt utile în special în analiza sentimentală bazată pe text.
Cod exemplu de bigrame
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
ieșire:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Cod exemplu de trigrame
Uneori devine important să vedeți o pereche de trei cuvinte în propoziție pentru analiza statistică și numărarea frecvenței. Acest lucru joacă din nou un rol crucial în formare PNL (funcții de procesare a limbajului natural), precum și predicție sentimentală bazată pe text.
Același cod este rulat pentru calcularea trigramelor.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
ieșire:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Etichetarea propozițiilor
Etichetarea propoziției într-un sens mai larg se referă la adăugarea de etichete ale verbului, substantivului etc., în funcție de contextul propoziției. Identificarea etichetelor POS este un proces complicat. Astfel, etichetarea generică a POS nu este posibilă manual, deoarece unele cuvinte pot avea semnificații diferite (ambigue) în funcție de structura propoziției. Conversia textului sub formă de listă este un pas important înainte de etichetare, deoarece fiecare cuvânt din listă este rezumat și numărat pentru o anumită etichetă. Vă rugăm să consultați codul de mai jos pentru a-l înțelege mai bine
import nltk text = "Hello Guru99, You have to build a very good site, and I love visiting your site." sentence = nltk.sent_tokenize(text) for sent in sentence: print(nltk.pos_tag(nltk.word_tokenize(sent)))
ieșire:
[(„Bună ziua”, „NNP”), („Guru99”, „NNP”), (',', ','), ('Tu', 'PRP'), ('aveţi', 'VBP') , („build”, „VBN”), („a”, „DT”), („foarte”, „RB”), („bine”, „JJ”), („site”, „NN”) , („și”, „CC”), („eu”, „PRP”), („dragoste”, „VBP”), („vizitând”, „VBG”), („dvs.”, „PRP$” ), ('site', 'NN'), ('.', '.')]
Explicația codului:
- Cod de importat nltk (Setul de instrumente pentru limbajul natural care conține submodule precum sentence tokenize și word tokenize.)
- Text ale cărui etichete urmează să fie tipărite.
- Tokenizare propoziție
- Bucla For este implementată în cazul în care cuvintele sunt tokenizate din propoziție și eticheta fiecărui cuvânt este tipărită ca rezultat.
În Corpus există două tipuri de etichetare POS:
- Bazat pe reguli
- Etichete POS stocastice
1. Etichetare POS bazată pe reguli: Pentru cuvintele cu sens ambiguu, se aplică o abordare bazată pe reguli pe baza informațiilor contextuale. Se realizează prin verificarea sau analizarea sensului cuvântului precedent sau următor. Informațiile sunt analizate din jurul cuvântului sau din interiorul lor. Prin urmare, cuvintele sunt etichetate după regulile gramaticale ale unei anumite limbi, cum ar fi scrierea cu majuscule și punctuația. de exemplu, etichetatorul lui Brill.
2. Stochastic POS Tagger: În cadrul acestei metode sunt aplicate diferite abordări, cum ar fi frecvența sau probabilitatea. Dacă un cuvânt este în mare parte etichetat cu o anumită etichetă în setul de antrenament, atunci în propoziția de testare i se dă acea etichetă anume. Eticheta cuvântului depinde nu numai de propria etichetă, ci și de eticheta anterioară. Această metodă nu este întotdeauna exactă. O altă modalitate este de a calcula probabilitatea de apariție a unei anumite etichete într-o propoziție. Astfel, eticheta finală este calculată prin verificarea celei mai mari probabilități a unui cuvânt cu o anumită etichetă.
Etichetarea POS cu modelul Markov ascuns
Problemele de etichetare pot fi modelate și folosind HMM. Acesta tratează jetoanele de intrare ca fiind o secvență observabilă, în timp ce etichetele sunt considerate stări ascunse, iar scopul este de a determina secvența stărilor ascunse. De exemplu x = x1,x2,…………,Xn unde x este o succesiune de jetoane while y = y1,y2,y3,y4………aneste secvența ascunsă.
Cum funcționează Hidden Markov Model (HMM)?
HMM utilizează distribuția de unire care este P(x, y) unde x este secvența de intrare/secvența de simbol și y este secvența de etichetă.
Secvența de etichete pentru x va fi argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Avem etichete clasificate din text, dar statisticile acestor etichete sunt vitale. Deci, următoarea parte este numărarea acestor etichete pentru studiu statistic.
Rezumat
- Etichetarea POS NLTK este un proces de marcare a cuvintelor în format text pentru o anumită parte a unui discurs, pe baza definiției și contextului acesteia.
- Unele exemple de etichetare NLTK POS sunt: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO etc.
- Etichetatorul POS este folosit pentru a atribui informații gramaticale fiecărui cuvânt din propoziție. Instalarea, importarea și descărcarea tuturor pachetelor de etichetare Part of Speech cu NLTK este completă.
- Îmbunătățirea în NLP este un proces prin care se preia mici informații și le grupează în unități mari.
- Nu există reguli predefinite, dar le puteți combina în funcție de necesități și cerințe.
- Chunking este folosit pentru detectarea entităților. O entitate este acea parte a propoziției prin care mașina obține valoarea pentru orice intenție.
- Chunking este folosit pentru a clasifica diferite jetoane în aceeași bucată.