End-to-end email tag prediction

JP7641285B2Active Publication Date: 2025-03-06ORACLE INT CORP
View PDF 7 Cites 0 Cited by

Patent Information

Application Number
JP2022534825
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2019-12-09
Filing Date
2020-12-09
Publication Date
2025-03-06
Estimated Expiration
2040-12-09

Smart Images

  • Figure 0007641285000001
    Figure 0007641285000001
  • Figure 0007641285000002
    Figure 0007641285000002
  • Figure 0007641285000003
    Figure 0007641285000003
Patent Text Reader

Abstract

The system provides automatic end-to-end tagging of email messages. While a message is being composed in a sending email client, a server can receive the email information to be used as input to a predictive model. The model identifies tags available for specific user groups or email lists to apply to the email message. These predictive tags are returned to the email client, where the tags may be embedded in the email along with other tags defined by the user. Once the message is sent through the email server, the system can retrain the model with any changes made to the predictive tags. Once the message is received in a second email client, the recipient can further edit the tags, and any changes can again be used to retrain the model.
Need to check novelty before this filing date? Find Prior Art

Description

[Background technology]

[0001] background Modern internet and network communication has grown exponentially over the past two decades. Now, members of an organization can communicate instantly through several different parallel communication channels, including email, instant messaging, text messaging, conversation channels, social media, and / or the like. This communication has resulted in increased accessibility of information, as well as unprecedented levels of collaboration and teamwork among a distributed workforce. Face-to-face meetings have been largely replaced by electronic communication, which is often more efficient, concise, and effective.

[0002] Despite the continued emergence of various communication methods, the primary method of business communication remains electronic mail (email) within an organization. Despite the increased productivity resulting from instant email communication, several issues remain that limit improvements that could otherwise be made. Specifically, as the volume of email within an organization increases, users may be required to spend more and more time opening, reading, filing, addressing, and otherwise processing the large amount of email communication that occurs each day. Even if limited to a specific organization, such as a few members participating in a group project, the sheer volume of email received daily can quickly lead to information overload.

[0003] In the past, users receiving email have used several techniques in an attempt to organize and reduce this deluge of email communication. For example, some email clients allow users to categorize received emails into various folders. Other email clients use static labels or tags that are manually assigned to categorize emails according to specific topics. Some previous solutions used logical expressions to set rules that automatically categorize emails based on sequences of words within the subject or body of the email as it is received. However, each of these solutions does not automatically categorize emails in a consistent manner across an organization, and does not apply tags in an end-to-end manner from email sender to email recipient. This results in different category assignments being made manually for each inbox within an organization. Summary of the Invention

[0004] overview The system provides automatic end-to-end tagging of email messages. While a message is being composed at a sending email client, a server can receive email information that is used as input to a predictive model. The model identifies tags available for specific user groups or email lists that are applied to the email message. These predictive tags are sent back to the email client, where the tags may be embedded in the email along with other tags defined by the user. Once the message is sent through the email server, the system can retrain the model with any changes made to the predictive tags. Once the message is received at a second email client, the recipient can further edit the tags and the model can again be retrained with any changes.

[0005] When an email message is drafted at a sending email client, a set of predictive tags may be requested from the system. An email message may be associated with a user group, such as a mailing list or other organizational group, which may have its own set of available tags that evolve with the group messages over time. The system may use email information (e.g., body, subject, email recipients, etc.) as input to a model with an output corresponding to each of the available tags. The model may generate a score for each tag and may use a threshold to select a set of predictive tags from the group's available tags. The sending email client may display the predicted tags in a user interface along with a subject line, a list of recipients, etc. The user may then edit the predicted tags, select predicted tags, deselect predicted tags, and / or add new user tags. When adding new tags, the system may provide an auto-complete feature that matches typed prefixes with available tags that were not provided as predictive tags.

[0006] When an email message is sent, the selected / unselected / user tags may be sent along with the email message. For example, the tags may be embedded in the header of the email message. When the message is received by the email server, the system may again analyze the tags of the email using the model. If no predictive tags were selected / provided, the system may use the email information to generate a set of predictive tags at the email server. These predictive tags may then be added to the email before it is forwarded to the receiving email client. If new tags are added by the user or existing tags are edited by the user, the model may then be retrained using the email information and the changed tags as training pairs.

[0007] Once the email is received by the receiving email client, the receiving user may again use the user interface to edit, add, and / or delete tags received with the email message. Once these edits are completed, the system may again use any changes made by the receiving user to generate a new training set for the tag prediction model. This allows tags to be assigned, propagated, and / or edited from the beginning to the end of the email message's lifecycle. Senders and / or recipients may use a common set of tags so that email categorization can be standardized within a group. The tag prediction model trained and utilized to send emails may also be used to tag messages in additional communication channels such as Slack® channels, social media feeds, instant messaging, etc.

[0008] Some implementations of the tag prediction model may generate a word embedding matrix that is populated using email information. Several different convolutional filters, each with a different window size, may be run on the columns of the word embedding matrix. A max pooling operation may be performed on the results from the convolutional filters to populate a result vector. The model may further include a set of parallel operations that also use the word embedding matrix. An attention matrix may be generated from the word embedding matrix, and another max pooling operation may be used to associate specific tags with portions of the input text. The resulting attention vector may be multiplied by the transpose of the word embedding matrix to generate a second result vector. The two result vectors may then be combined as a fully connected layer to provide a final score for each of the available tags.

[0009] A further understanding of the nature and advantages of the various embodiments may be obtained by reference to the remaining portions of the specification and the drawings, in which like reference numerals in the several drawings are used to designate like components. In some cases, a sub-label is associated with a reference numeral to designate one of multiple similar components. When reference is made to a reference numeral without specifying an existing sub-label, it is intended to refer to all of such multiple similar components. [Brief description of the drawings]

[0010] [Figure 1] FIG. 2 illustrates a system architecture for implementing dynamic tag prediction according to some embodiments. [Figure 2A] 1 illustrates a user interface that may be part of an email client on a sending client device according to some embodiments. [Figure 2B] FIG. 2 illustrates how a user interface can be used to add new tags and delete existing tags according to some embodiments. [Figure 2C] FIG. 2 illustrates a user interface after a user change has been made to the list of tags 202, according to some embodiments. [Figure 2D] FIG. 2 illustrates how a user interface can be used to apply tags to a particular text selection according to some embodiments. [Diagram 3] FIG. 2 illustrates a flowchart of a process performed by an email client to display a set of predictive tags for editing by a user, according to some embodiments. [Figure 4] 1 illustrates a functional diagram of operations performed by a tag prediction server to generate a set of predicted tags from a set of available tags, according to some embodiments. [Diagram 5]FIG. 2 illustrates a flowchart of a method for processing tags in an email message when the email message is sent through an email server, according to some embodiments. [Figure 6] FIG. 2 illustrates a flowchart of a method for interacting with a tag using a receiving client device according to some embodiments. [Figure 7A] FIG. 2 illustrates a user interface implemented in a receiving email client according to some embodiments. [Figure 7B] FIG. 13 illustrates how a user interface can be used to modify a set of tags, according to some embodiments. [Figure 7C] 1 illustrates how a user interface can be used to view specific text associated with a particular tag in an email message, according to some embodiments. [Figure 8] FIG. 2 illustrates how a tag prediction model generates a set of usable tag confidence scores based on input email information, according to some embodiments. [Figure 9] FIG. 13 illustrates a second operation performed by a tag prediction model to generate confidence scores for available tags, according to some embodiments. [Figure 10] FIG. 10 illustrates how vectors resulting from two operations performed by a tag prediction model can be combined into a final result set, according to some embodiments. [Figure 11] FIG. 1 illustrates an expanded system architecture including additional communication channels according to some embodiments. [Figure 12] FIG. 2 illustrates a method for tagging emails as they are sent and received through an email system according to some embodiments. [Figure 13] FIG. 1 illustrates a simplified block diagram of a distributed system for implementing some of the embodiments. [Figure 14]FIG. 1 illustrates a simplified block diagram of components of a system environment in which services provided by components of a system in one embodiment can be provided as cloud services. [Figure 15] FIG. 1 illustrates an exemplary computer system upon which various embodiments may be implemented. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0011] Detailed Description Described herein are embodiments for implementing a collaborative email tag prediction module for email and other communication channels. A central server may include a machine learning model that learns to predict tags based on a set of inputs provided to the system. The input set may include email information such as the text or body of the email, the subject of the email, email attachments, email sender / recipient identity, etc. This input text may be analyzed along with information such as mailing list or group membership. This information may be used to categorize messages into existing groups or organizations. The groups or organizations may have an existing set of organizational tags that can be used to categorize messages sent within the organization. Messages may be identified by their content and categorized into specific groups. For example, messages sent via email may be grouped with messages sent through SLACK® channels, social media threads, instant messaging conversations, etc. The tag prediction process may use a model specific to each group or subgroup, and the models may be continuously trained to refine a predefined tag list and predict tags associated with each message. These tags may be automatically provided to the user when the message is initially being composed. The user may then have the option to add, remove, or modify the suggested tag list. The tag prediction process may provide auto-complete predictions from a predefined list of tags for the organization as the user makes such edits. After the user edits are completed, the changes may be used to further train the model so that it continually evolves with user preferences over time within the organization. When the email is sent, the server may analyze the tags to identify any discrepancies between those predicted and those actually used by the user. Finally, when the email message is received, the receiving user may add, remove, and / or modify tags in the message, and these changes may again be used to further train the model.

[0012] FIG. 1 illustrates a system architecture 100 for implementing dynamic tag prediction, according to some embodiments. The system described herein may be classified as an "end-to-end" tag prediction system that can predict and / or refine tags when a message is created at the sender, when the message is transmitted between the sender and the recipient, and when the message is read and received by the recipient. This may be contrasted with existing systems that provide tags or other classification methods that are used exclusively at the sender or the recipient. For example, prior to this disclosure, certain email clients allowed users to classify or tag their emails as they were received. However, there was no mechanism that allowed tags to be automatically suggested when a message was being created at the sender, that predicted tags specific to a particular organization or user group, and that propagated tags from sender to recipient in a uniform manner for messages sent across an organization.

[0013] As will be further described below, the methods and systems described herein may be applied to any communication channel. More specifically, the methods and systems described herein may be applied to multiple types of communication channels such that tags may be shared between communication channels with or without communication compatibility. Throughout this disclosure, email messages may be used as a specific example of sender and recipient email clients creating messages that are sent through an email server. A tag prediction server may monitor messages as they are created, retrieved, and / or sent through the email server to make tag predictions / suggestions and continually train / refine the group's model. However, the use of email messages, email clients, and email servers is provided for illustrative purposes only and is not intended to be limiting. Other embodiments may freely use any type of communication channel.

