Fraserna i mening: Probabilistisk grammatik och sannolikheter för ord - Direkt jämförbara utan träning konstanter (via typ-antal och sannolikheterna för resp. ord och POS-tecken 700 k resp. ca 40 typer) antalen (ofattbart förvånande)

2015-04-12

Komplettering: Och inser jag. Nu vet jag var gränsen för var vi får mer troligt får ut språket. Någonstans ej nedanför 700 000 typer för orden. Fler lär krävas för verkliga typer i allt verkligt bestående av flera ord likt New York m..m. Hit upp börjar det någonstans om jag förstår det här rätt: Det hela var så förvånande från början så kanske överskattar man en del av vad det kan säga i övrigt. Nästan att jag ångrar lite att jag postade det: Men det är tveklöst över tolkning från hur unikt ovanligt och kanske talande det var.


Troligt ju längre efter nu - ett par timmar nu - troligt det särklass mest förvånande jag upplevt. Och också så lite tid för mig och så direkt just vad jag optimalt önskade men långt ifrån hade räknat med var möjligt. Underbart. Det är värdet av att man tog sig ett ord ständigt prioriterande sampla språket ordentligt: Man behöver inte alltid sitta och träna upp vikter eller sitta och korrigera "sannolikheter" med smoothing. Man har bra värden från start.


Corpus på 310 000 ord [Korrigering: Jag prövade först här - ett snabbare corpus - men antalet ord token d.v.s. utan space men accepterande ex. '",$ m.m. några tiotusen över 700 000 vilket helt säkert är förklaringen till att detta var möjligt] för frekvens max-normaliserade ger mycket nära samma skattade vikt utan behov av några tränade konstanter som probabilistiska vikter byggda med något inbyggt i NLTK (jag aldrig använt förr eller för den delen Python) tränat på mindre 1 MB rader man treebank jag tog ut (skärande säkert några hundra semi-automatiskt resp. förhand på säg 50 som någon klass eller modul i NTLK klagade på utan att klara att beskriva vad den gjorde som gick fel - Mest komplexitet på meningarna där viss "djup" i annoteringen ej tycks hanteras rätt av NLTK eller lika troligt gick fel när jag omvandlade träden med dess mellanslag och tabbar till en rader vilket NLTK modulen krävde).


Sannolikheterna skiljer sig givetvis för typiskt token enormt. Men så gör också antalet token.


Först därför att jag inte såg någon mening med att själv sitta och göra en mindre tids-prioriterad statistiskt-grammatiskt modell för en mindre detalj i en beräkning försökte jag söka rätt på en seriös färdig. Sådant är emellertid inte lätt att hitta på. En möjlig jag prövade var dock den funktion jag upptäckte sökande nätet efter språkmodell som Berekeley's parser har för att exportera ut den färdiga som kommer med denna.


Jag har ej vad jag minns prövat denna parser innan. Men mitt intryck var mycket gott av den. Ganska snabb och tycks ge god kvalitet utan att sitta och ladda överdrivet stora språkfiler. Trots som man ibland träffar på för mycket sund verktygs-tunga programvaror finns tråkigt obefintligt - nära nog - ingen dokumentation. Trots att jag vad jag minns inte programmerat Java sedan 2000 seriöst kommersiellt gick det hjälpligt att söka rätt på förståelse av att ett fel jag fick för export-funktionen måste bero på något annat (jag som ej körde version 1.7 vilket tycks vara den ändå som klarar just detta):


"WRITING GRAMMARS TO TEXT FILES
The parser reads and writes grammar files as serialized java classes. To view the grammars, you can export them to text format with:

java -cp berkeleyParser.jar edu/berkeley/nlp/PCFGLA/WriteGrammarToTextFile

This will create three text files. outname.grammar and outname.lexicon contain the respective rule scores and outname.words should be used with the included perl script to map words to their signatures."

[Refererat Perl-skript vet jag inte om verkligt på nätet längre: Jag hittade heller inget i distributionen även om Perl förekom i några java-filer.]

Från: Instructions for using the BerkeleyParser package | code.google.com/p/berkeleyparser (underkatalog)

Jag började också en ganska seriös insats för att ta exporten till något användbart för att testa principerna för mina funktioner större. Dock tillståndsmaskinen man får ut hade alla möjliga "POS-liknande indikationer" jag ej hittade bland mina listor. Därefter började jag känna att det hela nog kunde bli om inte lika tidsödande som att parsa treebanks från start själv med extraktionskod o.s.v. åtminstone ej fullständigt trivialt att expandera ut till sunda representationer givet att diverse annat som användandet av "@" inte var helt självklart för mig (kanske något kring relativ terminering "fördjupning" - jag önskade ej begripa det mer för en litet sak som här).


Säg att den här lilla strunt saken i NLTK som klarar enklaste tänkbara representationer på treebanks där varje fel den ej dör på är vad man själv behöver se till att hantera före- eller efter med det lilla data ej över trivialt att ta in i den på ett par timmar omotiverat arbetande kanske bygger på mindre än en 1 / 50 till 1 / 100 effektiv representation efter dimensions-reduktionen ner till färre POS-taggar. Men här gör det ingenting: Vi skattar komplexiteten och har ej behöv av att bygga parsningen (jämför med hur vi kan skatta kostnaden för att resa med buss, sedan tåg, och slutligen tunnelbana när vi gjort det innan utan att behöva göra resten av arbetet).


Vidare utgick jag från kända fenomen för hur vi mänskligt auto-skapar egna token för att försöka reducera komplexitet. D.v.s. förutom att krävande mer tagande ut ett chunk av flera ord motsvarande ex. ett varumärke välkänt för oss ofta processande orden och tagande ut konceptet men något mer effektivt. Här endast för vad känt tre-gram på ord nära grammatiska samband d.v.s. inget här relaterat koncept som varumärken, orter m.m. var en fråga. Jag önskade endast ett komplexitet mått kompletterande andra jag fångande svårighet från "motståndet" i antal ord (där har ju nu valt att sätta botten tillsvidare även om vi jämfört med hur vi gör chunking till fler-gram för sådant som President Obama eller Utrikesminister Fäldin för ord och / eller ljud-mönstren till ord - och självklart för lite åldrade om ännu levande Fäldin gör vi troligt skattning endast av orden utan så pass direkt inlärning av Utrikesminister och Fäldin med risk att som ung på endast 40 år missat att han kan ha varit det såväl som Statsminister och engagerad anti-alkohol alkohol-kapitalist på svenska Systembolaget).


Att jämförbarhet för resp. höll upp till sex ord (dock ej testat utan två stycken adjektiv vilket kan tänkas ge större avvikelser för vissa möjligheter - och där i nästan varje fall färger). Varken ord eller POS-taggar korrigerades för plural och singular vilket gav förväntade avdrift för resp. men också här med ett par undantag av dock inte mer än säg ffra totalt i övrigt ingen skillnad i förändring i magnitud mellan-dem.


Känd räknehjälp rörande division antal i form som frekvens (abc) / frekvens (bc) utnyttjades ej även om jag försökte få till det ett tag.


Istället tar jag ut explicita typer för resp. ord gemensamt som en första sannolikhet: P(x1) * ... * P(xn). Denna sannolikhet kommer alltid ges allt också när frasen består av endast ett ord.


Antalet typer unika för frasen är nu i variabel vi skattar delar av magnituden samma som antal ord.


Vi utnyttjar nu för tre-gram att vi kan söka snabba upp och förbättra skattningar såväl som addera förståelse genom att utnyttja första ord när DT i POS med sista där vi här och i allt diskuterat här vilket kanske borde sägas diskuterar som i tidigare inlägg parsningen av den komplexa NP-frasen d.v.s. vi har ej verb här men adjektiv, adverb, det, numeriska och relativa typer: Ex. Someone of larger magnitud very green Swedish: D.v.s. för tri-gram The punk dog: The dog som en till typ.


Denna typ för att optimeringen för ska tyckas möjlig snabba upp adderar en typ: En särskild hund.


Vidare när vi (som jag testat här bara förutsättande att minst lika bra enklare metoder när vi har flera NN av olika typer direkt efter varandra mot slutet) har flera adjektiv som tidigare diskuterat tenderar vi att lägga den mer tidsstabila generiska för vad NN indikerar närmast. D.v.s. den vi generellt bör få ut mer av att anta samförekomst med även om vi egentligen ej i ett särskilt fall sett det ännu eller söker optimera snabbare än att sitta och fundera bak. I exemplet ovan att hunden är rosa.


Rosa hundar är ovanliga men såväl rosa som hundar är vanliga ord. Och här skattar jag ej med bigram utan sannolikheterna för resp. ord. Kontextuell effekt hanteras i andra delar. Effektstorleken i effektivitet kan vi kanske tänka oss skapar utrymme för att hantera ovanligheten i bedömning tänkbar risk, möjlig barnbok vi ej vill klicka på i sökmotorns SERP eller stort värde vi kan bli rika på (gold under golvet i flerfamiljhusets källare enligt papper hittat när du tapserar om i lägenheten).


Nu har vi därför antal typer enligt: Antal ord + 1 + 1.


De två sista sannolikheter med tillhörande typer gäller dock endast när ord (i) och ord (i - 1) ej ger oss att vi ligger under tre-grammet där skipgram kan göras. Annars ligger vi istället på en extra typ för två-gram. Och för 1-gram ingen extra typ.


Magnituden behöver vi vidare sätta beroende av storlek på corpus. Och jag inser nu att jag behöver korrigera min tidigare uppgift om antalet ord. Det faktiska antalet är närmare 800 000. Det gav sundare resultat så jag körde på hela trots att ord som kommer in i senare funktion detta är avsett för ej kommer ge annat än [A-Za-z0-9] samt ett fåtal särskilda tecken bl..a relaterat pengar. Tänkbart - själva principen i magnitud beräkningen från första början - lär vi oss optimera alla ord utan hänsyn till hur jag och andra hellre vill ta ner antalet tecken vi behöver hantera.


Resp. antal typer hanterar vi nu när det totala antalet fras-beroende typer är större än ett enligt:


Magnitud = log ( Globalt korpus ) / log ( Frasen )

Heaps-law via lite avvägar och några försök fram och tillbaka för POS-komponenten där jag från början skattade sannolikheterna defekta utnyttjande NLTK's skattningar vilket man självklart ej kan därför att de är för få och samtidigt är så reducerade i typ-rymd att det ej behövs. Vi kan skatta dem när vi är nere på säg cirka 40 typer totalt från deras förekomst på resp. position räknade varje sådan regel-UNIK. Om sedan regeln i sig är troligare har föga betydelse här om än intressantare om vi bygger en parser.


Sannolikhet för head vi förutsätter är NN längst till höger sätter vi emellertid från den globala sannolikheten. Det är annars knappast görligt för människa att få till en optimering genom att hoppa över ett eller ett fåtal ord. Någon korrigering för DT eller annan jämförbar typ-indikerar ( $100 bör fungera bra även om jag inte prövade det: Ex. i $100 easy money - jag är inte bra på att bara få fram test-meningar längre även om det gick fint för ett år sedan).


För säg min testmening - betänk här att jag bara utnyttjar sannolikhet ord och POS-taggar - behov att meningarna ska var avettiga i övrigt fanns därför inte)


