POS-i märgistamine NLTK-ga ja tükeldamine NLP-s [NÄITED]

⚡ Nutikas kokkuvõte

POS-sildistamine määrab igale lauses olevale sõnale sõnaliigi, samas kui tükeldamine grupeerib need sildistatud sõnad tähendusrikasteks fraasideks, näiteks nimisõnafraasideks, lisades pealiskaudse struktuuri, mille NLTK loob regulaaravaldistega Python.

  • ???? ️ POS märgistamine: Iga sõna saab oma kontekstist grammatilise tunnuse, näiteks NN, VB või JJ.
  • 🌿 Tükeldamine: Sildistatud sõnad rühmitatakse fraasideks, seda protsessi nimetatakse ka pealiskaudseks parsimiseks.
  • 🔤 Töövoog: Tokeniseeri tekst esmalt, seejärel rakenda pos_tag ja seejärel parsi RegexpParser grammatikaga.
  • 📊 Sildid loendamine: Counter ja FreqDist näitavad siltide ja sõnade sagedusi tunnuste väljatöötamiseks.
  • 🔗 Kollokatsioonid: Bigrammid ja trigrammid jäädvustavad sõnapaare ja kolmikuid tugevamate tekstifunktsioonide saavutamiseks.
  • 🤖 Tehisintellekti kasutamine: Masinõpe ja HMM-põhised sildistajad käsitlevad mitmetähenduslikke sõnu tõenäosuslikult.

POS-märgistamine NLTK ja tükeldamisega NLP-s

POS märgistamine

POS märgistamine Kõneosade märgistamine (inglise keeles „Sõnaosade märgistamine”) on protsess, mille käigus märgistatakse tekstivormingus sõnu konkreetse kõneosa jaoks selle definitsiooni ja konteksti põhjal. See vastutab teksti lugemise eest mingis keeles ja igale sõnale kindla märgi (kõneosade) määramise eest. Seda nimetatakse ka grammatiliseks märgistamiseks.

Õppigem NLTK kõneosa näite abil:

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

POS-sildistamise näite etapid

  • Teksti märgistamine (word_tokenize)
  • Rakenda ülaltoodud sammule pos_tag, see on nltk.pos_tag(tokenize_text)

NLTK POS-siltide näited on loetletud allpool:

lühend Tähendus
CC koordineeriv side
CD kardinaalnumber
DT määraja
EX seal eksistentsiaalne
FW võõrsõna
IN eessõna/allutav sidesõna
JJ omadussõna
JJR omadussõna, võrdlus
JJS omadussõna, ülivõrd
LS nimekirja turg
MD modaalne
NN nimisõna, ainsus
NNS nimisõna mitmuses
NNP pärisnimi, ainsus
NNPS pärisnimi, mitmus
PDT ettemääraja
POS omastav lõpp
PRP isikuline asesõna
PRP $ omastav asesõna
RB nimisõna
RBR määrsõna, võrdlussõna
RBS määrsõna, ülivõrd
RP osake
TO lõpmatu marker
UH süütamine
VB verb
GBV verbi gerundium
VBD tegusõna minevikuvorm
VBN tegusõna mineviku kesksõna
VBP tegusõna, olevikuvorm, mitte ainsuse 3. isik
VBZ tegusõna, olevikuvorm ainsuse 3. isikus
wdt wh-määraja
WP wh-asesõna
WRB wh-määrsõna

Ülaltoodud NLTK POS-siltide loend sisaldab kõiki NLTK POS-silte. NLTK POS-sildistamist kasutatakse lause igale sõnale grammatilise teabe määramiseks. POS NLTK pakettide installimine, importimine ja allalaadimine on nüüd lõppenud.

Mis on NLP-s tükeldamine?

Raiumine NLP-s on see protsess, mille käigus võetakse väikesed infokillud ja rühmitatakse need suurteks üksusteks. Tükeldamise peamine eesmärk on moodustada "nimisõnafraasidest" rühmi. Seda kasutatakse lause struktuuri lisamiseks, järgides POS-silte koos regulaaravaldistega. Saadud sõnarühma nimetatakse "tükkideks". Seda nimetatakse ka pealiskaudseks parsimiseks.

Madala analüüsi puhul on juurte ja lehtede vahel maksimaalselt üks tasand, samas kui sügav analüüsi puhul on tegemist mitme tasemega. Madala analüüsi nimetatakse ka kergeks analüüsiks või tükeldamiseks.

Tükeldamise reeglid

Eelnevalt määratletud reegleid pole, aga saate neid vastavalt vajadusele ja nõuetele kombineerida. Näiteks oletame, et peate lausest märgistama nimisõna, tegusõna (minevik), omadussõna ja sidesõna. Võite kasutada allolevat reeglit:

chunk:{***?}

Järgnev tabel näitab erinevate sümbolite tähendust:

Sümboli nimi Kirjeldus
. Kõik märgid, välja arvatud uus rida
* Sobitage 0 või enam kordust
? Tehke 0 või 1 kordust

Nüüd kirjutame koodi, et reeglist paremini aru saada.

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äljund:

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

