Označování POS pomocí NLTK a Chunking v NLP [PŘÍKLADY]

⚡ Chytré shrnutí

POS Tagging přiřazuje slovní druh každému slovu ve větě, zatímco Chunking seskupuje označená slova do smysluplných frází, jako jsou například jmenné fráze, a přidává tak mělkou strukturu, kterou NLTK vytváří pomocí regulárních výrazů v Python.

  • ???? ️ Označování POS: Každé slovo dostává z kontextu gramatický token, jako například NN, VB nebo JJ.
  • 🌿 Kouskování: Označená slova jsou seskupena do frází, což je proces nazývaný také mělká analýza.
  • 🔤 Pracovní postup: Nejprve tokenizujte text, poté použijte pos_tag a poté analyzujte pomocí gramatiky RegexpParser.
  • 📊 Počítání štítků: Funkce Counter a FreqDist odhalují frekvence značek a slov pro účely inženýrství prvků.
  • 🔗 Kolokace: Bigramy a trigramy zachycují dvojice slov a trojice pro silnější textové prvky.
  • 🤖 Použití umělé inteligence: Strojové učení a taggery založené na HMM zpracovávají nejednoznačná slova pravděpodobnostně.

POS tagging s NLTK a Chunking v NLP

Označování POS

Označování POS (Označování slovních druhů) je proces označování slov v textovém formátu pro konkrétní slovní druh na základě jejich definice a kontextu. Je zodpovědný za čtení textu v daném jazyce a přiřazení specifického tokenu (slovních druhů) ke každému slovu. Nazývá se také gramatické označování.

Pojďme se poučit z příkladu slovní druh NLTK:

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

Kroky zahrnuté v příkladu označování POS

  • Tokenizace textu (word_tokenize)
  • Použijte pos_tag na výše uvedený krok, tedy nltk.pos_tag(tokenize_text)

Příklady POS štítků NLTK 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 přídavné jméno
JJR přídavné jméno, komparativ
JJS přídavné jméno, superlativ
LS seznamový trh
MD modální
NN podstatné jméno, jednotné číslo
NNS podstatné jméno množné číslo
NNP vlastní podstatné jméno, jednotné číslo
NNPS vlastní podstatné jméno, množné číslo
PDT předurčovatel
Prezentační stojany přivlastňovací koncovka
PRP osobní zájmeno
PRP $ přivlastňovací zájmeno
RB příslovce
rozšíření RBR příslovce, komparativ
RBS příslovce, superlativ
RP částice
NA nekonečný marker
UH citoslovce
VB sloveso
GBV slovesný gerundium
VBD sloveso minulý čas
VBN sloveso minulé příčestí
VBP sloveso, přítomný čas, nikoli 3. osoba jednotného čísla
VBZ sloveso, přítomný čas s 3. osobou jednotného čísla
wdt wh-determiner
WP wh-zájmeno
WRB příslovce wh

Výše uvedený seznam tagů NLTK POS obsahuje všechny tagy NLTK POS. Tagger NLTK POS se používá k přiřazení gramatických informací ke každému slovu ve větě. Instalace, import a stahování všech balíčků POS NLTK je nyní dokončeno.

Co je Chunking v NLP?

Kouskování V NLP je proces, který bere malé útržky informací a seskupuje je do velkých jednotek. Chunking se přimárně používá k vytváření skupin „frází podstatných jmen“. Používá se k přidání struktury do věty pomocí POS tagování v kombinaci s regulárními výrazy. Výsledná skupina slov se nazývá „kousky“. Také se nazývá 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 zahrnuje více než jednu úroveň. Mělká analýza se také nazývá lehká analýza nebo segmentace.

Pravidla pro Chunking

Neexistují žádná předem definovaná pravidla, ale můžete je kombinovat podle potřeby a požadavků. Předpokládejme například, že potřebujete z věty vyčlenit podstatné jméno, sloveso (minulý čas), přídavné jméno a souřadnou spojku. Můžete použít následující pravidlo:

chunk:{***?}