[0014] The system architecture 100 may include a client device referred to as a sending client device 102. The sending client device 102 may include any digital device capable of sending electronic messages, including, but not limited to, a smartphone, a digital assistant, a laptop computer, a desktop computer, a tablet computer, a smart home device, a virtual / augmented reality device, etc. The sending client device 102 may include an email client 104 that includes a software process that provides a user interface through which messages can be sent / received and through which messages can be created, read, edited, stored, categorized, etc. The email client 104 may be a standalone application (e.g., an "app") running on a smartphone, as well as an application running on a desktop computer, a browser-based application, and / or any other software process.

[0015] The system architecture 100 may also include a receiving client device 108. The receiving client device 108 may also include an email client 110. The receiving client device 108 and / or the email client 110 may be configured as described above for the sending client device 102 and / or the email client 104.

[0016] The system architecture 100 may also include an email server 106. The email server (or "mail server") 106 may include any server that processes and delivers email messages over a network. The email server 106 may receive composed and sent email messages 116 from email clients 104 on the sending client device 102. The email server 106 may identify recipients of the email messages 116 and send the email messages 116 to the recipients. For example, the email server 106 may forward the email messages 116 to email clients 110 on the receiving client device 108. In some embodiments, the email server 106 may store email messages for each email client 104, 110 so that the email messages may be downloaded by the email clients 104, 110 between communication sessions.

[0017] The system architecture 100 may also include a tag prediction server 112. The tag prediction server 112 may include a tag prediction model 114. As described in detail below, the tag prediction model 114 may be configured to receive email information, such as the body text of the email message 116, the subject of the email message 116, the sender / recipient of the email message 116, and / or any other metadata that may be attached to or describe the email message 116. The tag prediction model 114 may analyze the email information and, at its output, provide a set of suggested tags to be applied to the email message 116. The set of suggested tags may be provided to the email client 104 when the email message 116 is created. As described below, the suggested tags may be selected / deselected and / or otherwise modified by a user before the email message 116 is sent. When the email message 116 is sent, a number of tags 118 may be embedded as part of the email message 116 when the email message 116 is transmitted between the sending client device 102 and the email server 106.

[0018] When the email message 116 is received at the email server 106, the tag prediction server 112 may consider the plurality of tags 118 sent from the sending client device 102. The tag prediction server 112 may then identify discrepancies between the tags suggested by the tag prediction model 114 and the tags selected by the user. The tag prediction server 112 may also identify tags added / removed by the user. The tag prediction server 112 may then generate training pairs comprised of the email information and the plurality of tags 118. The email information may be used as an input configured to provide an output of the plurality of tags 118 for the training session. Additionally or alternatively, the tag prediction server 112 may also modify the tags 118 provided by the sending client device 102. For example, the tag prediction server 112 may add, remove, and / or modify the plurality of tags 118 to generate a modified plurality of tags 119 that is sent with the email message 116 from the email server 106 to the receiving client device 108.

[0019] When the email message 116 is received by the email client 110 on the receiving client device 108, the email client 110 may allow the user to view and / or modify the tags 119 received from the email server 106. In a process similar to that allowed on the sending client device 102, the receiving client device 108 may allow the user to add tags, remove tags, modify tags, and / or the like. Any changes made to the tags 119 may be sent back to the tag prediction server 112 to retrain the tag prediction model 114.

[0020] The process described by the system architecture 100 shown in FIG. 1 provides end-to-end tag prediction that solves the above technical problems. Specifically, models may be trained for each individual user group. This allows tags applied to emails sent within the user group to remain uniform across the group. Senders and receivers may use a common set of tags that become well-known and uniform across the group. Furthermore, models may be trained over time to become highly specific to the language, email habits, terminology, and / or communication style of users in the group. Additionally, tags may be defined at the sender, modified at a central server, and further refined at the receiver for each email message. Instead of tags being applied at the sender while different tags are applied at the receiver, this system architecture 100 allows tags to remain uniform throughout the lifecycle of an email message. Because tags are embedded in email messages as they are created, sent, processed, and / or received, the training opportunity is enhanced at each stage that a message is sent through the system. Overall, this provides a uniform, predictive, and adaptive tagging system that requires a minimal level of user effort.

[0021] FIG. 2A illustrates a user interface 200 that may be part of the email client 104 on the sending client device 102 according to some embodiments. The interface 200 may include user controls typical of modern email clients, such as mailbox configurations (e.g., inbox, sent mail, drafts, etc.), search functionality, an area for displaying email headers and / or first lines, an area for displaying the body of a selected email, etc. In the example of FIG. 2A, the user has already provided inputs that generate a display for composing a new email. This display may include fields for specifying email recipients (e.g., "To", "CC", "BCC", etc.), a field for specifying a subject line, and / or a field for providing the body of the email. In some embodiments, the user may provide a mapping of email recipients to mailing list or group memberships. As described in more detail below, the tags applied by the system may be selected from a group of available tags specific to a particular mailing list or group membership. The email body may include text, attachments, graphics, multimedia, and / or any other type of digital information that may be embedded and / or attached to an email message.

[0022] In addition to traditional display and user controls that may be provided as part of an email client, the interface 200 may include an additional control or set of controls that display and allow a user to edit a set of predicted, selected, and / or user-specified tags for the email message. These tags 202 may be displayed along with the email recipient and the subject of the email message. As described in more detail below, the initial tags 202 may be provided automatically from a tag prediction server. When a user composes an email, an action may trigger the email client to capture the email information and send the email information to a tag prediction server to receive a set of predicted tags for the email message.

[0023] A number of different actions may trigger the system to generate predictive tags. In some embodiments, the email information sent to the tag prediction server may include the subject line, the set of recipients, the email body, any attachments, and / or any other metadata or descriptive information of the email message. When this information changes, the email information may be sent to the server so that the email information can be processed by the tag prediction model to generate a set of predictive tags. In some embodiments, tags 202 may be generated each time the email information is changed at the client device. In some embodiments, tags 202 may be generated upon the expiration of a timer (e.g., every 30 seconds, every 60 seconds, etc.). In some embodiments, tags 202 may be generated when the email message is completed (e.g., when the user clicks "send"). Once the set of predictive tags 202 is received from the tag prediction server, it may be displayed in a tag field as shown in FIG. 2A.

[0024] Tags 202 may indicate the subject matter addressed by the email message. For example, the message being composed in interface 200 may be associated with a number of predefined tags previously assigned to this particular user group. For example, the email message may be associated with "Meetings" when requesting a video conference. It may also be associated with "Proj 233" when referring to this particular project in the email body. The message may also be associated with "Procurement" when requesting procurement options for a particular widget. Finally, the message may be associated with "New Mexico" when referring to a distributor in this location. Each of these tags may have been automatically predicted using a tag prediction model from a set of global tags assigned to this group. These tags 202 may serve as a starting point for the user to refine the tags that will ultimately be applied to this email message.

[0025] 2B is a diagram illustrating how a user interface 200 can be used to add new tags and remove existing tags, according to some embodiments. After receiving a set of predicted tags 202 as a starting point, a user may wish to further refine the tags to be assigned to an email message. A control 204 can be provided to allow the user to enter text representing a new tag to be applied to the current email message. In some embodiments, the system may provide an auto-complete feature to help guide the user to existing tags for a particular user group.

[0026] As described in more detail below, the server may select its initial set of predictive tags from a set of global tags available to this user group. Each of these available tags may correspond to the output of a tag prediction model. However, the output of the model may generate a score for each available tag, and the server may send only those tags that have a score above a certain threshold. This ensures that a minimum confidence score will ensure that the predictive tags are associated with a particular email message. The remaining available tags that are scored below the minimum confidence score are still available as tags that may be applied to the current email message, even if they were not initially predicted to be applicable.

[0027] As the user begins to type information into the control 204, the system can perform an auto-complete function that first references tags in the available tag list that were not selected as predicted tags by the tag prediction server. For this example, as the user begins to type the text "Wid...", the system can search the list of available tags that were not selected as predicted tags and identify any of the remaining available tags that match the prefix typed by the user. For example, the control 204 can provide text that completes or auto-completes the text being typed by the user, such as the "Widgets" and "Widths" tags from the available tag list. The user can then select one of the auto-complete options rather than manually typing the remainder of the tag's text.

[0028] In some embodiments, the system may allow the user to add a new tag that is not part of the available tag list. An autocomplete feature, indicated by control 204, may provide an autocomplete option. If the user continues to type and the typed prefix does not match any of the available tags, the system may define a new tag added by the user. This new tag may be added to the list of available tags for the user group when the model is retrained, as described below. In addition, the user may delete or "deselect" one or more of the predicted tags provided by the tag prediction server. In this example, the user may wish to remove the "Meetings" tag 203 from the list. The user may feel that this tag is unnecessary or has been erroneously assigned to this particular email message. The user may simply click on the tag 203 to remove it from the list.

[0029] FIG. 2C illustrates the user interface 200 after user modifications have been made to the list of tags 202, according to some embodiments. As previously mentioned, the original list of predicted tags shown in FIG. 2A has been modified by adding the "Widgets" tag and removing the "Meetings" tag. Once a tag has been removed from the list of predicted tags provided by the server, it can be referred to as a non-selected tag (i.e., a tag that was originally provided in the predicted tag list and was not selected by the user as applicable to this email message), and the tag that remains in the list of predicted tags can be referred to as a selected tag (i.e., a tag that was originally provided in the predicted tag list and was selected by the user as applicable to this email message). In addition, any tag added by the user manually or via the autocomplete feature can be referred to as a user tag. This term can distinguish between tags added by the user that were not originally predicted by the model and tags that were originally predicted by the model and saved / removed from the list.

[0030] 2D is a diagram illustrating how user interface 200 may be used to apply tags to a particular text selection, according to some embodiments. In the above example, the entirety of the email information may be analyzed by the model, and the predictive tags provided by the model may be applicable to the entire email message. However, some embodiments may allow for more granular associations between text segments within an email message and tags.