Järeldus ülaltoodud kõne sildistamise osast Python Näiteks „make” on tegusõna, mida reeglisse ei lisata, seega pole seda märgistatud kui „mychunk”.

Tükeldamise kasutusjuht

Tükeldamist kasutatakse üksuste tuvastamiseks. Üksus on lause see osa, mille abil masin saab mis tahes kavatsuse väärtuse.

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

Teisisõnu, tükeldamist kasutatakse tokenite alamhulkade valimiseks. Palun järgige allolevat koodi, et mõista, kuidas tükeldamist tokenite valimiseks kasutatakse. Selles näites näete graafikut, mis vastab nimisõnafraasi tükeldamisele.

 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äljund:

['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

Nimisõnafraasi tükeldamise graafik

Nimisõna Fraas chunking Graph

Graafikult võime järeldada, et „learn“ ja „guru99“ on kaks erinevat märki, kuid need on liigitatud nimisõnafraasideks, samas kui märk „from“ ei kuulu nimisõnafraasi. Tükeldamist kasutatakse erinevate märkide liigitamiseks samasse tükki. Tulemus sõltub valitud grammatikast. Lisaks kasutatakse NLTK-s tükeldamist mustrite sildistamiseks ja tekstikorpuste uurimiseks.

POS-siltide loendamine

Oleme arutanud erinevaid pos_tag väärtused eelnevalt. Siin õpid, kuidas neid silte loendada. Siltide loendamine on teksti klassifitseerimiseks ja loomuliku keele operatsioonide funktsioonide ettevalmistamiseks ülioluline. Esmalt kirjutame töötava koodi ja seejärel selgitame samme.

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äljund:

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

Koodi täpsustamine:

  1. Kasutage kollektsioonide mooduli Counter paketti. Counter on sõnastiku alamklass, mis salvestab elemente võtmetena ja nende loendeid väärtustena.
  2. Teksti tokeniseerimiseks importige nltk.
  3. Kirjutage tekst, mille pos_tag'i soovite lugeda.
  4. Enne tokeniseerimist teisendage kõik sõnad väiketähtedeks.
  5. Laske sõnad läbi funktsiooni word_tokenize ja arvutage iga märgi pos_tag.
  6. Seejärel loendab loendur iga sildi esinemise koguarvu tekstis.

Sageduse jaotumine

Sagedusjaotus viitab sellele, mitu korda katse tulemus esineb. Seda kasutatakse iga sõna esinemise sageduse leidmiseks dokumendis. See kasutab Sagedusjaotus klass, mis on määratletud nltk.tõenäosus moodul. Loendust suurendatakse iga kord ühe võrra, kui valim esineb.

Iga sõna puhul saame kontrollida, mitu korda see dokumendis esines. Näiteks:

  • Arvestusmeetod: freq_dist.count('and') tagastab 'and' esinemiste arvu. Seda nimetatakse count meetodiks.
  • Sagedusmeetod: freq_dist.freq('and') tagastab antud valimi sageduse.

Kirjutame väikese programmi, mis arvutab iga sõna sagedusjaotuse tekstis.

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

Koodi selgitus:

  1. Impordi nltk moodul.
  2. Kirjutage tekst, mille sõnade levikut peate leidma.
  3. Tokeniseeri iga tekstis olev sõna, mis antakse sisendiks nltk FreqDist moodulile.
  4. Rakenda iga sõna nltk.FreqDist funktsioonile loendi kujul.
  5. Joonista sõnad graafikule plot() abil.

MÄRKUS: graafiku nägemiseks peab olema installitud matplotlib. See loendab iga sõna esinemisi tekstis ja aitab tekstipõhises sentimentaalses analüüsis. Võtmetermin on „tokenize”: pärast tokeniseerimist kontrollitakse iga sõna, et teha kindlaks, mitu korda see esines.

Kollokatsioonid: Bigamid ja trigrammid

Kollokatsioonid on sõnapaarid, mis esinevad dokumendis mitu korda koos. See arvutatakse koos esinevate paaride arvu ja dokumendi kogu sõnade arvu suhtena.

Mõelge sellistele sõnadele nagu ultraviolettkiired ja infrapunakiired. Sõnu ultraviolett ja kiired ei kasutata eraldi ja seetõttu saab neid käsitleda kollokatsioonina. Teine näide on kompuutertomograafia (KT), kuna me ei ütle KT-d ja skaneeringut eraldi. Kollokatsiooni saab jagada kahte tüüpi:

  • Biggrammid: kahe sõna kombinatsioon
  • Trigrammid: kolme sõna kombinatsioon

Bigrammid ja trigrammid pakuvad funktsioonile näiteks sisukamaid ja kasulikumaid funktsioone.tractsioonietapp. Need on eriti kasulikud tekstipõhises sentimentaalsuse analüüsis.

Bigramsi näide 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äljund:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Trigrammide näide Code:

Mõnikord on statistilise analüüsi ja sageduste loendamise jaoks oluline näha lauses kolme sõna paari. See mängib taas moodustamisel otsustavat rolli NLP (loomuliku keele töötlemise) funktsioonid ja tekstipõhine sentimentaalsuse ennustamine. Sama koodi käivitatakse trigrammide arvutamiseks.

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äljund:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

Lausete märgistamine

Lause sildistamine viitab siltide, näiteks tegusõna või nimisõna, lisamisele lause konteksti põhjal. POS-siltide tuvastamine on keeruline, seega pole üldine sildistamine käsitsi võimalik, kuna mõnel sõnal on lause struktuurist olenevalt mitmetähenduslik tähendus. Teksti teisendamine loendiks on oluline samm enne sildistamist, kuna iga sõna tsüklitakse ja loendatakse konkreetse sildi jaoks.

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 Selgitus:

  1. Code nltk (Natural) importimiseks Language Toolkomplekt, mis sisaldab alammooduleid nagu lause tokenize ja sõna tokenize).
  2. Tekst, mille sildid tuleb printida.
  3. Lause tokeniseerimine.
  4. Rakendatakse for-tsükkel, kus sõnad lausest tokeniseeritakse ja iga sõna silt prinditakse väljundina.

