Patent Publication Number: US-2023161971-A1

Title: Dynamically Updated Text Classifier

Description:
CROSS-REFERENCE TO RELATED APPLICATION 
     This application is a Continuation and claims the benefit of U.S. patent application Ser. No. 16/293,225, filed Mar. 5, 2019, and entitled “Dynamically Updated Text Classifier;” which is incorporated herein by reference in its entirety. 
    
    
     BACKGROUND 
     Technical Field 
     This specification relates to dynamically updating machine learning models such as text classifiers. 
     Background 
     Many individuals and institutions use machine learning in a variety of contexts. For example, natural-language processing (NLP) applications use machine learning to detect what certain text (e.g., a document, paragraph, or sentence) is about or to detect the sentiment of the text. 
     SUMMARY 
     An illustrative embodiment provides a computer-implemented method for dynamically updating a machine learning model. The method comprises receiving first data comprising a first number of documents, training a first machine learning model with the first data, and releasing the first machine learning model for use. After receipt of the first data, second data is received comprising a second number of documents. A concept labeling engine, according to the first machine learning model, labels a concept for at least one document in the second data. Responsive to determining that a distribution of words in the second data deviates from a distribution of words in the first data beyond a specified threshold, the first machine learning model is retrained with at least part of the second data, the retraining producing a second machine learning model; and releasing the second machine learning model for use. 
     Another illustrative embodiment provides a system for dynamically updating a machine learning model. The system comprises a storage device that stores program instructions and one or more processors operably connected to the storage device and configured to execute the program instructions to cause the system to: receive first data comprising a first number of documents; train a first machine learning model with the first data; release the first machine learning model for use; after receipt of the first data, receive second data comprising a second number of documents; label, by a concept labeling engine according to the first machine learning model, a concept for at least one document in the second data; responsive to determining that a distribution of words in the second data deviates from a distribution of words in the first data beyond a specified threshold, retrain the first machine learning model with at least part of the second data, the retraining producing a second machine learning model; and release the second machine learning model for use. 
     Another illustrative embodiment provides a computer program product for dynamically updating a machine learning model. The computer program product comprises a non-transitory storage medium having program instructions embodied thereon to perform the steps of: receiving first data comprising a first number of documents; training a first machine learning model with the first data; releasing the first machine learning model for use; after receipt of the first data, receiving second data comprising a second number of documents; labeling, by a concept labeling engine according to the first machine learning model, a concept for at least one document in the second data; responsive to determining that a distribution of words in the second data deviates from a distribution of words in the first data beyond a specified threshold, retraining the first machine learning model with at least part of the second data, the retraining producing a second machine learning model; and releasing the second machine learning model for use. 
     The details of one or more embodiments of the subject matter of this specification are set forth in the accompanying drawings and the description below. Other features, aspects, and advantages of the subject matter will become apparent from the description, the drawings, and the claims. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG.  1    is a block diagram of an example of a system for dynamically updating a text classifier. 
         FIG.  2 A  is a flowchart for an example process for dynamically updating a text classifier. 
         FIG.  2 B  is a flowchart of an example process for dynamically updating a text classifier that incorporates active learning. 
         FIG.  3    is an example of a process for dynamically updating text classifiers. 
     
    
    
     DETAILED DESCRIPTION 
     This specification describes technologies for dynamically updating machine learning models such as text classifiers. These technologies provide a fast, reproducible, automated system for (i) building (ii) deploying, and (iii) dynamically updating production machine learning models. 
       FIG.  1    shows an example of a dynamic text classifier production system  100 . A document sampling engine  106  in the system  100  receives unlabeled data  102 , e.g., in the form of a news stream, from a variety of sources  104   a ,  104   b , and samples unlabeled data taking into account a specification  108  of a concept. There can be a plurality of concepts and one specification per concept. The specification can be updated if an initial round of documents (e.g., of 100 documents), each of which is annotated by two or more annotators, results in a sufficiently large number of inter-annotator disagreements or of “unknown” labels (e.g., wherein at least one annotator indicated that a positive or negative label for a concept could not be comfortably associated with a specific document). This suggests that the specification resulted in either: 1) disagreement as to the application of the specification to the documents, or 2) at least one annotator not being able to assign a label due to ambiguity in the specification. 
     After this initial set of annotations is completed and the specification produces acceptable agreement between annotators, the specification is left immutable so as to maintain consistent model outputs through time. 
     The document sampling engine  106  can use more than one method to determine which unlabeled data to forward on to an annotation platform  110 . One method uses the concept specification, which includes a list of keywords associated with the concept. The sampling engine can also draw on information in a knowledge base to identify related companies, entities, and keywords. The sampling engine uses this gathered information (e.g., keywords and knowledge base artifacts) as part of a holistic search routine to find documents that can make up a concept model training set. 
     The document sampling engine  106  can select, using a few keywords associated with a topic, a small set of initial training articles that are selected for information richness. The document sampling engine can select the articles on the basis of the articles containing keywords and other data associated with a concept as discussed above. However, this set of selected documents can then be filtered for information richness, for example curating a set of relevant documents being sufficiently different from each other so as to cover a broad spectrum of articles that may be about the concept. The document sampling engine may sample the documents adversarially, meaning that the engine can choose a number of articles that are unrelated to the concept but may be initially confusing to the model (due to the articles nevertheless containing language that may otherwise be associated with the concept) in order to force the model to learn to generalize to unseen examples. A concrete example of the latter is as follows: When training a model for the “Cybersecurity” concept, a model may initially learn to associate the word “breach” with the concept without appropriate context, so the document sampling engine can sample documents unrelated to cybersecurity that use the word “breach”, such as those that use the word in the sense of “breach of contract”. In doing so, the document sampling engine forces the model to learn words and context that are truly descriptive and typical of the concept, rather than ones that may be ambiguous and spuriously correlated with the concept. 
     By intelligently extracting a subset of articles (e.g.,  400 ) out of a large database (e.g., of several million articles), the process of manually curating a large novel training dataset, a standard component of text-based machine learning, is significantly shortened. Second, the system can be optimized to accurately identify relevant articles based on only the limited training examples the sampling system has selected, whereas many existing text classification systems require thousands or millions of examples. Since in conventional machine learning each training example typically requires a human to assign it a label having a large training data set results in a long development time. 
     The concept model can comprise a much broader set of artifacts, not just the words that can be used to describe a concept. For example, it can take into account contextual information about the documents that describe a concept, or (without taking into account the meaning of words at all) simply the number of words in a document. 
     The document sampling engine  106  forwards the unlabeled data samples to an annotation platform  110 . The annotation platform can be an annotation engine that automatically annotates the sampled unlabeled data or the annotation platform can be a platform for capturing annotations assigned by human annotators of the sampled unlabeled data, or it can be a combination of an automatic annotation engine and a platform for capturing the annotations of human annotators. 
     The annotation platform  110  uses the annotations to create labeled data and forwards the labeled data  112  to a concept labeling engine  114 . The phrase “concept labeling engine and the phrase “concept model” are used interchangeably in this specification. 
     The concept labeling engine  114  can use the labeled data to train, and provide as a service, a machine learning model such as a text classifier. Once the machine learning model is trained, the concept labeling engine  114  can receive unlabeled data  102  and provide labeled data, e.g., current news documents labeled with concepts. These documents labeled with concepts can then be stored in a document repository  116 . Users  118   a ,  118   b , e.g., can access the concept labeling engine  114  or labeled documents in the document repository via a network  120 . Examples of services that can use the concept labeling engine and/or the labeled documents in the document repository include services such as concept tagging, trend analysis, sentiment analysis, junk text detection, and opinion detection. 
     The concept labeling engine  114  classifies data, e.g., documents, by their degree of relation to a concept. The concept labeling engine can contain a parameterized representation of language (a “language model”) that captures the difference in word statistics between positive and negative documents (those about the concept vs. those not about the concept). 
     The relationship between the language model and the concept labeling engine  114  as a whole is that the concept labeling engine  114  relies on two static distributions: that which captures word statistics for positive documents, and that which captures word statistics for negative documents. Its internal “language model” is trained to estimate these two distributions and uses it throughout its lifetime to deduce whether a given document is about the concept by comparing the document&#39;s words to its language model. 
     The concept labeling engine  114  can reference numbers associated with words or phrases in a full vocabulary (e.g., an English vocabulary) denoting each word&#39;s or phrase&#39;s relevance to a concept or it can reference a mathematical description that uses contextual relationships between words to determine whether the words, taken together, contain meaning that is about a specified concept. The concept labeling engine  114  can also use statistics outside of the words of the document, for example the overall length of the text, in making its concept labeling determination. Thus, the concept labeling engine can determine the degree of relevance of a given document to a concept. 
     A drift detection engine  122  monitors overall distributional statistics of article language and model output. The drift detection engine  122  can identify when the distribution of words that the concept labeling engine  114  is exposed to at prediction time has deviated beyond a threshold from the distribution on which the engine was trained, resulting in degraded model performance. This kind of drift can cause the concept model&#39;s predictions to degrade in quality because the language model in the concept labeling engine no longer reflects the data that the classifier currently is processing. Because of the differences between each individual concept and associated true, evolving word distribution, the system can run one drift detection model per concept that is solely responsible for detecting when the word distribution for a concept has drifted sufficiently from that which corresponds to the language model learned by its associated concept model at the time the concept model was trained. 
     If the drift detection engine  122  determines that the current classifier for a concept has become unsuitable because the underlying language model for the concept has shifted, the engine  122  triggers  124  a retraining step whereby new documents are sampled and labeled. In other words, the drift detection model can trigger a retraining, e.g., a full retraining, of the concept model if it detects a macroscopic divergence between concept-related article language at the current time versus at the time the concept model was originally trained. 
     The drift detection engine  122  combines several metrics that capture linguistic drift, including the change in the distribution over predictions that the model makes, the change in the number of articles tagged positively, the rate of incidence in positively-labeled documents of the top (e.g.,  50 ) words or phrases that the concept model associates with the concept, and other factors that determine whether the language associated with the concept has changed significantly since the time that the model was initially trained. If the drift metric exceeds a threshold, retraining is triggered. As an example, the drift detection engine  122  can trigger a retraining when the number of articles tagged positively for a concept has moved above or below two standard deviations (calculated over the year before the classifier was trained) for 10 days in the last month. As another example, the drift detection engine  122  may trigger a retraining of the present model when the Kullback-Leibler divergence between the distribution of predictions the present model made for the year before the classifier was trained and the distribution of predictions the present model made in the last month is above a specified threshold. 
     The system  100  can further include an active learning engine  126 . The active learning engine  126  determines  128 , for each document in a repository, e.g., the document repository  116 , whether it should be given a ground-truth label, e.g., by a human. This determination  128  is based on several factors, including whether the article at hand is very different from any article in the current training set and whether the model is particularly uncertain about the proper tag for that article as reflected by an uncertainty metric. If so determined, that document is fed back into the annotation process, associating it with an expert label, adding it to labeled data, and possibly retraining the current model. In one implementation, a concept label confidence score can have a range of from 0 to 1 with a score of 1 reflecting highest confidence and the system can set a threshold metric, e.g., a confidence score of 0.7 as a threshold for attaching a concept label to a document. The uncertainty metric can be set to collect documents that fall within a certain window, e.g., within 0.05 of the confidence score threshold or it can be adjusted so that a certain number of documents are selected. 
       FIG.  2 A  is a flowchart of an example process  200  for dynamically updating a machine learning model such as a text classifier. For convenience, the process  200  will be described as being performed by a system of one or more computers, located in one or more locations, and programmed appropriately in accordance with this specification. For example, a dynamic text classifier production system, e.g., the dynamic text classifier production system  100  of  FIG.  1   , appropriately programmed, can perform the process  200 . 
     The process  200  includes: receiving first data  202  (e.g., first documents); producing/training a first machine learning model  204  (e.g., a first text classifier) using the first data; releasing the first machine learning model  206  for use; receiving second data  208  (e.g., second documents) after receipt of the first data; determining  210  that the second data has a difference metric (e.g., a drift metric) relative to the first data that exceeds a difference threshold; retraining  212  the first machine learning model using at least part of the second data, the retraining producing a second machine learning model (e.g., a second text classifier); and releasing  214  the second machine learning model for use (e.g., replacing the first machine learning model with the second machine learning model). 
       FIG.  2 B  is a flowchart of an example process  220  for dynamically updating a machine learning model such as a text classifier and including active learning. The process  220  includes: producing  222  a first machine learning model (e,g., a text classifier) using first data (e.g., first documents); releasing  224  the first machine learning model for use; receiving  226  second data after release of the first machine learning model; determining  228  that a difference metric for the second data versus the first data exceeds a difference threshold; retraining  230  the first machine learning using the second data to produce a second machine learning model (e.g., a second text classifier); releasing  232  the second machine learning model for use; determining  234  a concept for text (e.g., a document) and a concept label confidence score indicating the confidence that the concept labeling engine has in attaching a concept label to the text; and determining  236  whether the text labeled with a concept should be given a ground truth label based on, for example, the concept label confidence score, e.g., if the score is below a threshold. 
     One can make a distinction between the initial prediction that the concept model makes and a ground-truth label, i.e., that which is assumed as correct for the document and assigned by a human and/or an independent ground-truth labeling system. Hence, the concept model produces a prediction of a correct label (along with the concept label confidence score), which may be used to determine whether a document should be assigned a ground-truth label. The determination to provide a ground truth label for a data point does not necessarily involve the confidence score. For example, one implementation can decide to assign a document for receiving a ground truth label based on the document&#39;s difference from any other document in the training set. 
       FIG.  3    shows an example of a modeling process for a dynamic machine learning model production system. The illustrated process  300  includes initial document sampling  302  that selects documents based on criteria such as keywords and/or selected metadata. The process  300  continues by splitting the sampled data from the initial document sampling into a gold standard test dataset  304  and an initial training dataset  306  and stores  308  those two data sets. A gold standard dataset is a collection of articles curated to contain essential documents related to a particular concept that the model in question should classify correctly. It can consist of, for example, 100 to 200 articles never seen during the model building process. The gold standard set can be the ultimate dataset on which model performance is assessed. 
     In another embodiment of the process, the gold standard set can be assembled using human or automated insight. In the case of human annotators, the system provides annotators a list of documents, either during initial training set curation or during the active learning process after an initial model has been released, for annotation. The system allows the annotators, in addition to assigning a label to the document, to indicate that a document should be included in a gold standard dataset. 
     The process  300  then augments  310  the training data set. Training data augmentation is one way the system is able to use a small number of training examples efficiently. Textual data augmentation methods include synonym substitution (automatically generating novel examples from existing examples by replacing a selection of terms or phrases with related terms or phrases), translation of an example from the source language to another language and back (to preserve semantic meaning but alter the syntactic structure), and linking parts of a training example with relevant data from an external knowledge base such as Wikipedia. 
     The process  300  continues by using the training dataset to train  312  a machine learning model (e.g., a text classifier) based on a design model architecture  314 . The process then compares  316  the model to the gold standard data. In some embodiments, the process can use the F2 metric in evaluating the model, which combines precision and recall but is skewed towards avoiding false negative classifications. Because the probability that a randomly-selected document is relevant to a given topic is so low, a simple accuracy score is likely to be misleadingly high. Thus, the process can use the F2 metric or another, mathematically similar, alternative performance metric to avoid leaving relevant articles untagged at the risk of tagging slightly more irrelevant articles in the process. 
     The process  300  can produce a set of models and deploy the best model  318 . The process can curate a gold standard dataset to use as a final validator of model performance. As noted above, the gold standard set can be the ultimate dataset on which model performance is assessed; a new concept model can be required to do better in predicting results reflected in the concept&#39;s gold standard dataset before the new model replaces an existing model in production. 
     The process continues by scoring new documents  320 . The term “drift” and the term “difference” are used interchangeably herein and can describe a divergence between a model&#39;s linguistic calibration for a particular concept (learned at training time) and the way that the concept is discussed in current documents. As noted above with reference to  FIG.  1   , the system can include a threshold for drift, which triggers a concept model retraining if exceeded, and can be called a drift detection model. Some reasons for drift might be: 
     Cyclical/seasonal effects—the language model (order and frequency of words) associated with a concept may change cyclically. For example, articles about the economy might be written differently depending on whether the economy is experiencing a bull market or a recession; articles about national environmental issues might differ based on whether there is a Democratic or Republican president; and articles about politics may differ based on whether the country is involved in a presidential election cycle. 
     Exogenous effects—the language associated with a concept may evolve naturally over time. For example, articles about environmental issues may start to focus on water shortages and weather events rather than on carbon and methane emissions if the underlying prevailing concerns begin to shift. 
     Personnel changes—the people associated with a concept may evolve naturally over time, eroding the performance of a model trained before the shift. For example, articles about environmental issues can feature fewer and fewer mentions of a former head of the EPA as his incumbency recedes further into the past. More insidiously, suppose that a CEO departs a large cybersecurity company for a large AI company. A cybersecurity concept model may start to emit false positive predictions after her departure, and an AI concept model may start to emit false negative predictions because it hasn&#39;t seen her name associated with positive examples. 
     Finally, the process  300  can include selecting documents  322  for further training using an active learning engine as described above with reference to  FIG.  1   . The selected documents are annotated and then fed back into the training dataset. 
     The technologies described in this specification can also be used to update dynamically machine learning model types besides a text classifier model type. One arena in which active learning has potential is in radiographic diagnosis. For example, active learning can be used if one is building a model to detect a rare disease on the basis of x-rays and one has access to millions of x-rays in a database, but only a few of the x-rays are actually labeled as corresponding to a patient with or without the rare disease. Assume there are many other x-rays in the database that are true positives or true negatives, but those x-rays are unlabeled with respect to the disease. One can train a first model using the small amount of disease-specific data, then one can use the first model and the active learning approach described herein to select those unlabeled x-rays that, when combined with a label that describes whether the x-ray corresponds to a positive or negative diagnosis of the disease, will give the model more predictive power. Of course, doing so can mean asking expensive (human) MD radiologists what the diagnosis is for the selected unlabeled images that the system is going to put into the set of labeled training examples, so the system has to be economical with the number of examples it asks to be labeled. 
     Active learning is perhaps most useful when there is a confluence of: (i) little initial labeled data; (ii) large initial unlabeled data; and (iii) high human expense in getting all the unlabeled data labeled. Active learning aims to choose the smallest number of unlabeled examples to present to the expensive human expert such that the model performs at an acceptable level. 
     Advantages of the technologies described in this specification include creating machine learning models (e.g., text classifiers) quickly and automatically. It currently can take days to create a text classifier that relies on human-generated data. The technologies described in the present specification can create a similar text classifier in a fraction of that time, as low as 30 minutes. 
     Implementations described in this specification can create high-quality models using a relatively small initial training set for the following reasons: 
     1. The document sampling step chooses documents with exceptionally high information richness, as described above. 
     2. The system can use training data augmentation techniques as described to imbue the small amount of labeled data with a large amount of prior, background information, such as the Wikipedia page related to the concept at hand. 
     3. The system can simulate using a very large number of unlabeled documents an overall English language model as a prior so that the model doesn&#39;t have to learn language from nothing, but rather learns the particular deviation from the prior that corresponds to the language model for the concept at hand. 
     Systems described in this specification can create many text classifiers automatically and in parallel. Such systems can also automatically monitor performance, measuring output and getting an early indication of a data/model mismatch. Furthermore such systems can quickly update a model only when necessary by automatically altering training data and initiating retraining of the model using the altered training data. 
     Embodiments of the subject matter and the functional operations described in this specification can be implemented in digital electronic circuitry, in tangibly-embodied computer software or firmware, in computer hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Embodiments of the subject matter described in this specification can be implemented as one or more computer programs, i.e., one or more modules of computer program instructions encoded on a tangible non-transitory storage medium for execution by, or to control the operation of, data processing apparatus. The computer storage medium can be a machine-readable storage device, a machine-readable storage substrate, a random or serial access memory device, or a combination of one or more of them. Alternatively or in addition, the program instructions can be encoded on an artificially-generated propagated signal, e.g., a machine-generated electrical, optical, or electromagnetic signal, that is generated to encode information for transmission to suitable receiver apparatus for execution by a data processing apparatus. 
     The term “data processing apparatus” refers to data processing hardware and encompasses all kinds of apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, or multiple processors or computers. The apparatus can also be, or further include, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit). The apparatus can optionally include, in addition to hardware, code that creates an execution environment for computer programs, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of them. 
     A computer program, which may also be referred to or described as a program, software, a software application, an app, a module, a software module, a script, or code, can be written in any form of programming language, including compiled or interpreted languages, or declarative or procedural languages; and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. A program may, but need not, correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data, e.g., one or more scripts stored in a markup language document, in a single file dedicated to the program in question, or in multiple coordinated files, e.g., files that store one or more modules, sub-programs, or portions of code. A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a data communication network. 
     The processes and logic flows described in this specification can be performed by one or more programmable computers executing one or more computer programs to perform functions by operating on input data and generating output. The processes and logic flows can also be performed by special purpose logic circuitry, e.g., an FPGA or an ASIC, or by a combination of special purpose logic circuitry and one or more programmed computers. 
     Computers suitable for the execution of a computer program can be based on general or special purpose microprocessors or both, or any other kind of central processing unit. Generally, a central processing unit will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a central processing unit for performing or executing instructions and one or more memory devices for storing instructions and data. The central processing unit and the memory can be supplemented by, or incorporated in, special purpose logic circuitry. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks. However, a computer need not have such devices. Moreover, a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio or video player, a game console, a Global Positioning System (GPS) receiver, or a portable storage device, e.g., a universal serial bus (USB) flash drive, to name just a few. 
     Computer-readable media suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. 
     To provide for interaction with a user, embodiments of the subject matter described in this specification can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor, for displaying information to the user and a keyboard and a pointing device, e.g., a mouse or a trackball, by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user&#39;s device in response to requests received from the web browser. Also, a computer can interact with a user by sending text messages or other forms of message to a personal device, e.g., a smartphone, running a messaging application, and receiving responsive messages from the user in return. 
     Embodiments of the subject matter described in this specification can be implemented in a computing system that includes a back-end component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a front-end component, e.g., a client computer having a graphical user interface, a web browser, or an app through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such back-end, middleware, or front-end components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. Examples of communication networks include a local area network (LAN) and a wide area network (WAN), e.g., the Internet. 
     The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other. In some embodiments, a server transmits data, e.g., an HTML, page, to a user device, e.g., for purposes of displaying data to and receiving user input from a user interacting with the device, which acts as a client. Data generated at the user device, e.g., a result of the user interaction, can be received at the server from the device. 
     In this specification, the term “database” will be used broadly to refer to any collection of data: the data does not need to be structured in any particular way, or structured at all, and it can be stored on storage devices in one or more locations. Thus, for example, the index database can include multiple collections of data, each of which may be organized and accessed differently. 
     Similarly, in this specification the term “engine” will be used broadly to refer to a software based system or subsystem that can perform one or more specific functions. Generally, an engine will be implemented as one or more software modules or components, installed on one or more computers in one or more locations. In some cases, one or more computers will be dedicated to a particular engine; in other cases, multiple engines can be installed and running on the same computer or computers. 
     While this specification contains many specific implementation details, these should not be construed as limitations on the scope of any invention or on the scope of what may be claimed, but rather as descriptions of features that may be specific to particular embodiments of particular inventions. Certain features that are described in this specification in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination. Moreover, although features may be described above as acting in certain combinations and even initially be claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a subcombination or variation of a subcombination. 
     Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Moreover, the separation of various system modules and components in the embodiments described above should not be understood as requiring such separation in all embodiments, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products. 
     Particular embodiments of the subject matter have been described. Other embodiments are within the scope of the following claims. For example, the actions recited in the claims can be performed in a different order and still achieve desirable results. As one example, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In some cases, multitasking and parallel processing may be advantageous.