[0031] In this example, a user may highlight a particular segment of text, such as the "video conference" text string in the body of an email message. In response to highlighting or selecting this text string, the interface 200 may generate a pop-up control 208 that allows the user to select one of the available tags from the tag prediction server for this user group. In some embodiments, the selected text may be sent to a tag prediction model, and a new set of predicted tags specific to that text selection may be provided. In this example, the tag prediction model may provide a set of tags applicable to this particular text selection, including tags such as "Video Conference," "WebEx," and / or "Web Cam." As previously described with respect to the auto-complete feature, the user may select one of the predicted tags to be applied to that particular text selection from the control 208. In addition, if the desired tag is not available in the control 208, the user may type a new tag, which may be added to the group of available tags for this user group or mailing list. The auto-complete feature may be invoked when the user types a new tag, which may provide available tags that are not initially displayed as suggested tags in the control 208. Thus, new tags may be added using the auto-complete feature or by typing an entirely new tag as described above in connection with Figure 2B. After a tag is selected, an icon for tag 203 may be added to tag 202 in the tag list of interface 200. When the user clicks on tag 203, the "Video Conference" text is highlighted in interface 200, making the connection between tag 203 and the particular selected text visually apparent.

[0032] 3 illustrates a flowchart 300 of a process performed by an email client to display a set of predictive tags for editing by a user, according to some embodiments. The method may include receiving email information (302). The email information may be loaded automatically or may be provided by a user when the email is composed. For example, the user may provide a subject line, a set of recipients, attachments, the body of the email, etc. Once the email information is provided by the user, it may then be provided to a tag prediction server (304).

[0033] In some embodiments, the tag prediction model may need to be fully trained before it can be used to reliably predict tags from email information. The model may be trained manually using a set of training data. The model may also be trained during use as emails are sent through the system. A determination may be made (306) as to whether the tag prediction model is enabled, operational, and / or sufficiently trained to generate a reliable predicted set of tags. The model may be considered trained after a predetermined number of training data sets have been processed, after the end of a predetermined period of time, etc.

[0034] If the model has not yet been trained, the system may proceed without providing a set of predicted tags as a starting point for the user. However, the interface may still allow the user to add their own tags to each email message. As shown in FIG. 3, these user tags may be specified using the shorthand "t_user" to designate tags entered by the user. These tags may be new to the system, or they may be selected from available tags that were not previously predicted. In some embodiments, as new user tags are provided to the system, the output of the model may be updated to increase the set of available tags based on how new tags are added.

[0035] If the model has been previously sufficiently trained, it can provide a set of predictive tags from the set of available tags, as described below. The user interface may load the set of predictive tags (310) so that these tags are displayed with the email as it is being composed in real time. As previously mentioned, the interface may allow the user to update the tag list (312) to add new tags to the list, remove existing tags from the list ("deselect"), etc. Additionally, the autocomplete feature may interface with a tag prediction server to provide autocomplete options drawn from a global list of available tags for a particular user group (314).

[0036] After user tags have been added and predictive tags have been selected / deselected, a final list of tags may be presented for populating the tag field in the email before sending the email (316). This final set of tags sent from the email client of the sending client device may include user tags (t_user), tags that remain selected from the predictive tag list (t_sel), and / or tags that have been removed / deselected from the predictive tag list (t_unsel). Optionally, some tags may be associated with a particular text selection (318). Any tags that are not associated with a particular text selection may be considered generally applicable to email information.

[0037] The method may also include sending the email to an email server (320). Some embodiments may modify a conventional email structure that existed prior to this disclosure to add additional fields for tags. Specifically, the t_user, t_sel, and t_unsel tags may all be included in the header of the email so that they are all available to the server. This tag structure indicates how the initial set of predicted tags from the tag prediction model was modified by the user. Differences between these two tag sets may be used to train the model so that it adapts to the user's preferences over time. Additionally, tags associated with a particular text selection may include the tag text and start / end criteria within the email information that defined the text selection.

[0038] FIG. 4 illustrates a functional diagram 400 of operations performed by the tag prediction server to generate a set of predicted tags from a set of available tags, according to some embodiments. The diagram 400 illustrates how a sending client device 102 interacts with the tag prediction server 112 when an email is being composed and sent. The email client 104 can send email information 402, as described above, to the tag prediction server 112. The email information 402 may be provided as an input to the tag prediction model 114. The tag prediction model 114 can have multiple outputs, each of which corresponds to a single available tag in the system. When an input set of email information 402 is provided to the tag prediction model 114, the output corresponding to each of the available tags may generate a confidence score. For example, the confidence score may include a decimal value between 0.0 and 1.0. The confidence score may increase as the associated available tag becomes more closely correlated with the email information 402. Specific details of how the tag prediction model 114 operates are described in more detail below in FIGS. 8-11.

[0039] In this example, the number of usable tags 406 in the system may include m tags. Instead of providing all of the m usable tags 406, the system may apply a threshold to the confidence score provided by the tag prediction model. The k usable tags 406 that exceed the confidence score threshold may be provided to the email client 104 as predicted tags 412. The number k of predicted tags 412 may be less than the number m of usable tags 406. The predicted tags 412 may be initially displayed as tags for the email information, as described above with respect to FIG. 2A. The user may choose to keep some of the predicted tags 412, which may be referred to as selected tags 414. The user may also choose to remove some of the predicted tags 412, which may be referred to as non-selected tags 416. Both the selected tags 414 and the non-selected tags 416 may be embedded in the email message when the email message is sent.

[0040] The tag prediction models 114 may be specific to a particular user group, such as an organization or suborganization within the operating environment. For example, different tag prediction models 114 may be trained for different project groups. Different tag prediction models 114 may be trained for different organizations according to organizational charts. Different tag prediction models 114 may be trained for different user roles or security authorization groups. In one common example, different tag prediction models 114 may be trained for specific mailing lists. If user organizations can build mailing lists, a specific tag prediction model 114 may be trained for each mailing list, such that each mailing list builds its own set of available tags that grows over time to meet the needs of the members of the mailing list. In short, the tag prediction models 414 may be trained to be specific to any grouping of users.

[0041] Because the tag prediction model can facilitate several requests being made simultaneously, some embodiments may include a memory mechanism that saves the state of enabled tags for each email message. Additionally, an individual user may be creating multiple email messages simultaneously. Thus, email information 402 may be provided to a hashing process 404. The hashing process may create a unique key based on any portion of email information 402. To accommodate multiple emails from the same sender, the hashing process 404 may use a combination of sender email ID, email subject, mailing list, timestamp, portions of the email body, and / or any other information to generate a unique hash key for each email to populate a hash map 408. The hash map 408 may include a hash key for each open email message that uses a particular tag prediction model 114.

[0042] The hash map 408 may map, for each open email message, a representation of the available tags. These may be represented as individual weighted tries generated based on the remaining mk available tags. A trie is a specialized version of a tree data structure where each node corresponds to a portion of a prefix, and tags may be constructed by traversing paths in the trie. The trie may be weighted such that some paths are weighted more heavily than others. These weights may be determined based on confidence scores derived from the tag prediction model 114.

[0043] Recall that these tags may be made available for the autocomplete feature described above. For example, when a user begins typing in a pop-up window in the email client 104, the system may request autocomplete entries as tags are created. For example, email information 402 may be provided to a hashing process 404, which may generate a key corresponding to the open email message. A hash map 408 may receive the key generated by the hashing process 404 and retrieve a corresponding weighted trie 410 associated with the open email message. The email message 116 may then include user tags 418 generated by the autocomplete feature and any user tags 420 originally added by the user.

[0044] When a user sends an email message 116, each of the above tag types 414, 416, 418, 420 may be embedded as part of the header of the email message 116. Additionally, the email information 402 may be provided to a hashing process 404 so that the corresponding key in the hash map 408 and the corresponding weighted trie 410 may be purged from the memory system.

[0045] 5 illustrates a flowchart 500 of a method for processing tags in an email message as the email message is sent through an email server, according to some embodiments. As described in FIG. 1, when an email is received by the email server 106, the email server 106 may send the email information and / or tags to the tag prediction server 112. The tag prediction server may then perform the method to update the tags in the email message and / or to further train the tag prediction model.

[0046] The method may first include determining whether a tag prediction model is enabled (502). If the model is not enabled, further processing on the tags and / or email information may not be required. Any tags embedded in the email message may be considered user tags that were manually added by a user because the tag prediction model was not active. The user tags may be assigned as final tags for the email message (504), and the tag prediction server 112 may send an indication to the email server 106 that the email message 116 may be delivered to the recipient client device 108 (526). In some embodiments, the user tags may be used as a training data set along with the email information to train the tag prediction model and / or to build a set of usable tags for a user group.

[0047] If the tag prediction model is enabled (i.e., fully trained), it may be determined whether predictive tags were provided to the email client when the email message was being composed (506). For example, if the number of selected tags added to the number of unselected tags was greater than zero, then the predictive tags were provided to the email client and initially presented as a starting point for the user. If no predictive tags were provided, it may be assumed that the tag prediction model was not available when the message was being composed. For example, the tag prediction model may have been unavailable due to a network outage, software or client updates, model training, etc. Thus, some embodiments may perform tag prediction processing at this point (508). This may generate a set of predictive tags that may be added to the set of user tags provided with the email message. For example, any tags added by the user may be combined with the predicted tags by the tag prediction model, and the union of these two tag sets may be stored as the final tags for the email message (510). The set of predictive tags may then be embedded in the email header along with the user tags, and the email may be sent with the updated set of tags (526).

[0048] More generally, it may be determined that the predictive tags were provided to the email client when the email message was being composed (506). It may then be determined whether the user added any additional tags to the set of selected / unselected tags predicted by the tag prediction model (512). If user tags were provided, this may indicate that the model needs to be retrained to more closely match the user's preferences / behavior. Training pairs may be constructed using the email information and a combination of the user tags and the predicted tags (514). This training pair may then be provided to the tag prediction model during future training sessions. A final tag set for the email may be set as the user tags and selected tags (516), and the email may be sent with this final set of tags (526).

[0049] If no user tags were added when the email message was created (512), it may be determined whether the user selected to keep any of the predicted tags, i.e., whether the number of selected tags is greater than zero (518). If no tags were selected, indicating that the user did not keep any of the predicted tags, it may be assumed that the user did not consider the predicted tags. In some embodiments, the user may be required to actively select tags from the predicted tag list before they are used as tags for the email. In this case, the system does not benefit from discarding the non-selected tags. Instead, the final tag may be set as the non-selected tag (520). In effect, the system may assign all of the predicted tags to the email if none of them are selected by the user. This may indicate that the user did not consider the predicted tags sufficiently, and therefore there is no need to train the model using the lack of active user selection.

[0050] If the selected tags are assigned to the email message, the selection of tags may be used to further train the model. This helps the model adjust the confidence threshold and / or adjust the confidence score generated by the model so that future predicted tag sets are more likely to align with the selected tag set chosen by the user. In other words, this training set makes it more likely that future users will select all of the predicted tags applicable to email messages. Training pairs may be defined (522) using the email information and the selected set of tags and used to train the model during future training sessions. The final set of tags for the email message may be set as the selected tags for the user (524), and the email message may be sent with this final set of tags (526).

[0051] This process illustrates why some embodiments may embed non-selected tags in the email header along with selected tags. The non-selected tags are not necessarily applied to the email message presented by the user, but may still be used by this process initiated by the email server. If the non-selected tags are not stored in the email header, they may not be available to this process for further training the model.

[0052] FIG. 6 illustrates a flowchart 600 of a method for interacting with tags using a receiving client device 108, according to some embodiments. This process may be very similar to the process described in FIG. 3 with respect to a sending client device. In this case, the receiving client device 108 may receive an email with a set of tags (602). It may be determined (604) whether the email client is compatible with the tagging system. If the email client is not compatible, the tag information in the header may be discarded and / or may not be displayed in the user interface, and the email may be displayed normally without tags (608). This may ensure that emails sent from a tag-compatible system are still backward compatible with other email clients / systems that do not use the tagging system.

[0053] If the email client is compatible with the tag system (604), the tags may be displayed in a user interface, as shown below in Figures 7A-7C, and the user may modify, add, and / or subtract from the current tag set (606). Note that the tags initially presented to the receiving email client may be initially predicted by a tag prediction model, selected / deselected by the sending user, augmented with auto-complete and / or other user-generated tags, and sent through the email server, where the tag prediction server may again be accessed and the tags may be further refined to include additional predicted tags as described above.

[0054] Once the tags are received by the receiving email client, the receiving user may make further modifications to the tag set. For example, the receiving user may add tags, remove tags, modify existing tags, and / or modify the tag list. This may include using the autocomplete feature described above to select new tags from the existing list of available tags for this particular user group. After the tags are modified by the receiving user, the receiving client device 108 may send the received email with the modified tags back to the tag prediction server 112 (610). The tag prediction server 112 may then retrain the model with the changes made to the tags by the receiving client device 108 (612). Thus, the model may be retrained based on changes made at the sending client device 102, the email server 106, and / or the receiving client device 108 to provide end-to-end management of a common set of tags assigned to each email message passing through the system.

[0055] FIG. 7A illustrates a user interface 700 implemented in a receiving email client, according to some embodiments. The user interface 700 may include any of the common features described in connection with FIG. 2A. The user interface 700 may allow a user to select an email from a list of emails in an inbox and display the email's contents in a display area illustrated in FIG. 7A. As part of this display area, the email may display a recipient list, sender, subject, and / or other traditional email information. In addition, if the email client is compatible with a tag system, the received email may also display a field with tags 702 previously assigned by the sending email client and / or tag prediction server when the email was being composed and / or sent through the email server. These tags 702 may serve as a starting point for the receiving user to view and / or edit the email's tags 702.

[0056] FIG. 7B illustrates how the user interface 700 may be used to modify the set of tags 702, according to some embodiments. Indeed, the same process described for the sending email client may occur in the receiving email client to edit, add, and / or remove tags from the set of tags 702. For example, the receiving user may realize that the sending user misidentified the project to which this email should apply, i.e., this email should apply to project 235 instead of project 233. The user may select the tag "Proj233" and delete the "3" suffix portion of the tag. At this point, the email client may send a request to the tag prediction server to provide an auto-complete list based on the prefix left in the tag. For example, other projects beginning with "23" may appear in the drop-down menu 702 that may be presented to the user. Additionally, although not explicitly shown in FIG. 7B, the user may add new user tags and / or delete any existing tags that were part of the received email message.

[0057] FIG. 7C is a diagram illustrating how a user interface may be used to view specific text associated with a particular tag within an email message, according to some embodiments. Recall that the sender and / or tag prediction server may assign tags that are generally applicable to the email message. The sender and / or tag prediction server may assign tags that are specifically applicable to a text selection within the email message. In the example of FIG. 2D, the "WebEx" tag was added by the sending user to be specifically applicable to the text selection "video conference." To see this relationship, the receiving user may select the WebEx tag 704 using an input device such as a mouse, finger taps, and / or the like. Once the tag 704 is selected, the interface 702 may automatically highlight the corresponding text selection 706. This allows the user to select each of the tags 702 to visually identify any selected text within the email message that is specifically tied to those tags.

[0058] As previously mentioned, the corresponding text selection 706 may be manually assigned by a user by sending and / or receiving an email message. However, some embodiments may automatically assign the selected text 706 to the corresponding tag 704 using a tag prediction model. As described in more detail below, the tag prediction model may include operations that generate an attention vector that characterizes the contribution of each word or phrase in assigning a confidence score to each available tag. The attention vector may be analyzed for each tag predicted by the tag prediction model to assign a particular text selection to each tag. In this example, the user may select the WebEx tag 704, and the selected text shown in FIG. 7C may be highlighted as an automatic selection made by the tag prediction model, rather than a selection made manually by the user.

[0059] FIG. 8 is a diagram illustrating how a tag prediction model generates a set of confidence scores for available tags based on input email information, according to some embodiments. The tag prediction model can use a convolutional neural network. This neural network can be thought of as a function that takes a block of text as input and generates a score for each of the available tags in an output vector. In this example, the text 801 provided to the neural network can include the phrase "there is a proposal by the dev team for containerizing certain services." Note that this is a simplified example, and real-world examples may use much longer blocks of text typically found in email messages. Also assume that there are Tn available tags in the system for this particular user group. The available tag database may be built by recognizing and recording any tag provided to the system by either an administrator or a user. The output of the neural network can be an array of length Tn, with each entry in the array containing a confidence score indicating the level to which the associated tag is relevant to the text. The neural network can view this process as finding a solution to a classification problem.

[0060] Before processing the text through the neural network, the tag prediction model may convert the text 801 into a two-dimensional (2D) vector, such as a word embedding matrix 802. The word embedding matrix 802 converts the text 801 into a numerical representation that the neural network can understand. The word embedding matrix 802 greatly improves the efficiency of the neural network and acts like a fully connected layer. Each word may be mapped into a d-dimensional vector space. The vector space mathematically represents how closely related the words in the text 801 are based on the proximity of their associated vectors in the vector space. For example, words with similar meanings are oriented in a similar direction in the vector space, and words with opposite meanings are oriented in opposite directions. If there are n words in the input text, the word embedding matrix 802 has dimension n×d.

[0061] The neural network may be composed of multiple convolutional filters 804, 806, 808. Each of the convolutional filters 804, 806, 808 may consider a sliding window of the text in the word embedding matrix 802. In fact, each filter may consider different length n-grams formed by adjacent words in the text 801. In this example, the first filter 804 may have a window length of 2 words, the second filter 806 may have a window length of 3 words, and the third filter 808 may have a window length of 4 words. It should be noted that additional filters with longer window lengths may be used that are not explicitly shown in FIG. 8. Each cell in the convolutional filters 804, 806, 808 may contain a value that is multiplied with each value in the corresponding row in the word embedding matrix 802. The multiplication results are accumulated in the convolution operation. For example, a window size of 2 results in n-1 items in each column of the convolutional neural network. Each of the sets of columns shown in FIG. 8 for the convolution filters 804, 806, 808 may be considered as the matrix resulting from the convolution operation of each filter.

[0062] After the convolution filters operate and generate the resulting matrices, a max pooling operation may be performed to combine the results of the filters. In some embodiments, this operation may look at each element in each of the resulting matrices and identify the maximum value from the resulting matrices at each position. This maximum value may be accumulated into the final layer 810 of the neural network, which may be of length 3L, where L is the size of the filters 804, 806, 808.

[0063] 9 illustrates a second operation performed by the tag prediction model to generate confidence scores for available tags, according to some embodiments. This second operation uses the same word embedding matrix 802 as described above. Instead of using convolutional filters with window lengths 2, 3, 4, etc., this second operation uses a convolutional filter of length 1. This filter can process each single word at a time as one gram token. The number of filters with length 1 used can be denoted by m. The results of the filtering operation may be used to populate a matrix called the "attention matrix" of dimensions n by m.

[0064] A max pooling operation may then be performed on the attention matrix to generate an attention vector (904). The max pooling operation may be performed for each row in the attention matrix to identify the maximum value and store the maximum value in the attention vector. The resulting attention matrix has n×1 dimensions. The original word embedding matrix 802 may be transposed (906) so that the original n×d matrix becomes a d×n matrix. The resulting transposed word embedding matrix may be multiplied by the attention vector (908) to generate a d×1 dimensional embedded attention vector 910.

[0065] This attention mechanism allows the model to predict the specific text to which each tag may be associated. The attention vector corresponds to each of the tag outputs of the tag prediction model, and thus represents the relative importance of each word. In fact, the attention vector may contain larger values ​​for certain areas of text that contribute most to each particular tag. Some embodiments may further use the attention vector to identify segments of text that should be associated with each particular tag. As mentioned above, some embodiments allow a user to select a tag and view highlighted text that contributes to the tag. This text may be set by the user, but may also be automatically predicted by the tag prediction model.

[0066] 10 illustrates how the result vectors resulting from two operations performed by the tag prediction model can be combined into a final result set 1010, according to some embodiments. The embedded attention vector 910 of length d can be concatenated to the end of the vector from the final layer 810 described in FIG. 8 to form a single vector. This concatenated vector can represent the penultimate layer in a neural network of length 3L+d.

[0067] The concatenated vector may then be used to form the final layer 1010 of the neural network. Each cell in the final layer 1010 may correspond to a single available tag in the system. Thus, the final layer 1010 may have a length Tn corresponding to the available tags. The final layer 1010 may be considered a fully connected layer since each cell in the penultimate concatenated layer has Tn connections to the final layer 1010. The function for converting the concatenated layer to the final layer 1010 may include multiplying the concatenated vector by a matrix w that includes weight values ​​set during the training process. Some embodiments may also add a bias value to each multiplication result. The bias value may be set through the learning process or may be initialized to a random value close to 0.0. The final vector resulting from this matrix multiplication process is the resulting final layer 1010, which includes a numerical value in each cell that represents the confidence score.

[0068] At different steps of the above process, the tags selected and defined by the user may be provided along with the email text as training pairs for the neural network. To train the neural network, the email text may be provided as input. In addition, values ​​in the final layer 1010 of the neural network may be set according to the selected tags. For tags selected by the user as relevant to the email, the values ​​in the corresponding places in the final layer 1010 may be set to 1.0. All of the non-selected (e.g., unrelated) tags may be set to 0.0. A training process may then set values ​​for the biases, weights in the matrix, and values ​​for the convolution filters.