Korpuses on kahte tüüpi POS-sildistajaid:

1. Reeglipõhine POS-sildistamine: Mitmetähendusliku tähendusega sõnade puhul rakendatakse kontekstipõhisel teabel põhinevat reeglipõhist lähenemist. Seda tehakse eelneva või järgneva sõna tähenduse analüüsimise teel. Seetõttu märgistatakse sõnad konkreetse keele grammatikareeglite, näiteks suurtähtede ja kirjavahemärkide järgi. Näiteks Brilli sildistaja.

2. Stohhastiline POS-i sildistaja: Selle meetodi puhul rakendatakse selliseid lähenemisviise nagu sagedus või tõenäosus. Kui sõna on treeningandmestikus enamasti märgistatud kindla märgistusega, antakse sellele testlauses see märgis. Sõnamärgis ei sõltu mitte ainult oma märgisest, vaid ka eelmisest märgist, seega pole see meetod alati täpne.

POS-märgistamine varjatud Markovi mudeli abil

Sildistamisprobleeme saab modelleerida ka varjatud Markovi mudeli (HMM) abil. See käsitleb sisendmärke vaadeldava jadana, samas kui märgendeid peetakse peidetud olekuteks ja eesmärk on määrata peidetud olekute jada. Näiteks x = x1,x2,…,xn, kus x on märgiste jada, samas kui y = y1,y2,y3,y4…yn on peidetud jada.

Kuidas Markovi varjatud mudel (HMM) töötab?

HMM kasutab ühendjaotust P(x, y), kus x on sisendmärgijada ja y on siltide jada. Siltide jada x jaoks on argmax üle y1…yn vahemikus p(x1,x2,…xn,y1,y2,y3,…). Oleme tekstist sildid kategoriseerinud, kuid selliste siltide statistika on ülioluline, seega on järgmiseks osaks nende siltide loendamine statistiliseks uuringuks.

KKK

POS-sildistamine märgistab iga üksiku sõna vastava sõnaliigiga, näiteks nimisõna või tegusõna. Tükeldamine läheb sammu võrra kaugemale ja rühmitab sildistatud sõnad fraasideks, näiteks nimisõnafraasideks, andes lausele pealiskaudse struktuuri.

Pindmine parsimine, mida nimetatakse ka tükeldamiseks või kergeks parsimiseks, hoiab juurte ja lehtede vahel maksimaalselt ühe taseme. See tuvastab fraasipiirid ilma täielikku parsimispuud ehitamata, mis teeb selle kiiremaks kui sügavparsimine.

Sildistatud sõnade tükeldamine fraasideks võimaldab süsteemil tuvastada üksusi, näiteks inimesi, asukohti, kuupäevi või tooteid. Nimetatud üksuste tuvastamine tugineb nendele tükkidele, et...tract tähendusrikkad väärtused toortekstist.

Funktsioon nltk.pos_tag() määrab kõneosa märgendid. Esmalt märgistatakse tekst funktsiooniga word_tokenize ja seejärel edastatakse märgendite loend funktsioonile pos_tag, mis tagastab iga sõna koos vastava märgendiga, näiteks NN, VB või JJ.

Jah. Masinõppe ja sügavate närvivõrkude abil treenitud tänapäevased tehisintellektiga sildistajad lahendavad mitmetähenduslikke sõnu, õppides konteksti suurtest korpustest, saavutades reaalse teksti puhul suurema täpsuse kui reeglipõhised meetodid.

Stohhastilised sildistajad kasutavad treeningandmetest õpitud tõenäosust. Masinõpe hindab, kui tõenäoline on iga silt ümbritsevate siltide põhjal sõna jaoks, ja valib seejärel järjestuse, millel on suurim üldine tõenäosus.

Peale NLTKpopulaarsete valikute hulka kuuluvad ruumiline kiirete tootmistorustike jaoks, Stanford CoreNLP ja Hugging Face Transformers trafopõhiseks märgistamiseks.

Tükigrammatikas vastab punkt mis tahes märgile peale rea alguse, tärn vastab nullile või enamale kordusele ja küsimärk vastab nullile või ühele kordusele eelneva POS-sildi mustris.

Võta see postitus kokku järgmiselt: