Chunk parser: Fras-relationer för grammatisk- och semantisk information

2013-03-11

Speech and Language Processing är en excellent referens till mer än relaterat tolka tal, och har praktiskt i området statistical language processing oftare varit till nytta än Foundations of Statistical Natural Language Processing (ändå vad jag använder oftare än mycket annat och ett komplement kring en del) skriven av Dan Jurafsky's kollega Mannings. Den första ger en seriös och användbar introduktion till chunking medan det kanske är lite förvånande att den senare föga berör det och kanske lite negativt givet dess större användningsområden kring mycket relaterat praktisk problemlösning kring så mycket (regelbundet återkommande område man kanske glömmer är portning av data eller gamla register där meta-information saknas men också data mining.


Eftersom jag är svensk född i kyla och överlevande snö är balans viktigt. Berömmer man en entitet för mycket kan de bli upphetsade och springa i dörrar och släppa ut värmen eller överäta av förråden. Jag införde därför lite "träd-rekursion" i min semantiska chunk-parser där ju:


"The primary limitation placed on these chunk rules [Egentligen refererar han till en särskild sorts chunkers men det struntar vi i.] is that they cannot contain any recursion; the right-hand side of the rule cannot reference directly or indirectly the category that the rule is designed to capture."

Vi fortsätter nu Chunk parsers presterar på nivå med människa för meningar utvalda för att vara väldigt svåra för dem och tittar hur vi tar ut argument 1 till resp. verb i exempel meningen från hennes artikel som analyserade chunkers.


För ett parse-träd när vi ska tolka det för att ta ut en given sorts information existerar en korrekt väg givet trädet och givet när så är viktigt ev. statistiskt-modell för att välja nära flera val finns. Givet det går det naturligtvis utmärkt att representera platt tillsammans med programmatiskt logik. Jämfört med min representation av människans kunskaps-koncept (Blue light) al'a som mest slösaktigt uppställd 1 000 000 koncept och tiotals miljoner numera relationer är det i mycket mindre utsträckning möjligt. Man vinner på att extrahera och representera information på sådant sätt att vetskap bevaras i strukturen på ett sätt lättare att nå. När vi hanterar enskilda meningar, stycken o.s.v. skadar inte lite logik i programmen särskilt som de tenderar att bli snabbare av mindre rekursion, tillståndstabeller m.m.


För situationen att ett verb på en mer undanskuffad plats i vårt "parse-träd" inte har direkt möjligt att begripa vilket dess subjekt är behöver det ju hämta fram den verb-fras (resp. en del annat möjligt) som uttrycker dess relation till det. Det var vad Martha såg som det viktigaste värdet med vanliga parsers (vilket givetvis stämmer för flexibilitet om och när man kan eller vill betala med prestandan relativt mängden kod). Just för att lösa problematiken i ex. meningen är det dock egentligen inte särskilt mycket givet att man kan relatera chunks (och som här eg. inte explicit som named relations vilket ju heller inte är default för Blue light heller). Nedan är hela koden för det undantaget en rad med "return -1":


Klicka på bilderna för att se bättre

Hittas "ovanför" i kodlogiken inte ett subjekt som stämmer med S-id-numret anropas denna och om något kommer tillbaka större än -1 undersöks det. Och något kommer ut. Nedan första argumenten till verben i tidigare refererad ex. mening ("Big investment banks refused to step up to the plate to support the beleaguered floor traders by buying big blocks of stock, traders say."):



Övriga argument (och argument i ungefär samma mening som i Marthas excellenta SemLink vars nytta blev enkelt verklig mer än Verbnet när jag upptäckte att Verbnet som sparar ned tid att få samman dem finns.) är avstängda eftersom jag testade den nya och mycket snabbare kod-versionen för att hämta just verb-relationer till verb på subjekt.