[0069] FIG. 11 illustrates an extended system architecture 1100 including additional communication channels, according to some embodiments. As previously mentioned, the email communication channel is only one example of many different communication channels that may utilize the tag prediction server 112. The same principles, methods, functions, and models described above may be used in conjunction with other communication channels without limitation. Thus, the entire above description may be equally applicable to social media channels 1104, instant messaging channels 1106, SLACK® channels 1102, and / or any other communication methods. For example, instead of providing email information to the tag prediction server 112, other communication channels may provide text bodies representing instant messages, message conversations, threads, comments, etc. Each of these text bodies may then receive tags in the same manner that email messages receive predicted tags as described above.

[0070] In addition, each of the various communication channels may work in conjunction with one another using the same tag set and / or the same tag prediction model. For example, the model may be trained using email messages, instant messages, social media posts, and channel conversations, regardless of the particular source. When a user sends an email and refines the tags predicted by the tag prediction model, the model may be trained such that new predicted tags can be provided for instant messages using the same tag prediction model. A database of tags for each user group may be shared among each of these multiple channels.

[0071] 12 illustrates a method for tagging emails as they are sent and received through an email system, according to some embodiments. The method can be performed using the system described in FIG. Each of the steps described below is described in detail in the various figures and sections of this disclosure above. Thus, each of the steps described below may include any of the features associated with those steps described elsewhere in this specification.

[0072] The method may include receiving 1202 email information from a first email client. In some embodiments, the email information may be associated with an email message to be sent from the first email client to a second email client. The first email client may be a sending email client and the second email client may be a receiving email client. The email information may include any metadata or descriptive information such as email body, subject, headers, recipient list, etc. The email may be sent from the first email client to a tag prediction server that operates a tag prediction model. The email information may be sent when the email message is being composed and before it is sent from the first email client.

[0073] The method may also include providing 1204 the email information to a model. The model may generate scores for a number of tags. The model may be a convolutional neural network with multiple filters with varying window sizes as described in Figures 8-11. The tags may be loaded from a set of available tags specific to a particular organization, user group, sub-organization, or other grouping of users and / or email messages.

[0074] The method may further include identifying a subset of the plurality of tags based at least in part on the score (1206). The subset may include the set of predictive tags described above. The score of the available tags may be compared to a threshold, and tags above the threshold may be used as predictive tags. The subset of the available tags used as predictive tags may be related to an idea or concept expressed in the email information. The score may represent a confidence score in a relationship between the corresponding tag and the email message. In some embodiments, the subset of the plurality of tags may also include one or more tags associated with a particular text selection in the email message. The particular text selection may be identified using the attention vector / matrix described in FIG. 10.

[0075] The method may further include sending the set of predictive tags to the first email client (1208). These predictive tags may be displayed in a user interface for the user as shown in FIGS. 2A-2D. The user may be allowed to edit, modify, add, delete, and / or change the predictive tags. For example, the user may delete some of the predictive tags, which may form a group of selected tags and a group of unselected tags from the predictive tags. The user may also add new tags that are not part of the predictive tag list. In some embodiments, tags from the plurality of tags that were not selected as part of the subset may be referenced at the server to perform an auto-complete function. Once the final tag list is set by the user, the tags may be embedded as part of the email, such as in an email header. The tags may then be sent with the email to an email server, which may forward the email to a receiving email client. As described in detail above, the server may optionally retrain the model and / or modify the tag list as the email is routed through the email server and received at the receiving email client.

[0076] Each set of tags may include any number of tags. Thus, in some cases, a set of tags may include a single tag, multiple tags, or no tags. A subset of tags may include all of the tags from a parent set. For example, the process may identify all of the available tags as predictive tags if the scores indicate so.

[0077] It should be understood that the specific steps illustrated in FIG. 12 provide a particular method for tagging emails as they are sent and received through an email system according to various embodiments. Other sequences of steps may be performed according to alternative embodiments. For example, alternative embodiments of the invention may perform the outlined steps in a different order. Additionally, individual steps illustrated in FIG. 12 may include multiple sub-steps that may be performed in various sequences as required for the individual step. Additionally, additional steps may be added or removed depending on the particular application. Those skilled in the art will recognize numerous variations, modifications, and alternatives.

[0078] Each method described herein may be implemented by a computer system. Each step of the method may be performed automatically by the computer system and / or may be provided with input / output requiring a user. For example, a user may provide inputs for each step of the method, and each of these inputs may be provided in response to a particular output generated by the computer system that requires such input. Each input may be received in response to a corresponding requested output. Furthermore, the inputs may be received from a user, received as a data stream from another data system, retrieved from a memory location, retrieved over a network, requested from a web service, and / or the like. Similarly, the outputs may be provided to a user, provided as a data stream to another computer system, stored in a memory location, sent over a network, provided to a web service, and / or the like. That is, each step of the method described herein may be performed by a computer system and may require any number of inputs to, outputs from, and / or requests to / from the computer system that may or may not require a user. Steps that do not require a user may be said to be performed automatically by the computer system without human intervention. Thus, in light of this disclosure, the steps of each method described herein may be modified to include input and output to and from a user, or may be performed automatically by a computer system without human intervention, where a processor makes some decisions. Additionally, some embodiments of each method described herein may be implemented as a set of instructions stored on a tangible, non-transitory storage medium to form a tangible software product.

[0079] 13 shows a simplified diagram of a distributed system 1300 for implementing one of the embodiments. In the illustrated embodiment, the distributed system 1300 includes one or more client computing devices 1302, 1304, 1306, and 1308 configured to run and operate client applications such as web browsers, dedicated clients (e.g., Oracle Forms), etc., via one or more networks 1310. A server 1312 may be communicatively coupled to the remote client computing devices 1302, 1304, 1306, and 1308 via the network 1310.

[0080] In various embodiments, server 1312 may be adapted to execute one or more services or software applications provided by one or more of the system's components. In some embodiments, these services may be provided to users of client computing devices 1302, 1304, 1306, and / or 1308 as web-based or cloud services or under a software-as-a-service (SaaS) model. Users operating client computing devices 1302, 1304, 1306, and / or 1308 may then utilize the services provided by these components by interacting with server 1312 utilizing one or more client applications.

[0081] In the configuration shown in the figure, the software components 1318, 1320, and 1322 of the system 1300 are shown as being implemented on the server 1312. In other embodiments, one or more of the components of the system 1300 and / or the services they provide may be implemented by one or more of the client computing devices 1302, 1304, 1306, and / or 1308. A user operating a client computing device may then utilize one or more client applications to use the services provided by these components. These components may be implemented in hardware, firmware, software, or a combination thereof. It should be understood that a variety of different system configurations are possible that may differ from the distributed system 1300. The embodiment shown in the figure is thus an example of a distributed system for implementing the system of the embodiments, and is not intended to be limiting.

[0082] The client computing devices 1302, 1304, 1306, and / or 1308 may be portable handheld devices (e.g., iPhone, mobile phone, iPad, computing tablet, personal digital assistant (PDA)) or wearable devices (e.g., Google Glass head mounted display) running software such as Microsoft Windows Mobile, and / or various mobile operating systems such as iOS, Windows Phone, Android, BlackBerry 10, Palm OS, and others, and capable of connecting to the Internet, email, short message service (SMS), Blackberry, or other communication protocols. The client computing devices may be general purpose personal computers, including, by way of example, personal and / or laptop computers running various versions of Microsoft Windows, Apple Macintosh, and / or Linux operating systems. The client computing devices may also be workstation computers running any of the various UNIX or UNIX-like operating systems available on the market, including, but not limited to, various GNU / Linux operating systems such as Google Chrome OS. Alternatively or additionally, client computing devices 1302, 1304, 1306, and 1308 may be electronic devices, such as thin-client computers, Internet-enabled gaming systems (e.g., Microsoft Xbox game consoles with or without Kinect® gesture input devices), and / or personal messaging devices, capable of communicating over network 1310.

[0083] Although the exemplary distributed system 1300 is shown with four client computing devices, any number of client computing devices may be supported. Other devices, such as devices having sensors, etc., may also interact with the server 1312.

[0084] The network 1310 of the distributed system 1300 may be any type of network known to those skilled in the art that can support data communications using any of a variety of protocols available on the market, including, but not limited to, TCP / IP (transmission control protocol / Internet protocol), SNA (systems network architecture), IPX (Internet packet exchange), AppleTalk, and the like. By way of example only, the network 1310 may be a local area network (LAN), for example based on Ethernet, Token Ring, and / or the like. The network 1310 may be a wide area network and the Internet. This may include virtual networks, including, but not limited to, virtual private networks (VPNs), intranets, extranets, public switched telephone networks (PSTNs), infrared networks, wireless networks (e.g., networks operating under any of the Institute of Electrical and Electronics (IEEE) 802.11 protocol suite, Bluetooth, and / or any other wireless protocols), and / or any combination of the above and / or other networks.

[0085] Server(s) 1312 may comprise one or more general purpose computers, dedicated server computers (including, by way of example only, PC (personal computer) servers, UNIX servers, mid-range servers, mainframe computers, rack-mounted servers, etc.), server farms, server clusters, or any other suitable configuration and / or combination. In various embodiments, server(s) 1312 may be adapted to execute one or more services or software applications described in the disclosure above. For example, server(s) 1312 may correspond to a server for executing the processes described above in accordance with embodiments of the present disclosure.

[0086] Server 1312 may run an operating system, including any of the operating systems listed above, as well as commercially available server operating systems. Server 1312 may also run any of a variety of additional server and / or mid-tier applications, including a hypertext transport protocol (HTTP) server, a file transfer protocol (FTP) server, a common gateway interface (CGI) server, a JAVA server, a database server, etc. Exemplary database servers include, but are not limited to, those commercially available from Oracle, Microsoft, Sybase, IBM (International Business Machines), etc.

[0087] In some implementations, the server 1312 may include one or more applications for analyzing and consolidating data feeds and / or event updates received from users of the client computing devices 1302, 1304, 1306, and 1308. By way of example, the data feeds and / or event updates may include, but are not limited to, Twitter® feeds, Facebook® updates, or real-time updates received from one or more third party information sources and continuous data streams. These may include real-time events related to sensor data applications, financial tickers, network performance measurement tools (e.g., network monitoring and traffic management applications), clickstream analysis tools, automobile traffic monitoring, and the like. The server 1312 may also include one or more applications for displaying the data feeds and / or real-time events via one or more display devices of the client computing devices 1302, 1304, 1306, and 1308.