The very green blue soldier

Har vi nu typerna: The, very, green, blue, solider vilket ger sannolikheten vi använder vidare senare: P (The) * P (very) * P (green) * P (blue) * P (soldier).


Dessutom den lätta snabba typen vi ej förvirrar oss kring rörande färgerna: P (The) * P (soldier).


Och blue soldier som ger P(blue) * P(soldier) - kanske väckande association till red and blue troligare än från grön till iranska revolutionens grönbardister.


Magnituden är cirka ( log ( 770 000 ) / log ( 2 ) ) / ( log ( 7 ) / log ( 2 ) ). Vidare finns ett växande uttryck från den lokala typen samma som vi ibland ser använd för att skatta upp frekvens för föga förekommande flergram jämfört med ex. 1-gram eller som troligt (jag försökte ej) kan härledas från sannolikhets distributioner där antalet möjliga utfall över ett antal token beräknas (jag just nu varken minns vad familjen kallas men vi har bl.a. samma man sedan länge använt i biblioteks-söksystem - vanlig ännu - Bernoulli distribution om jag inte helt tänker fel nu) där jag ej nu exakt minns vad jag hamnade görande först fel enligt antalet * antalet samt sedan fel som jag minns det från antalet upphöjt till antalet. Hur effekten av denna påverkar för väldigt allmänt otroligt långa fraser vågar jag inte säga något om men någonstans totalt oavsett metod för skattning kommande under något har varje görlighet till vettig skattning process-komplexitet människa bottnat ner (vi kan rörande ett möjligt oerhört vanligt fel i programvara för språkanalys likt parsers jämföra med hur alla obehindrat räknat på med alla värdesiffror programspråket ger vilket ger spridning av varians - denna varians för ex. statistiska parsers om jag ej helt tänker fel märks dock ej i slutet som varians utan som bias skapande över-exakta modeller föranledande folk till att börja prata om att stora välgjorda annoterade treebanks ger övertränade modeller och att dom blir bättre av att försämre ner datat: I praktiken görande en sämre sak än avrundning tidigare).


