Snabb och mycket acceptabel smoothing för särskilda användningsområden inom natural language processing

2013-09-27

I NLP görs tror jag smoothing nästan huvudsakligen när P ( A givet B ) utifrån relativa frekvenser skattas. Antag emellertid att vi önskar betrakta P ( A,B) där vi vill se "A,B" som en symbol i sig och där utan att ordning har betydelse.


Antag vidare att vi skattar förekomst från olika corpus varierade i storlek, varierade i exakt vad vi samplar (jfr samförekomst i titel rörande detektion av fler-gram och/eller ord respektive samförekomst i taggar för artiklar i journaler).


Vidare gäller att vi ej vill se varje sample som vad vi sparar särskilt för enskild användning men samtidigt heller inte vill kasta bort den expertis det kan representera. Korrekt praktiskt har varje sample gjorts utvalt för att förstärkta där det ses meningsfullt i en övergripande grundläggande språkmodell i meningen hur språk speglas ner ex. i similarity-operationer eller när stöd där saknas rörande nya relationer (vi antar att vad vi här skapar byggs kontinuerligt vidare men smalare i typdokument som skattas: endast gårdagens nyheter fortlöpande vi uppdaterar med).


Vi har endast från resp. sample sannolikheterna att utgå från - därför att dessa filer är elegant samlat i en katalog på en snabb-hårddisk medan filer med själva antalen ligger spridda över tre eller fyra hårddiskar och skulle ta ej trivial tid att kopiera över till snabb-hårddisk - och önskar ej att mycket stora sample ex. från alla artiklars titlar i BMC och NIH eller United Nations dokument avseende olika rubriker skattat sekundär ej ska bestraffas för mängden typer oavsett per värde eller ngram ska reduceras abnormt (ca 8 - 16 GB styck) - eller internt Wikipedia-refererar-annan-artikel på antagligen cirka 40 GB eller mer (ej sammanfört en fil så det enkelt att räkna ut). Samtidigt vill vi ge erkännande åt att sample typiskt när optimalt rörande denna faktor ungefär 40 - 80 MB, och med medvetenhet om att vissa små-sample i mycket är mycket sämre värt än allt annat men just i sina unika områden kan addera visst värde.


Smoothing-målet här skiljer sig inte bara rörande detta från mer traditionell tillämpning där diverse mer eller mindre acceptabla algoritmer finns (vanligen med inte bättre koppling till distribution av typerna, token-antalet, eller informationsteori än grovt tumskattande på nivå med vad man själv kan komma fram till ex. lite linjärt skattande mellan antalen för saknande värde-antals-räknande och därefter beräkna lutning igen mellan resp. antal och humpa till något som oavsett hur föga optimalt med all trolighet är bättre fungerande än vad man "naturligt" får om man gör tämligen små samples), utan också genom därför att vi vill göra smoothing effektivt d.v.s. helst göra maximalt än beräkning per värde fortlöpande från givna värden snarare än att tröskla igenom varje rank eller kolumn.


Själva koncepten bakom tror jag alla vanliga smoothing algoritmer för traditionell användning ger oss att det rimligen är möjligt (jfr exemplet ovan för Good-Turing humpande med linjära log-skattningar i varje bak - rimligen görligt samlat ungeäfär lika bra som funktion av resp. faktiskt värde för resp. ngram-symbol).


Jag hade stora problem att se en bra lösning på det. En tyckte jag säre lösning jag annars använt fler år är att skatta från bl.a. max-värdet vilket när resp. mängd förekommande typer varierar relativt lite är funktionellt.


Efter reflekterande detta av och till flera veckor faktiskt där jag fått förkasta två lösningar jag var trygg nog i från små-tester att beräkna in (d.v.s. får räkna bort igen) hittade jag en vikt relativt funktionell rörande egentligen allt tycks det också om jag räknar med att behöva efter sammanförande av värde normalisera så att sannolikheterna summerar "rätt", förutom kanske 50 - 70 sample corpus behöva införa en extra där sannolikheterna för resp. PAB beräknas av PA * PB på hela, för att trycka ner outliers i små-corpus ej förekommande i övriga, samt ev. någon mer viktoperation (inte otroligt funktion av types avseende värden snarare än ngram-kombinationerna).


Vi börjar med att beräkna Hans-Faktor vilken är:


( 2 * ln ( ln ( types_ngram_kombination ) / ln 2 ) / ln 2 ) / ( ln ( types_ngram_kombination ) / ln ) )


Där vad vi dividerar med möjligen - även om jag ej tror det för Hans-faktor - kan vara kopplat en tidigare vikt (exakt samma) som tas bort fortlöpande på värden efteråt (lätt att tänka fel kring sådant tycker jag praktiskt och jag brukar få pröva upplever jag). Men jag tror divisionen ska vara där.


Detta ger ett värde som ungefär börjar på 0.39 för samples i storlek av cirka 300 - 400 MB (och om jag minns rätt neråt 0.32 för riktigt stora sample men som nu är utelämnade då jag ej är säker på att alla fått sina värden sammanförda vilka möjligen ställer skattningen av types ifråga vilket jag ej kontrollerat). Och cirka 0.52830 för det minsta samplet på endast 2.2 MB.


Hans-faktor utnyttjar vi därefter som smoothing-faktor. Önskar vi att kombinera väldigt få samples är det vettigare att använda den på detta sätt genom att styra hur mycket vi låter själva anpassningen av värdet vs. ursprungligt värde påverka. Här är emellertid utifrån våra särskilda krav viktigare att vi först (innan de indikerade senare operationer jag utgår från att behöva göra) att saker ligger i jämförbar magnitud utan att abnormt nervärdera stora samples (jfr Google 5-gram, NIH, UN m.fl. större) eller kasta bort expertkunskapen i mindre riktade sample (ex. Citeseer-X, DOE, NAP (alltid värd ett besök och givet samspel finanserande beställarroller d.v.s. the Congress, kvalitativt-oberoende och budget oavsett hur liten många andra datakällor rörande rå-dokument-storlek ett bra värde för långsamma faktorer vi kan önska få med kombinationer runt), Reuters välkända sample avseende endast titel- men ej ett parallellt jag gjorde själv spindlande som snarast hör till de stora om ej i närheten av UN m.m. - avseende endast titel medan om vi jag tagit ingress eller brödtext där hade de varit abnormt stora så klart - eller ännu mindre Google 5-gram men endast avseende rader uttryckta endast med stora bokstäver eller Eurostat's definitions-system avseende rubriker, underrubriker resp. varje stycke för resp. definition oberoende för resp.).


Vi gör nu brutalt hård - mycket mycket hårdare än jag hade tänkt och absolut egentligen inte gärna vill göra därför viss användning förlorar på det för övrigt lika gärna kan göras vid användning - filtrering på stopp-ord. Detta därför att en faktor jag tar in är min gamla vana att låta max-värdet påverka. Givet att datakällornas typ varierar mellan rubriker, ingress, brödtext, taggar, interna referenser Wikipedia, referenser science-articles m.m. varierar naturlig förekomst av stopp-ord ordentligt. De flesta stoppord ex. is, for m.m. är i vissa av dess typer av datakällor abnormt vanliga vs. ex. i taggar. Skalar vi som funktion av maximalt värde fas-förskjuter det brutalt out-of-sync mellan dessa d.v.s. stopp-filtrering på några hundra ord.


Därefter blir ev. kvarvarande naturliga out-liers missade under sample synliga (ex. emerican + ämnesområde för yrkesorganisation inom subområde i medicin vars journaler vi samplat). De bör väl bäst hanteras om man inte som jag tänker pröva om om PAB * PAB hanterar det nedtryckt men ändå speglande den samhällspåverkan och i kunskapsförvaltning dessa organisationer när värda att sampla kan argumenteras ha.


För implicit-etablerande för-smoothing finns också samples speglande de viktigare användningsområden det hela förbereds för. Ex. är en av alla sample ett falskt sample utnyttjande samförekomst i vänner i Blue light d.v.s. just där de färdiga värdena hanteras. Bättre hade jag egentligen antagligen där viktigast med Blue light intensity men eftersom Blue light precis uppdaterats från optimerat tämligen liten till stor (kanske 100 000 typer tlll för första två värdesiffror 11 miljoner) var det ej gjort och praktiskt tämligen tidsödande om en ej på nivå med detta. Det gör nu små-värden på alla kombinationer som förekommer där och trots att varje relation oviktat förekommer exakt en gång varierar de något därför att det är samförekomsten mellan vänner resp. nod har (indirekt en väldigt förenklad similarity-operation).


Blue light sample får Hans-faktor på 0.409666347738257 vilket eftersom endast beroende av typer - ej summa - endast speglar antalet kombinationer beaktade. Det avviker från hur jag egentligen hade önskat det med kanske större bestraffning neråt naturligt från början förväntat både av den och kanske 4 - 6 andra "smoothing-samples" där vikt av förekomst-antal är mindre viktigt än att relationen skapande ett PAB sample faktiskt förekommer verksamhets-, forsknings-, eller dyligt styrande i något ekonomiskt kostande eller predikterande sammanhang även om vi ej kan ge det ett viktvärde.


Kanske kan vi kalla denna implicit-etablerande smoothing för modern-fast-internet-smoothin? Mer styrt av övriga smoothing sample än just Blue light. De gör ju ett avsevärt bättre uttryck över en tänkt fördelning än mycket annat när vi för varje sådant kan se att det är en värde med "kontinuerlig-värde-vikt-mening" vettigt styrande tillämpningsområdets fördelningsfunktioner (ex. information retrivial givande en preferens större än rent skattade kombinationer därför att vi vet att det är tydligt samhällsinverkande faktorer och som därför förr eller senare ger avtryck i ex. nyheter - när något gått fel där - ex. dataregister lagar för myndigheter).


För varje sample identifierar vi nu max-värdet. För varje värde vi önskar vikta - till korrekt samarbetsgemensamt magnitud-språk - dividerar vi med max-värdet. Eftersom vi vill ge viss - i alla fall lätt grovt skattad - preferens till mindre sample därför att dessa typiskt bär större vetskap (jämför gärna med hur vi för samma bl.a. behöver reducera antalet tydligare ör ej uttryckt per relativ-frekvens i närmare traditioell användning därför att symboler / typer ej är resp. kombination: mycket enklare men mindre flexibelt användbart) multiplicerar vi med (1 - Hans-faktor) d.v.s.


(1 - Hans-faktor) P (nuvarande kombination ) / P (största sannolikhet över i resp. sample förekommande samples)


Notera ovan skillnaden mot om vi snarare görande det för färre sample-grupper och utan pre-sample-smoothing-filerna låter det värdera mot original-värde eller om vi så vill i distans från ett. Hade vi gjort så hade antagligen något del-moment efterföljande reducerats men hade kanske - tycks så för mig - minskat värdet av vår implicita-smoothing genom att sample stora kombinationsrymder inkluderande ex. i nyheter oftare mindre vanliga kombinationer men i själva samhällsstrukturens kunskapsbevarande representerande en viktig faktor fortlöpande påverkande nyheter vi ser givande bättre fördelning på smoothing ovanliga kombinationer mellan ovanliga A och B.


Och oavsett hur praktiskt tycks det elegant fungerande utgångspunkt bör vi räkna och utgå från att en faktor funktion av värde-förekomsterna (d.v.s. närmare entropi som funktionellt mer "core-human" än som indirekt approximerat via dess uttryck i vårt språk via ordens samförekomst) krävs.


Samt no doubt at all en vid sidan om totala antalet samples värdering med varandra till ett värde - bland dessa ej mer värderat än något annat - skattat PA * PB för att få bort abnorma out-liers topp 10 - 50 000 (givetvis oerhört beroende på sample-storlek: det tycks för mig att det praktiskt från att små-tittat manuellt i några mindre filer normalt snarast slutar att vara problem egentligen snarare topp tio till 20 bland de minsta och kanske aldrig är det när vi går över 40 - 60 MB men vi förlorar ej något om jag ej tänker fel på att anta att det sträcker sig ner åt 5% för genomsnittlig storlek på filerna d.v.s. 500 MB ungefär och topp 10 000 - 50 000) för resp. sample,


Hur som helst bra värden och mycket snabbt jämfört med de alt. genom att kombinera flera smoothing och back-tracking algoritmer mer anpassade ex. statistiska parsers för språk.


Sådant här bökigt brukar jag vara jag genom svagheter i min personlighet finna svårt att dela när jag löst när så konkret. Men här upplever jag vis av erfarenhet att en hel del för-viktande jag plockar bort antagligen påverkat en del i viktfunktionerna vilket korrekt utvecklande för ev. person att lösa samma sak bör ge åtminstone rätt utgångspunkt för en del personliga utmaningen hoppas jag. Problemlösning är endast korrekt samhällsbyggande långsiktigt när en sund utmaning och arbetsinsats finns och här finns helt säkert mycket lokalt beroende misstänker jag färdigt att explodera för mig nästa gång jag gör det såväl tillämpning här.