POS-címkézés NLTK-val és darabolás az NLP-ben [PÉLDÁK]
POS címkézés
POS címkézés (Parts of Speech Tagging) egy folyamat, amely a szavakat szöveges formátumban jelöli meg a beszéd egy adott részéhez annak meghatározása és kontextusa alapján. Felelős azért, hogy egy nyelven felolvassa a szöveget, és minden szóhoz hozzárendeljen bizonyos jelzőt (Beszédrészeket). Nyelvtani címkézésnek is nevezik.
Tanuljunk meg egy NLTK beszédrészlet példájával:
Bemenet: Mindent, ami lehetővé teszi számunkra.
output: [('Minden', NN),('to', TO), ('engedély', VB), ('minket', PRP)]
A POS-címkézési példában szereplő lépések
- Szöveg tokenizálása (word_tokenize)
- alkalmazza a pos_tagot a fenti lépéshez, amely nltk.pos_tag(tokenize_text)
Az NLTK POS címkék példái a következők:
Rövidítés | Jelentés |
---|---|
CC | koordináló kötőszó |
CD | kardinális számjegy |
DT | meghatározója |
EX | ott egzisztenciális |
FW | idegen szó |
IN | elöljáró/alárendelő kötőszó |
JJ | Ez az NLTK POS címke egy melléknév (nagy) |
JJR | melléknév, összehasonlító (nagyobb) |
JJS | melléknév, szuperlatívusz (legnagyobb) |
LS | listás piac |
MD | modális (lehet, akar) |
NN | főnév, egyes szám (macska, fa) |
NNS | főnév többes szám (íróasztalok) |
NNP | tulajdonnév, egyes szám (sarah) |
NNPS | tulajdonnév, többes szám (indiaiak vagy amerikaiak) |
PDT | előre meghatározott (mind, mindkettő, fél) |
POS | birtokos végződés (szülő) |
PRP kiterjesztés | személyes névmás (ő, ő, ő, ő) |
PRP$ | birtokos névmás (her, his, enyém, my, mi ) |
RB | határozószó (alkalmanként, gyorsan) |
RBR kiterjesztés | határozószó, összehasonlító (nagyobb) |
RBS | határozószó, szuperlatívusz (legnagyobb) |
RP | részecske (kb.) |
NAK NEK | végtelen jelző (hoz) |
UH | közbeszólás (viszlát) |
VB | ige (kérdez) |
GBV | gerund ige (bírál) |
VBD | ige múlt idő (könyörögve) |
VBN | ige múltbeli igenév (újraegyesített) |
VBP | ige, jelen idő, nem egyes szám 3. személy(tördelése) |
VBZ | ige, jelen idő egyes szám 3. személyben (alapok) |
wdt | wh-meghatározó (az, mi) |
WP | wh- névmás (ki) |
WRB | wh- határozószó (hogyan) |
A fenti NLTK POS címke lista tartalmazza az összes NLTK POS címkét. Az NLTK POS címkéző a mondat egyes szavaihoz nyelvtani információkat rendelhet hozzá. A POS NLTK összes csomagjának telepítése, importálása és letöltése befejeződött.
Mi az a darabolás az NLP-ben?
Dobogó Az NLP-ben egy olyan folyamat, amelynek során kis információkat veszünk, és nagy egységekre csoportosítunk. A Chunking elsődleges használata a „főnévi kifejezések” csoportosítása. A mondat szerkezetének hozzáadására szolgál a POS címkézés reguláris kifejezésekkel kombinált követésével. Az így kapott szócsoportot „daraboknak” nevezik. Sekély elemzésnek is nevezik.
A sekély elemzésnél legfeljebb egy szint van a gyökerek és a levelek között, míg a mély elemzés több szintből áll. A sekély elemzést könnyű elemzésnek vagy darabolásnak is nevezik.
A darabolás szabályai
Nincsenek előre meghatározott szabályok, de ezeket igény és igény szerint kombinálhatja.
Például meg kell címkéznie a főnevet, az igét (múlt idő), a melléknevet és a koordináló csomópontot a mondatból. Használhatja a szabályt az alábbiak szerint
darab:{ * * * ?}
Az alábbi táblázat bemutatja, mit jelentenek a különböző szimbólumok:
A szimbólum neve | Leírás |
---|---|
. | Bármely karakter, kivéve az új sort |
* | Párosítson 0 vagy több ismétlést |
? | Match 0 vagy 1 ismétlés |
Most írjuk meg a kódot, hogy jobban megértsük a szabályt
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)
output:
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))
A következtetés a fenti beszédcímkézésből Python példa: a „make” egy ige, amely nem szerepel a szabályban, ezért nincs megjelölve mychunk-ként
A darabolás használati esete
A darabolást az entitások észlelésére használják. Az entitás a mondatnak az a része, amellyel a gép bármilyen szándékhoz értéket kap.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
Más szavakkal, a darabolást a tokenek részhalmazainak kiválasztására használják. Kérjük, kövesse az alábbi kódot, hogy megértse, hogyan történik a csonkolás a tokenek kiválasztásához. Ebben a példában látni fogja azt a grafikont, amely egy főnévi kifejezés egy részének felel meg. Megírjuk a kódot és megrajzoljuk a grafikont a jobb megértés érdekében.
Kód a használati eset demonstrálásához
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
output:
['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
Grafikon
A grafikonból arra a következtetésre juthatunk, hogy a „learn” és a „guru99” két különböző token, de főnévi kifejezésként vannak besorolva, míg a „from” token nem tartozik a főnévi kifejezéshez.
A darabolást arra használják, hogy a különböző tokeneket ugyanabba a darabba sorolják. Az eredmény a kiválasztott nyelvtantól függ. A további Chunking NLTK minták címkézésére és szövegkorpusok felfedezésére szolgál.
POS CÍMKÉK SZÁMLÁLÁSA
Többfélét is megbeszéltünk pos_tag az előző részben. Ebben a konkrét oktatóanyagban megtudhatja, hogyan kell megszámolni ezeket a címkéket. A számláló címkék elengedhetetlenek a szövegosztályozáshoz, valamint a természetes nyelv alapú műveletek jellemzőinek előkészítéséhez. Beszélni fogok veled arról a megközelítésről, amelyet a guru99 követett a kód előkészítése során, valamint a kimenetről. Remélhetőleg ez segíteni fog neked.
Hogyan kell számolni a címkéket:
Itt először működő kódot írunk, majd különböző lépéseket írunk a kód magyarázatához.
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)
output:
Számláló({'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})
A kód kidolgozása
- A címkék megszámlálásához használhatja a gyűjtemény moduljában található Counter csomagot. A számláló egy szótári alosztály, amely a kulcs-érték működés elvén működik. Ez egy rendezetlen gyűjtemény, ahol az elemek szótári kulcsként vannak tárolva, miközben a szám az értékük.
- Importálja az nltk-t, amely modulokat tartalmaz a szöveg tokenizálásához.
- Írja be azt a szöveget, amelynek pos_tag-jét meg szeretné számolni.
- Egyes szavak nagybetűvel, mások kisbetűvel vannak írva, ezért célszerű az összes szót kisbetűvel átalakítani a tokenizálás alkalmazása előtt.
- Adja át a szavakat az nltk word_tokenize-en keresztül.
- Számítsa ki az egyes tokenek pos_tag-jét
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')]
- Most jön a szótárszámláló szerepe. Az 1. kódsorban importáltuk. A szavak a kulcsok, a címkék pedig az értékek, és a számláló számol minden, a szövegben jelenlévő címke teljes számát.
Gyakorisági eloszlását
A gyakorisági eloszlást a kísérlet kimenetelének számának nevezzük. A dokumentumban előforduló egyes szavak gyakoriságának meghatározására szolgál. Használja FreqDistclass és által meghatározott az nltk.valószínűség modult.
A gyakorisági eloszlást általában a kísérlet ismételt futtatásából származó minták megszámlálásával hozzák létre. A számok száma minden alkalommal eggyel nő. Például
freq_dist = FreqDist()
a dokumentumban lévő tokenhez:
freq_dist.inc(token.type())
Bármely szónál ellenőrizhetjük, hogy egy adott dokumentumban hányszor fordult elő. Például
- Számlálási módszer: freq_dist.count('and')Ez a kifejezés az 'and' előfordulásának számának értékét adja vissza. Ezt számlálási módszernek hívják.
- Frekvencia módszer: freq_dist.freq('and')Ez a kifejezés egy adott minta gyakoriságát adja vissza.
Írunk egy kis programot, és részletesen elmagyarázzuk a működését. Írunk néhány szöveget, és kiszámítjuk a szövegben szereplő egyes szavak gyakorisági eloszlását.
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()
A kód magyarázata:
- Importálja az nltk modult.
- Írd meg azt a szöveget, amelynek szóeloszlását meg kell találnod!
- Tokenizáljon minden szót a szövegben, amely az nltk FreqDist moduljának bemeneteként szolgál.
- Alkalmazzon minden szót az nlk.FreqDist-re lista formájában
- Ábrázolja a szavakat a grafikonon a plot() segítségével
Kérjük, képzelje el a grafikont, hogy jobban megértse az írott szöveget
MEGJEGYZÉS: A fenti grafikon megtekintéséhez telepíteni kell a matplotlib programot
Figyelje meg a fenti grafikont. Ez megfelel a szövegben szereplő egyes szavak előfordulásának megszámlálásának. Segít a szövegtanulmányozásban és tovább a szövegalapú érzelemanalízis megvalósításában. Dióhéjban levonható az a következtetés, hogy az nltk rendelkezik egy modullal a szövegben szereplő egyes szavak előfordulásának számlálására, amely segít a természetes nyelvi jellemzők statisztikáinak elkészítésében. Jelentős szerepet játszik a kulcsszavak megtalálásában a szövegben. Kivonhatja a szöveget a pdf-ből olyan könyvtárak segítségével, mint a kivonat, a PyPDF2, és betáplálhatja a szöveget az nlk.FreqDist fájlba.
A kulcsfogalom a „tokenizálás”. A tokenizálás után minden egyes szót ellenőrzi egy adott bekezdésben vagy szöveges dokumentumban, hogy meghatározza, hányszor fordult elő. Ehhez nincs szüksége az NLTK eszközkészletére. Megteheti saját python programozási ismereteivel is. Az NLTK eszközkészlet csak egy használatra kész kódot biztosít a különféle műveletekhez.
Az egyes szavak megszámlálása nem feltétlenül hasznos. Ehelyett a kollokációra és a biggramokra kell összpontosítani, amelyek sok szóval foglalkoznak párban. Ezek a párok hasznos kulcsszavakat azonosítanak a jobb természetes nyelvi funkciókhoz, amelyek a gépbe betáplálhatók. Kérjük, tekintse meg a részleteket alább.
Elhelyezések: Biggramok és Trigramok
Mi az a kollokáció?
A kollokációk olyan szópárok, amelyek sokszor előfordulnak együtt egy dokumentumban. Kiszámítása az együtt előforduló párok számából történik a dokumentum teljes szószámával.
Tekintsük az elektromágneses spektrumot olyan szavakkal, mint az ultraibolya sugárzás, infravörös sugárzás.
Az ultraibolya és a sugárzás szavakat nem külön-külön használják, ezért Collocationként kezelhetők. Egy másik példa a CT-vizsgálat. Nem mondjuk külön a CT-t és a Scan-t, ezért ezeket is kollokációként kezeljük.
Elmondhatjuk, hogy a kollokációk megtalálásához ki kell számítani a szavak gyakoriságát és megjelenésüket más szavak kontextusában. Ezek a konkrét szógyűjtemények szűrést igényelnek a hasznos tartalmi kifejezések megőrzése érdekében. Ezután minden egyes gramm szót valamilyen asszociációs mérőszám szerint lehet pontozni, hogy meghatározzuk annak relatív valószínűségét, hogy minden Ingram kollokáció legyen.
A kollokáció két típusra osztható:
- Bigmok ckét szó kombinációja
- Trigramokhárom szó kombinációja
A Biggramok és a Trigramok értelmesebb és hasznosabb funkciókat biztosítanak a jellemzők kinyerési szakaszában. Ezek különösen hasznosak a szöveges szentimentális elemzésben.
Biggrams példakód
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
output:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Trigramok példakód
Néha fontossá válik, hogy három szópárt lássunk a mondatban a statisztikai elemzéshez és a gyakorisági számoláshoz. Ez ismét döntő szerepet játszik a formálásban NLP (természetes nyelvi feldolgozási jellemzők), valamint a szöveg alapú szentimentális előrejelzés.
Ugyanez a kód fut a trigramok kiszámításához.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
output:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Címkézés mondatok
A mondat címkézése tágabb értelemben az ige, főnév stb. címkéinek hozzáadására utal a mondat kontextusa által. A POS-címkék azonosítása bonyolult folyamat. Így a POS általános címkézése manuálisan nem lehetséges, mivel egyes szavak eltérő (kétértelmű) jelentéssel bírhatnak a mondat szerkezetétől függően. A szöveg lista formájú átalakítása fontos lépés a címkézés előtt, mivel a lista minden szava hurkolva van, és egy adott címkéhez számít. Kérjük, tekintse meg az alábbi kódot, hogy jobban megértse
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)))
output:
[('Hello', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('You', 'PRP'), ('have', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('nagyon', 'RB'), ('jó', 'JJ'), ('webhely', 'NN') , ('és', 'CC'), ('I', 'PRP'), ('love', 'VBP'), ('látogatás', 'VBG'), ('saját', 'PRP$' ), ('webhely', 'NN'), ('.', '.')]
Kód magyarázata:
- Kód az nltk importálásához (Természetes nyelvi eszközkészlet, amely olyan almodulokat tartalmaz, mint a mondat tokenizálás és a szó tokenizálás.)
- Szöveg, amelynek címkéit ki kell nyomtatni.
- Mondat tokenizálás
- A For ciklust úgy valósítják meg, hogy a szavakat a mondatból tokenizálják, és minden szó címkéjét kinyomtatják kimenetként.
A Corpusban kétféle POS-címkéző létezik:
- Szabályalapú
- Sztochasztikus POS-címkézők
1. Szabály alapú POS címkéző: A többértelmű jelentésű szavaknál a kontextuális információkon alapuló szabályalapú megközelítést alkalmazzuk. Ez az előző vagy a következő szó jelentésének ellenőrzésével vagy elemzésével történik. Az információt a szó környezetéből vagy önmagából elemzik. Ezért a szavakat egy adott nyelv nyelvtani szabályai, például a nagybetűk és az írásjelek címkézik. pl. Brill címkézője.
2. Sztochasztikus POS címkéző: Ez a módszer különböző megközelítéseket alkalmaz, mint például a gyakoriság vagy a valószínűség. Ha egy szó többnyire egy adott címkével van megcímkézve a képzési halmazban, akkor a tesztmondatban az adott címkét kapja. A szócímke nem csak a saját címkéjétől függ, hanem az előző címkétől is. Ez a módszer nem mindig pontos. Egy másik módszer egy adott címke előfordulási valószínűségének kiszámítása a mondatban. Így a végső címke kiszámítása egy adott címkével rendelkező szó legnagyobb valószínűségének ellenőrzésével történik.
POS címkézés Rejtett Markov-modellel
A címkézési problémák a HMM segítségével is modellezhetők. A bemeneti tokeneket megfigyelhető sorozatként kezeli, míg a címkéket rejtett állapotoknak tekinti, és a cél a rejtett állapotszekvencia meghatározása. Például x = x1,x2,…………,xn ahol x a while tokenek sorozata y = y1,y2,y3,y4………yna rejtett sorozat.
Hogyan működik a rejtett Markov-modell (HMM)?
A HMM csatlakozási eloszlást használ, amely P(x, y), ahol x a bemeneti szekvencia/token sorozat, és y a címkeszekvencia.
Az x címkesorrendje argmax leszy1….ynp(x1,x2,….xn,y1,y2,y3,…). A szövegből kategorizáltunk címkéket, de az ilyen címkék statisztikái létfontosságúak. Tehát a következő rész ezeknek a címkéknek a számolása a statisztikai tanulmányozáshoz.
Összegzésként
- POS címkézés NLTK egy folyamat, amely a szavakat szöveges formátumban jelöli meg a beszéd egy adott részéhez annak meghatározása és kontextusa alapján.
- Néhány példa az NLTK POS címkézésre: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO stb.
- A POS címkéző a mondat minden szava nyelvtani információinak hozzárendelésére szolgál. A Part of Speech címkézés NLTK-val történő összes csomagjának telepítése, importálása és letöltése befejeződött.
- A darabolás az NLP-ben egy olyan folyamat, amelynek során kis információkat veszünk, és nagy egységekre csoportosítunk.
- Nincsenek előre meghatározott szabályok, de ezeket igény és igény szerint kombinálhatja.
- A darabolást az entitások észlelésére használják. Az entitás a mondatnak az a része, amellyel a gép bármilyen szándékhoz értéket kap.
- A darabolást arra használják, hogy a különböző tokeneket ugyanabba a darabba sorolják.