Hur gör vi nu med sannolikheterna för resp. typ? Subkultur natural language processing med statistik är att tillämpa vilka viktsystem, dimensions-reducerande approximationer m.m. kreativt fritt så länge värde ges men ändå i sist steget sitta och göra poäng av att ändra om värden nära längst ut så att dom summerar till ett: "Så att det blir riktiga sannolikheter". Här vill vi fånga komplexitet människa men vi kan likväl jämföra med hur vi kan tänka statistiskt om orden ramlade ut från små maskiner - en för varje typ - där det hänt något annat följande sannolikhet gömt i maskinen: Kanske ett ord som inträffade med någon sannolikhet.


Vi tänker oss därför att resp. typ motsvarar en approximation med form likhet till ett tänkt utfall vi kan förstå ett tillhörande koncept eller perspektiv på den gemensamma över hela uttrycket giltiga konceptet. Ex. the dog ger oss e väg vi kan få ett giltigt utfall i en global distribution. O.s.v. för övriga.


Vi summerar därför sannolikheterna. Och vi gör det ännu utan att söka vandra över i entropi-världen (bl.a. relaterat därför att det ska gå in i mer komplexa funktioner där vi ej kan göra detta lika rakt på sak som med f(x,...,) log f(x....) / g(x.....) ) o.s.v. avdriften mellan säg fördelningarna över typerna. Eller kanske mer funktionellt för komplexitet såväl som enklare helt enkelt likställa vikt-sannolikheterna som realiserade sannolikheter beräknande log på dem ev. normaliserande det genom att multiplicera in sannolikheten: p log p.


Och därefter multiplicerar vi med magnituden. Att ha fler typer i snabbt-arbetsminne kommer med en kostnad. Värdet kommer ändå åtminstone upp till någon brytpunkt som funktion av approximativt antalet ord helt styrande efter säg sex - nio stycken (eller mindre - om vi väljer att utnyttja vetskap om när vi börjar få problem att få samtidighet upplevelse av ex. the med dog därför att en massa textlängd eller för många ord är mellan dem).


Hur gör vi nu för POS-komponenten? På samma sätt.


Men varför utnyttjar vi då POS-komponenten för att snabba upp vår tolkning? Därför att individen kan inte över 700 000 ord. Vidare så fort vi hamnar i föga sannolika ord oavsett hur god kunskap i antal ord kommer ord-komponent tappa.


Här för varje normalt vanligt förekommande ord får vi dock samma ungefärliga resultat därför att vi har en fet-normalisering i magnitud som ej är funktionellt realistisk för människa. Det är dyrare kunskap som man lika effektivt och bra ofta effektivare kan förenkla ner till ett system bestående ej av över 700 000 ord utan om jag minns rätt 40 - 50 POS-taggar (faktiskt färre: Det var nog där jag började men tog ner det ganska ordentligt kastande ut allt låg-frekvent resp. som jag ej kände igen - NX nu för mig t.ex.).


Här var det oerhört tilltalande för mig att jag fick detta. Jag hade räknat med att ej kunna lösa komplexitetsskattning så här direkt: Ev. behövande ta en dålig lösning som POS-modellen för längre uttryck och normalisera lite som tycks över några tusen test-meningen verkar vettigt upp till ej överdrivet många ord lämnande all kontroll över alla fall man ej kan föreställa sig eller klarar att prioritera för en begränsad komponent slumpmässig körning meningar med uppföljning.


Här kan nu såväl totala frekvens-rymden som typ-rymden utnyttjas som första nivå av möjlighet att beräkningseffektivt få en komplexitetsskattning under skillda antagande av person eller ämnesområde (jämför förstärkande medicin som en komponent med fortfarande ha sllmänt språk). Avdriften när magnituden konfigureras enligt resp. antagande mot den kompoennt vi väljer att ha konstant: POS-modellen ger en enkel och för mig här exakt så snabb jag önskande föregripande mer riktad dyrare kontextuell effekt när indikerat intressant nog.


Ytterst sällan: Man når så tilltanade enkelhet med så begränsad insats - för att säga det minst - och så direkt dit önskad.


Och i en domän där man verkligen inte som förutsatt mer allmänt tänker sig riktigt den närhet och direkta jämförbarhet. Men det är som jag uttryckt förr också för fall där jag valt att ta mycket stort data i typer - och här är vi också i någon mening mång-dimensionella i stället för få-dimensionella om än ovanligt beräknings-billigt - och mängd samplat för typerna kan ge ordentligt värde när man betraktar det med en motsvarande kostsam mångdimensionell insats (kostsam i min värld i alla fall: 1 dator nu några år gammal).


