Automata Invasion

3,435 views

Published on

Presented by Robert Muir and Michael Mccandless, Lucid,IBM - See conference video - http://www.lucidimagination.com/devzone/events/conferences/lucene-revolution-2012

Finite-state technology, including automata and weighted finite state transducers (wFSTs), are compact data structures well suited to text processing and searching applications. Low level support for both automata and wFSTs is now available in Lucene and has recently enabled a number of surprisingly powerful improvements.In this joint talk, Robert Muir and Michael McCandless will provide an overview of finite-state technology and then describe how it's used today in Lucene: synonym filtering, fuzzy queries, respelling/suggesting, terms dictionary, in-memory postings format (MemoryPostingsFormat) and Japanese analysis (Kuromoji analyzer).

Published in: Technology, Education
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,435
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
45
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Automata Invasion

  1. 1. Automata Invasion Michael McCandless Robert Muir Lucene Revolution May 9, 2012
  2. 2. Agenda● Who we are● Overview of finite state automata/transducers● Three Lucene implementations ○ Automaton ○ FST ○ TokenStream● Applications in Lucene
  3. 3. Who we are● Lucene/Solr committer, PMC member ○ 6 years = old hat!● Tika committer, PMC member● Co-author Lucene in Action, 2nd ed.● http://blog.mikemccandless.com● Sponsored by IBM (thank you!)
  4. 4. Who we are● Lucene/Solr committer, PMC member ○ 3 years = young hat, yet: less hair!● Lucid Imagination employee● Background in internationalization● Tangled up in finite state ○ NLP tasks ○ One of my first contributions to Lucene● http://twitter.com/rcmuir
  5. 5. Agenda● Who we are● Overview of finite state automata/transducers● Three Lucene implementations ○ Automaton ○ FST ○ TokenStream● Applications in Lucene
  6. 6. Finite State Automata (FSA)● Set<int[]>: ○ mop, moth, pop, slop, sloth, stop, top● Start node, final node● Append arc labels as you traverse● Traverse all paths to get all strings● Determinize, minimize, union, intersect, ...
  7. 7. Finite State Transducer (FST)● Adds optional output to each arc ○ Accumulate output as you traverse● Map<int[],T> ○ mop: 0, moth: 1, pop: 2, slop: 3, sloth: 4, stop: 5, top: 6● T is pluggable (defined by output algebra)● Deep theory, many algorithms...
  8. 8. Agenda● Who we are● Overview of finite state automata/transducers● Three Lucene implementations ○ Automaton ○ FST ○ TokenStream● Applications in Lucene
  9. 9. Lucenes FSA Implementation● org.apache.lucene.util.automaton.* ○ Poached from Anders Møllers Brics http://www. brics.dk/automaton● Build up any FSA one node/arc at a time ○ Automaton, Transition, State ○ Transition has min/max label● Many standard algorithms ○ Minimize ○ Determinize ○ Intersect ○ Union ○ Regexp -> Automaton● RunAutomaton for stepping
  10. 10. Lucenes FST Implementation● org.apache.lucene.util.fst.*● FST encoded as a byte[]● Write-once API ○ From Mihov & Maurel paper ○ Build minimal, acyclic FST from pre-sorted inputs ○ Fast (linear time with input size), low memory ○ Optional two-pass packing can shrink by ~25%● Traverse FST one arc at a time ○ Decode byte[] during lookup● SortedMap<int[],T>: arcs are sorted by label ○ getByOutput also possible if outputs are sorted● http://s.apache.org/LuceneFSTs
  11. 11. Lucenes FST Implementation Downside: Generics Policeman does not approve! @UweSays "I looked at the code, it was ununderstandable why this thing was generified"
  12. 12. Lucenes TokenStreams are FSAs!● Streaming FSA, one arc at a time● New PositionLengthAttribute in 3.6.0 ○ How many positions does the token "span" ○ TokenStreamToAutomaton ○ Indexer ignores it (sausage!) ○ http://s.apache.org/TokenGraphs
  13. 13. Lucenes TokenStreams are FSAs!● Fixing all analyzers to behave with graphs?
  14. 14. Agenda● Who we are● Overview of finite state automata/transducers● Three Lucene implementations ○ Automaton ○ FST ○ TokenStream● Applications in Lucene
  15. 15. AutomatonQuery● Automaton specifies which terms match● New Terms.intersect(Automaton) method ○ Visits all matching terms & docs● Example ○ RegexpQuery ○ WildcardQuery ○ FuzzyQuery● Other possible uses ○ Stemming at query time via expansion
  16. 16. How to implement algorithmfrom 67-page paperHands-On
  17. 17. FuzzyQuery● Lev1(dogs)● 100X faster!● Schulz and Mihov algo is hairy● Help from Jean-Philippe Barrette-LaPierre● Includes transpositions● UTF32toUTF8 conversion● http://s.apache.org/FuzzyQuery
  18. 18. DirectSpellChecker● Use LevT automata to find respellings● Decent performance ○ ~47 QPS on Wikipedia, single thread● No side-car index required!"Im confident that in threeweeks, Ill be done."
  19. 19. JapaneseTokenizer (Kuromoji)● Donated by Atilika Inc. (アティリカ株式会社)● Hard problem! (no whitespace, mixed Kanji, Hiragana, Katakana, compounds)● Dictionaries are stored as FST ○ System dictionary and user dictionaries ○ 11.8X smaller than double array trie● Viterbi search finds least-cost segmentation● Token graph for compound words ○ ショッピングセンター (shopping center), ○ ショッピング(shopping), センター (center)
  20. 20. Query Suggesters● E.g: w e a suggests weather● Compile all suggestible queries + weights into FST(s)● Two FST based suggesters ○ FSTSuggester quantizes weights into buckets ○ WFSTSuggester doesnt● Find all paths after users prefix● Fast: ~240K lookups/sec● Active work in progress ○ Fuzzy, analyzing, ngram
  21. 21. WFSTSuggester example wacky|1 "I dont think this will work but I cant waffle|4 provide a counterexample right now" wealthy|3 weather|10 weaver|7
  22. 22. SynonymFilter● Apply at index time or query time or both● First version used recursive maps● New version (in 3.4.0) uses FST ○ 5X faster filter time ○ 14X faster build time ○ 59X less RAM● Multi-token synonyms mess up graph● Cannot consume token graph● http://s.apache.org/TokenGraphs
  23. 23. BlockTree Terms Dictionary http://s.apache.org/LuceneRespellPerf
  24. 24. BlockTree Terms Dictionary● Terms dict maps terms to metadata/postings ○ SortedMap<Term,Postings> ○ Pluggable (per codec)● Term blocks on disk; FST index in memory ○ Variable number of terms per block (vs 3.x)● Variant of a burst trie (Heinz, Zobel, Williams) ○ Terms assigned to blocks by shared prefix, e.g. http://www.*● Fast intersect(Automaton)● Fast "term cant exist"
  25. 25. BlockTree Exampleableaboveappleperfectprefaceprefectureprefixpreviousprofitprogrammerprojectzoo
  26. 26. BlockTree Example blea* boveperfect ppleprefaceprefectureprefixpreviousprofitprogrammerprojectzoo
  27. 27. BlockTree Example blea* bovep* pplezoo erfect reface refecture refix revious rofit rogrammer roject
  28. 28. BlockTree Example blea* bovep* pplezoo face fecture erfect fix re* vious ro* fit grammer ject
  29. 29. BlockTree Example blea* bovep* pplezoo face fecture erfect fix re* vious ro* fit grammer ject
  30. 30. MemoryPostingsFormat http://s.apache.org/LucenePKPerf
  31. 31. MemoryPostingsFormat● Postings format is pluggable per-field● Store all terms + postings in an FST ○ FST is saved to disk● Great match for primary key fields, date filters ○ 2.8X faster PK lookup● http://s.apache.org/MemPostingFormat
  32. 32. Future FSA/T Usages● MappingCharFilter (in progress...)● FieldCache/DocValues (prototype patch)● FSTQuery?● More suggesters● Top-N most frequent terms for approx distributed IDF● .... patches welcome!
  33. 33. Conclusions● FSA/Ts are a good match for Lucene● Lucene has three wildly different implementations● FSA/Ts are now used in a number of places...● ... and more coming
  34. 34. More Information● Finite State Automata in Lucene ○ Dawid Weiss: Lucene Revolution 2011 ○ http://slidesha.re/vKtpVA● FST API code samples ○ http://s.apache.org/pR

×