Utan denna eller en liknande kontroll (den jag använde innan långsammare med också funktionell utan "1-dimensionella parsnings-träd" kanske vi ex. får problem med the plate. Är det ev. subjekt till VB direkt efter (nummer 6 i bilderna):



Ett alternativt sätt men med fler loopar och kontroller - och långsammare - är att promenera bakåt från verbet och titta vad som relaterar till det innan, och skapa en kedja tills vi når vad vi är säker på är översta verbfrasen. Inte mer komplicerad logik än chunkers, och kanske rent av enklare eftersom det bara är fraser. Vanligen är det tror jag ofta precis som i ex. meningen diverse PP-operatorer efter varandra och före och efter aktuellt verb som ställer till det men dom är ju bland det enklare att vandra över utan särskilt mycket logik och där mer logik krävs kan ju den mer ambitiösa använda logik representerad i kunskap i form av datastrukturer människan självorganiserat åt oss att skörda (ex. Verbnet m.m.) eller tror jag oftare för just sådant här egentligen mindre omtalade men nog så stora The Specialist Lexicon (U.S. National Library of Medicine, National Institutes of Health) där vi hittar en hel del "avslutande" om verb (och verb:et innan avslutar ju med vad vi har mellan det och verb:et efter.


Nedan ex. på verb complement från The Specialist. Till höger syns en bit av katalogen där det datat är strukturerat jag lät vara kvar med diverse andra verb-datakällor markerade med pilar (och kataloger med data möjligen - högst osäkert eg. - nedsparat samtidigt med en liten bugg i min spindels tolkning av webbplats-direktiv kring sådant om nu det alls var något aktuellt den tiden i ett av fallen och där ett större "bibliotek" / "institution" från europeiska kontinenten resp. ett antal parsers och liknande jag testade men inte tycker är något att rekommendera vara slöare ungefär mycket annat som ger mer information eller hade andra problem).


Skapad med Gimp och Google Docs i konstnärlig händelse och skapelse för att mer än illustrera verb dokumentera åren bakåt och säkert fortsatt länge där diverse arbetsmoment sker med applikationer på webben enklare på vissa sätt och med vanliga applikationer därför att vissa moment tycks de första aldrig få till ex. relevant här skärmdump som auto-sparas i min hemkatalog med min Linux-fix för funktionen.

Slutligen var det rekursionen - och för korrekthet rekursion i skriven pre-kompilator-mening mer än abstrakt koncept - har vi det nedan (första halvan av koden hade vi egentligen kunnat skriva på tre rader men den ska tas över mer eller mindre exakt till annat och har värde så här ett tag för att se om den har sönder saker märkbart istället för att kanske missas onödigt länge med underliga problem svårare att hitta ovanför). Rekursionen är att vi anropar samma funktion med det nya verbet vi fick från koden i en av de första bilderna.



Det tycks mycket troligt att jag plockar bort rekursionen. Jag är en starkt troende på att rekursion, grafer (snarare än ex. de säkrare hashtabellerna) särskilt skapat flexibelt med pekare (instabilt och farligt) eller ännu värre enkelt (blir stort och slött utan att det märks) är som koncept på universiteten (jag var som ung och mindre skadad av verkligheten involverad i labbarna runt Algoritmer och Datastrukturer, Uppsala Universitet kanske 1998 tror jag medan jag var student på Teknisk fysik för att vara studenterna på kursen behjälplig m.m. och rätta dem senare men visste inte bättre) ett exempel på dispergens mellan de datormiljöer, utmaningar och intellektuella resurser typiska för arbetslivet. Elegansen är ju ett värde i sig som bedöms gällan algoritmer medan stabiliteten i den faktiska implementationen några mätningar görs från betyder föga. Hade prioritet istället lagts på stabilitet och kvalitet tycks inte otroligt att både en försvarlig-andel av säkerhetsproblemen liksom de ofattbart dåligt optimerade program som år efter år suger upp all extra prestanda man får med ny dator (ex. Windows XP jag nyligen kom på att sortera en tabell så att det gjords faktiskt visuellt: nästan så snabbt att man inte märkte det ens under last men likväl systematiskt vad som kostar och för åtta år sedan hade datorn jag hade för nöjes-surfande inte orkat det utan att det direkt stört: helt otroligt. Inte självklart att problemet just har med XP att göra. Det mesta man installerat och avinstallerat tycks ju ha dll eller vad det numera kallas kvar registrerade såväl som oregistrerade).