[0088] The distributed system 1300 may also include one or more databases 1314 and 1316. The databases 1314 and 1316 may reside in a variety of locations. As an example, one or more of the databases 1314 and 1316 may reside on a non-transitory storage medium local to (and / or within) the server 1312. Alternatively, the databases 1314 and 1316 may be located remotely from the server 1312 and communicate with the server 1312 via a network-based or dedicated connection. In one set of embodiments, the databases 1314 and 1316 may reside within a storage area network (SAN). Similarly, any files necessary to perform the functions ascribed to the server 1312 may be stored locally to the server 1312 and / or remotely from the server 1312, as appropriate. In one set of embodiments, the databases 1314 and 1316 may include relational databases, such as those provided by Oracle, adapted to store, update, and retrieve data in response to SQL-formatted commands.

[0089] 14 is a simplified block diagram of one or more components of a system environment 1400 in which one or more components of an embodiment system may provide services as cloud services, according to an embodiment of the disclosure. In the embodiment shown, the system environment 1400 includes one or more client computing devices 1404, 1406, and 1408 that a user may use to interact with a cloud infrastructure system 1402 that provides cloud services. The client computing devices may be configured to operate a client application, such as a web browser, a dedicated client application (e.g., Oracle Forms), or some other application, that a user of the client computing device may use to interact with the cloud infrastructure system 1402 and thereby use the services provided by the cloud infrastructure system 1402.

[0090] It should be understood that the cloud infrastructure system 1402 depicted in the drawings may have components other than those shown. Additionally, the embodiment depicted in the drawings is only one example of a cloud infrastructure system that may incorporate embodiments of the present invention. In other embodiments, the cloud infrastructure system 1402 may have more or fewer components than those depicted, may combine two or more components, or may have a different configuration or arrangement of components.

[0091] The client computing devices 1404 , 1406 , and 1408 may be devices similar to those described above for 1302 , 1304 , 1306 , and 1308 .

[0092] Although the exemplary system environment 1400 is shown with three client computing devices, any number of client computing devices may be supported. Other devices, such as devices having sensors, etc., may interact with the cloud infrastructure system 1402.

[0093] Network 1410 can facilitate communication and exchange of data between clients 1404, 1406, and 1408 and cloud infrastructure system 1402. Each network can be any type of network familiar to those skilled in the art capable of supporting data communication using any of a variety of protocols available in the market, including those previously described for network 1310.

[0094] The cloud infrastructure system 1402 may include one or more computers and / or servers, which may include those described above for the server 1312.

[0095] In certain embodiments, the services offered by the cloud infrastructure system may include a number of services made available on demand to users of the cloud infrastructure system, such as online data storage and backup solutions, web-based email services, hosted office suites and document collaboration services, database processing, managed technical support services, and the like. The services offered by the cloud infrastructure system may be dynamically scaled to meet the needs of its users. A specific instantiation of a service offered by the cloud infrastructure system is referred to herein as a "service instance." In general, any service made available to users from a cloud service provider's system over a communications network such as the Internet is referred to as a "cloud service." Typically, in a public cloud environment, the servers and systems that make up the cloud service provider's system are distinct from the customer's own on-premise servers and systems. For example, the cloud service provider's system may host an application that users can order and use on demand over a communications network such as the Internet.

[0096] In some examples, services in a computer network cloud infrastructure may include protected computer network access to storage, hosted databases, hosted web servers, software applications, or other services provided to users by a cloud vendor or in other manners known in the art. For example, a service may include password-protected access to remote storage on the cloud over the Internet. As another example, a service may include a web-services-based hosted relational database and scripting language middleware engine for the private use of a networked developer. As another example, a service may include access to an email software application hosted on a cloud vendor's website.

[0097] In certain embodiments, cloud infrastructure system 1402 may include a suite of application, middleware, and database service offerings that are delivered to customers in a self-service, subscription-based, elastically scalable, reliable, highly available, and secure manner. One example of such a cloud infrastructure system is the Oracle Public Cloud offered by the assignee of the present application.

[0098] In various embodiments, the cloud infrastructure system 1402 may be adapted to automatically provision, manage, and track customer subscriptions to the services provided by the cloud infrastructure system 1402. The cloud infrastructure system 1402 may provide cloud services via different deployment models. For example, the services may be provided under a public cloud model, where an organization that sells cloud services (e.g., owned by Oracle) owns the cloud infrastructure system 1402 and makes the services available to the general public or to different industry enterprises. As another example, the services may be provided under a private cloud model, where the cloud infrastructure system 1402 operates solely for one organization and may provide services for one or more entities within this organization. The cloud services may also be provided under a community cloud model, where the cloud infrastructure system 1402 and the services provided by the cloud infrastructure system 1402 are shared by several organizations within an associated community. The cloud services may also be provided under a hybrid cloud model, which is a combination of two or more different models.

[0099] In some embodiments, the services offered by cloud infrastructure system 1402 may include one or more services offered under a Software as a Service (SaaS) category, a Platform as a Service (PaaS) category, an Infrastructure as a Service (IaaS) category, or other category of services including hybrid services. A customer may order one or more services offered by cloud infrastructure system 1402 through a subscription order. Cloud infrastructure system 1402 then performs processing to provide the services for the customer's subscription order.

[0100] In some embodiments, the services provided by the cloud infrastructure system 1402 may include, but are not limited to, application services, platform services, and infrastructure services. In some examples, the application services may be provided by the cloud infrastructure system via a SaaS platform. The SaaS platform may be configured to provide cloud services that fall under the SaaS category. For example, the SaaS platform may provide the ability to build and deliver a suite of on-demand applications on an integrated development and deployment platform. The SaaS platform may manage and control the underlying software and infrastructure to provide the SaaS services. By utilizing the services provided by the SaaS platform, customers may utilize applications that run on the cloud infrastructure system. Customers may obtain application services without the customer having to purchase separate licenses and support. A variety of different SaaS services may be provided. Examples include, but are not limited to, services that provide solutions for sales performance management, enterprise integration, and business flexibility for large organizations.

[0101] In some embodiments, the platform services can be provided by the cloud infrastructure system through a PaaS platform. The PaaS platform can be configured to provide cloud services that fall under the PaaS category. Examples of platform services can include, but are not limited to, services that allow an organization (such as Oracle) to integrate existing applications on a shared common architecture, and the ability to build new applications that drive the shared services provided by the platform. The PaaS platform can manage and control the underlying software and infrastructure to provide the PaaS services. Customers can obtain the PaaS services provided by the cloud infrastructure system without the customer having to purchase separate licenses and support. Examples of platform services include, but are not limited to, Oracle Java Cloud Service (JCS), Oracle Database Cloud Service (DBCS), and others.

[0102] By utilizing the services provided by the PaaS platform, customers can adopt programming languages ​​and tools supported by the cloud infrastructure system and can also control the deployed services. In some embodiments, the platform services provided by the cloud infrastructure system may include database cloud services, middleware cloud services (e.g., Oracle Fusion Middleware services), and Java cloud services. In one embodiment, the database cloud services may support a shared services deployment model that allows organizations to pool database resources and provide database as a service to customers in the form of a database cloud. The middleware cloud services may provide a platform for customers to develop and deploy various business applications, and the Java cloud services may provide a platform for customers to deploy Java applications in the cloud infrastructure system.

[0103] A variety of different infrastructure services may be provided by IaaS platforms in a cloud infrastructure system that facilitate management and control of underlying computing resources, such as storage, network, and other fundamental computing resources, for customers who use the services provided by the SaaS and PaaS platforms.

[0104] In particular embodiments, cloud infrastructure system 1402 may also include infrastructure resources 1430 for providing resources used to provide various services to customers of the cloud infrastructure system. In one embodiment, infrastructure resources 1430 may include a pre-integrated and optimized combination of hardware, such as servers, storage, and networking resources for running the services offered by the PaaS and SaaS platforms.

[0105] In some embodiments, resources in cloud infrastructure system 1402 may be shared by multiple users and dynamically reallocated on a per-request basis. In addition, resources may be allocated to users in different time zones. For example, cloud infrastructure system 1430 may maximize resource utilization by allowing a first set of users in a first time zone to utilize resources in the cloud infrastructure system for a specified number of hours, and then reallocating the same resources to another set of users in a different time zone.

[0106] In certain embodiments, multiple internal shared services 1432 may be provided that are shared by different components or modules of cloud infrastructure system 1402 and by the services provided by cloud infrastructure system 1402. These internal shared services may include, but are not limited to, security and identity services, integration services, enterprise repository services, enterprise manager services, virus scanning and whitelist services, high availability, backup and recovery services, services to enable cloud support, email services, notification services, file transfer services, etc.

[0107] In particular embodiments, cloud infrastructure system 1402 may provide comprehensive management of cloud services (e.g., SaaS, PaaS, and IaaS services) in the cloud infrastructure system. In one embodiment, cloud management functions may include functionality for provisioning, managing, and tracking customer subscriptions received by cloud infrastructure system 1402.

[0108] In one embodiment, as shown in the figure, cloud management functionality may be provided by one or more modules, such as an order management module 1420, an order orchestration module 1422, an order provisioning module 1424, an order management and monitoring module 1426, and an identity management module 1428. These modules may include or be provided using one or more computers and / or servers, which may be general purpose computers, dedicated server computers, server farms, server clusters, or any other suitable configuration and / or combination.

[0109] In an exemplary operation 1434, a customer using a client device, such as client device 1404, 1406, or 1408, may interact with cloud infrastructure system 1402 by requesting one or more services offered by cloud infrastructure system 1402 and ordering a subscription to one or more services offered by cloud infrastructure system 1402. In particular embodiments, the customer may access and place a subscription order via a cloud user interface (UI), cloud UI 1412, cloud UI 1414, and / or cloud UI 1416. Order information received by cloud infrastructure system 1402 in response to the customer placing an order may include information identifying the customer and one or more services offered by cloud infrastructure system 1402 to which the customer intends to subscribe.

[0110] After a customer places an order, the order information is received via the cloud UI 1412, 1414 and / or 1416.

[0111] In operation 1436, the order is stored in an order database 1418. The order database 1418 may be one of several databases hosted by the cloud infrastructure system 1418 along with other system elements.

[0112] At operation 1438, the order information may be forwarded to the order management module 1420. In some examples, the order management module 1420 may be configured to perform billing and accounting functions related to the order, such as verifying the order and filling the order after verification.

[0113] At operation 1440, information regarding the order is communicated to the order orchestration module 1422. The order orchestration module 1422 may be configured to orchestrate the provisioning of services and resources for the order placed by the customer by utilizing the order information. In some examples, the order orchestration module 1422 may support subscribed services that use the services of the order provisioning module 1424 by orchestrating the provisioning of resources.

[0114] In certain embodiments, the order orchestration module 1422 enables management of business processes associated with each order and applies business logic to determine whether the order should proceed to provisioning. In operation 1442, upon receiving an order for a new subscription, the order orchestration module 1422 sends a request to the order provisioning module 1424 to allocate and configure resources required to fulfill the subscription order. The order provisioning module 1424 enables allocation of resources for the services ordered by the customer. The order provisioning module 1424 provides a level of abstraction between the cloud services provided by the cloud infrastructure system 1400 and the physical implementation layer used to provision resources to provide the requested services. In this way, the order orchestration module 1422 can be decoupled from implementation details such as whether services and resources are actually provisioned on the fly or whether they are pre-provisioned and allocated / assigned after the request.

[0115] At operation 1444 , once the services and resources are provisioned, a notification of the services provided may be sent by the order provisioning module 1424 of the cloud infrastructure system 1402 to the customers of the client devices 1404 , 1406 and / or 1408 .

[0116] At operation 1446, the customer's subscription order may be managed and tracked by the order management and monitoring module 1426. In some examples, the order management and monitoring module 1426 may be configured to collect usage statistics for the services in the subscription order, such as storage usage, amount of data transferred, number of users, and amount of system uptime and system downtime.

[0117] In certain embodiments, cloud infrastructure system 1400 may include identity management module 1428. Identity management module 1428 may be configured to provide identity services, such as access management and authorization services in cloud infrastructure system 1400. In some embodiments, identity management module 1428 may manage information about customers who wish to utilize services provided by cloud infrastructure system 1402. Such information may include information authenticating the identities of such customers and information describing actions these customers are authorized to perform with respect to various system resources (e.g., files, directories, applications, communication ports, memory segments, etc.). Identity management module 1428 may also include management of descriptive information about each customer and how and who can access and modify this descriptive information.

[0118] 15 illustrates an exemplary computer system 1500 upon which various embodiments of the present invention may be implemented. System 1500 may be used to implement any of the computer systems described above. As shown in the figure, computer system 1500 includes a processing unit 1504 that communicates with a number of peripheral subsystems via a bus subsystem 1502. These peripheral subsystems may include a processing acceleration unit 1506, an input / output subsystem 1508, a storage subsystem 1518, and a communication subsystem 1524. Storage subsystem 1518 may include a tangible computer readable storage medium 1522 and a system memory 1510.

[0119] Bus subsystem 1502 provides a mechanism for allowing the various components and subsystems of computer system 1500 to communicate with each other in an organized manner. Although bus subsystem 1502 is shown diagrammatically as a bus, alternative embodiments of the bus subsystem may utilize multiple buses. Bus subsystem 1502 may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. For example, such architectures may include an Industry Standard Architecture (ISA) bus, a Micro Channel Architecture (MCA) bus, an Enhanced ISA (EISA) bus, a Video Electronics Standards Association (VESA) local bus, and a Peripheral Component Interconnect (PCI) bus, which may be implemented as a Mezzanine bus manufactured in accordance with the IEEE P1386.1 standard.

[0120] Processing unit 1504, which may be implemented as one or more integrated circuits (e.g., conventional microprocessors or microcontrollers), controls the operation of computer system 1500. One or more processors may be included in processing unit 1504. These processors may include single-core or multi-core processors. In particular embodiments, processing unit 1504 may be implemented as one or more independent processing units 1532 and / or 1534, with single or multi-core processors included in each processing unit. In other embodiments, processing unit 1504 may also be implemented as a quad-core processing unit formed by integrating two dual-core processors into one chip.

[0121] In various embodiments, the processing unit 1504 may execute various programs according to program code and may manage multiple programs or processes running simultaneously. At any given time, some or all of the program code to be executed may reside in the processor 1504 and / or in the storage subsystem 1518. Through appropriate programming, the processor 1504 may provide the various functions described above. The computer system 1500 may further include a processing acceleration unit 1506, which may include a digital signal processor (DSP), a special purpose processor, and / or the like.

[0122] The input / output subsystem 1508 may include user interface input devices and user interface output devices. User interface input devices may include a keyboard, a pointing device such as a mouse or trackball, a touchpad or touch screen integrated into a display, a scroll wheel, a click wheel, a dial, a button, a switch, a keypad, a voice input device with a voice command recognition system, a microphone, and other types of input devices. User interface input devices may include motion sensing and / or gesture recognition devices, such as, for example, a Microsoft Kinect® motion sensor, such as a Microsoft Xbox® 360 game controller, that allows a user to control and interact with the input device through a natural user interface using gestures and spoken commands. User interface input devices may also include eye gesture recognition devices, such as a Google Glass® blink detector, that detects a user's eye activity (e.g., "blinking" while taking a picture and / or selecting a menu) and translates the eye gestures as input to the input device (e.g., Google Glass®). Additionally, the user interface input devices may include a voice recognition sensing device that allows a user to interact with a voice recognition system (eg, the Siri® navigator) through voice commands.

[0123] User interface input devices may also include, but are not limited to, audio / visual devices such as three-dimensional (3D) mice, joysticks or pointing sticks, game pads and graphic tablets, and speakers, digital cameras, digital camcorders, portable media players, webcams, image scanners, fingerprint scanners, barcode readers 3D scanners, 3D printers, laser distance measuring devices, and eye tracking devices. In addition, user interface input devices may include medical imaging input devices, such as, for example, computed tomography, magnetic resonance imaging, positron emission tomography, medical ultrasound, etc. User interface input devices may also include audio input devices, such as, for example, MIDI keyboards, digital musical instruments, etc.

[0124] User interface output devices may include a display subsystem, indicator lights, or non-visual displays such as audio output devices, etc. The display subsystem may be a flat panel device such as one using a cathode ray tube (CRT), liquid crystal display (LCD) or plasma display, a projection device, a touch screen, etc. In general, the use of the term "output device" is intended to include all possible types of devices and mechanisms for outputting information from computer system 1500 to a user or to another computer. For example, user interface output devices may include a variety of display devices that visually convey text, graphics, and audio / video information, such as, but not limited to, monitors, printers, speakers, headphones, car navigation systems, plotters, audio output devices, and modems.

[0125] Computer system 1500 may include a storage subsystem 1518 that includes software elements currently shown as being within system memory 1510. System memory 1510 may store program instructions loadable and executable on processing unit 1504, as well as data generated during the execution of these programs.

[0126] Depending on the configuration and type of computer system 1500, system memory 1510 may be volatile (e.g., random access memory (RAM)) and / or non-volatile (e.g., read only memory (ROM), flash memory, etc.). Typically, RAM contains data and / or program modules that are immediately accessible to and / or currently being operated on and executed by the processing unit 1504. In some implementations, system memory 1510 may include a number of different types of memory, such as static random access memory (SRAM) or dynamic random access memory (DRAM). In some implementations, a basic input / output system (BIOS), including the basic routines that help transfer information between elements within computer system 1500, for example during startup, may typically be stored in ROM. By way of example and not limitation, system memory 1510 also illustrates application programs 1512, which may include client applications, a web browser, mid-tier applications, a relational database management system (RDBMS), and the like, program data 1514, and an operating system 1516. By way of example, operating system 1516 may include various versions of Microsoft Windows®, Apple Macintosh®, and / or Linux® operating systems, various UNIX® or UNIX®-based operating systems available on the market (including, but not limited to, various GNU / Linux® operating systems, Google Chrome® OS, etc.), and / or mobile operating systems such as iOS, Windows® Phone, Android® OS, BlackBerry® 10 OS, and Palm® OS operating systems.

[0127] The storage subsystem 1500 may also provide a tangible computer-readable storage medium for storing the basic programming and data constructs that provide the functionality of some embodiments. Software (programs, code modules, instructions) that, when executed by a processor, perform the functions described above, may be stored in the storage subsystem 1518. These software modules or instructions may be executed by the processing unit 1504. The storage subsystem 1518 may also provide a repository for storing data used in accordance with the present invention.

[0128] Storage subsystem 1518 may also include a computer readable storage medium reader 1520 that may be further connected to a computer readable storage medium 1522. Along with system memory 1510, and optionally in combination with system memory 1510, computer readable storage medium 1522 may comprehensively represent remote, local, fixed, and / or removable storage devices plus storage media for containing, storing, transmitting, and retrieving computer readable information on a temporary and / or more permanent basis.

[0129] The computer readable storage medium 1522 containing the code or portions of code may also include any suitable medium known or used in the art, including, but not limited to, storage media and communication media, such as volatile and non-volatile, removable and non-removable media, implemented in any manner or technology for storing and / or transmitting information. This may include tangible computer readable storage media, such as RAM, ROM, Electronically Erasable Programmable ROM (EEPROM), flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or other tangible computer readable media. This may also include non-tangible computer readable media, such as data signals, data transmissions, or any other medium that can be used to transmit the desired information and that can be accessed by computing system 1500.

[0130] By way of example, the computer readable storage medium 1522 may include a hard disk drive that reads from and writes to non-removable, non-volatile magnetic media, a magnetic disk drive that reads from and writes to a removable, non-volatile magnetic disk, and an optical disk drive that reads from and writes to a removable, non-volatile optical disk, such as a CD ROM, DVD, Blu-Ray® disk, or other optical media. The computer readable storage medium 1522 may include, but is not limited to, a Zip® drive, a flash memory card, a Universal Serial Bus (USB) flash drive, a Secure Digital (SD) card, a DVD disk, digital video tape, and the like. The computer readable storage media 1522 may also include non-volatile memory based solid state drives (SSDs), such as flash memory based SSDs, enterprise flash drives, solid state ROM, etc., volatile memory based SSDs, such as solid state RAM, dynamic RAM, static RAM, etc., DRAM based SSDs, magnetoresistive RAM (MRAM) SSDs, and hybrid SSDs using a combination of DRAM and flash memory based SSDs. The disk drives and their associated computer readable media can provide non-volatile storage of computer readable instructions, data structures, program modules, and other data for the computer system 1500.

