Označování POS pomocí NLTK a Chunking v NLP [PŘÍKLADY]
Označování POS
Označování POS (Parts of Speech Tagging) je proces označování slov v textovém formátu pro konkrétní část řeči na základě její definice a kontextu. Zodpovídá za čtení textu v jazyce a přiřazení konkrétního tokenu (části řeči) ke každému slovu. Říká se tomu také gramatické značkování.
Pojďme se učit na příkladu části řeči NLTK:
Vstup: Všechno, co nám dovolí.
Výstup: [('Všechno', NN),('do', TO), ('povolení', VB), ('nás', PRP)]
Kroky zahrnuté v příkladu označování POS
- Tokenizace textu (word_tokenize)
- použijte pos_tag na výše uvedený krok, který je nltk.pos_tag(tokenize_text)
Příklady značek NLTK POS jsou uvedeny níže:
Zkratka | Význam |
---|---|
CC | koordinační spojení |
CD | kardinální číslice |
DT | determinátor |
EX | tam existenční |
FW | cizí slovo |
IN | předložka/podřadicí spojka |
JJ | Tento NLTK POS Tag je přídavné jméno (velké) |
JJR | přídavné jméno, srovnávací (větší) |
JJS | přídavné jméno, superlativ (největší) |
LS | seznamový trh |
MD | modální (mohl, bude) |
NN | podstatné jméno, jednotné číslo (kočka, strom) |
NNS | podstatné jméno množné číslo (stoly) |
NNP | vlastní podstatné jméno, jednotné číslo (sarah) |
NNPS | vlastní podstatné jméno, množné číslo (Indové nebo Američané) |
PDT | předurčovač (všichni, oba, polovina) |
POS | přivlastňovací koncovka (rodičovská) |
PRP | osobní zájmeno (její, sama, on, sám) |
PRP $ | přivlastňovací zájmeno (její, jeho, můj, můj, náš) |
RB | příslovce (občas, rychle) |
rozšíření RBR | příslovce, srovnávací (větší) |
RBS | příslovce, superlativ (největší) |
RP | částice (asi) |
NA | nekonečná značka (do) |
UH | citoslovce (sbohem) |
VB | sloveso (zeptat se) |
GBV | sloveso gerundium (souzení) |
VBD | sloveso minulý čas (prosil) |
VBN | minulé příčestí slovesa (znovu sjednocené) |
VBP | sloveso, přítomný čas ne 3. osoba jednotného čísla (zabalit) |
VBZ | sloveso, přítomný čas ve 3. osobě jednotného čísla (základy) |
wdt | wh-determiner (to, co) |
WP | wh- zájmeno (kdo) |
WRB | wh- příslovce (jak) |
Výše uvedený seznam NLTK POS tagů obsahuje všechny NLTK POS tagy. NLTK POS tagger se používá k přiřazení gramatických informací ke každému slovu věty. Instalace, import a stažení všech balíčků POS NLTK je dokončeno.
Co je Chunking v NLP?
Kouskování v NLP je proces, který bere malé kousky informací a seskupuje je do velkých celků. Primárním použitím Chunkingu je vytváření skupin „podstatných jmen“. Používá se k přidání struktury do věty pomocí označení POS v kombinaci s regulárními výrazy. Výsledná skupina slov se nazývá „kousky“. Říká se tomu také mělká analýza.
Při mělké analýze je mezi kořeny a listy maximálně jedna úroveň, zatímco hluboká analýza obsahuje více než jednu úroveň. Mělká analýza se také nazývá lehká analýza nebo chunking.
Pravidla pro Chunking
Neexistují žádná předem definovaná pravidla, ale můžete je kombinovat podle potřeby a požadavku.
Například musíte z věty označit podstatné jméno, sloveso (minulý čas), přídavné jméno a koordinační spojení. Můžete použít pravidlo, jak je uvedeno níže
kus:{ * * * ?}
Následující tabulka ukazuje, co jednotlivé symboly znamenají:
Název symbolu | Description |
---|---|
. | Libovolný znak kromě nového řádku |
* | Zápas 0 nebo více opakování |
? | Zápas 0 nebo 1 opakování |
Nyní napíšeme kód, abychom lépe porozuměli pravidlu
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)
Výstup:
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))
Závěr z výše uvedeného značkování Part of Speech Python příklad: „make“ je sloveso, které není zahrnuto v pravidle, takže není označeno jako mychunk
Use Case of Chunking
Chunking se používá pro detekci entity. Entita je ta část věty, kterou stroj získá hodnotu pro jakýkoli záměr.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
Jinými slovy, chunking se používá jako výběr podmnožin tokenů. Postupujte podle níže uvedeného kódu, abyste pochopili, jak se k výběru tokenů používá rozdělení. V tomto příkladu uvidíte graf, který bude odpovídat části podstatného jména. Napíšeme kód a nakreslíme graf pro lepší pochopení.
Kód pro demonstraci případu použití
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
Výstup:
['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
Graf
Z grafu můžeme vyvodit závěr, že „učit se“ a „guru99“ jsou dva různé tokeny, ale jsou kategorizovány jako podstatná fráze, zatímco token „od“ nepatří do podstatného jména.
Chunking se používá ke kategorizaci různých tokenů do stejného chunku. Výsledek bude záviset na zvolené gramatice. Další Chunking NLTK se používá k označování vzorů a prozkoumávání textových korpusů.
POČÍTÁNÍ POS TAGŮ
Diskutovali jsme o různých pos_tag v předchozí části. V tomto konkrétním tutoriálu se naučíte, jak tyto značky počítat. Počítací značky jsou klíčové pro klasifikaci textu a také pro přípravu funkcí pro operace založené na přirozeném jazyce. Budu s vámi diskutovat o přístupu, který guru99 následoval při přípravě kódu, spolu s diskusí o výstupu. Doufám, že vám to pomůže.
Jak počítat značky:
Zde nejprve napíšeme pracovní kód a poté napíšeme různé kroky k vysvětlení kódu.
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)
Výstup:
Counter({'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})
Vypracování kodexu
- Pro počítání značek můžete použít balíček Counter z modulu kolekce. Čítač je podtřída slovníku, která funguje na principu operace klíč-hodnota. Je to neuspořádaná kolekce, kde jsou prvky uloženy jako klíč slovníku, zatímco počet je jejich hodnotou.
- Importujte nltk, který obsahuje moduly pro tokenizaci textu.
- Napište text, jehož pos_tag chcete počítat.
- Některá slova jsou velká a některá malá, proto je vhodné před použitím tokenizace transformovat všechna slova na malá písmena.
- Předejte slova přes word_tokenize z nltk.
- Vypočítejte pos_tag každého tokenu
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')]
- Nyní přichází role slovníkového počítadla. Importovali jsme do řádku kódu 1. Slova jsou klíčem a značky jsou hodnotou a počítadlo bude počítat každý celkový počet značek přítomných v textu.
Frekvenční distribuce
Frekvenční distribuce je označována jako počet případů, kdy dojde k výsledku experimentu. Používá se k nalezení frekvence každého slova vyskytujícího se v dokumentu. Používá FreqDistclass a definovaný nltk.pravděpodobnost modul.
Frekvenční rozdělení je obvykle vytvořeno počítáním vzorků opakovaně prováděného experimentu. Počet počtů se pokaždé zvýší o jedničku. Např
freq_dist = FreqDist()
pro token v dokumentu:
freq_dist.inc(token.type())
U jakéhokoli slova můžeme zkontrolovat, kolikrát se vyskytlo v konkrétním dokumentu. Např
- Metoda počítání: freq_dist.count('and')Tento výraz vrací hodnotu, kolikrát došlo k 'a'. Říká se tomu metoda počítání.
- Frekvenční metoda: freq_dist.freq('and')Tento výraz vrací frekvenci daného vzorku.
Napíšeme malý program a podrobně vysvětlíme jeho fungování. Napíšeme nějaký text a vypočítáme rozdělení četností každého slova v textu.
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()
Vysvětlení kódu:
- Import modulu nltk.
- Napište text, jehož rozdělení slov potřebujete najít.
- Tokenizujte každé slovo v textu, které slouží jako vstup do modulu FreqDist nltk.
- Použijte každé slovo na nlk.FreqDist ve formě seznamu
- Vykreslete slova do grafu pomocí plot()
Vizualizujte si prosím graf pro lepší pochopení psaného textu
POZNÁMKA: Abyste viděli výše uvedený graf, musíte mít nainstalovaný matplotlib
Sledujte výše uvedený graf. Odpovídá počítání výskytu každého slova v textu. Pomáhá při studiu textu a dále při implementaci textově založené sentimentální analýzy. Stručně řečeno, lze konstatovat, že nltk má modul pro počítání výskytu každého slova v textu, který pomáhá při přípravě statistik vlastností přirozeného jazyka. Hraje významnou roli při hledání klíčových slov v textu. Můžete také extrahovat text z pdf pomocí knihoven, jako je extrakt, PyPDF2 a vložit text do nlk.FreqDist.
Klíčovým pojmem je „tokenizace“. Po tokenizaci zkontroluje každé slovo v daném odstavci nebo textovém dokumentu, aby zjistil, kolikrát se vyskytlo. K tomu nepotřebujete sadu nástrojů NLTK. Můžete to také udělat s vlastními dovednostmi programování v pythonu. Sada nástrojů NLTK poskytuje pouze kód připravený k použití pro různé operace.
Počítání každého slova nemusí být moc užitečné. Místo toho bychom se měli zaměřit na kolokaci a bigramy, které se týkají mnoha slov v páru. Tyto páry identifikují užitečná klíčová slova pro lepší funkce přirozeného jazyka, které mohou být dodány do stroje. Podívejte se prosím níže na jejich podrobnosti.
Kolokace: bigramy a trigramy
Co je kolokace?
Kolokace jsou dvojice slov, které se v dokumentu vyskytují spolu mnohokrát. Vypočítává se podle počtu těchto dvojic vyskytujících se společně k celkovému počtu slov dokumentu.
Zvažte elektromagnetické spektrum se slovy jako ultrafialové paprsky, infračervené paprsky.
Slova ultrafialové a paprsky se nepoužívají jednotlivě, a proto je lze považovat za kolokaci. Dalším příkladem je CT sken. Neříkáme CT a sken odděleně, a proto se s nimi také zachází jako s kolokací.
Můžeme říci, že hledání kolokací vyžaduje výpočet četností slov a jejich vzhledu v kontextu jiných slov. Tyto specifické kolekce slov vyžadují filtrování, aby se zachovaly užitečné termíny obsahu. Každý gram slov pak může být skórován podle nějaké asociační míry, aby se určila relativní pravděpodobnost, že každý Ingram je kolokace.
Kolokaci lze rozdělit do dvou typů –
- Bigramy cspojení dvou slov
- Trigramykombinace tří slov
Bigramy a trigramy poskytují smysluplnější a užitečnější funkce pro fázi extrakce prvků. Ty jsou zvláště užitečné v textové sentimentální analýze.
Příklad kódu bigramů
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
Výstup:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Příklad kódu trigramů
Někdy je důležité vidět ve větě dvojici tří slov pro statistickou analýzu a počet četností. To opět hraje zásadní roli při formování NLP (vlastnosti zpracování přirozeného jazyka) a také textově založené sentimentální predikce.
Stejný kód je spuštěn pro výpočet trigramů.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
Výstup:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Označování vět
Tagging Sentence v širším slova smyslu označuje přidání štítků slovesa, podstatného jména atd. podle kontextu věty. Identifikace POS tagů je složitý proces. Generické označování POS tedy není ručně možné, protože některá slova mohou mít odlišný (nejednoznačný) význam podle struktury věty. Konverze textu ve formě seznamu je důležitým krokem před tagováním, protože každé slovo v seznamu je zacykleno a počítáno pro konkrétní tag. Podívejte se prosím na níže uvedený kód, abyste mu lépe porozuměli
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)))
Výstup:
[('Dobrý den', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Vy', 'PRP'), ('mít', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('velmi', 'RB'), ('dobré', 'JJ'), ('site', 'NN') , ('and', 'CC'), ('I', 'PRP'), ('láska', 'VBP'), ('návštěva', 'VBG'), ('vaše', 'PRP$' ), ('web', 'NN'), ('.', '.')]
Vysvětlení kódu:
- Kód pro import nltk (sada nástrojů pro přirozený jazyk, která obsahuje podmoduly, jako je tokenizace vět a tokenizace slova.)
- Text, jehož značky mají být vytištěny.
- Tokenizace vět
- Je implementována smyčka For, kde jsou slova tokenizována z věty a značka každého slova je vytištěna jako výstup.
V Corpusu existují dva typy POS taggerů:
- Na základě pravidel
- Stochastické POS tagery
1. POS Tagger založený na pravidlech: Pro slova s nejednoznačným významem je aplikován přístup založený na pravidlech na základě kontextových informací. To se provádí kontrolou nebo analýzou významu předchozího nebo následujícího slova. Informace jsou analyzovány z okolí slova nebo uvnitř sebe. Proto jsou slova označena gramatickými pravidly konkrétního jazyka, jako je psaní velkých písmen a interpunkce. např. Brillův tagger.
2. Stochastický POS Tagger: V rámci této metody se používají různé přístupy, jako je frekvence nebo pravděpodobnost. Pokud je slovo v tréninkové sadě většinou označeno konkrétní značkou, pak je v testovací větě uvedena tato konkrétní značka. Značka slova je závislá nejen na vlastní značce, ale také na předchozí značce. Tato metoda není vždy přesná. Dalším způsobem je výpočet pravděpodobnosti výskytu konkrétní značky ve větě. Výsledná značka je tedy vypočítána kontrolou nejvyšší pravděpodobnosti slova s konkrétní značkou.
Označování POS se skrytým modelem Markov
Problémy s označováním lze také modelovat pomocí HMM. Vstupní tokeny považuje za pozorovatelnou sekvenci, zatímco značky jsou považovány za skryté stavy a cílem je určit sekvenci skrytých stavů. Například x = x1,x2,…………,Xn kde x je posloupnost tokenů while y = y1,y2,y3,y4………ynje skrytá sekvence.
Jak funguje skrytý Markovův model (HMM)?
HMM používá rozdělení spojení, což je P(x, y), kde x je vstupní sekvence / sekvence tokenů a y je sekvence značek.
Tag Sequence pro x bude argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Značky jsme z textu kategorizovali, ale statistiky těchto značek jsou životně důležité. Další částí je tedy počítání těchto značek pro statistickou studii.
Shrnutí
- Označování POS NLTK je proces označování slov v textovém formátu pro konkrétní část řeči na základě její definice a kontextu.
- Některé příklady značení NLTK POS jsou: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO atd.
- POS tagger se používá k přiřazení gramatických informací ke každému slovu věty. Instalace, import a stažení všech balíčků značkování Part of Speech pomocí NLTK je dokončeno.
- Chunking v NLP je proces, který vezme malé kousky informací a seskupí je do velkých celků.
- Neexistují žádná předem definovaná pravidla, ale můžete je kombinovat podle potřeby a požadavku.
- Chunking se používá pro detekci entity. Entita je ta část věty, kterou stroj získá hodnotu pro jakýkoli záměr.
- Chunking se používá ke kategorizaci různých tokenů do stejného chunku.