Ideas for Google Summer of Code/Add weights to lttoolbox
lttoolbox is a set of tools for building finite-state transducers. It would be good to add possibility for weighting lexemes and analyses.
Weights in this page are intuitively defined as larger is worse and two weights can be added using + to make bigger weight reasonably. Theoretically they can be logprobs or tropical semiring stuffs or whatever.
Apertium pipeline vs. weights
The apertium pipeline is like so:
- morphological analysis
- POS tagging
- disambiguation
- lexical transfer
- lexical selection
- structural transfer
- morphological generation
For most of the tasks the weights are well understood and clear cut:
- WFST morphological analysers (surface unigrams, compound n-grams, morph n-grams, lemma weights, pos tag sequence weights)
- N-gram FSTs (OpenGRM etc.)
- CG with weights!
- IBM model 1, apertium's current lexical selection module, etc.
- Something from SMT, simple weights for stuffs?
- there's whole separate gsoc project for this
- WFST morph. analyser is generator inversed
Weights can / should be scaled and combined. The formulas for combining them can be learnt from gold corpora unsupervisedly.
Syntaxes for weights in dixes and t?xes and all
Task should include writing some formats for weights in dictionaries...
Writing weights for lemmas:
<section id="main" type="standard"> <e lm="foo" w="1"><i>foo</i><par n="foo__n"/></e> <e lm="foo" w="2"><i>foo</i><par n="bar__adj"/></e> <e lm="foo" w="7"><i>foo</i><par n="baz__adv"/></e> </section>
Same stuff for other parts...?
<pardef n="foo__n"> <e w="1"><p><l/><r><s n="sg"/></e> <e w="4"><p><l>s</l><r><s n="pl"/></e> </pardef>
Pipeline outputs with weights
Morph. Analysis with weights should output ordered list (with weights):
^foo/foo<n>/foo<adj>/foo<adv>$
Acquiring weights
There're couple of ways to easily weight:
- gold-standard tagged corpora and
- untagged corpora
can be sort | uniq -c'd and composed to analysis and surface sides of the monodix automaton respectively. And:
- rules can tell weights to stuffs:
<sg><ins>
+= 123,<sg><gen>
+= 0.1, etc.
Notes with weights
- HFST supports weighted automata out of the box already (and OpenFst and pyfst and libhfst-python are all good candidates for prototyping)
- Weights should ideally be supported throughout the pipeline, analysis, disambiguation, lexical transfer/selection, translation, chunking can all use it reasonably
- For the lexical transfer the weights could basically be model 1 onto lttoolbox.
- compare how SMT's do probabilities
Tasks
- syntaxes for weights
- specs for weight annotations in pipeline
- tools for acquiring / converting weights
- tuning weight combinations
Coding challenge
Further reading
- http://link.springer.com/chapter/10.1007%2F978-3-642-04131-0_1
- https://helda.helsinki.fi/bitstream/handle/10138/29372/fsmnlp2009weighting.pdf?sequence=2
- ftp://ftp.cs.indiana.edu/pub/gasser/eacl09_final.pdf
- http://link.springer.com/article/10.1007%2Fs10590-004-2476-5
- http://www.dwds.de/static/website/publications/text/Geyken_Hanneforth_fsmnlp.pdf