Current network technologies provide users with access to a variety of media content (e.g., images, music, and videos). Some technologies are capable of providing content recommendations to users based on, for example, what movies a user has watched and whether the user enjoyed the movie. For instance, some technologies will provide a user interface that states, “Because you watched movie ‘A,’ you may enjoy watching movie ‘B.”’
Embodiments of the present invention will be readily understood by the following detailed description in conjunction with the accompanying drawings. To facilitate this description, like reference numerals may designate like structural elements. Embodiments of the invention are illustrated by way of example and not by way of limitation in the figures of the accompanying drawings.
The following detailed description refers to the accompanying drawings. The same reference numbers in different drawings may identify the same or similar elements. It is to be understood that other embodiments may be utilized and structural or logical changes may be made without departing from the scope of the present disclosure. Therefore, the following detailed description is not to be taken in a limiting sense, and the scope of embodiments in accordance with the present invention is defined by the appended claims and their equivalents.
Techniques described herein may be used to improve content (e.g., images, music, and videos) recommendations that are provided to a user by enabling the user to provide feedback regarding the reasons for which the content is being recommended (as opposed to, for example, merely enabling the user to provide feedback regarding the recommended content itself). A content recommendations server may provide a user with recommended content and the reasons for which the content is being recommended, such as genres, directors, and actors that the content recommendations server believes that the user enjoys. The user may provide feedback to the content recommendations server regarding the recommendations themselves and also feedback regarding the reasons for which the content was recommended. The content recommendations server may use the feedback to improve subsequent recommendations to the user. As such, systems and methods described herein may be used to improve content recommendations based on user feedback regarding the reasons for which content is recommended (in addition to feedback regarding the content itself).
The content recommendations server may enable the user to provide feedback regarding the reasons for which the particular movie is being recommended (at 1.3). For instance, the user may inform the content recommendations server that the user does not enjoy (or no longer enjoys) movies from the particular director, movies involving a particular actor, etc. The content recommendations server may update user profile information for the user based on the feedback (at 1.4) and provide updated content recommendations to the user based on the newly updated user profile information (at 1.5). In this manner, the content recommendations server may suggest superior content recommendations by providing the user with the reasons for which content is recommended, enabling the user to provide feedback regarding the reasons for which the content is recommended, and modifying subsequent recommendations based on the feedback from the user.
User device 210 may include a portable computing and communication device, such as a personal digital assistant (PDA), a smart phone, a cellular phone, a laptop computer with connectivity to a cellular wireless network, a tablet computer, etc. User device 210 may also include a non-portable computing device, such as a desktop computer, a consumer or business appliance, or another device that has the ability to connect to network 240. In some implementations, user device 210 may include a set top box, a video game console, or a similar device, capable of communicating with content server 220 and content recommendations server 230 via network 240.
Content server 220 may include one or more computing devices, such as a server device or a collection of server devices associated with a content provider that may provide content to user devices 210. In some implementations, content server 260 may be a web server that hosts webpages and/or content (e.g., images, videos, audio, etc.). Additionally, or alternatively, a link to content stored by content server 220 may be presented within an application or webpage associated with a web server or application server.
Content recommendations server 230 may include one or more computing devices, such as a server device or a collection of server devices capable of performing one or more of the operations described herein. For instance, content recommendations server 230 may determine content that is recommended for a user based on user profile information of the user and provide the recommendations, and the reasons for the recommendations, to user device 210. Content recommendations server 230 may also receive feedback from the user regarding the content itself and the reasons for which the content was recommended. Content recommendations server 230 may update user profile information for the user based on the feedback and provide updated content recommendations in response to receiving the feedback from the user. In some implementations, content recommendations server 230 may send and receive information from the user via a browser or other application installed on user device 210.
Network 240 may include one or more wired and/or wireless networks. For example, network 240 may include a cellular network (e.g., a second generation (2G) network, a third generation (3G) network, a fourth generation (4G) network, a fifth generation (5G) network, a long-term evolution (“LTE”) network, a global system for mobile (“GSM”) network, a code division multiple access (CDMA) network, an evolution-data optimized (EVDO) network, or the like), a public land mobile network (PLMN), and/or another network. Additionally, or alternatively, network 240 may include a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a metropolitan network (MAN), the Public Switched Telephone Network (PSTN), an ad hoc network, a managed IP network, a virtual private network (VPN), an intranet, the Internet, a fiber optic-based network, and/or a combination of these or other types of networks.
As shown, process 300 may include analyzing content data and user profile information (block 310). For example, content recommendations server 230 may analyze user profile information associated with a particular user. The user profile information may include content data that the user has viewed in the past, the number of times that the user has viewed the content, a duration for which the user has viewed the content (e.g., whether the user viewed an entire movie or not), and ratings information (e.g., a “like” or “dislike,” 1 star, 2 stars, 3 stars, etc.) provided by the user regarding content. User profile information may also include information describing the user, such as an age of the user, a race of the user, a gender of the user, a primary geographical location of the user, etc. Content recommendations server 230 may also analyze user profile information to characterize viewing habits of the user (e.g., whether the user is an avid or casual movie watcher, what genres of media the user appears to prefer, whether the user appears to enjoy watching movies or television series, etc.).
Process 300 may include determining content recommendations for the user (block 320). For instance, content recommendations server 230 may identify content that the user would likely enjoy based on an analysis of the user profile information of the user. In some implementations, content recommendations server 230 may determine the content recommendations by matching the user profile information of the user (e.g., content that the user has viewed in the past, ratings information received from the user, demographics information of the user, etc.) with content that the user has not viewed yet.
In some implementations, content recommendations server 230 may identify other users that appear to have similar interests, viewing habits, and/or that correspond to a similar demographic as the user. Identifying other users that are similar to the user in question may enable content recommendations server 230 to make recommendations based on the types of movies that the other users have enjoyed. To do so, in some implementations, content recommendations server 230 may create a multi-user profile that includes generic profile information representative of a group of similar users or that includes a logical grouping of individual profiles of similar users. The users may be similar in one or more ways, such as demographic information, viewing history information, geographic information, etc. Content recommendations may also be made based on the current popularity of a movie. In some implementations, content recommendations server 230 may implement one or more tools for determining the types of content that the user would likely enjoy. For example, as described in detail below with reference to
Process 300 may include providing content recommendations (block 330). For example, content recommendations server 230 may communicate, to user device 210, content that the user is likely to enjoy. The content recommendations may be based on user profile information that is stored for the user by content recommendations server 230. For instance, if content recommendations server 230 determines that the user would likely enjoy the movie The Lion King, the Lion King may be presented to the user via a user interface on user device 210.
Process 300 may include providing reasons for the content recommendations (block 340). For example, content recommendations server 230 may communicate, to user device 210, the reason for which the content recommendations (see block 330) were provided to the user. For instance, if the Lion King were recommended to the user, content recommendations server 230 may indicate that the Lion King was recommended because the user appears to enjoy: 1) movies; 2) animated content; 3) themes regarding loyalty and responsibility; 4) comedies; 5) dramas; 6) musicals; and 7) James Earl Jones (the actor). Examples of reasons for which content recommendations are provided are discussed below with respect to
Process 300 may include receiving feedback regarding the reasons for the content recommendations (block 350). For example, content recommendations server 230 may receive information from the user about whether the user is interested in the recommended content and/or whether the user agrees of the reasons for which the content was recommended. For instance, if content recommendations server 230 recommended The Lion King because the user appears to enjoy: 1) movies; 2) animated content; 3) themes regarding loyalty and responsibility; 4) comedies; 5) dramas; and 6) James Earl Jones, the user may indicate that while the user would like to view The Lion King, the user does not particularly enjoy musicals or content involving James Earl Jones. Additionally, the user may indicate that the user especially enjoys animated content and comedies. The feedback may be in one or more forms, such as a simple confirmation (e.g., a “yes” or “no,” a “like” or “dislike,” etc.), in accordance with a rating system (e.g., a number of stars), a weighted scale (e.g., a number between 1 and 10 regarding how significant each factor is to the user), words and phrases that are typed by the user, etc. As such, content recommendations server 230 may receive feedback from the user regarding content recommendations and the reasons for which the content was recommended.
Process 300 may include updating the user profile information for the user (block 360). For example, content recommendations server 230 may update user profile information, of the user, based on the feedback received from the user. For instance, if the user indicates that the user does not enjoy musicals or content involving James Earl Jones, content recommendations server 230 may update a user profile of the user to reflect the user's feedback. Content recommendations server 230 may also update the user profile based on feedback regarding the content recommendation itself. Additionally, as shown in
Single-tiered utility matrices 400A and 400B may include a row of features (e.g., Spielberg, Pacino, Action, etc.) associated with a column of users (e.g., John, Jane, etc.). Single-tiered utility matrix 400A may have a numeric value associated with each feature to indicate a number of times the user has viewed or listened to (and/or “liked”) content associated with the corresponding feature. For instance, single-tiered utility matrix 400A may indicate that John has viewed content associated with Spielberg (i.e., the director Steven Spielberg) on 5 occasions, has viewed content associated with Pacino (i.e., the actor Al Pacino) on 6 occasions, and so on.
In some implementations, content recommendations server 230 may use single-tiered utility matrix 400A to determine content recommendations for John or Jane. For instance, content recommendations server 230 may analyze the information corresponding to John and determine that John enjoys movies that are in English and that involve Steven Spielberg and/or Al Pacino based on the number of times that John has viewed content corresponding to Spielberg, Pacino, and English. Content recommendations server 230 may also determine that John does not tend to view movies that are in Spanish. As such, content recommendations server 230 may match the user profile information of John to available content (e.g., movies) in order to identify one or more content recommendations for John.
Additionally, content recommendations server 230 may indicate that the content recommendations for John are based on the number of times that John has watched movies that are in English and that involve Steven Spielberg and/or Al Pacino. Content recommendations server 230 may also provide John with an opportunity to provide feedback regarding the content recommendations and the reasons for the content recommendations. In response to receiving the feedback, content recommendations server 230 may update the user profile information for John in one or more ways, such as by eliminating a feature from single-tiered utility matrix 400 (e.g., if John does not (or no longer) enjoys movies associated with Spielberg), by introducing (or modifying) a weighted factor to increase or decrease the importance of a particular feature, etc.
For instance, if John indicates that he is no long interested in movies starring Al Pacino and that his interest in Spielberg is waning, content recommendations server 230 may eliminate the feature corresponding to Pacino (represented in
Feature category matrix 600A may have a numeric value associated with each feature category to indicate a level of significance that the feature category has been assigned. The numeric value may be assigned by the user manually and/or deduced by content recommendations server 230 based on, for example, historical viewing data of the user. In the example of
In some implementations, this may indicate that the language of a movie is more (e.g., three times more) significant to James than the director of the movie. As such, content recommendations server 230 may determine content recommendations based on the relative values of the feature categories of Language and Director (i.e., content recommendations server 230 may place greater weight on the language of a movie than the director of the movie when recommending movies to James). Additionally, content recommendations server 230 may communicate to James that the recommendations provided by content recommendations server 230 where provided because of the relative significance of the feature categories of Language and Director.
Additionally, content recommendations server 230 may receive feedback from James indicating that adjustments should be made regarding the relative significance of the language of a movie and the director of the movie. For instance, as shown in
Feature matrix 700A may have a numeric value associated with each feature to indicate a number of times the user has viewed or listened to (and/or “liked”) content associated with the corresponding feature. For instance, feature matrix 700A may indicate that James has viewed content in English on 2 different occasions, has viewed content in Spanish on 3 different occasions, and so on. In some implementations, content recommendations server 230 may use feature matrix 700A to determine content recommendations for James or Angela. For instance, content recommendations server 230 may analyze the information corresponding to James and determine that James enjoys movies that are in Spanish a bit more than movies that are in English. As such, content recommendations server 230 may match the user profile information of James to available content in order to identify one or more content recommendations for James.
Additionally, content recommendations server 230 may indicate that the content recommendations for James are primarily based on the number of times that James has watched content that is in English versus Spanish. Content recommendations server 230 may also provide James with an opportunity to provide feedback regarding the content recommendations and the reasons for the content recommendations. In response to receiving the feedback, content recommendations server 230 may update the user profile information for James in one or more ways, such as by eliminating a feature from feature matrix 700B, introducing (or modifying) a weighted factor to increase or decrease the importance of a particular feature, etc.
For instance, if James indicates that his interest in English films is more significant than what was represented, content recommendations server 230 may modify the significance of English movies based on a factor that is, for example, indicated by James. In the example of
As shown, each input node may be logically connected to multiple hidden nodes, such that each hidden node is connected to a number of input nodes. Each connection between an input node and a hidden node may be assigned a weight that modifies the input node with respect to a particular hidden node. That is, each weight may represent an impact that the particular input node has on a particular hidden node. As such, while one hidden node may be connected to a number of input nodes that are the same (or similar) to the input nodes connected to another hidden node, the weighted inputs for each hidden node may be different. In a similar manner, the output of the hidden nodes may be input to the output nodes. For instance, the output of each hidden node may be provided to multiple output nodes, and each input to the output nodes may be modified by a weight.
In some implementations, content recommendations server 230 may generate user profile information based on the weights of a trained version of neural network 800. The training may be based on, for example, a user's rankings of a number of movies. For example, the weights associated with the hidden layer of neural network 800 may represent the complex set of features that are learned during the training of the neural network. For example, the weights of the hidden layer may be analyzed, and the hidden layer nodes that are most influential on the output layer nodes can be interpreted as corresponding to a complex auto-learned feature that is relevant to the user. In this manner, an explicit user profile may be generated from the hidden nodes of neural network 800 and based only on high-level user rankings of movies.
As an example of explicit generation of a user profile based on analysis of the weights of the hidden layer of neural network 800, if a hidden node that has significant weight associated with an output node has a maximum weighted input from the Action genre and the Comedy genre, the profile information for the user may be updated to indicate that the user likely enjoys movies that correspond to movies associated with the genre of Action/Comedies. Similarly, if a hidden node that has significant weight associated with an output node has a maximum weighted input from an input node corresponding to the actor John Travolta and another input node corresponding to movies form the 1980s, the profile information for the user may be updated to indicate that the user likely enjoys movies that correspond to movies starring John Travolta from the 1980s. As such, the hidden layer may indicate complex auto-learned features and synthetic names (e.g., combinations of weighted features) that can be constructed based on the input layers that have maximal effect on the hidden layer. For purposes of establishing a maximum weighted input, content recommendations server 230 may use a normalized threshold or n-highest ranking weight.
Content recommendations server 230 may use the profile derived from neural network 800 to identify additional content recommendations. In addition to providing content recommendation to the user, content recommendations server 230 may also provide to the user with the reasons for the content recommendations (i.e., content recommendations server 230 may provide the user with all or a portion of the explicitly generated user profile). The reasons for the content recommendations may be based on the newly updated profile information. The user may provide feedback to content recommendations server 230 regarding the recommended content and/or the reasons (e.g., the user profile) for which the content was recommended. As a result, content recommendations server 230 may update the profile information for the user, which may in turn result in content recommendations server 230 updating the hidden nodes of neural network 800 and the content recommendations generated using neural network 800.
As mentioned above, content recommendations server 230 may use the update profile information (e.g., the auto-learned features, synthetic names, etc.) to provide the user with content recommendations and the reasons for which the content is being recommended. Content recommendations server 230 may also enable the user profile feedback regarding the content recommendations and reasons for the content recommendations. Content recommendations server 230 may use the feedback to determine whether the content recommendations were accurate and to update profile information for the user, in order to provide better content recommendations to the user. For instance, if the user indicates that he or she is no longer interested in Science Fiction movies from the 1980s, content recommendations server 230 may make appropriate updates to one or more hidden nodes to reflect the updated profile information and produce superior content recommendations. As such, recommendations server 230 may dynamically modify and customize neural network 800 based on feedback from the user in order to enhance the quality of content recommendations provided to the user.
As shown, model generator 900 may include states that represent observed behaviors, hidden preferences, and recommendations and the probability of transitions between the hidden preference states, as well as the probabilities of liking a particular set of recommendations given a set of hidden preferences. Observed behaviors may include behaviors of the user, such as the user watching movies with a particular theme, genre, actor, director, the user liking or disliking a movie, etc. Hidden preferences may include preferences of the user (e.g., preferred themes, genres, actors, etc.) that are discovered, by content recommendations server 230, based on the observed behaviors of the user. The hidden preferences (e.g., hidden preferences 1) may be used to provide content recommendations to the user, which in turn may result in more observed behaviors on the part of the user (e.g., whether the user watches the recommended content or not). The newly observed behaviors, along with the previously determined preferences (e.g., hidden preferences 1), may be used to determine subsequent preferences of the user (e.g., hidden preferences 2), which may lead to additional recommendations, observed behaviors, and hidden preferences (e.g., hidden preferences 3).
Based on observed behaviors of the user, content recommendations server 230 may determine the current hidden preferences (e.g., hidden preferences 1) using an Expectation Maximization algorithm, such as the Baum-Welch algorithm. Additionally, content recommendation server 230 may determine the most likely sequence of hidden preferences (e.g., hidden preferences 2, hidden preferences 3, etc.) using the Viterbi algorithm. As stated above, determining the current preferences of the user, and predicting the future preferences of the user, may be used to generate a user profile and in turn determine effective content recommendations for the user.
Content recommendations server 230 may also provide user device 210 with the reasons for which content has been recommended. In some implementations, this may include the hidden preferences of the user as determined by content recommendations server 230. Content recommendations server 230 may enable the user to provide feedback regarding the content recommendations and the reasons for the content recommendations. In some implementations, the feedback from the user may be used to update a user profile (e.g., the current hidden preferences) of the user.
For instance, content recommendations server 230 may recommend that the user watch the movie Terminator 2 and indicate to the user that Terminator 2 is being recommended because the user appears to enjoy Action movies from the 1990s starring Arnold Schwarzenegger. In response, the user may provide feedback to content recommendations server 230 regarding the prospect of watching Terminator 2 and/or whether the user does in fact enjoy Action movies from the 1990s starring Arnold Schwarzenegger. If the user indicates that he or she is no longer interested in Action movies from the 1990s, content recommendations server 230 may use the feedback to modify the probabilities, eliminate, or create one or more hidden preferences of model generator 900. In some implementations, content recommendations server 230 may provide the user with new content recommendations in response to changing or updating model generator 900.
Content recommendations server 230 may provide user device 210 with the information in user interface 1000, which may be accompanied by one or more content recommendations from content recommendations server 230. Additionally, as described below, the user may provide feedback to content recommendations server 230 by modifying the information in user interface 1000.
User interface 1000 may indicate that the user prefers (as indicated by a heart symbol) content that includes the actor Arnold Schwarzenegger and the genre of Action/Adventure. If or when the user decides that he or she is no longer interested in content that includes the actor Arnold Schwarzenegger and the genre of Action/Adventure, the user could modify the corresponding entry by changing the heart symbol to a crossed-out circle symbol or by selecting the delete button. Deleting the entire entry may indicate that the user simply has no preference for content that includes the actor Arnold Schwarzenegger and the genre of Action/Adventure, whereas changing the heart symbol to a crossed-out circle may indicate an aversion to content that includes the actor Arnold Schwarzenegger and the genre of Action/Adventure.
User interface 1000 also may indicate that the user dislikes content that includes the actor John Travolta (as indicated by the crossed-out circle). As an example, upon viewing user interface 1000, the user may decide that he or she only dislikes content that includes the actor John Travolta during the 1970s. As such, the user could clarify this preference by selecting the corresponding Add button and specifying the content feature of 1970s (which may appear across from the entry for John Travolta and below the entry for Action/Adventure). Doing so may indicate to content recommendations server 230 that content that includes John Travolta is acceptable so long as the content was not made during the 1970s.
User interface 1000 also may indicate that the user enjoys content associated with the genre of Comedy and the 2000s (as indicated by the corresponding heart) so long as the content does not include the actor Robert De Niro (as indicated by the corresponding crossed-out circle). As an example, upon reviewing user interface 1000, the user may decide that he or she also doesn't like content associated with Comedy and the 2000s that are also associated with the actor Owen Wilson. As such, the user may modify user interface 1000 may selecting the Add button corresponding to the entry for Robert De Niro and create another entry for Owen Wilson. In response, user interface 1000 may create a new row of entries below the entry for Robert De Niro in order to maintain an accurate visual representation of the user's aversion to Comedies in the 2000s that include Robert De Niro or Owen Wilson.
User interface 1000 also indicates that the user has a preference for content associated with the genre of Drama, recently available content (e.g., Latest) associated with Science Fiction, and content associated with the actor Matt Damon and the genre of Action. Accordingly, user interface 1000 provides one example of providing a user with the reasons for which content has been recommended to the user and a medium for providing feedback to content recommendations server 230 regarding those reasons.
As such, techniques described herein may be used to create an implicit user profile based on, for example, previous viewing data and recommendation models (e.g., a single-tiered matrix, a multi-tiered matrix, a neural network, or an HMM). The implicit user profile may be converted into an explicit user profile as feedback, regarding content recommendations and the reasons for the content recommendations, is received from the user and applied to the implicit user profile in order to more accurately describe the preferences of the user. The explicit user profile may then be applied to the recommendation models in order to provide the user with more effective content recommendations.
In some implementations, one or more of the techniques described herein may be applied to search operations as well. In such a scenario, a search initiated by the user may effectively be a request for content recommendations based on parameters (e.g., search terms) provided by the user and the content recommendations (and reasons for the content recommendations) may be provided in a manner that is similar to the approaches described above. Additionally, in response to the content recommendations and the reasons for the content recommendations, the user may provide feedback that may be applied to a profile of the user in the manner described above.
In some implementations, content recommendations server 230 may be capable of modeling abstract preferences such as the user's appetite for serendipity, variety, predictability, and the user's change in preferences over time. In some implementations, the abstract parameters may be extrapolated from more concrete preferences. For example, based on the viewing history of the user, content recommendations server 230 may determine that the user enjoys watching different genres (as opposed to primarily enjoying only a few genres). In such a scenario, content recommendations server 230 may determine that the user has a preference for variety and may factor the user's preference for variety into making content recommendations. As such, a user profile may include preferences that are more concrete (e.g., director, cast, etc.) and preferences that are more abstract (e.g., the moving “raising philosophical issues,” being “light hearted,” etc.).
Bus 1110 may include one or more communication paths that permit communication among the components of device 1100. Processor 1120 may include a processor, microprocessor, or processing logic that may interpret and execute instructions. Memory 1130 may include any type of dynamic storage device that may store information and instructions for execution by processor 1120, and/or any type of non-volatile storage device that may store information for use by processor 1120.
Input component 1140 may include a mechanism that permits an operator to input information to device 1100, such as a keyboard, a keypad, a button, a switch, etc. Output component 1150 may include a mechanism that outputs information to the operator, such as a display, a speaker, one or more light emitting diodes (LEDs), etc.
Communication interface 1160 may include any transceiver-like mechanism that enables device 1100 to communicate with other devices and/or systems. For example, communication interface 1160 may include an Ethernet interface, an optical interface, a coaxial interface, or the like. Communication interface 1160 may include a wireless communication device, such as an infrared (IR) receiver, a cellular radio, a Bluetooth radio, or the like. The wireless communication device may be coupled to an external device, such as a remote control, a wireless keyboard, a mobile telephone, etc. In some embodiments, device 1100 may include more than one communication interface 1160. For instance, device 1100 may include an optical interface and an Ethernet interface.
Device 1100 may perform certain operations described above. Device 1100 may perform these operations in response to processor 1120 executing software instructions stored in a computer-readable medium, such as memory 1130. A computer-readable medium may be defined as a non-transitory memory device. A memory device may include space within a single physical memory device or spread across multiple physical memory devices. The software instructions may be read into memory 1130 from another computer-readable medium or from another device. The software instructions stored in memory 1130 may cause processor 1120 to perform processes described herein. Alternatively, hardwired circuitry may be used in place of or in combination with software instructions to implement processes described herein. Thus, implementations described herein are not limited to any specific combination of hardware circuitry and software.
In the preceding specification, various preferred embodiments have been described with reference to the accompanying drawings. It will, however, be evident that various modifications and changes may be made thereto, and additional embodiments may be implemented, without departing from the broader scope of the invention as set forth in the claims that follow. The specification and drawings are accordingly to be regarded in an illustrative rather than restrictive sense.
For example, while a series of blocks have been described with regard to
It will be apparent that example aspects, as described above, may be implemented in many different forms of software, firmware, and hardware in the implementations illustrated in the figures. The actual software code or specialized control hardware used to implement these aspects should not be construed as limiting. Thus, the operation and behavior of the aspects were described without reference to the specific software code-it being understood that software and control hardware could be designed to implement the aspects based on the description herein.
Further, certain portions of the invention may be implemented as “logic” that performs one or more functions. This logic may include hardware, such as an application-specific integrated circuit (ASIC) or a field-programmable gate array (FPGA), or a combination of hardware and software.
To the extent the aforementioned embodiments collect, store or employ personal information provided by individuals, it should be understood that such information shall be used in accordance with all applicable laws concerning protection of personal information. Additionally, the collection, storage and use of such information may be subject to consent of the individual to such activity, for example, through well known “opt-in” or “opt-out” processes as may be appropriate for the situation and type of information. Storage and use of personal information may be in an appropriately secure manner reflective of the type of information, for example, through various encryption and anonymization techniques for particularly sensitive information.
Even though particular combinations of features are recited in the claims and/or disclosed in the specification, these combinations are not intended to limit the invention. In fact, many of these features may be combined in ways not specifically recited in the claims and/or disclosed in the specification.
No element, act, or instruction used in the present application should be construed as critical or essential unless explicitly described as such. An instance of the use of the term “and,” as used herein, does not necessarily preclude the interpretation that the phrase “and/or” was intended in that instance. Similarly, an instance of the use of the term “or,” as used herein, does not necessarily preclude the interpretation that the phrase “and/or” was intended in that instance. Also, as used herein, the article “a” is intended to include one or more items, and may be used interchangeably with the phrase “one or more.” Where only one item is intended, the terms “one,” “single,” “only,” or similar language is used. Further, the phrase “based on” is intended to mean “based, at least in part, on” unless explicitly stated otherwise.