Následující tabulka ukazuje význam jednotlivých symbolů:

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í si napišme kód, abychom pravidlu lépe porozuměli.

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:{***?}"""
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:
       '***?'>
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říkladem je, že sloveso „make“ není v pravidle zahrnuto, takže není označeno jako mychunk.

Use Case of Chunking

Chunking se používá k detekci entit. Entita je ta část věty, pomocí které stroj získává 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, segmentace se používá k výběru podmnožin tokenů. Pro pochopení, jak se segmentace používá k výběru tokenů, prosím, postupujte podle níže uvedeného kódu. V tomto příkladu uvidíte graf, který odpovídá segmentu jmenné fráze.

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" 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

Podstatné jméno Fráze Chunking Graph

Podstatné jméno Fráze rozdělení grafu

Z grafu můžeme usoudit, že „learn“ a „guru99“ jsou dva různé tokeny, ale jsou kategorizovány jako jmenná fráze, zatímco token „from“ do jmenné fráze nepatří. Chunking se používá ke kategorizaci různých tokenů do stejného bloku. Výsledek bude záviset na vybrané gramatice. Chunking se navíc v NLTK používá k označování vzorů a k prozkoumávání textových korpusů.

Počítání POS štítků

Diskutovali jsme o různých pos_tag hodnoty dříve. Zde se naučíte, jak tyto tagy počítat. Počítání tagů je klíčové pro klasifikaci textu a pro přípravu funkcí pro operace v přirozeném jazyce. Nejprve napíšeme funkční kód a poté vysvětlíme jednotlivé kroky.

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í kódu:

  1. Použijte balíček Counter z modulu collections. Counter je podtřída slovníku, která ukládá prvky jako klíče a jejich počty jako hodnoty.
  2. Importujte nltk pro tokenizaci textu.
  3. Napište text, jehož pos_tag chcete počítat.
  4. Před tokenizací převeďte všechna slova na malá písmena.
  5. Projděte slova pomocí funkce word_tokenize a vypočítejte hodnotu pos_tag každého tokenu.
  6. Funkce Counter pak spočítá celkový počet výskytů každého tagu v textu.

Frekvenční distribuce

Distribuce četností vyjadřuje počet výskytů výsledku experimentu. Používá se k nalezení četnosti výskytu každého slova v dokumentu. Využívá FreqDist třída definovaná nltk.pravděpodobnost modul. Počet se při každém vzorku zvýší o jedna.

U libovolného slova můžeme zkontrolovat, kolikrát se v dokumentu objevilo. Například:

  • Metoda počítání: freq_dist.count('and') vrací počet výskytů operátoru 'and'. Nazývá se metoda count.
  • Frekvenční metoda: freq_dist.freq('and') vrací frekvenci daného vzorku.

Napíšeme malý program, který vypočítá frekvenční rozložení 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:

  1. Importujte modul nltk.
  2. Napište text, jehož rozdělení slov potřebujete najít.
  3. Tokenizujte každé slovo v textu, který je podáván jako vstup do modulu FreqDist knihovny nltk.
  4. Každé slovo aplikujte na nltk.FreqDist ve formě seznamu.
  5. Vykreslete slova do grafu pomocí funkce plot().

POZNÁMKA: Pro zobrazení grafu je nutné mít nainstalovaný balíček matplotlib. Počítá výskyt každého slova v textu a pomáhá s analýzou sentimentu na základě textu. Klíčovým pojmem je „tokenizace“: po tokenizaci se každé slovo kontroluje, aby se zjistilo, kolikrát se objevilo.

Kolokace: bigramy a trigramy

Kolokace jsou dvojice slov, které se v dokumentu vyskytují mnohokrát pohromadě. Vypočítávají se jako poměr počtu těchto dvojic vyskytujících se pohromadě k celkovému počtu slov v dokumentu.

Vezměme si slova jako ultrafialové paprsky a infračervené paprsky. Slova ultrafialové a paprsky se nepoužívají samostatně, a proto je lze považovat za kolokaci. Dalším příkladem je CT vyšetření, protože neříkáme CT a Scan odděleně. Kolokace lze rozdělit do dvou typů:

  • Bigramy: spojení dvou slov
  • Trigramy: kombinace tří slov

Bigramy a trigramy poskytují smysluplnější a užitečnější funkce pro např.tracfáze cí. Ty jsou obzvláště užitečné při analýze sentimentu založené na textu.

Příklad bigramů Code:

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 trigramů Code:

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 (zpracování přirozeného jazyka) a také predikci sentimentu na základě textu. Stejný kód se spouští 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

Označování věty znamená přidávání štítků, jako je sloveso nebo podstatné jméno, na základě kontextu věty. Identifikace POS tagů je složitá, takže generické označování není možné ručně, protože některá slova mají nejednoznačný význam v závislosti na struktuře věty. Převod textu do seznamu je důležitým krokem před označováním, protože každé slovo je smyčkou a počítáno pro konkrétní tag.

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)))

Code Vysvětlení:

  1. Code importovat nltk (přirozený Language Toolkit, který obsahuje submoduly jako například tokenizaci vět a tokenizaci slov).
  2. Text, jehož značky mají být vytištěny.
  3. Tokenizace vět.
  4. Je implementována smyčka for, kde jsou slova z věty tokenizována a tag každého slova je vytištěn jako výstup.

V korpusu existují dva typy POS taggerů:

1. Značkovače POS založené na pravidlech: U slov s nejednoznačným významem se používá přístup založený na pravidlech a kontextových informacích. Provádí se analýzou významu předchozího nebo následujícího slova. Slova jsou proto označována gramatickými pravidly daného jazyka, jako je psaní velkých písmen a interpunkce. Například Brillův tagger.

2. Stochastický POS Tagger: V rámci této metody se používají přístupy jako frekvence nebo pravděpodobnost. Pokud je slovo v trénovací sadě většinou označeno konkrétním tagem, je mu tento tag přiřazen i v testovací větě. Tag slova závisí nejen na jeho vlastním tagem, ale také na předchozím tagem, takže tato metoda není vždy přesná.

Označování POS pomocí skrytého Markovova modelu

Problémy se značkováním lze také modelovat pomocí skrytého Markovova modelu (HMM). Ten zachází se vstupními tokeny jako s pozorovatelnou sekvencí, zatímco tagy 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 sekvence tokenů, zatímco y = y1,y2,y3,y4…yn je skrytá sekvence.

Jak funguje skrytý Markovův model (HMM)?

HMM používá společné rozdělení P(x, y), kde x je vstupní posloupnost tokenů a y je posloupnost tagů. Posloupnost tagů pro x bude argmax nad y1…yn z p(x1,x2,…xn,y1,y2,y3,…). Tagy jsme kategorizovali z textu, ale statistiky takových tagů jsou zásadní, takže další částí je spočítání těchto tagů pro statistické studium.

Nejčastější dotazy

POS tagging označuje každé jednotlivé slovo jeho slovním druhem, například podstatným jménem nebo slovesem. Chunking jde ještě o krok dál a seskupuje označená slova do frází, jako jsou jmenné fráze, čímž větě dodává mělkou strukturu.

Mělká analýza, nazývaná také segmentace nebo lehká analýza, udržuje mezi kořeny a listy maximálně jednu úroveň. Identifikuje hranice frází, aniž by budovala plný strom analýzy, což ji činí rychlejší než hloubková analýza.

Rozdělování slov označených tagy do frází, což systému umožňuje detekovat entity, jako jsou osoby, místa, data nebo produkty. Rozpoznávání pojmenovaných entit se na tyto bloky spoléhá.tracsmysluplné hodnoty z nezpracovaného textu.

Funkce nltk.pos_tag() přiřazuje tagy slovních druhů. Nejprve se text tokenizují pomocí word_tokenize a poté se seznam tokenů předá funkci pos_tag, která vrací každé slovo spárované s jeho tagem, například NN, VB nebo JJ.

Ano. Moderní taggery s umělou inteligencí, trénované pomocí strojového učení a hlubokých neuronových sítí, řeší nejednoznačná slova učením kontextu z velkých korpusů a dosahují tak vyšší přesnosti než metody založené na pravidlech v reálném textu.

Stochastické taggery používají pravděpodobnost získanou z trénovacích dat. Strojové učení odhaduje, jak pravděpodobná je každá značka pro dané slovo na základě okolních značek, a poté vybere sekvenci s nejvyšší celkovou pravděpodobností.

Kromě NLTKMezi oblíbené možnosti patří prostornost pro rychlé výrobní potrubí, Stanford CoreNLP a Hugging Face Transformers pro označování na bázi transformátorů.

V blokové gramatice tečka odpovídá libovolnému znaku kromě nového řádku, hvězdička nula nebo více opakování a otazník nula nebo jedno opakování předchozího vzoru tagu POS.

Shrňte tento příspěvek takto: