Closed albbas closed 7 years ago
Date: 2016-03-02 13:52:29 +0100 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
For Bug #2160, we want certain kinds of MWE ambiguity to be at least partly (the linguistic part) represented on the FST level. We will likely also need new language-general mechanisms regarding how to do formatting and tokenising.
What we want:
Treat "good morning" as ambiguous between a single interjection "
Similarly treat "3." as ambiguous between single ordinal, and numeral followed by punctuation; "<3.>" vs "<3>" "<.>".
Not have to treat "we are" as ambiguous between single and multiple cohorts – it's always exactly two; and similarly not look at "we 3." ambiguous between "<we 3.>" and "
I've looked at using pmatch for this by simply repeating the lexicon, e.g.
Define morphology @bin"analyser-disamb-gt-desc.hfst" ; Define blank Whitespace | Punct ; Define morphoword morphology LC([blank | #]) RC([blank | # ]); Define morphowords morphology % :%# morphology LC([blank | #]) RC([blank | # ]); Define token [ morphoword | morphowords ] EndTag(token); regex token ;
Consider "dalle go" – this might be unambiguous, but treat it as ambiguous for this example. The above pmscript will give
$ echo dalle go | hfst-tokenise --cg -kawu: ana.bin
"
but of course that fails when there's a word before:
echo 'go dan dihte' | hfst-tokenise --cg -kawu: ana.bin
"
since now it looks at the MWE ambiguity between "go" and "dalle go" – and pmatch always wants the longest possible match.
This issue seems solvable by intersecting the forms of the morphology with the repeated morphology, although I couldn't get this to work within the pmscript (one would think [morpho2words & [morphology].u] would work, but no such luck). It seems to work with plain HFST commands though:
Makefile:
space.hfst: echo '% :%#' | hfst-regexp2fst -o $@
repeated.hfst: analyser-disamb-gt-desc.hfst space.hfst hfst-concatenate -1 $< -2 space.hfst -o analyser-space.hfst hfst-concatenate -F -1 analyser-space.hfst -2 $< -o analyser-space-analyser.hfst hfst-invert analyser-space-analyser.hfst -o generator-space-generator.hfst hfst-project -p upper $< -o forms.hfst hfst-compose-intersect -1 generator-space-generator.hfst -2 forms.hfst -o generator-repeated.hfst hfst-invert generator-repeated.hfst -o $@ echo dan dihte | hfst-lookup $@ echo go dan dihte | hfst-lookup $@
pmscript:
Define morphology @bin"analyser-disamb-gt-desc.hfst" ; Define repeated @bin"repeated.hfst" ; Define blank Whitespace | Punct ; Define morphoword morphology LC([blank | #]) RC([blank | # ]); Define morphowords repeated LC([blank | #]) RC([blank | # ]); Define token [ morphoword | morphowords ] EndTag(token); regex token ;
This looks closer to what we want:
$ echo dalle go | hfst-tokenize --cg -kawu: rep.pmhfst
"
$ echo go dalle go | hfst-tokenize --cg -kawu: rep.pmhfst
" |
---|
"
The repeated.hfst took quite a lot of time+ram+disk space, but perhaps that can be optimised – the final file seems to be just 28M.
Are the problems with this method not shown above?
If we add an error-tagged entry in the noun compounding lexicon that inserts a space before the compound border, will it work fine for catching compound-space errors (while still showing the ambiguity with non-errors that are simply two nouns)?
Date: 2016-03-02 14:10:46 +0100
From: Sjur Nørstebø Moshagen <
(In reply to Kevin Brubeck Unhammer from comment #0)
For Bug #2160, we want certain kinds of MWE ambiguity to be at least partly (the linguistic part) represented on the FST level.
Yes.
What we want:
Treat "good morning" as ambiguous between a single interjection "<good morning>", and an adj "
" followed by noun " " as in "this is a good morning". Similarly treat "3." as ambiguous between single ordinal, and numeral followed by punctuation; "<3.>" vs "<3>" "<.>".
Not have to treat "we are" as ambiguous between single and multiple cohorts – it's always exactly two; and similarly not look at "we 3." ambiguous between "<we 3.>" and "
" "<3.>", but ambiguous between " " "<3.>" and " " "<3>" "<.>".
Agree.
This issue seems solvable by intersecting the forms of the morphology with the repeated morphology, although I couldn't get this to work within the pmscript (one would think [morpho2words & [morphology].u] would work, but no such luck). It seems to work with plain HFST commands though:
Makefile:
space.hfst: echo '% :%#' | hfst-regexp2fst -o $@
repeated.hfst: analyser-disamb-gt-desc.hfst space.hfst hfst-concatenate -1 $< -2 space.hfst -o analyser-space.hfst hfst-concatenate -F -1 analyser-space.hfst -2 $< -o analyser-space-analyser.hfst hfst-invert analyser-space-analyser.hfst -o generator-space-generator.hfst hfst-project -p upper $< -o forms.hfst hfst-compose-intersect -1 generator-space-generator.hfst -2 forms.hfst -o generator-repeated.hfst hfst-invert generator-repeated.hfst -o $@ echo dan dihte | hfst-lookup $@ echo go dan dihte | hfst-lookup $@
[...]
Are the problems with this method not shown above?
If we add an error-tagged entry in the noun compounding lexicon that inserts a space before the compound border, will it work fine for catching compound-space errors (while still showing the ambiguity with non-errors that are simply two nouns)?
I have an uncommitted change on my computer with exactly this, the core of which is:
+Err/SpaceCmp+Cmp#:% Noun ;
That should in theory catch all instances of split compounds, while leaving other sequences of word + space + word as separate items/segments.
I haven't committed this because the consequences can be quite dramatic for some applications, and it needs further testing. On the other hand, if I don't commit it, noone will test it.
Unless there are major objections, I will commit this change later today so that Kevin, Lene and others can test it.
Date: 2016-03-02 15:21:22 +0100
From: Lene Antonsen <
Unless there are major objections, I will commit this change later today so that Kevin, Lene and others can test it.
Jeg forstår dette ikke helt, så jeg kan ikke komme med major objections.
Kunne du komme med et eksempel, Sjur (ikke go dalle go)
Date: 2016-03-02 15:42:34 +0100
From: Sjur Nørstebø Moshagen <
(In reply to Lene Antonsen from comment #2)
Jeg forstår dette ikke helt, så jeg kan ikke komme med major objections.
Kunne du komme med et eksempel, Sjur (ikke go dalle go)
Eg skal prøva:
Hovudtemaet for denne og andre relaterte lusmeldingar (klitika) gjeld utfordringar med segmentering / tokenisering der segmentgrensene ikkje svarar til ortografiske ord (dvs bokstavar skilde med anten blankteikn eller eintydige ordskiljeteikn som t.d. komma). Av desse er det tre typar:
1) Samskriving der ein kunne eller burde hatt særskriving ("3." er eitt slikt døme, klitika eit anna)
2) Særskriving der ein burde hatt samskriving (feil delte samansette ord)
3) Fleirordsuttrykk som ein vil analysera som éi eining, men som potensielt kan analyserast som to separate ord ("good morning" som MWE eller som ein analyserbar NP)
Kodeendringa mi gjeld 2).
Tanken er at vi (med ein +Err-tagg) analyserer to substantiv etter kvarandre som om dei var eitt samansett substantiv som eit alternativ til å gje dei kvar sin analyse:
$ echo "gielisvuohta viessu" | hfst-lookup -q analyser-mt-gt-desc.hfstol | cg-conv -f
"
Problemet er at dette heilt sikkert vil overgenerera, så det er viktig at vi tek vare på den alternative analysen:
$ echo "gielisvuohta viessu" | tr ' ' '\n' | hfst-lookup -q analyser-mt-gt-desc.hfstol | cg-conv -f
"
Korleis dette skal skje og bli representert er ein del av diskusjonen, eg er usikker. Men Kevin har kanskje eit forslag?
Uansett, eg håper at det no er litt klårare kva eg hadde i tankane.
Date: 2016-03-02 15:53:05 +0100
From: Lene Antonsen <
Det er viktig hvordan analysen vil se ut, at vi ikke får det første substantivet bare som underlesning. Hvilke restriksjoner hadde du tenkt? Skal dette skje når det er to alternativer i lexc for de den spesifikke strengen: to enkle ord eller MWE, eller hadde du tenkt dette som en generell greie?
Date: 2016-03-02 16:01:57 +0100
From: Sjur Nørstebø Moshagen <
(In reply to Lene Antonsen from comment #4)
Det er viktig hvordan analysen vil se ut, at vi ikke får det første substantivet bare som underlesning.
Eg veit, og eg vil gjerne ha tilbakemelding frå Kevin korleis vi kan få til dette. Sjølv er eg veldig usikker, men vi treng ein måte å representera tvetydig segmentering i CG-format på, slik at ein kan bruka CG-reglar til å avgjera om det skal vera to eller eitt segment / token.
Hvilke restriksjoner hadde du tenkt? Skal dette skje når det er to alternativer i lexc for de den spesifikke strengen: to enkle ord eller MWE, eller hadde du tenkt dette som en generell greie?
I dette tilfellet hadde eg tenkt det som ei generell greie som datagrunnlag for å identifisera særskriving. Men det er mogleg det blir for kraftig - men det veit vi ikkje før vi har testa.
I tilfelle der vi har eit MWE i leksikon og vil gje ein alternativ analyse som to uavhengige ord, pratar vi om type 3) i lista mi.
Date: 2016-03-02 20:40:58 +0100 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
(In reply to Sjur Nørstebø Moshagen from comment #1)
I have an uncommitted change on my computer with exactly this, the core of which is:
+Err/SpaceCmp+Cmp#:% Noun ;
That should in theory catch all instances of split compounds, while leaving other sequences of word + space + word as separate items/segments.
I haven't committed this because the consequences can be quite dramatic for some applications, and it needs further testing. On the other hand, if I don't commit it, noone will test it.
Unless there are major objections, I will commit this change later today so that Kevin, Lene and others can test it.
Det er kanskje litt farleg å ta den med i standardanalysatorane allereie? (Utan andre endringar vil det jo fjerna to-kohort-lesinga.)
Date: 2016-03-07 10:32:26 +0100
From: Linda Wiechetek <
What we want:
- Similarly treat "3." as ambiguous between single ordinal, and numeral followed by punctuation; "<3.>" vs "<3>" "<.>".
Agree.
I CG bruker vi punctuation <.> som delimiter for vinduet vi scanne innafor en regel. Hvis vi alltid har ambiguitet der kommer det til å være store forandringer der.
Date: 2016-03-07 11:28:29 +0100 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
(In reply to Linda Wiechetek from comment #7)
What we want:
- Similarly treat "3." as ambiguous between single ordinal, and numeral followed by punctuation; "<3.>" vs "<3>" "<.>".
Agree.
I CG bruker vi punctuation <.> som delimiter for vinduet vi scanne innafor en regel. Hvis vi alltid har ambiguitet der kommer det til å være store forandringer der.
Det er derfor eg seier det må vera mwe-disambiguering først :)
Altså:
hfst-tokenise | mwe-disambiguering | formatfiksing | disambiguering
Eit døme på alle steg i pipelinen:
INPUT: Ta 3. Også
Etter hfst-tokenise:
"
Etter mwe-disambiguering:
"
Etter formatfiksing:
"
Etter (vanleg) disambiguering:
"
Så formålet er at den vanlege disambigueringa i størst mogleg grad skal få same input som før når det gjeld desse fleirordsuttrykka, men stega før disambiguering vil altså ha ein ulik representasjon.
Date: 2016-03-10 15:39:38 +0100 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
Eg har sjekka inn ei endring i sme/tools/preprocess som gjer dette, men for beste effekt bør det testast med hfst frå
git clone -b tokenise-as-gtdivvun-lookup git@github.com:unhammer/hfst.git
Sidan «vaikko mii» ikkje står i leksikon enno får me lata som «dalle go» betyr det same, for skuld eksempelet. Då får eg t.d.
"
Eg la inn i sme/tools/preprocess/Makefile.am at alle sekvensar av «ord mellomrom ord» som finst i leksikon som eitt ord er moglege multiord, som gjer at t.d.
Det går dessverre ikkje like enkelt å ta med alle sekvensar av to ord utan mellomrom som er tvetydige med eitt ord – ein analysator for alle desse blir på 425M (vs 171M for den med mellomrom) og eg har for lite minne til å laga den endelege pmatch-analysatoren.
På den andre sida så er det kanskje like greitt – me vil vel ikkje seia at alle todelingar av eit token er moglege? (Det blir iallfall irriterande om
Det går sjølvsagt òg an å stramma inn på dei med mellomrom – der er vel spørsmålet om folk synst det er greiast å la alle sekvensar av typen
Litt meir output for å visa status nett no:
$ echo 'ukjendord привет dalle, dalle go, go dalle go gáfegáhkkus' | hfst-tokenize -wacku: tokeniser-disamb-gt-desc.pmhfst
" |
---|
"
(Linjer med «:» er ting som er «utanfor alfabetet» – CG ignorerer det linjer som ikkje startar med «"» eller tab/mellomrom, men det er nyttig å kunna ha alt av input med i maskinomsetjing og grammatikkontroll.)
Date: 2016-03-11 17:52:20 +0100
From: Sjur Nørstebø Moshagen <
I svn rev 130872 har eg sjekka inn ei endring som vi vart samde om på møtet på måndag:
analyser-disamb-gt-desc.hfst (og berre hfst-varianten av han, ikkje xerox) kan no analysera særskrivne samansette ord som eitt ord, med ein +Err-tagg.
No er det opp til Kevin å testa og sjå om det fungerer nokolunde. Er svaret ja, så vil vi ha breiare testing (Linda, Lene, Thomas).
Eg har høge forventningar til denne analysatoren og høve til å fanga opp særskrivingar - eg håper det ikkje blir alt for mykje overgenerering og problem med å skilja ut falske alarmar :-)
Date: 2016-03-11 19:36:21 +0100
From: Sjur Nørstebø Moshagen <
(In reply to Sjur Nørstebø Moshagen from comment #10)
I svn rev 130872 har eg sjekka inn ei endring som vi vart samde om på møtet på måndag:
Gløymde å leggja ved eit døme som viser korleis det funkar med disamb-analysatoren:
$ echo skuvla busse | hfst-lookup -q src/analyser-disamb-gt-desc.hfstol skuvla busse skuvla+N+Sem/Edu_Org+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain-clth_Veh+Sg+Acc 10,000000 skuvla busse skuvla+N+Sem/Edu_Org+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain-clth_Veh+Sg+Gen+Allegro 10,000000 skuvla busse skuvla+N+Sem/Edu_Org+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain-clth_Veh+Sg+Gen 10,000000 skuvla busse skuvla+N+Sem/Edu_Org+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain-clth_Veh+Sg+Nom 10,000000 skuvla busse skuvla+N+Sem/Edu_Org+Err/Orth+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain-clth_Veh+Sg+Acc 10,000000 skuvla busse skuvla+N+Sem/Edu_Org+Err/Orth+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain-clth_Veh+Sg+Gen+Allegro 10,000000 skuvla busse skuvla+N+Sem/Edu_Org+Err/Orth+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain-clth_Veh+Sg+Gen 10,000000 skuvla busse skuvla+N+Sem/Edu_Org+Err/Orth+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain-clth_Veh+Sg+Nom 10,000000
Dersom dette blir brukt i lag med pmatch-srkptet til Kevin, blir resultatet meir cg-likt, men dømet over burde gje ein omtrentleg idé om korleis det blir.
Date: 2016-03-15 14:46:07 +0100 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
(In reply to Sjur Nørstebø Moshagen from comment #11)
(In reply to Sjur Nørstebø Moshagen from comment #10)
I svn rev 130872 har eg sjekka inn ei endring som vi vart samde om på møtet på måndag:
Gløymde å leggja ved eit døme som viser korleis det funkar med disamb-analysatoren:
$ echo skuvla busse | hfst-lookup -q src/analyser-disamb-gt-desc.hfstol skuvla busse skuvla+N+Sem/Edu_Org+Cmp/SgNom+Err/SpaceCmp+Cmp#busse+N+G3+Sem/Ctain- clth_Veh+Sg+Acc 10,000000 skuvla busse […]
Eg får ikkje til same resultat når eg kompilerer sjølv, men det er sikkert noko feil i mitt oppsett. Men når eg prøvde å legga inn .hfst-fila du hadde i http://filebin.net/mvvnmqgal0 i mappa mi, så fekk eg:
$ echo skuvla busse | hfst-tokenise -wacku: tokeniser-disamb-gt-desc.pmhfst
"
Så det underanalyserer – me vil jo ha to-ordsanalysen inn her òg.
Grunnen til at "
Dette fungerte fint for «dalle go»; viss A={"dalle go","go","dalle","ja"} så er A ∩ A" "A ={"dalle go"}
Då skulle ein tru at det fungerte med A={"skuvla busse","skuvla","busse","ja"} → A ∩ A" "A ={"skuvla busse"} men greia med «skuvla busse» er at formen som ligg i FST-en ikkje er «skuvla busse», men «@P.Px.add@Skuvla@U.NeedsVowRed.ON@@P.CmpFrst.FALSE@@P.CmpPref.FALSE@@D.CmpLast.TRUE@@D.CmpNone.TRUE@@U.CmpNone.FALSE@@P.CmpOnly.TRUE@@U.NeedsVowRed.ON@@C.NeedsVowRed@ @P.Px.add@busse@D.CmpOnly.FALSE@@D.CmpPref.TRUE@@D.NeedNoun.ON@».
og når me prøver A={ "@P.Px.add@skuvla@U.NeedsVowRed.ON@@P.CmpFrst.FALSE@@P.CmpPref.FALSE@@D.CmpLast.TRUE@@D.CmpNone.TRUE@@U.CmpNone.FALSE@@P.CmpOnly.TRUE@@U.NeedsVowRed.ON@@C.NeedsVowRed@ @P.Px.add@busse@D.CmpOnly.FALSE@@D.CmpPref.TRUE@@D.NeedNoun.ON@", "@P.Px.add@skuvla@D.CmpOnly.FALSE@@D.CmpPref.TRUE@@D.NeedNoun.ON@", "@P.Px.add@busse@D.CmpOnly.FALSE@@D.CmpPref.TRUE@@D.NeedNoun.ON@", "ja" } så får me A ∩ A" "A ={} sidan «skuvla» og «busse» har ulike flagg frå «skuvla busse».
Eg prøvde å eliminera flagg på eit mindre leksikon med flaggdiakritika, og då fekk eg dei rette analysane, men når eg prøver å eliminera flagg på den fulle FST-en (om det er via foma eller hfst-substitute+grep) går alltid tom for RAM før eg får kompilert ferdig.
Kanskje er det mogleg å eliminera berre visse flagg (men det krev jo at folk held ting ved like), eller kanskje eg berre må ha meir enn 8GB RAM, eller kanskje me må prøva noko heilt anna.
Date: 2016-03-15 15:59:31 +0100 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
(In reply to Kevin Brubeck Unhammer from comment #12)
Eg prøvde å eliminera flagg på eit mindre leksikon med flaggdiakritika, og då fekk eg dei rette analysane, men når eg prøver å eliminera flagg på den fulle FST-en (om det er via foma eller hfst-substitute+grep) går alltid tom for RAM før eg får kompilert ferdig.
Kanskje er det mogleg å eliminera berre visse flagg (men det krev jo at folk held ting ved like), eller kanskje eg berre må ha meir enn 8GB RAM, eller kanskje me må prøva noko heilt anna.
… og sjølv med 32GB RAM ser det ut til å feila.
Kanskje må me gi opp å automatisk finna alle mellomrom-tvetydige ord, og i staden eksplisitt markera i lexc for dei fleirordsuttrykka me vil at skal vera fleirtydige (iallfall for stiar med flaggdiakritika).
Altså, gitt at «dan dihte+Adv» var tvetydig med pron+verb eller noko, så fordi «dan dihte+Adv» står med flagg måtte me i tillegg hatt ein sti frå «dan+Pron» via mellomrom til verbleksikonet. Meir styrete, men sjølvsagt òg færre unødvendig tvetydige oppslag.
Det tredje alternativet eg ser er å ikkje ha nokon endringar i leksikon eller repeterte analysatorar, men laga ei ganske ulik utgåve av hfst-tokenise som er slik at viss det analyserer noko og ser at det har mellomrom i seg, så prøver det å analysera det på nytt som fleire ord òg.
Date: 2016-04-18 13:13:43 +0200 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
Sjur hadde ein genial idé som burde løysa dette: Me lar eit visst symbol i FST-en signalisera at her må det ein «backtrack» til for å få med alle analysar. Så ved særskrivingsanalyse, når me har lese «ananas» og rett før me skal inn i « biter»-leksikonet, så legg me inn @Backtrack@ (eller noko), og då vil me ikkje berre få særskrivingsanalysen «ananas biter», men òg alle moglege analysar av «ananas» følgt av «biter» som to ord.
hfst-tokenise må då sjå i alle analysar etter @Backtrack@, som signaliserer at her må du ikkje berre ta lengste analyse, men òg analysera oppdelt, på akkurat det punktet som @Backtrack@ finst.
Då må altså den overgangen i lexc kor me går over i særskrivingsfeil ha ein sånn Backtrack-tagg.
Denne løysinga kunne me òg brukt for «leaba», ved å ha @Backtrack@ mellom «lea» og «ba» i leaba Du3 (altså éin-kohortslesinga), men det blir litt uelegant. Det ideelle er nok å ha begge moglegheitene, som då blir spegelvendte av kvarandre:
LEXICON V leat+V+Du3:leaba C; leat+V+Sg3:lea C;
LEXICON C
@MWESplit@+Pcle+ba:ba;
LEXICON N ananas+N+Err/SpaceCmp+Backtrack:ananas% LEXICON N; bit+N+Pl:biter;
Så for input «leaba» gir FST-en sjølv to analysar, éin med MWESplit og éin utan. Den analysen som hadde MWESplit blir delt opp der taggen var.
For input «ananas biter» gir FST-en sjølv éin analyse, men med Backtrack-taggen. Sidan hfst-tokenise såg ein Backtrack-tagg, vil programmet analysera strengen på nytt, delt opp der Backtrack-taggen var.
(Ved fleire Backtrack-taggar prøver me alle kombinasjonar.)
Date: 2016-04-21 19:41:34 +0200 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
Linda nemnte noko viktig: Me må kanskje reanalysera utan mellomrom òg; det er nemleg svært verdifull informasjon for særskrivingsdisambiguering at «skuvlabusses» har ein leksikalisert analyse, medan t.d. «bárdnibusses» ikkje har det (som gjer at «bárdni busses» meir sannsynleg er korrekt enn «skuvla busses»).
Date: 2016-04-21 19:49:42 +0200
From: Sjur Nørstebø Moshagen <
(In reply to Kevin Brubeck Unhammer from comment #15)
Linda nemnte noko viktig: Me må kanskje reanalysera utan mellomrom òg; det er nemleg svært verdifull informasjon for særskrivingsdisambiguering at «skuvlabusses» har ein leksikalisert analyse, medan t.d. «bárdnibusses» ikkje har det (som gjer at «bárdni busses» meir sannsynleg er korrekt enn «skuvla busses»).
Men vil ikkje slike feil bli oppdaga som valensfeil? T.d. som manglande objekt etter verb t.d. Spørsmålet er kor mykje tvetydigheit vi får dersom vi byrjar å reanalysera på denne måten. Og: vil det ikkje vera betre at vi gjer ei slik reanalysering i CG?
Date: 2016-04-21 21:30:40 +0200 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
(In reply to Sjur Nørstebø Moshagen from comment #16)
(In reply to Kevin Brubeck Unhammer from comment #15)
Linda nemnte noko viktig: Me må kanskje reanalysera utan mellomrom òg; det er nemleg svært verdifull informasjon for særskrivingsdisambiguering at «skuvlabusses» har ein leksikalisert analyse, medan t.d. «bárdnibusses» ikkje har det (som gjer at «bárdni busses» meir sannsynleg er korrekt enn «skuvla busses»).
Men vil ikkje slike feil bli oppdaga som valensfeil? T.d. som manglande objekt etter verb t.d. Spørsmålet er kor mykje tvetydigheit vi får dersom vi byrjar å reanalysera på denne måten. Og: vil det ikkje vera betre at vi gjer ei slik reanalysering i CG?
Hm, ja me vil jo ikkje ha ein ekstra analyse, men informasjonen om at ein ekstra analyse ville vore mogleg om det ikkje var eit mellomrom der. Altså, «skuvla busse» er tvetydig mellom +N+Err/SpaceCmp og to ord +N +N, men sjølvsagt ikkje med den feilfrie eittordsanalysen.
Likevel ville det vore svært verdifullt for grammatikkontrollen å vita at «skuvlabusse» er leksikalisert. I CG-en hadde det kanskje vore greiast om det var ein tagg som sa at SpacecmpHasLex. Er det mogleg vha. FST-operasjonar å legga ein sånn tagg på berre dei dynamiske samansetjingane som òg finst som leksikaliserte? (Dette minner skummelt om den minneslukande snittoperasjonen frå tidlegare …)
Date: 2016-04-26 12:02:12 +0200
From: Linda Wiechetek <
Kevin har rett, det som er av verdi er nettopp det å vite om det er leksikalisert. Problemet er jo at CGen ikkje kan referere til 2 ord, sette dem sammen og sjekke om de er leksikaliserte. Og en syntaktisk analyse aleine gir dårlige resultat (vi har prøvd og lagt til en hel rekke med unntakk) fordi det fins en hel del syntaktiske kontekster med to substantiver ved siden av hverandre der første er nominativ som er korrekte.
Forresten kan man vurdere å utelukke sånne som har substantiv på "i" i første ledd da det blir til "e" i det sammensatte ordet, dvs. "bárdnebusse" og ikkje "bárdnibusse", men kanskje en feilanalyse er nødvendig først, altså vi må se om det i realitet fins mange feil med -i substantiv i nominativ.
(In reply to Kevin Brubeck Unhammer from comment #17)
(In reply to Sjur Nørstebø Moshagen from comment #16)
(In reply to Kevin Brubeck Unhammer from comment #15)
Linda nemnte noko viktig: Me må kanskje reanalysera utan mellomrom òg; det er nemleg svært verdifull informasjon for særskrivingsdisambiguering at «skuvlabusses» har ein leksikalisert analyse, medan t.d. «bárdnibusses» ikkje har det (som gjer at «bárdni busses» meir sannsynleg er korrekt enn «skuvla busses»).
Men vil ikkje slike feil bli oppdaga som valensfeil? T.d. som manglande objekt etter verb t.d. Spørsmålet er kor mykje tvetydigheit vi får dersom vi byrjar å reanalysera på denne måten. Og: vil det ikkje vera betre at vi gjer ei slik reanalysering i CG?
Hm, ja me vil jo ikkje ha ein ekstra analyse, men informasjonen om at ein ekstra analyse ville vore mogleg om det ikkje var eit mellomrom der. Altså, «skuvla busse» er tvetydig mellom +N+Err/SpaceCmp og to ord +N +N, men sjølvsagt ikkje med den feilfrie eittordsanalysen.
Likevel ville det vore svært verdifullt for grammatikkontrollen å vita at «skuvlabusse» er leksikalisert. I CG-en hadde det kanskje vore greiast om det var ein tagg som sa at SpacecmpHasLex. Er det mogleg vha. FST-operasjonar å legga ein sånn tagg på berre dei dynamiske samansetjingane som òg finst som leksikaliserte? (Dette minner skummelt om den minneslukande snittoperasjonen frå tidlegare …)
Date: 2016-04-26 12:15:42 +0200
From: Linda Wiechetek <
Duommá sa forresten at det er mange leksikaliserte sammensetninger i substantivfila siden han jobba med det for spellcheckeren. Det er jo en resurs som vi burde utnytte.
(In reply to Linda Wiechetek from comment #18)
Kevin har rett, det som er av verdi er nettopp det å vite om det er leksikalisert. Problemet er jo at CGen ikkje kan referere til 2 ord, sette dem sammen og sjekke om de er leksikaliserte. Og en syntaktisk analyse aleine gir dårlige resultat (vi har prøvd og lagt til en hel rekke med unntakk) fordi det fins en hel del syntaktiske kontekster med to substantiver ved siden av hverandre der første er nominativ som er korrekte.
Forresten kan man vurdere å utelukke sånne som har substantiv på "i" i første ledd da det blir til "e" i det sammensatte ordet, dvs. "bárdnebusse" og ikkje "bárdnibusse", men kanskje en feilanalyse er nødvendig først, altså vi må se om det i realitet fins mange feil med -i substantiv i nominativ.
(In reply to Kevin Brubeck Unhammer from comment #17)
(In reply to Sjur Nørstebø Moshagen from comment #16)
(In reply to Kevin Brubeck Unhammer from comment #15)
Linda nemnte noko viktig: Me må kanskje reanalysera utan mellomrom òg; det er nemleg svært verdifull informasjon for særskrivingsdisambiguering at «skuvlabusses» har ein leksikalisert analyse, medan t.d. «bárdnibusses» ikkje har det (som gjer at «bárdni busses» meir sannsynleg er korrekt enn «skuvla busses»).
Men vil ikkje slike feil bli oppdaga som valensfeil? T.d. som manglande objekt etter verb t.d. Spørsmålet er kor mykje tvetydigheit vi får dersom vi byrjar å reanalysera på denne måten. Og: vil det ikkje vera betre at vi gjer ei slik reanalysering i CG?
Hm, ja me vil jo ikkje ha ein ekstra analyse, men informasjonen om at ein ekstra analyse ville vore mogleg om det ikkje var eit mellomrom der. Altså, «skuvla busse» er tvetydig mellom +N+Err/SpaceCmp og to ord +N +N, men sjølvsagt ikkje med den feilfrie eittordsanalysen.
Likevel ville det vore svært verdifullt for grammatikkontrollen å vita at «skuvlabusse» er leksikalisert. I CG-en hadde det kanskje vore greiast om det var ein tagg som sa at SpacecmpHasLex. Er det mogleg vha. FST-operasjonar å legga ein sånn tagg på berre dei dynamiske samansetjingane som òg finst som leksikaliserte? (Dette minner skummelt om den minneslukande snittoperasjonen frå tidlegare …)
Date: 2016-05-18 14:31:07 +0200
From: Sjur Nørstebø Moshagen <
(In reply to Kevin Brubeck Unhammer from comment #17)
(In reply to Sjur Nørstebø Moshagen from comment #16)
(In reply to Kevin Brubeck Unhammer from comment #15)
Linda nemnte noko viktig: Me må kanskje reanalysera utan mellomrom òg; det er nemleg svært verdifull informasjon for særskrivingsdisambiguering at «skuvlabusses» har ein leksikalisert analyse, medan t.d. «bárdnibusses» ikkje har det (som gjer at «bárdni busses» meir sannsynleg er korrekt enn «skuvla busses»).
Men vil ikkje slike feil bli oppdaga som valensfeil? T.d. som manglande objekt etter verb t.d. Spørsmålet er kor mykje tvetydigheit vi får dersom vi byrjar å reanalysera på denne måten. Og: vil det ikkje vera betre at vi gjer ei slik reanalysering i CG?
Hm, ja me vil jo ikkje ha ein ekstra analyse, men informasjonen om at ein ekstra analyse ville vore mogleg om det ikkje var eit mellomrom der. Altså, «skuvla busse» er tvetydig mellom +N+Err/SpaceCmp og to ord +N +N, men sjølvsagt ikkje med den feilfrie eittordsanalysen.
Likevel ville det vore svært verdifullt for grammatikkontrollen å vita at «skuvlabusse» er leksikalisert. I CG-en hadde det kanskje vore greiast om det var ein tagg som sa at SpacecmpHasLex. Er det mogleg vha. FST-operasjonar å legga ein sånn tagg på berre dei dynamiske samansetjingane som òg finst som leksikaliserte? (Dette minner skummelt om den minneslukande snittoperasjonen frå tidlegare …)
Det finst ein enkel måte å gjera dette på:
å la # i alle samansette, leksikaliserte ord (som har # som ordgrense før dei blir fjerna i den endelege analysatoren) valfritt gå til " " (mellomrom). Då vil særskriving av leksikaliserte ord bli analyserte som leksikaliserte ord :) Og dette burde ikkje gje ein mykje større fst.
Det som kompliserer det heile er at vi vil samtidig leggja til ein feiltagg når og berre når vi lar #:" ", slik at vi kan identifisera dei i cg-en. Men eg har tankar om korleis vi kan ordna det òg, men her kan fst-storleiken nok bli ein del større. Vi må eksperimentera...
Date: 2016-05-24 12:41:34 +0200
From: Sjur Nørstebø Moshagen <
(In reply to Sjur Nørstebø Moshagen from comment #20)
Likevel ville det vore svært verdifullt for grammatikkontrollen å vita at «skuvlabusse» er leksikalisert. I CG-en hadde det kanskje vore greiast om det var ein tagg som sa at SpacecmpHasLex. Er det mogleg vha. FST-operasjonar å legga ein sånn tagg på berre dei dynamiske samansetjingane som òg finst som leksikaliserte? (Dette minner skummelt om den minneslukande snittoperasjonen frå tidlegare …)
Det finst ein enkel måte å gjera dette på:
å la # i alle samansette, leksikaliserte ord (som har # som ordgrense før dei blir fjerna i den endelege analysatoren) valfritt gå til " " (mellomrom). Då vil særskriving av leksikaliserte ord bli analyserte som leksikaliserte ord :) Og dette burde ikkje gje ein mykje større fst.
Det som kompliserer det heile er at vi vil samtidig leggja til ein feiltagg når og berre når vi lar #:" ", slik at vi kan identifisera dei i cg-en. Men eg har tankar om korleis vi kan ordna det òg, men her kan fst-storleiken nok bli ein del større. Vi må eksperimentera...
Denne delen er no i boks, og fst-en har vorte mindre (ikkje pga denne endringa, men pga at eg retta ein logisk brest som hadde vorte oversett).
Det som står att no er:
Date: 2016-05-24 14:30:13 +0200 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
(In reply to Sjur Nørstebø Moshagen from comment #21)
(In reply to Sjur Nørstebø Moshagen from comment #20)
Likevel ville det vore svært verdifullt for grammatikkontrollen å vita at «skuvlabusse» er leksikalisert. I CG-en hadde det kanskje vore greiast om det var ein tagg som sa at SpacecmpHasLex. Er det mogleg vha. FST-operasjonar å legga ein sånn tagg på berre dei dynamiske samansetjingane som òg finst som leksikaliserte? (Dette minner skummelt om den minneslukande snittoperasjonen frå tidlegare …)
Det finst ein enkel måte å gjera dette på:
å la # i alle samansette, leksikaliserte ord (som har # som ordgrense før dei blir fjerna i den endelege analysatoren) valfritt gå til " " (mellomrom). Då vil særskriving av leksikaliserte ord bli analyserte som leksikaliserte ord :) Og dette burde ikkje gje ein mykje større fst.
Det som kompliserer det heile er at vi vil samtidig leggja til ein feiltagg når og berre når vi lar #:" ", slik at vi kan identifisera dei i cg-en. Men eg har tankar om korleis vi kan ordna det òg, men her kan fst-storleiken nok bli ein del større. Vi må eksperimentera...
Denne delen er no i boks, og fst-en har vorte mindre (ikkje pga denne endringa, men pga at eg retta ein logisk brest som hadde vorte oversett).
Det som står att no er:
- å få korrekte analyser for ikkje-samansetjingsanalysene (er på veg, truleg i boks snart)
Eg er veldig usikker på om den metoden eigentleg er nok – det innebærer mykje manuell pirk i leksikon for noko som burde vera mogleg å automatisera. Altså, problemet er som tidlegare at me vil ha fleirordsanalysar av alle og berre dei analysane som er tvetydige med særskrivingsfeil.
For å ta eit ekstremt døme: Pronomenet "dan" er tvetydig med feilstavinga "dan" av ei form av adjektivet "dánska", som gjer at "dančuođi" får ein Cmp-analyse, som igjen gjer at "dan čuođi" (korpus "…gal dan čuođi proseantta") får ein SpaceCmp-analyse. Men då må me òg ha ein alternativ sti frå pronomenet "dan" inn i både N, Num og V for å få same sett med ikkje-SpaceCmp-analysar som standard preprocess/lookup/lookup2cg ville gitt. I prinsippet kan jo ord frå kva som helst av ordklasser vera tvetydige med substantiv, men som eksperimenta over viste er det umogleg å på FST-nivå finna alle og berre desse (utan å gå tom for ram).
Så alternativa, etter det eg kan sjå, er:
1) backtracking i hfst-tokenise, som skildra i http://giellatekno.uit.no/bugzilla/show_bug.cgi?id=2162#c14 (analyser først lengste moglege streng; viss me såg eit backtracking-symbol, så prøver me alle måter å analysera delene)
2) me godtek at alt i prinsippet kan gå til alt via mellomrom, og prøver å fjerna mest mogleg tull med manuelle unntak i FST og CG-reglar i mwe-dis
I det lange løp trur eg nok 1) er betre; eg trur iallfall me bør prøva det så me får samanlikna.
- å retta ein regresjon i hfst som gjer at ordformer med etterfylgjande punktteikn ikkje blir analyserte
Denne er no retta – nye hfst-pmatch2fst har som standard at token må ha separatorar mellom seg, så eg la inn «set need-separators off» i pmscriptet.
Date: 2016-05-25 10:08:57 +0200
From: Sjur Nørstebø Moshagen <
(In reply to Kevin Brubeck Unhammer from comment #22)
(In reply to Sjur Nørstebø Moshagen from comment #21)
Det som står att no er:
- å få korrekte analyser for ikkje-samansetjingsanalysene (er på veg, truleg i boks snart)
Eg er veldig usikker på om den metoden eigentleg er nok – det innebærer mykje manuell pirk i leksikon for noko som burde vera mogleg å automatisera. Altså, problemet er som tidlegare at me vil ha fleirordsanalysar av alle og berre dei analysane som er tvetydige med særskrivingsfeil. [...] Så alternativa, etter det eg kan sjå, er:
1) backtracking i hfst-tokenise, som skildra i http://giellatekno.uit.no/bugzilla/show_bug.cgi?id=2162#c14 (analyser først lengste moglege streng; viss me såg eit backtracking-symbol, så prøver me alle måter å analysera delene)
Eg er samd, og etter at vi no har testa alternativet, og eg har tenkt meir på saka, ser eg det som det einaste fungerande alternativet. Eg har skrive e-post til Sam og Krister for å høyra kva dei meiner.
2) me godtek at alt i prinsippet kan gå til alt via mellomrom, og prøver å fjerna mest mogleg tull med manuelle unntak i FST og CG-reglar i mwe-dis
Eg har kome fram til at dette ikkje er ein farbar veg, av fleire grunnar:
I det lange løp trur eg nok 1) er betre; eg trur iallfall me bør prøva det så me får samanlikna.
Samd. Rettare trur eg no, etter at vi har prøvd alternativet, at dette er den einaste fungerande løysinga.
Sjølv om vi ikkje har fått svar frå Krister og Sam enno, så trur eg du berre kan byrja å arbeida med ei slik løysing med ein gong. Då har vi i det minste noko å testa og visa til.
Date: 2016-05-30 15:38:09 +0200 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
http://sprunge.us/AHCV?diff med «git clone -b tokenise-backtrack https://github.com/unhammer/hfst» er no ganske nærme noko brukbart (men har nok enno noko krasj ein stad)
For å ta ein ikkje-feil først, så gir det no http://sprunge.us/DGLg?sh der det før gav http://sprunge.us/FFiA?sh – utan at heile den strengen er spesifisert som ikkje-feil i lexc.
Så det som manglar er lengste-match (areála+ektui go vs areála+ektui+go), men eg veit ikkje om det er vits i å bruka tid på enno – det er jo noko som den «elegante» løysinga burde gi oss, men som me ikkje veit enno om me treng pga. me uansett først må innskrenka ganske kraftig det me analyserer som særskriving i lexc.
Eit anna problem med å begynna på lengste-match er at dei vil inkludera særskrivingsanalysar, og det vil me jo ikkje ha. Altså, viss «A B C» hadde backtracking-punkt mellom alle ord, og me først skal prøva «A B+C» vs «A+B C» (før me eventuelt prøver «A+B+C»), så er det god sjanse for at «A+B C» inkluderer ein særskrivingsanalyse av «B C» – skal me då ha hardkoda visse ting i tokenize som fjernar SpaceCmp frå backtracking? Det blir veldig hackete.
Viss me derimot klarer å innskrenka særskrivinga ein del først, så kan det henda at me klarer oss utan lengste-match, iallfall fram til me har ein sånn pmatch-spesifisert versjon av backtracking som Sam & Krister snakka om. Linda & Duommá og meg snakka om t.d. berre særskriving av leksikaliserte til å begynna med; og eventuelt dynamiske uderiverte N+ – og så går det an å sjå på kva slags feil det ikkje fangar opp, om det er verdt den ekstreme tvetydigheita å utvida meir.
Date: 2016-10-13 20:22:38 +0200
From: Sjur Nørstebø Moshagen <
(In reply to Kevin Brubeck Unhammer from comment #24)
Viss me derimot klarer å innskrenka særskrivinga ein del først, så kan det henda at me klarer oss utan lengste-match, iallfall fram til me har ein sånn pmatch-spesifisert versjon av backtracking som Sam & Krister snakka om. Linda & Duommá og meg snakka om t.d. berre særskriving av leksikaliserte til å begynna med; og eventuelt dynamiske uderiverte N+ – og så går det an å sjå på kva slags feil det ikkje fangar opp, om det er verdt den ekstreme tvetydigheita å utvida meir.
Det har vore stille lenge her:-)
Vi har gått over til berre å ha særskrivingsanalyse av leksikaliserte samansetjingar, og det ser ut til å vera akkurat det vi vil ha. Løysinga er generell, og samtidig avgrensa nok til at vi unngår uhorveleg mange analyser og stor tvetydigheit.
Etter det eg kan sjå er vi no snart klare til å lukka denne lusmeldinga.
Date: 2016-10-19 19:26:40 +0200 From: Kevin Brubeck Unhammer <<unhammer+apertium>>
Ja; det er rett nok enno nokre ting som er litt rare, men det er kanskje sånt me berre fiksar med lingvistikken i lexc/CG.
T.d..
$ echo servodat dilálašvuođain | hfst-tokenise -g tokeniser-gramcheck-gt-desc.pmhfst
"<servodat dilálašvuođain>"
"servodatdilli" NN Sem/State Der/lasj AA Attr Der/vuota N Err/Orth Pl Loc Err/SpaceCmp
This issue was created automatically with bugzilla2github
Bugzilla Bug 2162
Date: 2016-03-02T13:52:29+01:00 From: Kevin Brubeck Unhammer <<unhammer+apertium>> To: Sjur Nørstebø Moshagen <>
CC: lene.antonsen, linda.wiechetek, sjur.n.moshagen, thomas.omma, trond.trosterud
Blocker for: #2160 Last updated: 2017-09-08T14:40:47+02:00