700 000 + några tiotusen ord istället för några tiotusen eller vad nu normalt allmänt med frekvenser byggda på en riktigt stor mängd data börjande lite försiktigt med en del "forskning" (uttryckande mer som entitetens affär allmänt än vad man idag menar med forskning) cirka 1550 (om jag minns rätt här) med ett fåtal artiklar och sedan växande allt mer tydligt med början 1960-talet såväl som antal entiteter och typer av entiteter det kommer ifrån.


Nyligen skattande "storlek" koncept mer allmänt som approximation (Hur stort är konceptet Uppsala jämfört med New York som en genomsnittlig läsare av allt på engelska uppfattar det?) insåg jag dessutom kontrollerande värden att den lilla smoothing jag gjort var bäst bara att ta ut. När värdena får propagera något över riktiga inte mer än P ( A | B ) för något lätt associerat ges sundare värden än vanliga smoothing algoritmer för mina noll förekommande men känt existerande koncept (ex. diverse orter på landsbygden i något föga på engelska diskuterat land i Afrika - kanske rent av ett fem-gram med ett etniskt uttryck i sig: Sådant ger hundra tusentals noll förekomster trots gigantisk mängd data).


Vad händer nu om jag tar ett välkänt statistiskt data-representation med bara några tiotusentals typer? Eller ens som jag jämförde efter att tidigt försök med cirka 300 000 typer (jag annars gärna använder i allmän testning körning varande snabbare för vissa saker)? Ej jämförbara värden. Här har vi vad man skulle behöva sitta och lägga minst dagar på att träna maximum-entropi-vikter för resp. komponent antagande att man där lyckas fånga något korrekt beskrivande sambanden (vilket här hade varit svårt att få till bra som jag klarade att se men jag brukar behöva ett tag på att se hur mer komplicerande vikt-värderande jämförelser kan komma till även för mer linjär-regression - de tycks alltid för mig anta att världen står still och att man skulle tappa möjlighet att se förändring men normalt går sådant att lösa - även om jag aldrig trots några försök över åren klarat att maximum entropy samskatta frekvens-vikter från visuell stor-populations-discourse - tänk något närmare foto-taggning men ej kanske riktigt exakt det - med liknande vikter för dokumentförekomster på nätet - även om frekvens för koncept tycks hjälpligt att träna samma utan sjukligt bias eller i varians-normalisera avstånd besvärande oanvändbart korta - de tränar antingen med enorm preferens den ena eller den andra rymderna med dimensioner - något tankefel tror jag: Tråkigt därför mycket fint bild-data man blir mindre benägen att använda p.g.a. det sunt samlat intensivt när "management"förändringar blev kända tänkande att kommersiell uppskärpning ex. rörande betalningssystem såväl som robots.txt och användar villkkor skulle komma).


Och saknade resten av datat hur kan jag uttrycka expansion uppåt? Smoothing säger oss ingenting vettigt när vi skattande komplexitet för en NP-fras från ett eller flera okända ord. I den mån smoothing är användbart är vi närmare skalande magnituden på de ord vi har frekvenser för (och "självklart" noggrant sist se till att allt summerar till just 1 hellre än säg 0.4 eller 15 - så att det blir "riktiga sannolikheter" som vi gediget kan ta vidare räkna loss på utnyttjande alla 16 decimaler java eller python ger som default eller vad det nu är: En av få saker man verkligen minns från såväl högstadium, gymnasium och tekniskt fysik - ständigt återkommande kring att avrunda, mätosäkerhet m.m. så vana man först av och till börja strunta i förstår faktiskt praktiskt ger något och från det expanderande en förståelse all utbildning egentligen aldrig i all ärlighet tillförde mig).


Helt unikt egentligen. Och så fullständigt omotiverad hellre dum söka efter lämplig liten färdig språkmodell än troligt snabbare bara göra koden och träna upp det från start och ha något för liknande lite utannför centrala viktigare delar där man kan vinna på något ganska dyrt likt en probabilistisk modell men där det kanske inte betalar sig egentligen jämfört med värde. Det här är ju vad som inte blir mer än en av åtta snabba effektparametrar för frasen globala start-vikt för att detektera vad vi vill lägga tid på djupare (samt egentligen samma sak: skattningar för sådant där genomsnittlig effektstorlek är vad som är görligt att arbeta med - ex. utgångspunkt skattande ett sökresultat utan vetskap om personerna som söker oavsett om nu sökmotor eller köpande annonser eller erövra serpen).