Assisted Querying using Instant-Response Interfaces

This paper was presented at SIGMOD 2007, Beijing. The PDF version is available (ACM mirror).

Video Overview: (paper continues below)


Arnab Nandi
Dept. of EECS
University of Michigan, Ann Arbor

H. V. Jagadish
Dept. of EECS
University of Michigan, Ann Arbor


We demonstrate a novel query interface that enables users to
construct a rich search query without any prior knowledge
of the underlying schema or data. The interface, which is
in the form of a single text input box, interacts in real-time
with the users as they type, guiding them through the query
construction. We discuss the issues of schema and data complexity, result size estimation, and query validity; and provide novel approaches to solving these problems. We demonstrate our query interface on two popular applications; an
enterprise-wide personnel search, and a biological information database.


The problem of searching for information in large databases
has always been a daunting task. In current database sys-
tems, the user has to overcome a multitude of challenges.
To illustrate these problems, we take the example of a user
searching for the employee record of an American “Emily
Davies” in an enterprise database. The first major chal-
lenge is that of schema complexity: large organizations may
have employee records in varied schema, typical to each de-
partment. Second, the user may not be aware of the exact
values of the selection predicates, and may provide only a
partial or misspelled attribute value (as is the case with our
example, where the correct spelling is “Davis”). Third, we
would like the user to issue queries that are meaningful in
terms of result size a query listing all employees in the or-
ganization would not be helpful to the user, and could be
expensive for the system to compute. Lastly, we do not ex-
pect the user to be proficient in any complex database query
language to access the database.


The instant-response interface is similar in interaction to
various services such as auto-completion in word processors
and mobile phones, and keyword query suggestion in search
engines. The user is presented with a text box, and is ex-
pected to type in keywords, a simple interaction paradigm
that is considered the standard in search systems. As soon
as the user starts typing text into the textbox, the system
instantly begins to provide suggestions, as shown in Figure.
1. The first set of suggestions is a set of schema level param-
eters; i.e. a ranked list of keys, or entity names; which are
simplified names for attributes and table names in a rela-
tional database, or element tags in an XML database. This
allows the user to discover the schema as an ongoing im-
plicit process. The next set of suggestions is a ranked list of
text fragments from the data, which provides the user with
an insight into valid predicate values. Each text fragment
has an associated icon corresponding to the entity type it
belongs to, which are expanded to a full key:value pair on se-
lection. This allows the user to disambiguate between text
values based on their type. Clicking on the icons in the
textbox will wrap the text selection around the associated
key name and hence trigger the drop down to modify the
key, if needed. In addition to these suggestion sets that are
integrated into a single list, the estimated number of tu-
ples, or result objects from the resultant constructed query
is provided on the right of each suggestion. If the estimated
number of results becomes zero due to a value string that
never occurs, or a query that violates the schema, further
suggestions are stopped and the background of the textbox
changes color, depicting an invalid query. The user is then
expected to reformulate the query by changing the terms

2.1 User Experience
In the case of our example, the user first types in “US”, to
specify that he is considering only the United States offices
of the organization. Since “US” came up as a valid sug-
gestion, the user selected it from the drop down box, which
expands the query to country:US. This is beneficial for the
database, since it can now do an exact attribute match in-
stead of looking through multiple attributes. Then, the user
types in “em”; the suggestion mechanism returns a list of
suggestions, with two key values, and two data values. The
user notices that there are two employee records which have
“Emily Davis” in them, and selects the respective sugges-
tion. Since the query so far will still return a result set of
cardinality two, the user decides to refine the query even
further, typing in “department:”, which provides the sug-
gestions “Sales”, and “HR”, one for each result tuple. By
selecting “HR”, the user is able to locate the single employee
record of interest, and directly navigate to it. It should be
noted that the complete interaction occurs over just a few
seconds, as all suggestions are provided in real time as the
user is typing out the query.


We adopt the standard conjunctive attribute-value query
language, where queries are of the form
Q = key1 : value1 · key2 : value2 · key3 : value3 · . . .
Where keyi denotes the key or attribute of a particular ob-
ject, and valuei denotes a specific value for that attribute
or key. This form of querying can be considered an anno-
tated form of basic keyword querying that is simple enough
to be effective and yet rich enough to efficiently query the
database. It is used widely in mainstream search engines,
and the biomedical community. Keyword identifiers are con-
sidered optional, so that a pure keyword query with no at-
tribute name specifications is also acceptable. Any such
value is expected to match any attribute of the selected ob-
ject. Conversely, a single key identifier without a data value
is also acceptable, and would be interpreted as the parent
type of the expected results. Depending on the schema, the
key attributes specified may not belong to the object of in-
terest, but rather to a “closely related” object. In such a
case the query is interpreted using the techniques suggested
in Schema-free XQuery[5].

3.1 Challenges
In contrast to visual query systems[8, 2], the idea of in-
crementally and instantaneously formulating queries using
database schema and data brings forth its own set of prob-
lems. Unlike form-based querying where the users informa-
tion need is explicit, we need to infer what data the user is
expecting to find while the user is typing in his query. Also,
while recent developments in completion based search sys-
tems[4] attempt to apply efficient index structures for basic
keyword querying; this is only a small part of the challenges
faced in our schema and data based language query system.
Suggestion Quality
There is a subtle element of distraction introduced while
proposing suggestions to the user, which may overwhelm the
user[1]. Hence, we have to keep in mind that the quality of
the suggestions need to be high enough such that it is clear

that the suggestion mechanism is worth the negative effects
of UI-based distraction. In addition to this, we acknowledge
the well known human mind’s limit[6] to perceive and con-
sider choices, taken to be approximately seven. Given this
fixed limit, we use a ranking strategy based on acceptance
likelihood, to prioritize suggestions and display only a top-k
set of suggestions.
The notion of suggesting information to the user at the time
of input also depends critically on the “instantaneous” ap-
pearance of the suggestions. It has been shown[7] that a
maximum delay of 100ms can be considered for user inter-
faces to seem instantaneous; clearly all our suggestions need
to generated and displayed to the user in less time than this.
This poses challenges for our system, which is required to be
efficient enough to afford extremely fast querying even for
large databases with diverse schema.
These two challenges must each be addressed in the con-
text of attribute name suggestions, data value suggestions,
and size estimation. We describe our solutions to these chal-
lenges in the following section.


4.1 Schema based suggestions

The first few entries in the suggestion list are a ranked
list of suggestions for possible keys. This is done by using
a suffix tree to generate all possible attributes that are a
completion of the current word typed in. All candidate keys
are then ranked according to distances in the schema graph,
between the candidate keys and the currently selected keys.
Since the user may not know actual attribute names, or the
attribute names may be too cryptic to be used as keywords,
we maintain a metadata map that stores all the convenient
words used for the field name. We augment this metadata
with a subset of the WordNet dataset for further unsuper-
vised synonym-based expansion.
4.2 Schema based validation
We use the schema to construct a reachability index for de-
tecting validity of the query. An n×n matrix is constructed,
where entry(i,j) is true if element name i occurs at least as
an nth level descendent of element name j in any data object
in the database, where n is a upper bound parameter set dur-
ing database set up. For example, an attribute “employee”
could contain attributes “name” and “country” in its data,
while “designation”(an employee attribute) and “building-
type”(an office building’s attribute) will not have any com-
mon 1st or 2nd level ancestors in a personnel database. The
query is considered valid with respect to the schema if there
exists at least one row in the matrix that contains true en-
tries for each of the attributes in the query. To define de-
scendents in relational data, we develop a hierarchy with
attributes at the leaves, tuples as their parents, table as the
grandparent, and joins amongst tables as higher levels of
4.3 Data fragment suggestions
All human-readable data in the database is first frag-
mented into simple chunks of phrases using statistical meth-
ods. We then construct two tries; in the first, each phrase
is entered with its attribute as a prefix; in the second the

