tuvastamine lausefragmentide alamlausete ja...kui kirjavahemärgid on puudu: olen rahul koik toimis...
TRANSCRIPT
Alamlausete ja lausefragmentide
tuvastamineSiim OrasmaaEleri Aedmaa
Alamlausete tuvastamine eesti keelesMis on alamlausete tuvastamine ja milleks on see vajalik?
● Alamlausete tuvastamine on kirjaliku keelekasutuse pikkade ortograafiliste lausete tükeldamine alamlauseteks (ingl k clause splitting).
● Vajalik mitmetes erinevates loomuliku keele automaattöötluse valdkondades, nt püsiühendite tuvastamisel, masintõlkes jne.
● Meelestatuse analüüsil oluline, et saaks uurida meelestatust osalause tasandil ehk eristada ühe lause võimalikke (erinevaid) emotsionaalseid laenguid.
Alamlausete tuvastamine eesti keelesMis on alamlause/osalause?
● Lause on keelelise suhtluse põhiüksus. Tüüpiline lause sisaldab pöördelist verbivormi ja ühe või mitu sellist osa, mille keskmeks on käänd- või määrsõna.
● Tüüpilised laused on lihtlaused ehk laused, mis ei sisalda teisi lauseid.
● Lause, mille koosseisus on mitu osalauset, on liitlause.
● Seega osalause on liitlause moodustaja, millel on lausele iseloomulik ehitus.
Alamlausete eraldamine eesti keelesLähenemised:● Alamlausepiirid süntaksianalüsaatori abil:
automaatse süntaksianalüüsi (Müürisep, 2000) käigus määratakse alamlausepiirid ning need võib välja lugeda analüsaatori väljundist
● Alamlausepiiride määramine kui iseseisev ülesanne (Kaalep, Muischnek 2012)○ Lisaks tavalistele osalausepiiridele keskendutakse
eraldi ka kiilude eristamisele○ Näide kiilust:
Avastus, et asi on halb, põhjustas hirmu.
Alamlausete eraldamine(Kaalep, Muischnek 2012)
Programmi nõuded:● Sisendtekst on jagatud lauseteks,
morfoloogiliselt analüüsitud ja ühestatud (programmi t3mesta abil)
Näide programmi väljundist (ilma morf analüüsita):
Asukoht on natuke jama <kiil>(raske ligipääseda tipptunnil, aga mis teha)</kiil>, ning pood väike, <kindel_piir /> aga äri sujub nagu õlitatult.
Alamlausete eraldamine(Kaalep, Muischnek 2012)
Programmi töökäik I (lihtsustatult)1. kindlate kiilude märkimine:
sulgudes olev tekst2. tähistatakse osalause keskmeks sobivad üksused:
pöördelised verbid, liitajad (nt on teinud, oli tulnud),eituse vormid (nt ei tehtud)
3. märgitakse oletuslikud osalausepiirid:kirjavahemärgid (: , ; – . ? !) ja sidesõnad (ja,ning,ega,või)
Alamlausete eraldamine(Kaalep, Muischnek 2012)
Programmi töökäik II (lihtsustatult)4. Märgitakse jutumärkidega seotud piirid
Otsekõne algus/lõpp => kindlad piiridjutumärkide sees/väljas on verb => eraldatakse kiil
5. Märgitakse kindlad piirid:koolon, semikoolonkoma/mõttekriips + sõnad (ja, ning, või, et, kui, ...)
6. Eemaldatakse ja/ning oletuslikke piire, ntrohelistes, punastes ja sinistes pükstes
7. Leitakse uusi kindlaid piire: kui mõlemal pool oletuslikku piiri on osalause keskmeks verb => kindel piir
Praktiline osa
● Rakendasin osalausestajat seminari korpustel○ Lisasin korpuse JSON failidesse osalausete
informatsiooni:■ clause_id - millise osalause alla sõna kuulub■ sentence_id - millise lause alla sõna kuulub
(dubleerib end, start muutujaid)○ Näide (sõna ja clause_id):
Väga tore inimene ja annab oma ainet hästi1 1 1 1 2 2 2 2
Märkus väljundi kohta:kiilu sees võib olla osalauseid (ja teisi kiile)
Näiteks tudengite küsimustele vastamise korral 1 1 1 1 1<kiil> ( olenemata asjaolust <kiil>, et mitu 2 2 2 3 3 3tudengit esitab sama küsimust , </kiil> usun , 3 3 3 3 3 2 2<kindel_piir/> et see ei ole pedagoogiliselt õige ) 4 4 4 4 4 4 4</kiil> . 1
Programmi töö kvaliteet● Töö kvaliteet kannatab:
○ kui kirjavahemärgid on puudu:■ Olen rahul koik toimis naq pidi toimima 1 tp oli
kaup kohal○ kui kirjavahemärgid on “kleepunud”:
■ Huvitav,ma alles kahtlen,kust osta Ipadi ... siin on jube kallis,aga mujal tehakse maha ...
○ kui verbid on välja jäetud:■ hea teenindus , normaalsed hinnad■ Täitsa norm klubi ...... Normaalne ja sõbralik
suhlemine kliendiga....■ Tootevalik on hea , hinnad ka head ning
teenindus korralik.
Koodinäide:alamlausete kättesaamineimport json
fnm = 'hinnavaatlus-olp.json'data = json.loads(open( fnm ).read())
for elem in data: ids = sorted(set(zip(elem['sentence_id'], elem['clause_id']))) words = list(zip(elem['sentence_id'], elem['clause_id'], elem['word'])) segments = \ [[ w for (s, c, w) in words if s==s1 and c==c1] for (s1, c1) in ids ] print ( segments )
Alamlausete tuvastamine inglise keeles (ingl k clause identification)
● CoNLL-2001: Osalause (clause) on sõnade järjend, mis sisaldab alust ja öeldist.
● CoNLL-2001 ülesanne oli identifitseerida osalauseid masinõppe meetodeid kasutades.○ Ülesanne jagati kolmeks: osalause alguse identifitseerimine,
osalause lõpu identifitseerimine ja terve osalause tuvastamine. ○ Kuldstandard: Penn Treebanki juhised, kus eristatakse järgmisi
tüüpe: S, SINV, SBAR, RRC, SBARQ, SQ, S-CLF, it-extraposition, FRAG.vt täpsemalt: http://www.ldc.upenn.edu/Catalog/docs/LDC99T42/prsguid1.pdf
○ Osales kuus süsteemi.
Alamlausete tuvastamine inglise keeles (ingl k clause identification)
● CoNLL-2001 parima tulemuse sai Carrerase ja Marquezi süsteem. ○ Üldine lähenemine kõikide ülesande osade puhul: õppivale
algoritmile antakse väga suur hulk lihtsaid binaarseid tunnuseid, eeldades, et klassifitseerijate konstrueerimiseks tuvastatakse asjakohased tunnused.
○ Andmestikus olid märgendatud lausepiirid ja sõnaliigid. Samuti oli tekst varustatud känkimise märgenditega (chunking-tags). Kasutatud tunnuste abil arvestab süsteem näiteks kirjavahemärkidega, lausemallidega, sõnaliikidega ja ka känkimisest saadud üksustega.
○ See, et süsteem kasutab tunnuseid, mis sisaldavad infot terve lause kohta, tagas kõige parema tulemuse.
Alamlausete tuvastamine inglise keeles (ingl k clause identification)
Georgiana Puscasu (2004) süsteem:● Algselt loodud rumeenia keelele, hiljem inglise
keelele kohandatud.● Eesmärk tuvastada finiitverbi sisaldavaid
osalauseid.● Sisendiks morfoloogiliselt ühestatud tekst.● Osalausepiiride määramiseks kasutab:
○ koordineerivaid sidesõnu ja kirjavahemärke: I didn’t know/ who she was,/ or what she wanted./;
○ alistavaid sidesõnu: if, that, because, although, but that, in order that, as if, even if, wh-words;
○ teisi omadusi: info verbi finiitsuse/infiniitsuse kohta.
Alamlausete tuvastamine inglise keeles (ingl k clause identification)
● Praegu pole osalausestamine inglise keeles kuigi aktuaalne teema.
● Vajaliku ja enama saab kätte süntaksianalüüsi vahendeid kasutades.○ Näiteks Probabilistic LFG F-Structure Parsing annab
suluesitusena tulemuse:I didn’t know who she was, or what she wanted.[ S1 [ S [ NP [ PRP [ I ] ] ] [ VP [ AUX [ did ] ] [ RB [ n't ] ] [ VP [ VB [ know ] ] [ SBAR [ SBAR [ WHNP [ WP [ who ] ] ] [ S [ NP [ PRP [ she ] ] ] [ VP [ AUX [ was ] ] ] ] ] [ , [ , ] ] [ CC [ or ] ] [ SBAR [ WHNP [ WP [ what ] ] ] [ S [ NP [ PRP [ she ] ] ] [ VP [ VBD [ wanted ] ] ] ] ] ] ] ] [ . [ . ] ] ] ]
http://lfg-demo.computing.dcu.ie/lfgparser.html
Alamlausete tuvastamine inglise keeles (ingl k clause identification)
http://ironcreek.net/phpsyntaxtree/
Lause jagamine fragmentideksChunking
● Chunking (ka partial parsing) - lause osaline parsimine○ Kui täieliku parsimise eesmärgiks on moodustada
lause liikmetest puu, siis osaline parsimine väljastab sellest puust vaid alamosad (lausepuu leht-tipud + nende vanemad teatud kõrguseni);
○ Sageli töökindlam, kui täielik parsimine: annab alati tulemuse ja mitmesust on vähem;
○ Samas: ei üritagi väljastada tervikuna keerukamaid fraase, nt inglise keele puhul PP-fraase:
the president of the United States (NP the president ) (PP of ) (NP the United States )
Lause jagamine fragmentideksChunking
● Näide: täielik parsimine vs osaline parsimine
My dog likes eating sausage.(S (NP (PRP$ My) (NN dog)) (NP My/PRP$ dog/NN ) (VP (VBZ likes) (VP likes/VBZ eating/VBG ) (S (NP sausage/NN) (VP (VBG eating) (NP (NN sausage))))) (. .)))
Lause jagamine fragmentideksChunking
● Lähenemised (inglise keele puhul):○ Masinõppe puhul õpib klassifitseerija fraasipiiride
määramise märgendatud treeningkorpuselt■ korpuses peab iga sõna juures olema
märgendatud selle fraasikuuluvus■ tunnused: sõnad, sõnaliigid ja eelnevad fraasid■ CoNLL 2000 võistlusel saavutas parim
masinõppe süsteem tulemuse 93.48% (F1 skoor)○ Reeglipõhise lähenemise puhul koostatakse fraaside
grupeerimiseks regulaaravaldisi üle sõnaliigimärgendite
Lause jagamine fragmentideksChunking
● Näide reeglipõhisest osalisest parsimisest Pythoni teegi NLTK abil:
import nltk
sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"), ("dog", "NN"), ("barked", "VBD"), ("at", "IN"), ("the", "DT"), ("cat", "NN")]
grammar = "NP: {<DT>?<JJ>*<NN>}"cp = nltk.RegexpParser( grammar )result = cp.parse(sentence) ...
Lause jagamine fragmentideksChunking
● Näide reeglipõhisest osalisest parsimisest Pythoni teegi NLTK abil:
… print result
(S (NP the/DT little/JJ yellow/JJ dog/NN) barked/VBD at/IN (NP the/DT cat/NN))
Lause jagamine fragmentideksChinking
● Chinking - mõnikord on lihtsam reeglites öelda, mis ei peaks fraasi kuuluma:
sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"), ("dog", "NN"), ("barked", "VBD"), ("at", "IN"), ("the", "DT"), ("cat", "NN")]
grammar = r""" NP: {<.*>+} # koik yheks tykiks }<VBD|IN>+{ # VBD/IN valja"""cp = nltk.RegexpParser( grammar )result = cp.parse(sentence)
Lause jagamine fragmentideksChinking
● Katse: chinking eesti keelelenaiivne lähenemine: liitsin kõik fraasiks ja seejärel jätsin välja sõnaliigid V,J,Z,D,K
Väga/D (NP meeldiv/A teenindus/S) ,/Z (NP head/A hinnad/S) ,/Z (NP korralik/A pakkimine/S) ning/J mainimata/V ei/V saa/V ka/D jätta/V (NP tasuta/S) ja/J (NP kiiret/A transporti/S) üle/K (NP Eesti./H)
(NP Mina/P) kiitsin/V (NP ühel/N grilli/S õhtul/S seda/P firmat/S) küll/D (NP oma/P sõpradele/S) ,/Z
Lause jagamine fragmentideksChunking/Chinking
● Kokkuvõtteks:○ NLTK abil on reegleid suhteliselt lihtne koostada ja
testida;○ eesti keele puhul ilmselt ainult sõnaliikidest ei piisa,
täpsemaks eraldamiseks peaks reeglid arvestama ka käändeinfot:ühel grilli õhtul seda firmatN_ad S_g S_ad P_p S_p
○ ainult morfoloogial põhinev lähenemine sobib siiski pigem esmase lähendusena, keerukamate lausete puhul oleks tarvis ka süntaksi arvestamist;
Nimisõnafraaside filtreerimine(Müürisep 1999)
● Eesti keelele on ka varem katsetatud reeglipõhist nimisõnafraaside tuvastamist (Müürisep 1999)
● Reeglid põhinevad kitsenduste grammatikal;○ nimisõnafraase otsitakse süntaksianalüsaatori
väljundile toetudes○ autori hinnang programmi tööle: täpsus keskmiselt
85%, vigu tehakse alla 2%● Veebist kättesaadav versioon programmist
on Windowsi-põhine, aknaga programm;
Nimisõnafraaside filtreerimine(Müürisep 1999)
Lause jagamine fragmentidekspindsüntaktiline analüüs
● Pindsüntaktiline analüüs on lause süntaktiline analüüs leidmata ilmutatult lause hierarhilist struktuuri.
● Eesti keele jaoks on pindsüntaktilise analüüsi reeglid välja töötanud Kaili Müürisep.
● Hüpotees: nimisõnafraaside ja teiste lausefragmentide leidmiseks pole piisav, sest väljundis ei kajastu konkreetsed fraasid.
Lause jagamine fragmentidekspindsüntaktiline analüüs
Näide süntaksianalüsaatori väljundist:
"<Eile>"
"eile" L0 D cap @DN>
"<varahommikul>"
"vara_hommik" Ll S com sg ad @ADVL
"<pommitasid>"
"pommita" Lsid V main indic impf ps3 pl ps af <FinV> <Part-P> @FMV
"<Türgi>"
"Türgi" L0 S prop sg gen cap @NN>
"<sõjalennukid>"
"sõja_lennuk" Ld S com pl nom @SUBJ
"<mitut>"
"mitu" Lt P indef sg part @OBJ
"<küla>"
"küla" L0 S com sg part @<Q
"<Põhja-Iraagi>"
"Põhja-Iraak" L0 S prop sg gen cap @NN>
"<kurdi>"
"kurd" L0 S com sg gen @NN>
"<aladel>"
"ala" Ldel S com pl ad @ADVL
"<.>"
"." Z Fst
"</s>"
Lause jagamine fragmentideksalgoritm fraaside otsimiseks
● Proovime otsida nimisõna- ja omadussõnafraase. Ei otsi tegusõna-, määrsõna-, kaassõna- ja hulgafraase.
● Sisendiks pindsüntaktiliselt analüüsitud tekst.
● Ei arvestata, et üks fraas võib laiendada teist.
Lause jagamine fragmentideksalgoritm fraaside otsimiseks
● Nimisõnafraaside (NP) jaoks märgendada fraasipõhjadena (NPP) nimisõnad (S), arvsõnad (N) ja asesõnad (P), mis on alused (@SUBJ), sihitised (@OBJ), määrused (@ADVL) ja öeldistäited (@PRD).
● Adjektiivifraaside (AP) jaoks märgendada fraasipõhjadeks (APP) adjektiivid (A), mis on alused (@SUBJ), sihitised (@OBJ), määrused (@ADVL) ja öeldistäited (@PRD).
Lause jagamine fragmentideksalgoritm fraaside otsimiseks
● Täiendid:○ NP võimalike laienditena (NPL) märgendada @NN>,
@AN> ja <@NN, @<AN, <DN, @<INFN○ AP võimalike laienditena (APL) märgendada @NN>,
@AN>.Märkus. Ka määrsõna võib laiendada omadussõnafraasi, kuid praeguse juhendi järgi saab selline laiend määruse märgendi @ADVL. Seega praegu jäävad kõrvale omadussõnafraasid, mille laiendiks on määrsõna.
● Kui tekstis asuvad järjest NPL ja NPP, siis eralda need fraasina.
● Kui tekstis asuvad järjest NPP ja NPL, siis eralda need fraasina.
● Kui tekstis asuvad järjest APL ja APP, siis eralda need fraasina.
Lause jagamine fragmentideksalgoritm fraaside otsimiseks
● Eelneva algoritmi väljundi puudused:○ väljutab ainult kahesõnalisi fraase;○ ei väljuta omadussõnafraase, mille laiendiks on
määrsõna;○ ei arvesta koordinatsiooniga.
● Parema tulemuse saamiseks võib lisada täpsustavaid reegleid.
Lause jagamine fragmentideksalgoritm fraaside otsimiseks
● Näiteks:○ Kolmesõnaliste fraaside saamiseks:
■ Kui tekstis asuvad järjest NPL, NPL ja NPP, siis eralda need fraasina.
○ Määrsõna probleemi lahendamiseks: ■ Kui määrsõna (D) süntaktiline märgend on
@ADVL, siis märgendada see sõna omadussõnafraasi laiendina.
○ Koordinatsiooni lahendamiseks:■ Kui tekstis asuvad järjest APL, koordineeriv sõna
“ja”, APL ja APP, siis eralda need fraasina.
Lause jagamine fragmentidekspindsüntaktiline analüüs
● Kokkuvõtteks:○ Nii pindsüntaktilise teksti vaatlemine kui ka
koostatud algoritm tõestavad, et fraaside otsimine pindsüntaktiliselt analüüsitud tekstist on keeruline ülesanne.
○ Võib oletada, et fraaside leidmiseks eestikeelsest tekstist on oluline arvestada lause hierarhilist struktuuri.
ViiteidOsalausete tuvastamine eestikeelses tekstis kui iseseisev ülesanne, Heiki-Jaan Kaalep, Kadri Muischnek, 2012. http://www.rakenduslingvistika.ee/ajakirjad/index.php/aastaraamat/article/view/ERYa8.04 Introduction to the CoNLL-2001 Shared Task: Clause Identification. http://arxiv.org/pdf/cs/0107016.pdfX.Carreras, L.Marques. Boosting Trees for Clause Splitting.http://l2r.cs.uiuc.edu/~danr/Teaching/CS598-05/Papers/TangMooney00.pdfNatural Language Processing with Python: Ch 7 Extracting Information from Text. http://nltk.org/book/ch07.htmlC. Gardent. NLP Applications Lecture 5: Chunking with NLTK. http://www.loria.fr/~gardent/applicationsTAL/slides/l6-nltk-chunking-2x2.pdfCoNLL-2000 Shared Task: Chunkinghttp://www.cnts.ua.ac.be/conll2000/chunking/G.Puscacu. A Multilingual Method for Clause Splitting.http://www.cs.bham.ac.uk/~mgl/cluk/papers/puscasu.pdfEestikeelsete nimisõnafraaside filtreerijaftp://ftp.eki.ee/pub/keeletehnoloogia/EstNPTool/http://www.eki.ee/keeletehnoloogia/projektid/EstNPTool/estnp.html