[0131] The communications subsystem 1524 provides an interface to other computer systems and networks. The communications subsystem 1524 serves as an interface for receiving data from other systems and transmitting data from the computer system 1500 to other systems. For example, the communications subsystem 1524 allows the computer system 1500 to connect to one or more devices via the Internet. In some embodiments, the communications subsystem 1524 may include a radio frequency (RF) transceiver component for accessing wireless voice and / or data networks (e.g., using cellular technology, advanced data network technologies such as 3G, 4G, or EDGE (enhanced data rates for global evolution), WiFi (IEEE 802.11 family of standards, or other mobile communications technologies, or any combination thereof), a global positioning system (GPS) receiver component, and / or other components. In some embodiments, the communications subsystem 1524 may provide wired network connectivity (e.g., Ethernet) in addition to or instead of a wireless interface.

[0132] In some embodiments, the communications subsystem 1524 may also receive incoming communications in the form of structured and / or unstructured data feeds 1526, event streams 1528, event updates 1530, etc., on behalf of one or more users who may be using the computer system 1500.

[0133] As an example, the communications subsystem 1524 may be configured to receive data feeds 1526 in real time from users of social networks and / or other communications services, such as web feeds, such as Twitter® feeds, Facebook® updates, Rich Site Summary (RSS) feeds, and / or real-time updates from one or more third party sources.

[0134] Additionally, the communications subsystem 1524 may be configured to receive data in the form of a continuous data stream, which may include an event stream 1528 of real-time events and / or event updates 1530 that may be continuous or infinite in nature with no apparent end. Examples of applications that generate continuous data may include, for example, sensor data applications, financial tickers, network performance measurement tools (e.g., network monitoring and traffic management applications), clickstream analysis tools, automobile traffic monitoring, etc.

[0135] The communications subsystem 1524 may also be configured to output structured and / or unstructured data feeds 1526, event streams 1528, event updates 1530, etc. to one or more databases that may be in communication with one or more streaming data source computers coupled to the computer system 1500.

[0136] The computer system 1500 may be one of a variety of types, including a handheld portable device (e.g., an iPhone® mobile phone, an iPad® computing tablet, a PDA), a wearable device (e.g., a Google Glass® head mounted display), a PC, a workstation, a mainframe, a kiosk, a server rack, or any other data processing system.

[0137] Due to the ever-changing nature of computers and networks, the description of computer system 1500 shown in the drawings is intended as only one specific example. Many other configurations are possible having more or fewer components than the system shown in the drawings. For example, customized hardware may be used and / or particular elements may be implemented in hardware, firmware, software (including applets), or a combination. Additionally, connections to other computing devices, such as network input / output devices, may be used. Based on the disclosure and teachings provided herein, one of ordinary skill in the art will appreciate other ways and / or methods for implementing various embodiments.

[0138] In the above description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of various embodiments of the present invention. However, it will be apparent to one skilled in the art that embodiments of the present invention may be practiced without some of these specific details. In other instances, well-known structures and devices are shown in block diagram form.

[0139] The above description provides only exemplary embodiments and is not intended to limit the scope, applicability, or configuration of the present disclosure. Rather, the above description of exemplary embodiments will provide those skilled in the art with an enabling description for implementing the exemplary embodiments. It should be understood that various changes can be made in the function and arrangement of elements without departing from the spirit and scope of the invention as set forth in the following claims.

[0140] In the above description, specific details are provided to provide a thorough understanding of the embodiments. However, those skilled in the art will appreciate that the embodiments may be practiced without these specific details. For example, circuits, systems, networks, processes, and other components may be shown as components in block diagram form so as not to obscure the embodiments in unnecessary detail. In other instances, well-known circuits, processes, algorithms, structures, and techniques may be shown without unnecessary detail so as to avoid obscuring the embodiments.

[0141] It is also noted that the particular embodiments may be described as a process that is depicted as a flowchart, a flow diagram, a data flow diagram, a structure diagram, or a block diagram. Although a flowchart may describe operations as a sequential process, many of the operations may be performed in parallel or simultaneously. In addition, the order of operations may be re-arranged. A process terminates when its operations are completed, but may have additional steps not included in the drawings. A process may correspond to a method, a function, a procedure, a subroutine, a subprogram, etc. When a process corresponds to a function, its termination may correspond to a return of the function to the calling function or to the main function.

[0142] The term "computer-readable medium" includes, but is not limited to, portable or fixed storage devices, optical storage devices, wireless channels, and various other media capable of storing, containing, or carrying instructions and / or data. A code segment or machine-executable instruction may represent a procedure, a function, a subprogram, a program, a routine, a subroutine, a module, a software package, a class, or any combination of instructions, data structures, or program statements. A code segment may be coupled to another code segment or a hardware circuit by passing and / or receiving information, data, arguments, parameters, or memory contents. Information, arguments, parameters, data, etc. can be passed, forwarded, or transmitted via any suitable means including memory sharing, message passing, token passing, network transmission, etc.

[0143] Furthermore, the embodiments may be implemented in hardware, software, firmware, middleware, microcode, hardware description languages, or any combination thereof. When implemented in software, firmware, middleware, or microcode, the program code or code segments to perform the necessary tasks may be stored in a machine-readable medium. A processor(s) may perform the necessary tasks.

[0144] In the foregoing specification, aspects of the invention are described with reference to specific embodiments thereof, but those skilled in the art will recognize that the invention is not limited to these embodiments. The various features and aspects of the invention may be used individually or together. Moreover, the embodiments may be utilized in any number of environments and applications beyond those described herein without departing from the broader spirit and scope of the specification. Accordingly, the specification and drawings should be regarded as illustrative rather than restrictive.

[0145] Additionally, for purposes of illustration, the methods are described in a particular order. It should be understood that in alternative embodiments, the methods may be performed in an order different from that described. It should also be understood that the methods may be performed by hardware components or implemented in a sequence of machine-executable instructions. Machine-executable instructions can be used to cause a machine, such as a general-purpose or special-purpose processor or logic circuitry programmed with the instructions, to perform the methods. These machine-executable instructions may be stored on one or more machine-readable media, such as a CD-ROM or other type of optical disk, a floppy disk, a ROM, a RAM, an EPROM, an EEPROM, a magnetic or optical card, a flash memory, or any other type of machine-readable medium suitable for storing electronic instructions. Alternatively, the methods may be performed by a combination of hardware and software.

Claims

1. A program for causing one or more processors to perform operations, the operations comprising: receiving email information from a first email client, the email information associated with an email message to be sent from the first email client to a second email client, the operations further comprising: generating a hash key based on the email information, the hash key uniquely identifying the email message, the operations further comprising: providing the email information to a model, the model generating a score for a set of usable tags, the model being trained to generate a score for the set of usable tags based on how closely the set of usable tags is correlated to the email information, the operations further comprising: identifying a set of predictive tags as a subset of the set of available tags based at least in part on the scores; and storing the hash key in a hash map of hash keys, the hash keys in the hash map referencing a data structure representing a subset of the set of available tags that are not part of the set of predicted tags, the operations further comprising: sending the set of predictive tags to the first email client, wherein a set of tags selected from the set of predictive tags is sent with the email message when the email message is sent to the second email client.

2. 2. The program of claim 1, wherein the selected set of tags is embedded in a header of the email message when the email message is sent to the second email client.

3. receiving a request from the first email client including a prefix of a new tag received from a user; identifying a set of autocomplete tags in the set of available tags that begin with the prefix; and sending the set of autocomplete tags to the first email client.

4. 2. The program of claim 1, wherein a set of unselected tags from the set of predicted tags is also sent along with the email message when the email message is sent to the second email client.

5. 2. The program of claim 1, wherein a set of user tags from the set of predictive tags is also sent with the email message when the email message is sent to the second email client, the set of user tags being different from the set of predictive tags.

6. The program of claim 1 , wherein the first email client is configured to generate a user interface including a display of an email header that includes the set of predictive tags.

7. The program of claim 1 , wherein the data structure comprises a weighted prefix trie.

8. The operation includes: receiving a prefix and the email information from the first email client; regenerating the hash key using the email information; referencing a data structure for the email message using the hash key; and retrieving from the data structure one or more tags in the set of available tags that complete the prefix.

9. The program product of claim 1 , wherein the operations further comprise receiving the selected set of tags from an email server, and wherein the email message is sent through the email server.

10. The method of claim 9 , wherein the operations further comprise receiving a set of user tags from the email server that are different from the selected tags.

11. The method of claim 10 , wherein the operations further comprise retraining the model with the set of user tags.

12. The program of claim 1 , wherein the model is selected from a plurality of models, each model of the plurality of models being associated with a different user group.

13. 13. The program of claim 12, wherein each different user group corresponds to a predefined mailing list.

14. The operation includes: and receiving second email information from an email server through which a second email message is sent from the first email client, the operation further comprising: identifying a second set of predictive tags from the set of available tags by providing the second email information to the model; and sending the second set of predictive tags to the email server, wherein the second set of predictive tags is sent to the second email client along with the second email message.

15. The operation includes: receiving new user tags or changes to the set of selected tags from the second email client after the second email client receives the email message; and retraining the model using the email information and the changes to the selected set of tags or the new user tags from the second email client.

16. The model is a word embedding matrix populated with the email information; and A plurality of convolution filters having different window sizes; and a max pooling operation using results from the plurality of convolution filters.

17. 1. A method for an email system to automatically generate end-to-end email tags, the method comprising: The method further includes the step of: the email system receiving email information from a first email client, the email information associated with an email message to be sent from the first email client to a second email client, the method further comprising: the email system generating a hash key based on the email information, the hash key uniquely identifying the email message, the method further comprising: the email system providing the email information to a model, the model generating a score for a set of available tags, the model being trained to generate a score for the set of available tags based on how closely the set of available tags are correlated to the email information, the method further comprising: the email system identifying a set of predictive tags as a subset of the set of available tags based at least in part on the scores; the email system storing the hash key in a hash map of hash keys, the hash keys in the hash map referencing a data structure representing a subset of the set of available tags that are not part of the set of predicted tags, the method further comprising: the email system sending the set of predictive tags to the first email client, wherein a set of tags selected from the set of predictive tags is sent with the email message when the email message is sent to the second email client.

18. 1. A system comprising: one or more processors; and one or more memory devices containing instructions that, when executed by the one or more processors, cause the one or more processors to perform operations, the operations including: receiving email information from a first email client, the email information associated with an email message to be sent from the first email client to a second email client, the operations further comprising: generating a hash key based on the email information, the hash key uniquely identifying the email message, the operations further comprising: providing the email information to a model, the model generating a score for a set of usable tags, the model being trained to generate a score for the set of usable tags based on how closely the set of usable tags is correlated to the email information, the operations further comprising: identifying a set of predictive tags as a subset of the set of available tags based at least in part on the scores; and storing the hash key in a hash map of hash keys, the hash keys in the hash map referencing a data structure representing a subset of the set of available tags that are not part of the set of predicted tags, the operations further comprising: sending the set of predictive tags to the first email client, wherein a set of tags selected from the set of predictive tags is sent with the email message when the email message is sent to the second email client.

Citation Information

Patent Citations

  • Data communication system and data communication method

    JP2002063120A

  • Method, Apparatus, and System for Clustering and Classification

    JP2008529105A

  • Tag attachment support system and program

    JP2009069937A

  • Email tags

    JP2014532934A

  • Content-based tagging of RSS feeds and E-mail

    US8239460B2