attribute is entered as a suffix. The first trie is used for
attribute-specific completion, where the attribute name has
been provided by the user. The second trie is used for generic
completions, where the attributes are stored as suffixes of
the phrase string, allowing us to deduce the attribute name,
and hence the icon for the suggestion. In the case of at-
tributes with a large number of distinct phrases, we prefer
to reuse the generic completion trie in place of the attribute-
specific trie, for efficiency reasons. The leaf node of each trie
is also appended with the count information, which is used
to rank the suggestions in descending order of popularity.
4.4 Size estimation
Each item in the database is provided a unique ID based
on its ancestry, in the form x.y.z, where x is the parent of
y, which in turn is the parent of z. Ancestry is easy to
understand for XML data. For relational data, we consider
the same hierarchy concepts as Sec. 4.2. We use a fielded
inverted index to store these unique identifiers. At query
time, we merge the query-generated attribute lists using a
simple ancestry check; which allows us to come up with the
number of actual items that match the query. Since the
query process is incremental, both attribute lists and merged
lists are cached. In addition, we do not consider large lists
for the sake of efficiency and time-constraints in our query
processing. This is done by ignoring merges of any lists
that are beyond a certain threshold count, and reporting
an estimate of size based on an incomplete independence


In contrast to currently available iterative query build-
ing systems, our system employs a continuously updating
interface to provide real-time query responses, allowing the
user to incorporate suggestions and modify the query in real
time, as opposed to going through a time-consuming cycle
of iterative query building. Beyond the visible user inter-
face, our system involves a backend server that handles the
continuous query requests from the interface, and replies to
it. At the core of the system lie the three modules that pro-
vide suggestion inputs, as described in the previous section.
We use Lucene[3] as our inverted index for size estimation
purposes. For the fragment suggestions, we implement in-
memory trie-based data structures. The third module pro-
vides all schema-related functions, such as query validation
and attribute-name suggestion. The information from these
modules is then aggregated and combined to be presented
as suggestions, which are served off the UI backend server.
We implement a caching layer as an integral part of our sys-
tem, caching not only requests for suggestions, but also the
underlying size estimates, etc. Beyond this, the results are
then passed on to the suggestion server, which serves the
update calls of the user interface.


In our demonstration, we present to the user an inter-
face visible as a single text box in a web browser. This
javascript based interface communicates with the main Java-
based backend suggestion server, which can be run either
locally or on another system. We offer users a chance to
pose queries to the database loaded in the server. The users
are guided through the search process by the instantaneous
suggestions, and are then presented with results upon query
execution. We also demonstrate the “plug and play” na-
ture of our system, where we allow any existing relational or
XML database to be loaded quickly for use with the instant-
response interface, by simply pointing to the database loca-
tion. The schema and other metadata information are au-
tomatically read from the database, and are used to load
the database contents, creating the inverted index, phrase
tries and schema graph. An optional step is provided to
the user for annotating the schema with application-specific
metadata (e.g. attribute “EMPZ” could be annotated with
We demonstrate our application on two datasets. The
first dataset is based on the IMDB dataset. This comprises
of movie information with over 100,000 records, including
actors, movie titles and other film related information. For
our second dataset, we use the MiMI molecular interaction
database, which is an XML dataset over 1 gigabyte in size,
containing over 48 million entities including data collected
from external databases.


[1] B. Bailey, J. Konstan, and J. Carlis. The Effects of
Interruptions on Task Performance, Annoyance, and
Anxiety in the User Interface. Proc. INTERACT, 2001.
[2] T. Catarci, M. Costabile, S. Levialdi, and C. Batini.
Visual Query Systems for Databases: A Survey.
Journal of Visual Languages and Computing, 1997.
[3] E. Hatcher and O. Gospodnetic. Lucene in Action.
Manning Publications, 2004.
[4] I. W. Holger Bast. Type Less, Find More: Fast
Autocompletion Search with a Succinct Index. Proc.
SIGIR, 2006.
[5] Y. Li, C. Yu, and H. Jagadish. Schema-Free XQuery.
Proc. Conf. Very Large Databases, 2004.
[6] G. Miller et al. The Magical Number Seven, Plus Or
Minus Two: Some Limits on Our Capacity for
Processing Information. Bobbs-Merrill, 1956.
[7] R. Miller. Response time in man-computer
conversational transactions. Proceedings of the AFIPS
Fall Joint Computer Conference, 1968.
[8] A. Sengupta and A. Dillon. Query by templates: A
generalized approach for visual query formulation for
text dominated databases. Proc. Symposium on
Advanced Digital Libraries, 1997.

Effective Phrase Prediction

The following paper was presented in VLDB Vienna, Austria, 2007. The PDF version is available here.

Arnab Nandi

Dept. of EECS

University of Michigan, Ann Arbor

H. V. Jagadish

Dept. of EECS

University of Michigan, Ann Arbor

21 March 2006

Autocompletion is a widely deployed facility in systems that require user
input. Having the system complete a partially typed “word” can save user time
and effort.

In this paper, we study the problem of autocompletion not just at the level of
a single “word”, but at the level of a multi-word “phrase”. There are two
main challenges: one is that the number of phrases (both the number possible and
the number actually observed in a corpus) is combinatorially larger than the
number of words; the second is that a “phrase”, unlike a “word”, does not
have a well-defined boundary, so that the autocompletion system has to decide not just
what to predict, but also how far.

We introduce a FussyTree structure to address the first challenge and the
concept of a significant phrase to address the second.
We develop a probabilistically driven multiple completion choice model, and
exploit features such as frequency distributions to improve the quality of our suffix completions. We
experimentally demonstrate the practicability and value of our technique for an
email composition application and show that we can save approximately a fifth of the keystrokes typed.

1  Introduction

Text-input interfaces have been undergoing a sea change in the last few years.
The concept of automatic completion, or autocompletion has become
increasingly pervasive. An autocompletion mechanism unobtrusively prompts the
user with a set of suggestions, each of which is a suffix, or completion, of the
user’s current input. This allows the user to avoid unnecessary typing, hence
saving not just time but also user cognitive burden. Autocompletion is finding
applications in specialized input fields such as file location fields
 [30], email address fields [30] and URL address
bars [25], as well as new, more aggressive applications such as
dictionary-based word / phrase completion [23] and search query
suggestion, available now in mainstream web browsers [25]. With the recent increase in user-interface to server communication
paradigms such as AJAX [32], and as users become more receptive to the
idea of autocompletion, it will find many more applications, giving rise to
increased expectations from autocompletion systems.

Current autocompletion systems are typically restricted to single-word
completion. While being a very helpful feature, single word completion does
not take advantage of collocations in natural language – humans have a tendency
to reuse groups of words or “phrases” to express meanings beyond the simple
sum of the parts. From our observations, examples of such collocations can not only be
proper noun phrases; such as “Enron Incorporated", but also commonly used
phrases such as “can you please send me the" or “please let
me know if you have any questions"
. Such phrases become much more common when
attached to a personalized context such as email, or personal writing, due to
the tendency of an individual to mention the same the same phrases during
repetitive communication. Many current systems incorporate multiple word
occurrences by encoding them as single words; for example “New York"
is converted to “New_York". However, such schemes do not scale
beyond a few words, and would bloat the index (e.g. suffix-tree) sizes for
applications where we desire to index a large number of phrases.

It is this multi-word autocompletion problem that we seek to address in this

We note that autocompletion is only useful if it appears “instantaneous" in the
human timescale, which has been observed [5, 27] to be a time upper bound of
approximately 100ms. This poses a stringent time constraint
on our problem. For single word completion, typical techniques involve building a dictionary of all words and
possibly coding this as a trie (or suffix-tree), with each node representing one
character and each root-leaf path depicting a word (or a suffix). Such
techniques cannot be used directly in the multi-word case because one cannot
construct a finite dictionary of multi-word phrases. Even if we limit the length
of phrases we will consider to a few words at most, we still need an
“alphabet” comprising all possible words, and the size of the dictionary is
several orders of magnitude larger than for the single word case.

It goes without saying that autocompletion is useful only when suggestions
offered are correct (in that they are selected by the user). Offering
inappropriate suggestions is worse than offering no suggestions at all, distracting
the user, and increasing user anxiety [1]. As we move from word
completion to phrase completion, we find that this correctness requirement
becomes considerably more challenging. Given the first 5 letters of a long
word, for example, it is often possible to predict which word it is: in
contrast, given the first 5 words in a sentence, it is usually very hard to
predict the rest of the sentence. We therefore define our problem as one of
completing not the full sentence, but rather a multi-word phrase, going
forward as many words as we can with reasonable certainty. Note that our use of
the word “phrase” does not refer to a construct from English grammar, but
rather an arbitrary sequence of words. At any point in the input, there is no
absolute definition of the end of the current phrase (unlike word or sentence,
which have well-specified endings) – rather the phrase is as long as we are
able to predict, and determining the length of the phrase itself becomes a
problem to address.
For example, given the prefix please let, one possible phrase
completion is please let me know; a longer one is please let
me know if you have any problems
. The former is more likely to be a correct
prediction, but the latter is more valuable if we get it correct (in that more
user keystrokes are saved). Choosing between these, and other such options (such as
please let me know when), is one problem we address in this paper.

Traditional methods of autocompletion have provided only a single completion per
query. Current autocompletion para- digms and user interface mechanisms do allow for multiple
suggestions to be given to the user for example by cyclic tab-based
completions [39] in command line shells, or by drop-down
completions in search engines. However, this facility is
typically used to present a comprehensive list of possible completions without
any notion of ranking or summarization.

There are dozens of applications that could benefit from multi-word
autocompletion, and the techniques we develop in this paper should be applicable
irrespective of the application context. Nonetheless, to keep matters concrete,
we will focus on email composition as our motivating application. We all spend
a significant fraction of our work day composing emails. A tool can become
valuable even if it helps decrease this time only slightly. We hypothesize
the typical official email conversation is rerepetitive and has many standard
For each user, there is typically available a long archive of sent mail, which
we can use to train an autocompletion system. And finally, the high speed at
which most of us type out emails makes it essential that autocompletion queries
have very short response times if they are to help rather than hinder the user,
leading to tight performance requirements which we will attempt to address.

1.1  Our contributions

We introduce a query model that takes into account the multiplicity of
completion choice, and propose a way to provide top-k, ranked
, paying attention to the nature of results returned.

We introduce the concept of a significant phrase, which is used to
demarcate frequent phrase boundaries. It is possible for significant phrases to
overlap. It is also possible for there to be two (or more) significant phrases
of differing lengths for any completion point. To evaluate systems that provide multiple
ranked autocompletion results, we define a novel total profit metric for ranked autocompletion
results, that takes into account the cost of distraction due to incorrect suggestions.

At the physical level, we propose the construction of a word-based suffix tree structure we call the FussyTree,
where every node in the tree corresponds to a word instance in the corpus, and
root-leaf paths depict phrases. Queries are executed upon receipt of a prefix phrase from the user-interface, and the suffix-tree is then traversed to
provide the results. We develop techniques to minimize resource requirements in
this context, such as tree size and construction time.

The next section discusses the challenges and motivations for our work, and
details some of the existing solutions to the problems at hand. In Section 3,
we describe our data model and the notion of significance.
The FussyTree data structure, its construction and querying are defined in
Section 4. This is followed by Section 5, where we discuss evaluation strategies and metrics for
our experiments. We report our experiments and findings in
Section 6, and suggests extensions to our work in Section 7. We conclude with a discussion of the problem at hand in Section 8.

2  Motivation and Challenges

2.1  Pervasiveness of Autocompletion

The concept of autocompletion has become prevalent in current user interfaces.
It has found its way into mobile phones [38], OS-level file and web
browsers [25], desktop search engines such as Google
Desktop [22], GNOME Beagle [21] and Apple
Spotlight [20], various integrated development environments,
email clients such as Microsoft Outlook [23], and even word processors
such as Microsoft Word [23] and OpenOffice [2]. The latest
versions of Microsoft Internet Explorer [24] and Mozilla
Firefox [25] implement autocompletion to suggest search queries to the
user. This widespread adoption of autocompletion demands more from the backend
mechanisms that support it in terms of fast response times with large amounts of
suggestion data. While improvements in underlying computer hardware and
software do allow for implementation of more responsive user interfaces, the
basic computational challenges involving autocompletion still need to be solved.

2.2  Related Work

The concept of autocompletion is not new. Implementations such as the “Reactive
Keyboard” developed by Darragh and Witten [6] have been
available since the advent of modern user interfaces, where the interface
attempts to predict future keystrokes based on past interactions.
Learning-based assistive technologies have been very successfully used to help
users with writing disabilities [18], and this technology is now
being extended to accelerate text input for the average user.

There have been successful implementations for autocompletion in controlled
language environments such as command line shells developed by Motoda and
Yoshida [29], and by Davison and Hirsh [7]. Jacobs and
Blockeel have addressed the problem of Unix command prediction using variable
memory Markov models. Integrated Development environments such as Microsoft
Visual Studio also exploit the limited nature of controlled languages to deliver
accurate completion mechanisms that speed up user input.

As in these controlled languages, there is high predictability in natural human
language text, as studied by Shannon [37], making a great case for the
invention of automated natural language input. Phrase prediction and
disambiguation for natural language have been active areas of research in the
speech recognition and signal processing community [11], providing
reliable high-level domain knowledge to increase the accuracy of low-level audio
processing. Phrase level prediction and disambiguation have also found great
use in the area of machine translation to improve result quality [42].
Similar ideas involving language modelling have been used for spelling
correction [17]. The exact task of sentence completion has been
tackled using different approaches. Grabski et al. [12] have
developed an information retrieval based set of techniques, using cosine
similarity as a metric to retrieve sentences similar to the query. Bickel et
al. [3] take on a more language model-based approach, by estimating
parameters in linearly interpolated n-gram models.

While there have been significant advances in the level of phrase prediction for
natural language, there appears to be very little attention paid to the
efficiency of the prediction itself. Most models and systems are built
for offline use, and are not designed for real time use at the speed of human
typing - several queries a second. Also, the data models implemented by most
are agnostic of actual implementation issues such as system memory. We attempt
to bridge this gap, using a data-structures approach to solving this problem.
We conceive the phrase completion problem as a suffix tree implementation, and
institute methods and metrics to ensure result quality and fast query response

In addition to the nature of the queries, we recognize parameters that have not
been considered before in traditional approaches to the problem setting. While
the concept of contextual user interaction is quite prevalent [36],
the context of the query phrase has been ignored in surveyed
text-prediction literature. This is an important feature, since most human
textual input is highly contextual in nature. In the following sections, we
evaluate the ability of improving result quality using the query

The problem of frequent phrase detection has also been addressed in the context
of “phrase browsing" in which documents are indexed according to a hierarchy of constituent phrases.
The Sequitur algorithm used in these techniques [31, 28, 33]
suffers from the problem of aggressive phrase creation and is not ideal
for cases where we wish to index only the n-most frequent phrases, as opposed
to all the repeated phrases in the document. Additionally the in-memory data structure created is
hence extremely large and infeasible for large datasets.

Efficient data structures for prefix-text indexing have been studied. For example, trie variants such as burst tries [13, 43] have been shown to be effective for indexing word sequences in large corpora. However, these techniques still require memory resident structures and furthermore do not consider phrase boundaries or phrase frequencies, and hence cannot be used for our application.

2.3  Vocabulary and size

There has been considerable work [40, 41, 34] that
considers the problem of frequent phrase storage using suffix trees for both
small and large data sets. However, traditional techniques that study efficient
suffix tree construction make an assumption that the vocabulary (tree alphabet)
involved is small. Since we consider natural language phrase autocompletion as
our target application, our vocabulary is that of all the possible words in the
text, which is a very large number. Hence, the average fanout of each node in
the suffix tree is expected to be quite high, that is, each word will have a high
number of distinct words following it. In addition, the trees are expected to
be sparse and extremely varied in their structure. This high fanout and sparse,
varied structure challenges current scalable construction algorithms since
sub-tasks in these algorithms, such as the identification of common substrings.

Such flat, wide suffix-trees also make querying difficult due to the increased
costs in searching through the nodes at each level.
A possible solution is to maintain each list of children in lexicographic
order, which affects the lower bounds on suffix tree construction taking it from
O(n) to O(nlogσ), where σ is the size of the vocabulary and n
the size of our input text. Farach et al. [9] address this very
problem and propose a linear-time algorithm for suffix tree construction.
However, this algorithm involves multiple scans of the input string to
construct and splice together parts of the tree, which makes it impossible to
implement applications that are incremental or stream-like in nature, or where
the corpus size is very large.

In other related work, the estimation of phrase frequencies has been looked into
is an index estimation problem. Krishnan et al. [16] discuss the
estimation techniques in the presence of wildcards, while Jagadish et
al. [14] use various properties such as the short-memory property
of text to estimate frequency for substrings. However, both papers consider
only low vocabulary applications. For example, the construction of pruned count
suffix trees, as suggested in these papers, is infeasible for phrases due to the large intermediate size of the
trees, even with in-construction pruning.

3  Data Model

In the context of the problem setting described above, we now formalize our autocompletion problem.

Let a document be represented as a sequence of words, w1, w2, …,
wN. A phrase r in the document is an occurrence of consecutive words,
wi, wi+1, …, wi+x−1, for any starting position i in [1,N].
We call x the length of phrase r, and write it as len(r)=x.

The autocompletion problem is, given w1, w2, … wi−1, to predict completions of the form: wi, wi+1, …, wi+c−1, where we would like the likelihood of this completion being correct to be as high as possible, and for the length of the completion to be as large as possible.

Of course, the entire document preceding word i can be very long, and most of it may have low relevance to the predicted completion. Therefore, we will consider a phrase to comprise a prefix of length p and a completion of length c. Values for both p and c will be determined experimentally.

We now introduce an example to help explain concepts throughout the rest
of this paper, a sample of a multi document text stream for email as shown in Table 1. We also present the n-gram frequency table, in this example choosing a training sentence size N = 2. In other words, we determine frequencies for words and word pairs but not for word triples or longer sequences. We are not interested in phrases, or phrase components, that occur infrequently. In this example, we have set a threshold parameter τ = 2. The italicized (last three) phrases have frequency below this threshold, and are hence ignored.

Doc 1please call me asap
Doc 2please call if you
Doc 3please call asap
Doc 4if you call me asap

please3please call3
call4call me2
me2if you2
if2me asap2
you2call if1
asap3call asap1
  you call1

Table 1: An example of a multi-document collection

3.1  Significance

A phrase for us is any sequence of words, not necessarily a grammatical
construct. What this means is that there are no explicit phrase
boundaries*. Determining such boundaries is a first requirement.
In practice, what this means is that we have to decide how many words ahead we
wish to predict in making a suggestion to the user.

On the one hand we could err in providing suggestions that are too specific;
e.g. a certain prefix of the sentence is a valid completion and has a very high
probability of being correct. However the entire suggestion in its completeness
has a lower chance of being accepted. Conversely, the suggestions maybe too
conservative, losing an opportunity to autocomplete a longer phrase.

We use the following definition to balance these requirements:


A phrase ‶AB" is said to be significant if it satisfies the following four conditions:

  • frequency : The phrase AB occurs with a threshold frequency of at least τ in the corpus.
  • co-occurrence : ‶AB" provides additional information
    over ‶A", i.e. its observed joint probability is higher than that of
    independent occurrence.

    P(‶AB") > P(‶A") · P(‶B")

  • comparability : ‶AB" has likelihood of occurrence that is “comparable" to ‶A". Let z ≥ 1 be a comparability factor. We write this formally as:

    P(‶AB") ≥ 

     P(‶A")     (2)

  • uniqueness : For every choice of ‶C", ‶AB" is much more
    likely than ‶ABC". Let y ≥ 1 be a uniqueness factor such that for all C,

    P(‶AB") ≥ y P(‶ABC")

z and y are considered tuning parameters. Probabilities within a factor of z are considered comparable, and probabilities more than a factor of y apart are considered to be very different.

In our example, we set the frequency threshold τ = 2, the comparability factor z = 2, and the uniqueness factor y =
3. Consider Doc. 1 in the document table. Notice that the phrase “please call” meets all three conditions
of co-occurrence, comparability, and uniqueness and is a
significant phrase. On the other hand, “please call me”
fails to meet the uniqueness requirement, since “please call me asap” has the same frequency. In essence, we are trying to locate phrases which represent sequences of words that occur more frequently together than by chance, and cannot be extended to longer sequences without lowering the probability substantially. It is possible for multiple significant phrases to share the same prefix. E.g. both “call me” and “call me asap” are significant in the example above.
This notion of significant phrases is central to providing effective suggestions for autocompletion.

4  The FussyTree

Suffix trees are widely used, and are ideal data structures to determine
completions of given strings of characters. Since our concern is to find
multi-word phrases, we propose to define a suffix tree data structure over an alphabet of
words. Thus, each node in the tree represents a word. Such a phrase
completion suffix tree
is complementary with respect to a standard
character-based suffix tree, which could still be used for intra-word
completions using standard techniques. We refer to our data structure as a FussyTree, in that it is fussy about the strings added to it.

In this section we introduce the FussyTree as a variant of the pruned count suffix tree, particularly suited for phrase completion.

4.1  Data Structure

Since suffix trees can grow very large, a pruned count suffix
 [16] (PCST) is often suggested for applications such as ours.
In such a tree, a count is maintained with each node, representing the number of
times the phrase corresponding to the node occurs in the corpus. Only nodes
with sufficiently high counts are retained, to obtain a significant savings in
tree size by removing low count nodes that are not likely to matter for the
results produced. We use a PCST data structure, where every node is the
dictionary hash of the word and each path from the root to a leaf represents a
frequent phrase. The depth of the tree is bounded by the size of the largest
frequent phrase h, according to the hth order Markov assumption that
constrains wt to be dependent on at most words wt+1wt+h.
Since there are no given demarcations to signify the beginning and end of
frequent phrases, we are required to store every possible frequent substring,
which is clearly possible with suffix trees. Also, the structure allows for fast,
constant-time retrieval of phrase completions, given fixed bounds on the maximum
frequent phrase length and the number of suggestions per query.

Hence, a constructed tree has a single root, with all paths leading to a leaf
being considered as frequent phrases. In the Significance Fussytree variant, we additionally add a marker to denote that the node is significant, to denote its importance in the tree. By setting the pruning count
threshold to τ, we can assume that all nodes pruned are not significant in that they do not
satisfy the frequency condition for significance. However, not all retained nodes are significant. Since we
are only interested in significant phrases, we can prune any leaf nodes of the
ordinary PCST that are not significant. (We note that this is infrequent. By
definition, a leaf node u has count greater than the pruning threshold and
each of its children a count less than threshold. As such, it is likely that
the uniqueness condition is satisfied. Also, since the count is high enough for
any node not pruned, the comparability test is also likely to be satisfied. The
co-occurrence test is satisfied by most pairs of consecutive words in natural

4.2  Querying: The Probe Function

The standard way to query a suffix tree is to begin at the root and traverse
down, matching one query character in turn at each step. Let node u be the
current node in this traversal at the point that the query is exhausted in that
all of its characters have been matched. The sub-tree rooted at node u
comprises all possible completions of the given query string.

For the FussyTree, we have to make a few modifications to the above procedure
to take into account the lack of well-defined phrase boundaries. There are
precisely two points of concern – we have to choose the beginning of the prefix
phrase for our query as well as the end point of the completions.

Recall that no query is explicitly issued to our system – the user is
typing away, and we have to decide how far back we would like to go to define
the prefix of the current phrase, and use as the query to the suffix tree. This
is a balancing act. If we choose too long a prefix, we will needlessly
constrain our search by including irrelevant words from the “distant” past
into the current phrase. If we choose too short a prefix, we may lose crucial
information that should impact likely completions. Previous studies [14] have
demonstrated a “short memory property” in natural language, suggesting that
the probability distribution of a word is conditioned on the preceding 2-3
words, but not much more. In our scenario, we
experimentally found 2 to be the optimum choice, as seen in section 6.5.2. So we always use the last two
words typed in as the query for the suffix tree.

Once we have traversed to the node corresponding to the prefix, all descendants
of this node are possible phrase completions. In fact, there are many
additional phrase completions corresponding to nodes that have been pruned away
in the threshold-based pruning. We wish to find not all possible completions,
but only the significant ones. Since we have already marked nodes significant,
this is a simple question of traversing the sub-tree and returning all
significant nodes(which represent phrases) found. In general there will be more than one of them.

4.3  Tree Construction

4.3.1  Naive algorithm

The construction of suffix trees typically uses a
sliding window approach. The corpus is considered a stream of
word-level tokens in a sliding window of size N, where N is the order of the Markovian assumption. We consider each window instance as a separate string, and attempt to insert all its prefixes into the PCST. For
every node that already exists in the tree, the node count is incremented by
one. The tree is then pruned of infrequent items by deleting all nodes
(and subsequent descendants) whose count is lower than the frequency
threshold τ.

P ≠{}




i 1 maxfreq

//slide through with a window of size i

f Sliding-Window(P, i)

Frequent-Table-Contains(f) = false



//align phrase to relevant node in existing suffix tree

//add all the remaining words as a new path

4.3.2  Simple FussyTree Construction algorithm

The naive algorithm for PCST construction described above does not scale well
since the entire suffix tree including infrequent phrases is constructed as an
intermediate result, effectively storing a multiple of the corpus size in the
tree.  [16] suggests calling the prune() function at
frequent intervals during the construction of the suffix tree using a scaled
threshold parameter. However, our experiments showed that this strategy either
produced highly inaccurate trees in the case of aggressive thresholding, or even the intermediate trees
simply grew too large to be handled by the system with less aggressive thresholding.

To remedy this, we propose a basic Simple FussyTree Construction algorithm in which we
separate the tree construction step into two parts. In the first step we use a
sliding window to create an n-gram frequency table for the corpus, where n =
1,...,N, such that N is the training sentence size. We then prune all phrases below the
threshold parameter and store the rest. In our second step, we add phrases to
the tree in a fussy manner, using another sliding window pass to scan
through the corpus. This step stores all the prefixes of the window, given
that the phrase exists in the frequency table generated in the first step. The
testing of the phrase for frequency is done in an incremental manner, using the
property that for any bigram to be frequent, both its constituent unigrams need
to be frequent, and so on. Since the constituent n-grams are queried more
than once for a given region due to the sliding window property of our
insertion, we implement an LRU cache to optimize the isFrequent()

An example illustrating the FussyTree algorithm

We use the data from the example provided in Table 1 to construct our
aggregate tokenized stream:

(please, call, me, asap, -:END:-,
please, call, if, you,

where the -:END:- marker implies a frequency
of zero for any phrase containing it. We now begin the construction of our tree
using a sliding window of 4. The first phrase to be added is (please,
call, me, asap)
followed by its prefixes, (please, call, me),
(please, call) and (please). We then shift the window to
(call, me, asap, -:END:-), and its
prefixes (call, me, asap), (call, me) and (call), and
so on. All phrases apart from those that contain either of (call, if),
(call, asap), (you, call)

or (-:END:-) will meet the frequency
requirements, resulting in Fig. 1. Significant phrases are marked with a *. Note that all leaves are significant (due to the uniqueness clause in our definition for significance), but some internal nodes are significant too.


Figure 1: An example of a constructed suffix-tree

4.3.3  Analysis

We now provide a brief complexity analysis of our tree construction algorithm. It uses a sliding window approach over the corpus, adding the windowed phrases to the tree. Given a corpus of size S and a window of fixed size h, we perform frequency checks on each of the phrase incrementally. Hence, the worst case number of actual frequency checks performed is S × 2h. Note that h is a small number (usually under 8), and hence does not pose any cause for concern. Additionally, the LRU cache for frequency checks brings down this number greatly, guaranteeing that our corpus scanning is done in O(S). Further, each phrase can in the worst case create a completely new branch for itself which can have a maximum depth of h, the size of the window. Thus, the number of tree operations is also linear with the corpus size, indicating that our construction algorithm time will grow linearly with the size of the corpus size. The constant-time lookup for the querying stage is explained thus: a query can at worst force us to walk down the longest branch in the tree, which is of maximum depth h, a fixed number.

We now look into the correctness of our tree construction with respect to our definition of significance. In our implementation, the FussyTree is constructed with only those phrases possessing a frequency greater than τ, ensuring that all nodes marked significant in the tree represent frequent phrases. This asserts correctness the frequency rule in the notion of significance. The co-occurrence and comparability are also rendered correctly, since we possess all the count information to mark them. However, to assert uniqueness in the leaf nodes of our tree, we note the loss of count information for the leaf nodes’ children. Obviously, the frequency for the children of the leaf nodes is lesser than the threshold, and hence is most likely low enough to satisfy the uniqueness clause. However, there may be a case in which the children may have just missed the threshold, making the leaf node ineligible for the uniqueness clause. In this case, we conservatively mark all leaf nodes as significant.

4.3.4  Training sentence size determination

The choice of the size of the training sentence size N, is a significant parameter choice.
The cost of tree construction goes up with N, as longer frequent phrases are
considered during the construction. This predicates the need to store n-gram frequency tables (where n = 1 … N) take up considerable resources, both in terms of storage and query times to check for frequency. The cost of phrase look-up in the resultant
tree also increases because of this reason. Hence, in the interest of
efficiency, we would like to minimize the value of N. Yet, using too small a
value of N will induce errors in our frequency estimates, by ignoring crucial
dependence information, and hence lead to poor choices of completions. Keeping this in mind, we experimentally derive the value of N in Sec. 6.5.1.

We note similar ideas in  [41], where frequency information is recorded
only if there is a significant divergence from the inferred conditional
probabilities. However we point out that the frequency counts there are
considered on a per-item basis, as opposed to our approach, which is much faster
to execute since there are no requirements to do a recurring frequency check
during the actual creation of the FussyTree structure.

4.4  Telescoping

Telescoping [26] is a very effective space compression
meth-od in suffix trees (and tries), and involves collapsing any single-child
node (which has no siblings) into its parent node.
In our case, since each node possesses a unique count, telescoping would result
in a loss of information, and so cannot be performed directly, without loss of information.
Given the large amount of storage required to keep all these counts, we seek
techniques to reduce this, through mechanisms akin to telescoping.

To achieve this, we supplant the multi-byte count element by a single-bit flag to mark if a node is
“significant" in each nodeat depth greater than one. All linear paths between significant nodes are considered safe
to telescope. In other words, phrases that are not significant get ignored,
when determining whether to telescope, and we do permit the collapsing together
of parent and child nodes with somewhat different counts as long as the parent
has no other significant children. To estimate the frequency of each phrase, we
do not discard the count information from the significant nodes directly
adjacent to the root node. By the comparability rule in the definition
of significance, this provides an upper bound for the frequency
of all nodes, which we use in place of the actual frequency for the
probe function. We call the resulting telescoped structure a Significance FussyTree with (offline) significance marking.

Online significance marking

An obvious method to mark the significance of nodes would be to traverse the
constructed suffix tree in a postprocessing step, testing & marking each node.
However, this method requires an additional pass over the entire trie. To avoid them, we propose a
heuristic to perform an on-the-fly marking of significance, which enables us to
perform a significance based tree-compaction without having to traverse the entire tree again.

Given the addition of phrase ABCDE, only E is considered to be promoted of
its flagged status using the current frequency estimates, and D is considered
for demotion of its status. This ensures at least 2-word pipelining. In the
case of the addition of ABCXY to a path ABCDE where E is significant, the
branch point C is considered for flag promotion, and the immediate descendant
significant nodes are considered for demotion. This ensures considering common
parts of various phrases to be considered significant.

//align phrase to relevant node in existing suffix tree

using cursor c, which will be last point of


//add all the remaining words as a new path

the cursor c is again the last point of


Consider-Demotion(c →parent)

child c →children


We call the resulting structure a Significance FussyTree with online significance marking.

5  Evaluation Metrics

Current phrase / sentence completion algorithms discussed in related work only
consider single completions, hence the algorithms are evaluated using the
following metrics:

Precision = 

n(accepted completions)


Recall = 

n(accepted completions)
n(queries, i.e. initial
word sequences)


where n(accepted completions) = number of accepted completions, and so on.

In the light of multiple suggestions per query, the idea of an accepted
is not boolean any more, and hence needs to be quantified. Since our
results are a ranked list, we use a scoring metric based on the inverse rank of
our results, similar to the idea of Mean and Total Reciprocal Rank scores
described in  [35], which are used widely in evaluation for information
retrieval systems with ranked results. Also, if we envisage the interface as a
drop-down list of suggestions, the value of each suggestion is
inversely proportional to it’s rank; since it requires 1 keypress to select the
top rank option, 2 keypresses to select the second ranked one, and so on. Hence
our precision and recall measures are redefined as:

Precision = 

(1/rank of accepted
n(predicted completions)

Recall = 

(1/rank of accepted completion)
i.e. initial word sequences)

To this end we propose an additional metric based on a “profit” model to quantify the number
of keystrokes saved by the autocompletion suggestion. We define the income as a
function of the length of the correct suggestion for a query, and the cost as a
function of a distraction cost d and the rank of the suggestion. Hence, we define the Total Profit Metric(TPM) as:

TPM(d) = 

(sug. length × isCorrect) − (d +
length of document


Where isCorrect is a boolean value in our sliding window test, and d
is the value of the distraction parameter. TPM metric measures the
effectiveness of our suggestion mechanism while the precision and
recall metrics refer to the quality of the
suggestions themselves. Note that the distraction caused by the suggestion is
expected to be completely unobtrusive to user input : the value given to the
distraction parameter is subjective, and depends solely on how much a user is
affected by having an autocompletion suggestion pop up while she is typing. The
metric TPM(0) corresponds to a user who does not mind the distraction at all, and computes
exactly the fraction of keystrokes saved as a result of the autocompletion. The
ratio of TPM(0) to the total typed document length tells us what fraction of the
human typing effort was eliminated as a result of autocompletion. TPM(1) is an
extreme case where we consider every suggestion(right or wrong) to be a blocking
factor that costs us one keystroke. We conjecture that the average, real-world
user distraction value would be closer to 0 than 1.

We hence consider three main algorithms for comparison: (1) We take the naive pruned count suffix
tree algorithm(Basic PCST) as our baseline algorithm. (2) We consider the basic version of the FussyTree construction algorithm called the Simple FussyTree Construction as an initial comparison, where we use frequency counts to construct our suffix tree. (3) Our third variant, Significance FussyTree Construction is used to create a significance-based FussyTree with significance marked using the online heuristic.

6  Experiments

We use three different datasets for the evaluation with increasing degrees of size
and language heterogeneity. The first is a subset of emails from the Enron
corpus [15] related to emails sent by a single person which spans
366 emails or 250K characters. We use an email collection of multiple Enron
employees, with 20,842 emails / 16M characters, as our second collection. We use
a more heterogeneous random subset of the Wikipedia# for our third dataset comprising 40,000 documents / 53M characters. All documents were preprocessed
and transformed from their native formats into lowercase plaintext ASCII.
Special invalid tokens (invalid Unicode transformations, base64 fragments from
email) were removed, as was all punctuation, so that we can concentrate on
simple words for our analysis. All experiments were implemented in the Java
programming language and run on a 3GHz x86 based computer with 2 gigabytes of
memory and inexpensive disk I/O, running the Ubuntu Linux operating system.

To evaluate the phrase completion algorithms, we employ a sliding window based
test-train strategy using a partitioned dataset. We consider multi-document
corpora, aggregated and processed into a tokenized word stream. The sliding
window approach works in the following manner: We assume a fixed window of size
n, larger than or equal to the size of the training sentence size. We then scan
through the corpus, using the first α words as the query, and the
first β words preceding the window as our context. We then retrieve
a ranked list of suggestions using the suggestion algorithm we are testing, and
compare the predicted phrases against the remaining n−α words in the window,
which is considered the “true” completion. A suggested completion is accepted
if it is a prefix of the “true” completion.

6.1  Tree Construction

We consider the three algorithms described at the end of Sec. 5 for analysis. We ran the three
algorithms over all three candidate corpora, testing for construction
time, and tree size. We used the standard PCST construction algorithm [14] as a base line. We found the values of comparability parameter z = 2 and uniqueness parameter y = 2 in computing significance to be optimum in all cases we tested. Therefore, we use these values in all experiments reported. Additionally, the default threshold values for the three corpora were kept at 1.5 × 10−5 of corpus size; while the value for the training sentence size N was kept at 8, and the trees were queried with a prefix size of 2. The threshold, training sentence size and prefix size parameters were experimentally derived, as shown in the following sections.

We present the construction times for all three datasets in Table 2.
The PCST data structure does not perform well for large sized data – the
construction process failed to terminate after an overnight run for the
Wikipedia dataset. The FussyTree algorithms scale much better
with respect to data size, taking just over half an hour to construct the tree
for the Wikipedia dataset. As we can see from Table 2, the Significance FussyTree algorithm is faster than offline significance marking on the Simple FussyTree, and is only slightly slower to construct than the Simple FussyTree algorithm.

AlgorithmSmallLarge EnronWikipedia
Basic PCST131811592153
Simple FussyTree1628710245602073373
Offline Significance1929511431152342171
Online Significance1721010383582118618

Table 2: Construction Times (ms)

6.2  Prediction Quality

We now evaluate the the prediction quality of our algorithms in the following
manner. We simulate the typing of a user by using a sliding window of size 10
over the test corpus, using the first three words of the window as the context,
the next two words as the prefix argument, and the remaining five as the
true completion. We then call the probe function for each prefix,
evaluating the suggestions against the true completion. If a suggestion is
accepted, the sliding window is transposed accordingly to the last completed
word, akin to standard typing behavior.

In Table 4 we present the TPM(0) and TPM(1) scores we obtained for three datasets along with the recall and precision of the suggestions. We compare our two tree construction algorithms, the Simple FussyTree, and the Significance FussyTree. The Basic PCST algorithm is not compared since it does not scale, and because the resultant tree would any way be similar to the tree in the Simple FussyTree algorithm. We see (from the TPM(0) score) that across all the techniques and all the data sets, we save approximately a fifth of key strokes typed. Given how much time each of us puts into to composing text every day, this is a really huge saving.

To put the numbers in perspective, we consider modern word processors such as Microsoft
Word [23], where autocompletion is done on a single-suggestion basis
using a dictionary of named entities. We use the main text of the Lord of The Rings page on the English
Wikipedia as our token corpus, spanning 43888 characters. In a very
optimistic and unrealistic scenario, let us assume that all named
entities on that page (for our problem, all text that is linked to another
Wikipedia entry) are part of this dictionary; this could be automated using a
named entity tagger, and also assume that we have a perfect prediction
quality given a unit prefix size. Given this scenario, there are 226 multiple
word named entity instances, which, given our optimistic assumptions, would
result in an ideal-case completion profit of 2631 characters, giving us a TPM(0) of
5.99%. Our phrase completion techniques can do better than this by a factor of 3.

Despite the discarding of information through significance marking and telescoping, we observe how the Significance FussyTree algorithm results in a much smaller tree size (as seen in Table 3), and can still perform comparably with the baseline Simple FussyTree in terms of result quality. We observe an overall increase in recall and precision on adding significance, and that it causes a slight reduction in TPM metrics especially in high-variance corpora (as opposed to single author text). We consider the TPM drop to be acceptable in light of the reduction in tree size.

AlgorithmSmallLarge EnronWikipedia
Simple FussyTree82991249825536
Sigf. FussyTree4159803514503

Table 3: Tree Sizes (in nodes) with default threshold values

Corpus: Enron Small

Dataset / AlgoRecallPrecisionTPM(0) TPM(1)
Simple FussyTree26.67%80.17%22.37%18.09%
Sigf. FussyTree43.24%86.74%21.66%16.64%

Corpus: Enron Large

Dataset / AlgoRecallPrecisionTPM(0) TPM(1)
Simple FussyTree16.59%83.10%13.77%8.03%
Sigf. FussyTree26.58%86.86%11.75%5.98%

Corpus: Wikipedia

Dataset / AlgoRecallPrecisionTPM(0) TPM(1)
Simple FussyTree28.71%91.08%17.26%14.78%
Sigf. FussyTree41.16%93.19%8.90%4.6%

Table 4: Quality Metrics

Looking across the data sets, we observe a few weak trends worth noticing. If we just look at the simple FussyTree scores for recall and precision, we find that there is a slight improvement as the size of the corpus increases. This is to be expected – the larger the corpus, the more robust our statistics. However, the TPM scores do not follow suit, and in fact show an inverse trend. We note that the difference between TPM and recall/precision is that the latter additionally takes into account the length of suggestions made (and accepted), whereas the former only considers their number and rank. What this suggests is that the average length of accepted suggestion is highest for the more focused corpus, with emails of a single individual, and that this length is lowest for the heterogeneous encyclopedia. Finally, the recall and precision trends are mixed for the significance algorithms. This is because these algorithms already take significance and length of suggestion into account, merging the two effects described above. As expected, the TPM trends are clear, and all in the same direction, for all the algorithms.

6.3  Response Time

We measure the average query response times for various algorithms / datasets.
As per Table 5, it turns out that we are well within the 100ms time limit for “instantaneous"
response, for all algorithms.

AlgorithmSmallLarge EnronWikipedia
Simple FussyTree0.0200.020.02
Sigf. FussyTree0.0210.220.20
Sigf. + POS0.300.230.20

Table 5: Average Query Times (ms)

6.4  Online Significance Marking

We test the accuracy of the online significance marking heuristic by comparing
the tree it generates against the offline-constructed gold standard. The
quality metrics for all three datasets, as shown in Table 6, show that this method is near perfect in terms of accuracy%, yielding excellent precision§ and recall scores in a shorter tree construction time.

Enron Small99.62%97.86%98.30%
Enron Large99.57%99.78%99.39%

Table 6: Online Significance Marking heuristic quality, against offline baseline

6.5  Tuning Parameters

6.5.1  Varying training sentence size

As described in Sec. 4.3.4, the choice of the training sentence size N is crucial to the quality of the predictions. We vary the value of this training sentence size N while constructing the Significance FussyTree for the Small Enron dataset, and report the TPM scores in Fig. 2. We infer that the ideal value for N for this dataset is 8.


Figure 2: Effect of varying (a) training sentence size (b) prefix length on TPM in Small Enron dataset

6.5.2  Varying prefix length

The prefix length in the probe function is a tuning parameter. We study the
effects of suggestion quality across varying lengths of query prefixes, and present them in Fig. 2. We see that the quality of results is maximized at length = 2.

6.5.3  Varying frequency thresholds

To provide an insight into the size of the FussyTree, in nodes, as we vary the frequency
threshold during the construction of the FussyTree for the Small Enron and Large
Enron datasets; and observe the change in tree size, as shown in Fig.3.


Figure 3: Effect of varying threshold on FussyTree size in (a) Small Enron (b) Large Enron datasets

6.5.4  Varying tree size

We now use the frequency threshold as a way to scale up the size of the tree for
the Significance FussyTree. We plot the TPM values(0 and 1) against the tree size for the Small Enron dataset. As can be seen, since the decrease in tree size initially causes a very gradual decrease in TPM, but soon begins dropping quite sharply at around threshold = 5 and above. Hence, we prefer to use threshold = 4 in this case.


Figure 4: Effect of varying FussyTree size on TPM for Small Enron dataset, t labels show threshold values for the respective tree sizes

7  Possible Extensions

In experiments over our test corpora in Sec. 6.3, we observe that the probe
function takes less than a hundredth of a millisecond on average to execute and
deliver results. Studies by Card [5] and Miller [27] have shown
that the appearance of “instantaneous" results is achieved within a response
time span of 100ms. Hence, this validates our premise and shows that there is a
clear window of opportunity in terms of query time, to include mechanisms that improve result quality
using the additional information. We discuss
some methods to improve quality in this section.

We base our extensions on the premise that the context of a phrase affects the choice of suitable phrase
completions. The context of a phrase is defined as the set of words
wiy, wiy+1, …, wi−1 preceding the phrase wi, wi+1, …


The context of a prefix can be used to determine additional semantic
properties, such as semantic relatedness of the context to the suggestion, and
the grammatical appropriateness based on a part-of-speech determination. We
conjecture that these features abstract the language model in a way so as to
efficiently rank suggestions by their validity in light of the context. This
context of the query is used to rerank the suggestions provided by the
FussyTree’s probe function. The reranking takes place as a
postprocessing step after the query evaluation.

7.1  Reranking using part-of-speech

Corpus: Enron Small

Dataset / AlgoRecallPrecisionTPM(0) TPM(1)
Simple + POS25.0%77.09%22.22%17.93%
Sigf. + POS40.44%81.13%21.25%16.23%

Corpus: Enron Large

Dataset / AlgoRecallPrecisionTPM(0) TPM(1)
Simple + POS16.13%85.32%15.05%9.01%
Sigf. + POS23.65%84.99%12.88%6.16%

Corpus: Wikipedia

Dataset / AlgoRecallPrecisionTPM(0) TPM(1)
Simple + POS22.87%87.66%17.44%14.96%
Sigf. + POS41.16%95.3%8.88%4.6%

Table 7: Quality Metrics, querying with reranking

We use a hash map based dictionary based on the Brill part-of-speech(POS) tagger [4] to map words to their part-of-speech. A part
of speech automata is trained on the entire text during the sliding window tree
construction, where each node is a part of speech, and each n-gram (to a
certain length, say 5) is a distinct path, with the edge weights proportional to
the frequency. Hence the phrase “submit the annual reports" would be
considered as an increment to the “verb-det-adj-noun" path weights.
The reasoning is that part-of-speech n-grams are assumed to be a good
approximation for judging a good completion in running text. During the query, the probe function is modified to perform a successive rerank step, where the suggestions R are ranked in
descending order of prob(POSc, POSp, POSri), where POSc, POSp and
POSri are the POS of the context, prefix and suggestion, respectively. We
then evaluate the precision, recall, TPM and execution time
of the new reranking-based probe function, as reported in Table 7. We observe that the reranking has little average affect on Recall, Precision and TPM. We note however that on any individual query, the input can be significantly positive or negative. Isolating the cases where the effect is positive, we are working towards a characterization of the effect.

7.2  Reranking using semantics


Figure 5: Bipartite graph - synset co-occurrences

Another source of contextual information is the set of meanings of the prefix’s
word neighborhood. We reason that some word meanings would have a higher
probability to co-occur with certain others. For example, for any sentence
mentioning “hammer" in its context and “the" as prefix, it
would more probable to have “nail properly" as a possible completion
than “documents attached", even if the latter is a much more frequent
phrase overall, disregarding context. A simple bipartite classifier is used to
consider prob(A|B), where A is the set of WordNet [10] synsets, or
word meanings in the result set, and B is the set of synsets in the query, as shown in Fig.
 5. The classifier returns a collection of synsets for every synset set provided in the context and
prefix. Suggestions are then ranked based on the number of synsets mapped from
each suggestion. However, experiments show that the benefit due to semantic reranking was statistically insignificant, and no greater than due to POS reranking. In addition, it has resource requirements due to the large amount of memory required to store the synset classes*, and the high amount of computation required for each
bipartite classification of synsets. We believe that this is because co-occurrence frequency computed with the prefix already contains most of the semantic information we seek. We thus do not consider semantic reranking
as a possible improvement to our system.

7.3  One-pass algorithm

The FussyTree algorithm involves a frequency counting step before the actual construction of the data structure. This preprocessing step can be incorporated into the tree construction phase, using on-line frequency estimation techniques, such as those in  [19, 8] to determine
frequent phrases with good accuracy. A single pass algorithm also allows us to
extend our application domain to stream-like text data, where all indexing
occurs incrementally. We analyze various features of frequent phrases, such as
part-of-speech, capitalization, and semantics. We show how the part-of-speech
information of these phrases is a good feature for predicting frequent phrases
with near 100% recall, by building a simple naive Bayesian classifier to
predict frequency. Since the part-of-speech features of frequent strings are likely to be much less sensitive to changes in corpus than the strings themselves, we reason that it is viable to create a POS-based classifier using
an initial bootstrap corpus. The classifier can then be used to build suffix
trees, while at the same time train itself. This is a very convenient technique
to use for frequent re-indexing of data, for example an overnight re-index of
all personal email that improves the autocompletion for the next day. Our
experiment proceeds as follows. We train a Naive Bayes classifier to classify a
phrase as frequent or infrequent based on the POS n-grams,
which are generated using the process described in section 7.1. We then test
the classifier on the training data, which in our case is the online trading
emails from the Enron dataset. We also report numbers from tests on other
datasets; first, a separate sample of emails from the Enron collection, and
secondly the sample of text from the Wikipedia.


Figure 6: Recall vs precision for POS-based frequency classifier.

On the conservative side of the precision-recall curve, experiments on the large
sized Enron collection report precision scores of 30%, 27% and 20%, for 80%,
85% and 99% recall respectively. We focus on this part of the
recall-precision curve, since it is acceptable to have a large number of
prospective frequent phrases, which are pruned later when updated with real

8  Conclusion and Future work

We have introduced an effective technique for multi-word
autocompletion. To do so, we have overcome multiple challenges.
First, there is no fixed end-point for a multi-word “phrase”. We
have introduced the notion of significance to address this.
Second, there often is more than one reasonable phrase completion at a point. We have established the need for ranking in completion results, and have introduced a framework
for suggesting a ranked list of autocompletions, and developed
efficient techniques to take the query context into account for this purpose. Third, there is no dictionary of possible multi-word phrases, and the number of possible combinations is extremely large. To this end, we have
devised a novel FussyTree data structure, defined as a variant of a
count suffix tree, along with a memory-efficient tree construction
algorithm for this purpose.
Finally, we have introduced a new evaluation metric, TPM, which
measures the net benefit provided by an autocompletion system much
better than the traditional measures of precision and recall.
Our experiments show that the techniques presented in this paper can
decrease the number of keystrokes typed by up to 20% for email
composition and for developing an encyclopedia entry.

Today, there are widely used word completion algorithms, such as
T9 [38]. We have shown that phrase completion can save at least as many keystrokes as word completion. However, word completion and phrase completion are complementary rather than competing. In terms of actual implementation, phrase completion can be triggered at every word boundary(e.g. when the user types a space), while word
completion can be queried all other times.

As possible extensions, we discussed the notion of reranking suggestions using sentence context, and one-pass construction of the FussyTree. As future work, the idea of text autocompletion can be
extended to various other applications. The current state of art in genomics
only considers 1-8 bases as atomic units. There are no studies done at longer, variable
strings of bases, which would require large-vocabulary capable suffix tree
implementations. Another possible application is the inference of XML schema,
which can be done by training the FussyTree with the XML paths as input. The
single-pass version of the construction algorithm allows us to create a
FussyTree for trend detection in streams, where the significance concept can be
used to mark the start and end of various trends.



B. Bailey, J. Konstan, and J. Carlis.
The Effects of Interruptions on Task Performance, Annoyance, and
Anxiety in the User Interface.
Proceedings of INTERACT 2001.

C. Benson, M. Muller-Prove, and J. Mzourek.
Professional usability in open source projects.
Conference on Human Factors in Computing Systems, pages
1083–1084, 2004.

S. Bickel, P. Haider, and T. Scheffer.
Learning to Complete Sentences.
16th European Conference on Machine Learning (ECML ’05), pages
497–504, 2005.

E. Brill.
A simple rule-based part of speech tagger.
Proceedings of the Third Conference on Applied Natural Language
, pages 152–155, 1992.

S. Card, G. Robertson, and J. Mackinlay.
The information visualizer, an information workspace.
Proceedings of the SIGCHI conference on Human factors in
computing systems: Reaching through technology
, pages 181–186, 1991.

J. Darragh, I. Witten, and M. James.
The Reactive Keyboard: a predictive typing aid.
Computer, 23(11):41–49, 1990.

B. Davison and H. Hirsh.
Predicting sequences of user actions.
Notes of the AAAI/ICML 1998 Workshop on Predicting the Future:
AI Approaches to Time-Series Analysis
, 1998.

R. Fagin, A. Lotem, and M. Naor.
Optimal aggregation algorithms for middleware.
Proceedings of the twentieth ACM SIGMOD-SIGACT-SIGART symposium
on Principles of database systems
, pages 102–113, 2001.

M. Farach.
Optimal suffix tree construction with large alphabets.
Foundations of Computer Science, 1997. Proceedings., 38th Annual
Symposium on
, pages 137–143, 1997.

C. Fellbaum.
Wordnet: An Electronic Lexical Database.
Bradford Book, 1998.

E. Giachin and T. CSELT.
Phrase bigrams for continuous speech recognition.
Acoustics, Speech, and Signal Processing, 1995. ICASSP-95., 1995
International Conference on
, 1, 1995.

K. Grabski and T. Scheffer.
Sentence completion.
Proceedings of the 27th annual international conference on
Research and developement in information retrieval
, pages 433–439, 2004.

S. Heinz, J. Zobel, and H. Williams.
Burst tries: a fast, efficient data structure for string keys.
ACM Transactions on Information Systems, 20(2):192–223, 2002.

H. Jagadish, R. Ng, and D. Srivastava.
Substring selectivity estimation.
Proceedings of the eighteenth ACM SIGMOD-SIGACT-SIGART symposium
on Principles of database systems
, pages 249–260, 1999.

B. Klimt and Y. Yang.
The Enron Corpus: A New Dataset for Email Classification Research.
Proceedings of the European Conference on Machine Learning,

P. Krishnan, J. Vitter, and B. Iyer.
Estimating alphanumeric selectivity in the presence of wildcards.
Proceedings of the 1996 ACM SIGMOD international conference on
Management of data
, pages 282–293, 1996.

K. Kukich.
Technique for automatically correcting words in text.
ACM Computing Surveys (CSUR), 24(4):377–439, 1992.

C. MacArthur.
Word Processing with Speech Synthesis and Word Prediction: Effects
on the Dialogue Journal Writing of Students with Learning Disabilities.
Learning Disability Quarterly, 21(2):151–166, 1998.

G. Manku and R. Motwani.
Approximate frequency counts over data streams.
Proceedings of the Twenty-Eighth International Conference on
Very Large Data Bases
, 2002.

Apple Inc.
Spotlight Search

Gnome Foundation.
Beagle Desktop Search

Google Inc.
Google Desktop Search

Microsoft Inc.
Microsoft Office Suite

Microsoft Inc.
Windows Explorer

Mozilla Foundation.
Mozilla Firefox version 2

E. M. McCreight.
A space-economical suffix tree construction algorithm.
J. ACM, 23(2):262–272, 1976.

R. Miller.
Response time in man-computer conversational transactions.
Proceedings of the AFIPS Fall Joint Computer Conference,
33:267–277, 1968.

A. Moffat and R. Wan.
Re-Store: A System for Compressing, Browsing, and Searching Large
Proceedings of the International Symposium on String Processing
and Information Retrieval’, IEEE Computer Society
, 2001.

H. Motoda and K. Yoshida.
Machine learning techniques to make computers easier to use.
Artificial Intelligence, 103(1):295–321, 1998.

B. Myers, S. Hudson, and R. Pausch.
Past, present, and future of user interface software tools.
ACM Transactions on Computer-Human Interaction (TOCHI),
7(1):3–28, 2000.

C. Nevill-Manning, I. Witten, and G. Paynter.
Browsing in digital libraries: a phrase-based approach.
Proceedings of the second ACM international conference on
Digital libraries
, pages 230–236, 1997.

L. Paulson.
Building rich web applications with Ajax.
Computer, 38(10):14–17, 2005.

G. Paynter, I. Witten, S. Cunningham, and G. Buchanan.
Scalable browsing for large collections: a case study.
Proceedings of the fifth ACM conference on Digital libraries,
pages 215–223, 2000.

A. Pienimaki.
Indexing Music Databases Using Automatic Extraction of Frequent
Proceedings of the International Conference on Music Information
, pages 25–30, 2002.

D. Radev, H. Qi, H. Wu, and W. Fan.
Evaluating Web-based Question Answering Systems.
Proceedings of LREC, 2002.

T. Selker and W. Burleson.
Context-aware design and interaction in computer systems.
IBM Systems Journal, 39(3):880–891, 2000.

C. Shannon.
Prediction and entropy of printed English.
Bell System Technical Journal, 30(1):50–64, 1951.

M. Silfverberg, I. S. MacKenzie, and P. Korhonen.
Predicting text entry speed on mobile phones.
In CHI ’00: Proceedings of the SIGCHI conference on Human
factors in computing systems
, pages 9–16, New York, NY, USA, 2000. ACM

A. Taddei.
Shell Choice A shell comparison.
Technical report, Guide CN/DCI/162, CERN, Geneva, September 1994d.

S. Tata, R. Hankins, and J. Patel.
Practical Suffix Tree Construction.
Proceedings of the Thirtieth International Conference on Very
Large Data Bases, Toronto, Canada, August
, pages 36–47.

S. Tata, J. Patel, J. Friedman, and A. Swaroop.
Towards Declarative Querying for Biological Sequences.
Technical report, Technical Report CSE-TR-508-05, University of
Michigan, 2005.

D. Vickrey, L. Biewald, M. Teyssier, and D. Koller.
Word-Sense Disambiguation for Machine Translation.
HLT/EMNLP, 2005.

H. E. Williams, J. Zobel, and D. Bahle.
Fast phrase querying with combined indexes.
ACM Trans. Inf. Syst., 22(4):573–594, 2004.

Supported in part by NSF grant number 0438909 and NIH grant number R01 LM008106.
WordNet 2.1 has 117597 synsets, and 207016 word-sense pairs
English Wikipedia:
percentage predictions that are correct
percentage significant marked nodes that are correct
percentage of truly significant nodes correctly predicted