U.S. patent application number 14/981714 was filed with the patent office on 2016-06-30 for generating recommendations based on clustered application states.
The applicant listed for this patent is Quixey, Inc.. Invention is credited to Eric GLOVER, Leigh L. KLOTZ, JR., Dinesh MISHRA.
Application Number | 20160188733 14/981714 |
Document ID | / |
Family ID | 56164442 |
Filed Date | 2016-06-30 |
United States Patent
Application |
20160188733 |
Kind Code |
A1 |
GLOVER; Eric ; et
al. |
June 30, 2016 |
Generating Recommendations Based on Clustered Application
States
Abstract
A deep linking system includes a storage system and a
recommendation engine. The storage system stores a plurality of
application records. The storage system further stores a plurality
of cluster records, each cluster record defining a respective
cluster of a plurality of clusters, each cluster including a
respective plurality of clustered state identifiers, whereby the
state identifiers are clustered according to one or more features.
The recommendation engine includes one or more processors
configured to receive a recommendation request and to identify
cluster records from the plurality of cluster records based on the
recommendation request. The identified cluster records indicate one
or more clusters to which the state identifier of the
recommendation request is related. The one or more processors are
further configured to select one or more state identifiers from the
identified cluster records, generate recommendation results based
on the selected state identifiers, and transmit the recommendation
results to the remote device.
Inventors: |
GLOVER; Eric; (Palo Alto,
CA) ; KLOTZ, JR.; Leigh L.; (Palo Alto, CA) ;
MISHRA; Dinesh; (San Jose, CA) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
Quixey, Inc. |
Mountain View |
CA |
US |
|
|
Family ID: |
56164442 |
Appl. No.: |
14/981714 |
Filed: |
December 28, 2015 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
62097508 |
Dec 29, 2014 |
|
|
|
Current U.S.
Class: |
707/724 ;
707/738 |
Current CPC
Class: |
G06F 16/24578 20190101;
G06F 16/9537 20190101; G06F 16/285 20190101; G06F 16/955 20190101;
G06Q 30/0275 20130101; G06F 16/951 20190101; G06F 16/9535 20190101;
G06Q 30/0261 20130101; G06F 16/248 20190101; G06F 40/134 20200101;
G06Q 30/0257 20130101 |
International
Class: |
G06F 17/30 20060101
G06F017/30 |
Claims
1. A deep linking system comprising: a storage system that stores:
a plurality of application records, each application record
including i) a state identifier that indicates a state of a
respective software application, and ii) application state
information corresponding to the state of the software application;
and a plurality of cluster records, each cluster record defining a
respective cluster of a plurality of clusters identified by the
deep linking system, each cluster including a respective plurality
of clustered state identifiers, each clustered state identifier
identifying a state of a respective software application, wherein
the plurality of clusters are clustered according to one or more
features; and a recommendation engine including a processing
system, the processing system including one or more processors that
execute computer-readable instructions, the computer-readable
instructions, when executed by the processing system, causing the
processing system to: receive a recommendation request containing a
received state identifier from a remote device; identify one or
more cluster records from the plurality of cluster records using
the received state identifier of the recommendation request, the
one or more identified cluster records respectively indicating one
or more clusters to which the state of the software application
defined in the recommendation request is related; select one or
more state identifiers from the identified cluster records, the
selected state identifiers respectively corresponding to one or
more application states to recommend in response to the
recommendation request; generate recommendation results based on
the states indicated by the one or more selected state identifiers,
the recommendation results including one or more result objects,
each result object capable of being rendered into a user-selectable
link; and transmit the recommendation results to the remote
device.
2. The deep linking system of claim 1, wherein a state identifier
comprises at least one of a function identifier, a resource
identifier, and/or an application access mechanism.
3. The deep linking system of claim 2, wherein the plurality of
clusters records are determined based on usage data collected from
a plurality of user devices, the usage data indicating states of
software applications accessed by users of the user devices.
4. The deep linking system of claim 3, wherein at least a subset of
the plurality of clusters are clustered according to a popularity
feature, a geography feature, and one or more entity features.
5. The deep linking system of claim 3, wherein at least a subset of
the plurality of clusters are clustered according to a popularity
feature and a function feature.
6. The deep linking system of claim 3, wherein each cluster record
indicates a set of feature types on which the cluster represented
by the cluster record was clustered.
7. The deep linking system of claim 6, further comprising: an
analytics engine comprising: a second processing system that
executes computer-readable instructions, the computer-readable
instructions, when executed by the second processing system, causes
the second processing system to: receive an instruction to generate
clusters of application records, the instruction including a set of
feature types; cluster the application records into two or more
different clusters based on the application state information and
the set of feature types; for each of the two or more different
clusters, generate a new cluster record based on the cluster, the
new cluster record including the state identifiers of the
application records in the cluster; and store the two or more new
cluster records in the plurality of clusters.
8. The deep linking system of claim 3, wherein the usage data
received from each of the user devices includes a search activity
log, the search activity log indicating actions performed by a user
in response to being presented with search results.
9. The deep linking system of claim 1, wherein the recommendation
request further includes one or more context parameters and/or one
or more request parameters, wherein each context parameter
respectively indicates contextual information corresponding to the
recommendation request and each request parameter respectively
indicates condition for the recommendation results.
10. The deep linking system of claim 9, wherein selecting one or
more state identifiers comprises selecting the one or more state
identifiers that appear in the greatest number of identified
cluster records.
11. The deep linking system of claim 9, wherein selecting one or
more state identifiers comprises: generating a feature vector based
on the application state record corresponding to the received state
identifier; for each state identifier in the one or more identified
clusters: generate a feature vector based on the corresponding
application state record of each state identifier; calculate a
distance value between the feature vector corresponding to each
state identifier and the feature vector corresponding to the
received state identifier; selecting one or more state identifiers
from the identified clusters to include in the recommendation
results based on their calculated distance value.
12. The deep linking system of claim 9, wherein selecting state
identifiers comprises selecting one or more state identifiers from
the state identifiers indicated by the identified cluster records
that comply with the one or more request parameters indicated by
the recommendation request.
13. A method comprising: maintaining, by a processing system
including one or more processors, a plurality of application
records on a storage device, each application record including i) a
state identifier that indicates a state of a respective software
application, and ii) application state information corresponding to
the state of the application; maintaining, by the processing
system, a plurality of cluster records on a storage device, each
cluster record defining a respective cluster of a plurality of
clusters, each cluster including a respective plurality of
clustered state identifiers, each clustered state identifier
identifying a state of a respective software application, wherein
the plurality of clusters are clustered according to one or more
features; receiving, by the processing system, a recommendation
request containing a function identifier from a remote device;
identifying, by the processing system, one or more cluster records
from the plurality of cluster records using the state identifier of
the recommendation request, wherein the identified one or more
cluster records respectively indicate one or more clusters to which
the state of the software application defined by the recommendation
request belongs; selecting, by the processing system, one or more
state identifiers from the identified cluster records, the selected
state identifiers respectively corresponding to one or more
application states to recommend to the user; generating, by the
processing system, recommendation results based on the states
indicated by the one or more selected state identifiers, the
recommendation results including one or more result objects, each
result object capable of being rendered into a user-selectable
link; and transmitting, by the processing system, the
recommendation results to the remote device.
14. The method of claim 13, wherein a state identifier comprises at
least one of a function identifier, a resource identifier, and/or
an application access mechanism.
15. The method of claim 14, wherein the plurality of clusters are
determined based on usage data collected from a plurality of user
devices, the usage data indicating states of software applications
accessed by users of the user devices.
16. The method of claim 14, wherein at least a subset of the
plurality of clusters are clustered according to a popularity
feature, a geography feature, and one or more entity features.
17. The method of claim 14, wherein at least a subset of the
plurality of clusters are clustered according to a popularity
feature and a function feature.
18. The method of claim 14, wherein each cluster record indicates a
seat of feature types on which the cluster represented by the
cluster record was clustered.
19. The method of claim 18, further comprising: receiving, by a
second processing system including one or more processors, an
instruction to generate clusters, the instruction including a set
of feature types; clustering, by the second processing system, the
application records into two or more different clusters based on
the application state information and the set of feature types;
generating, by the second processing system, for each of the two or
more different clusters, a new cluster record based on the cluster,
the new cluster record including the state identifiers of the
application records in the cluster; and storing, by the second
processing system, the two or more new cluster records with the
plurality of clusters.
20. The method of claim 14, wherein the usage data received from
each of the user devices includes a search activity log, the search
activity log indicating actions performed by a user in response to
being presented with search results.
21. The method of claim 13, wherein the recommendation request
further contains one or more context parameters and/or one or more
request parameters, wherein each context parameter respectively
indicates contextual information corresponding to the
recommendation request and each request parameter respectively
indicates conditions that the recommendation results should
satisfy.
22. The method of claim 21, wherein selecting state identifiers
comprises selecting the one or more states that appear in the
greatest number of clusters indicated by the one or more cluster
records.
23. The method of claim 21, wherein selecting state identifiers
comprises: generating a feature vector based on the application
state record corresponding to the received state identifier; for
each state identifier in the one or more identified clusters:
generate a feature vector based on the corresponding application
state record of each state identifier; calculate a distance value
between the feature vector corresponding to each state identifier
and the feature vector corresponding to received state identifier;
selecting one or more state identifiers from the identified
clusters to include in the recommendation results based on their
calculated distance value.
24. The method of claim 21, wherein selecting state identifiers
comprises selecting one or more state identifiers from the state
identifiers indicated by the identified cluster records that comply
with the one or more request parameters indicated by the
recommendation request.
Description
CROSS-REFERENCE TO RELATED APPLICATIONS
[0001] This application claims the benefit of U.S. Provisional
Application No. 62/097,508, filed on Dec. 29, 2014. The entire
disclosure of the application referenced above is incorporated
herein by reference.
TECHNICAL FIELD
[0002] This disclosure relates to clustering states of software
applications and using the clusters to generate recommendations to
application states.
BACKGROUND
[0003] Many software applications offer multiple functions to
users. Further, most users do not use all the functions of the
software application. For example, a restaurant related software
application may offer functions for finding restaurants by cuisine,
viewing photographs of dishes, search menus of restaurants, and
read reviews of specific restaurants. Most users of this software
application, however, may only use the software application to view
photographs of dishes. Another software application may offer
similar functions; however, users of the other application may
overwhelmingly prefer the search by cuisine and read review
functions of this application.
SUMMARY
[0004] The details of one or more implementations of the disclosure
are set forth in the accompanying drawings and the description
below. Other aspects, features, and advantages will be apparent
from the description and drawings, and from the claims.
[0005] In one example, the present disclosure is directed to a deep
linking system comprising a storage system and a recommendation
engine. The storage system includes one or more storage devices
storing a plurality of application records, each application record
including i) a state identifier that indicates a state of a
respective software application, and ii) application state
information corresponding to the state of the software application.
The one or more storage devices further store a plurality of
cluster records, each cluster record defining a respective cluster
of a plurality of clusters identified by the deep linking system,
each cluster including a respective plurality of clustered state
identifiers, each clustered state identifier identifying a state of
a respective software application, wherein the plurality of
clusters are clustered according to one or more features. The
recommendation engine includes a processing system, the processing
system comprising one or more processors that execute
computer-readable instructions. The one or more processors may be
configured to receive a recommendation request containing a
received state identifier from a remote device. The one or more
processors may further be configured to identify one or more
cluster records from the plurality of cluster records using the
received state identifier of the recommendation request. The one or
more identified cluster records respectively indicate one or more
clusters to which the state of the software application defined in
the recommendation request is related. The one or more processors
may further be configured to select one or more state identifiers
from the identified cluster records, the selected state identifiers
respectively corresponding to one or more application states to
recommend in response to the recommendation request. The one or
more processors may further be configured to generate
recommendation results and transmit the recommendation results to
the remote device.
[0006] In another example, the present disclosure is directed to a
method comprising maintaining, by a processing system including one
or more processors, a plurality of application records on a storage
device, each application record including i) a state identifier
that indicates a state of a respective software application, and
ii) application state information corresponding to the state of the
application. The method further comprises maintaining a plurality
of cluster records on a storage device, each cluster record
defining a respective cluster of a plurality of clusters, each
cluster including a respective plurality of clustered state
identifiers, each clustered state identifier identifying a state of
a respective software application, wherein the plurality of
clusters are clustered according to one or more features. The
method further comprises receiving a recommendation request
containing a function identifier from a remote device. The method
further comprises identifying one or more cluster records from the
plurality of cluster records using the state identifier of the
recommendation request, wherein the identified one or more cluster
records respectively indicate one or more clusters to which the
state of the software application defined by the recommendation
request belongs. The method further comprises selecting one or more
state identifiers from the one or more cluster records, the
selected state identifiers respectively corresponding to one or
more application states to recommend to the user. The method
further comprises generating recommendation results based on the
states indicated by the one or more selected state identifiers, the
recommendation results including one or more result objects, each
result object capable of being rendered into a user-selectable
link. The method further comprises transmitting the recommendation
results to the remote device.
DESCRIPTION OF DRAWINGS
[0007] FIG. 1A is a schematic view of an example environment of a
deep-linking system.
[0008] FIG. 1B is a schematic views of a user device displaying
example recommended links.
[0009] FIG. 2 is a schematic view of example components of a user
device
[0010] FIG. 3A is a schematic view of example components of an
analytics engine.
[0011] FIG. 3B is a schematic view of an example application state
record.
[0012] FIG. 3C is a schematic view of an example cluster
record.
[0013] FIG. 3D is a schematic view of an example entity
ontology.
[0014] FIG. 3E is a schematic view of an example functional
ontology.
[0015] FIG. 4 is a schematic view of example components of a
recommendation engine.
[0016] FIG. 5 is a flow chart illustrating an example set of
operations of a method for processing a recommendation request.
[0017] Like reference symbols in the various drawings indicate like
elements.
DETAILED DESCRIPTION
[0018] The figures and following description relate to example
implementations by way of illustration only. It should be noted
that from the following discussion, alternative implementations of
the structures and methods disclosed herein will be readily
recognized as viable alternatives that may be employed without
departing from the scope of the disclosure. This disclosure
describes techniques for generating recommendations to application
states using functional clusters.
[0019] The present disclosure relates to recommending states of
software applications. A deep-linking system of the present of the
present disclosure can include an analytics engine and a
recommendation engine. The analytics engine of the present
disclosure can be configured to collect data from consenting user
devices. The analytics engine can further generate and store
information regarding applications and their application states in
application records, whereby each application record corresponds to
a particular application state. The analytics engine can further
identify and group application records into clusters based on the
function the corresponding application state performs and the
various features associated with that particular application state
(e.g., geographic location, time of day, popularity).
[0020] The recommendation engine can receive a recommendation
request (e.g., from a search system and/or user device), identify
one or more application states that satisfy the recommendation
request, and generate a set of recommendation results. The
recommendation engine can transmit the recommendation results to a
requesting user device, server device, or any other suitable
recipient. The recommendation engine can leverage the clusters of
application states generated by the analytics engine to provide
recommendations. The recommendation engine can communicate with the
analytics engine to identify clusters of application states that
are clustered according to features indicated by the recommendation
request. In some implementations, the recommendation engine can
select application states from clusters clustered according to
features not explicitly indicated by the recommendation request,
such as the time of day a recommendation request was sent. In this
way, the recommendation engine can accurately select application
states that optimally satisfy the recommendation request. In other
words, the recommendation engine can leverage the analytics engine
to narrow the universe of application states from which to make
recommendations to a cluster of application states that have
already been determined to be relevant, by the analytics engine, to
a particular set of features.
[0021] FIG. 1A illustrates an example environment 10 of a
deep-linking system 100. A deep-linking system 100 is a collection
of computing devices that generates user-selectable links that link
to states of software applications and provides the user-selectable
links to one or more user devices 200. A user selectable link (or
link) is an object that is displayed by a user device 200 that
includes one or more underlying access mechanisms (described in
greater detail below). When a user selects a user selectable link,
the user device 200 can access a state of a software application
using an access mechanism included in the selected link. While the
user device 200 in FIG. 1A is depicted as a smartphone, a user
device 200 can be any suitable user computing device including, but
not limited to, a tablet computing device, a personal computing
device, a laptop computing device, a gaming device, a vehicle
infotainment device, and/or a smart appliance (e.g., smart
refrigerator or smart television).
[0022] The deep-linking system 100 can include a recommendation
engine 400. In the illustrated example, the deep-linking system 100
further includes an analytics engine 300. The analytics engine 300
collects usage data 102 from a plurality of user devices 200. Usage
data 102 can include any data that indicates the states of software
applications that a user device 200 is accessing.
[0023] A software application can refer to a software product that
causes a computing device to perform a function. In some examples,
a software application may also be referred to as an "application,"
"an app," or a "program." Example software applications include,
but are not limited to, productivity applications, social media
applications, messaging applications, media streaming applications,
social networking applications, and games. Software applications
can perform a variety of different functions for a user. For
example, a restaurant reservation application can make reservations
for restaurants. As another example, an internet media player
application can stream media (e.g., a song or movie) via the
Internet. In some examples, a single software application can
provide more than one function. For example, a restaurant
reservation application may also allow a user to retrieve
information about a restaurant and read user reviews for the
restaurant in addition to making reservations. As another example,
an internet media player application may also allow a user to
perform searches for digital media, purchase digital media,
generate media playlists, and share media playlists. The functions
of an application can be accessed using native application editions
of the software application and/or web application editions of the
software application.
[0024] A native application edition (or "native application") is,
at least in part, installed on a user device 200. In some
scenarios, a native application is installed on a user device 200,
but accesses an external resource (e.g., an application server) to
obtain data and/or instruction from the external resource. For
example, social media applications, weather applications, news
applications, and search applications may respectively be accessed
by one or more native application editions that execute on various
user devices 200. In such examples, a native application can
provide data to and/or receive data from the external resource
while accessing one or more functions of the software application.
In other scenarios, a native application is installed on the user
device 200 and does not access any external resources. For example,
some gaming applications, calendar applications, media player
applications, and document viewing applications may not require a
connection to a network to perform a particular function. In these
examples, the functionality of the software application is encoded
in the native application editions itself. The native application
edition is able to access the functions of the software application
without communicating with any other external devices.
[0025] Web application editions (also referred to as "web
applications") of a software application may be partially executed
by a user device 200 (e.g., by a web browser executed by the user
device 200) and partially executed by a remote computing device
(e.g., a web server or application server). For example, a web
application may be an application that is executed, at least in
part, by a web server and accessed by a web browser (e.g., a native
application) of the user device 200. Example web applications may
include, but are not limited to, web-based email, online auctions
websites, social-networking websites, travel booking websites, and
online retail websites. A web application accesses functions of a
software product via a network. Examples implementations of web
applications include websites and/or HTML-5 application
editions.
[0026] In some scenarios, a software application may be accessed by
one or more native application editions of the software application
and/or one or more web application editions of the software
application. In these scenarios, there may be overlap between the
states or functions that the native application edition(s) can
access and the states or functions that the web application edition
can access. For example, a restaurant review application may have
reviews of thousands of restaurants and may also provide an on-line
ordering function from some of the restaurants. The restaurant
review application may be accessed by a first native application
edition configured for a first operating system (e.g., the ANDROID
operating system maintained by Google, Inc.), a second native
application edition configured for a second operating system (e.g.,
the IOS operating system developed by Apple, Inc.), and a web
application edition (e.g., via a web browser) of the restaurant
review application. The restaurant review application may allow all
the editions (native and web) to access the various reviews of
restaurants but may only allow on-line orders to be placed using
the native application editions. In this way, some states or
functions of the restaurant review application cannot be accessed
by the web application edition but there is overlap between the
states or functions that can be accessed by the native application
editions and the web application edition.
[0027] A state of a software application can refer to a
parameterized function of the software application. A software
application can perform one or more functions. A function is a
service of the software application that can be accessed by a user
device 200 via an edition of the software application. Non-limiting
examples of functions can include "making a restaurant reservation"
(which may parameterized with a restaurant identifier, a date, and
a time), "searching for a cuisine" (which may be parameterized with
a cuisine type and a location), "view flight prices" (which may be
parameterized with departure and arrival airport codes, arrival and
departure dates, and round trip flags), "request a driver" (which
may be parameterized with a pick-up location), and "view a file"
(which may be parameterized with a file identifier). A state of a
software application can be accessed from a user device using an
edition of the software application. An operating system of a user
device 200 can instruct an edition of a software application to
access a state of the software application using an access
mechanism (e.g., a resource identifier 106). In some
implementations, the state of a software application may be
represented by a function ID 104.
[0028] A user device 200 can access a state of a software
application via an edition of the software application using an
access mechanism. When rendering a user selectable link (e.g., in
the set of search results 460) a user device 200 displays the user
selectable link such that the link can be selected by a user of the
user device 200. A user selectable link may include one or more
underlying access mechanisms. A user selectable link, when selected
by a user, causes the user device 200 to access a state of the
software application using an edition of the software application
identified by the access mechanism.
[0029] Access mechanisms may include at least one of a native
application access mechanism (hereinafter "application access
mechanism"), a web access mechanism, and an application download
mechanism. The user device 200 may use the access mechanisms to
access functionality of applications. For example, the user may
select a user selectable link including an access mechanism in
order to access functionality of an application indicated in the
user selectable link. As described herein, the deep-linking system
100 may transmit one or more application access mechanisms, one or
more web access mechanisms, and one or more application download
mechanisms to the user device 200 in the recommendation results
460.
[0030] An application access mechanism may be a string that
includes a reference to a native application e.g., one of native
applications 212 installed on the user device 200) and indicates
one or more operations for the user device 200 to perform. If a
user selects a user selectable link including an application access
mechanism, the user device 200 may launch the native application
referenced in the application access mechanism and perform the one
or more operations indicated in the application access
mechanism.
[0031] A web access mechanism may include a resource identifier
that includes a reference to a web resource (e.g., a page of a web
application/website). For example, a web access mechanism may
include a uniform resource locator (URL) (i.e., a web address) used
with hypertext transfer protocol (HTTP). If a user selects a user
selectable link including a web access mechanism, the user device
200 may launch the web browser application 216 and retrieve the web
resource indicated in the resource identifier. Put another way, if
a user selects a user selectable link including a web access
mechanism, the user device 200 may launch the web browser
application 216 and access a state (e.g., a page) of a web
application/website. In some examples, web access mechanisms may
include URLs for mobile-optimized sites and/or full sites.
[0032] An application download mechanism may indicate a site (e.g.,
a digital distribution platform where a native application can be
downloaded in the scenario where the native application is not
installed on the user device 200. If a user selects a user
selectable link including an application download address, the user
device 200 may access a digital distribution platform from which
the referenced native application may be downloaded. The user
device 200 may access a digital distribution platform using at
least one of the web browser application 216 and one of the native
applications 212.
[0033] As previously described, a function ID 104 is a string of
alphabetic, numeric, and/or symbolic characters (e.g., punctuation
marks) that uniquely identifies a state of an application. Put
another way, a function ID 104 is a unique reference to a state of
an application. In some implementations, a function ID 104 can be
in the format of a resource identifier. For example, the function
ID 104 may be a uniform recourse locator (URL) or an application
resource identifier. In these implementations, the function ID 104
may be used by a user device to access a software application via a
web application edition or one or more native application editions
of the software application, respectively.
[0034] In some implementations, a function ID 104 can map to one or
more access mechanisms. In these implementations, a function ID 104
may map to a web resource identifier (e.g., a URL), one or more
application resource identifiers, and/or one or more scripts. For
instance, a state of an example software application, "exampleapp,"
may be accessed via a web application edition and two native
application editions (e.g., an edition configured for the ANDROID
operating system and an edition configured for the WINDOWS PHONE
operating system). In this example, the web resource identifier may
be www.exampleapp.com/param1=abc¶m2=xyz, the first
application resource identifier may be
android.exampleapp::param1=abc¶m2=xyz, and the second
application resource identifier may be
windows.exampleapp::param1=abc¶m2=xyz. In this example, a
function ID 104 may map to the web resource identifier and the two
application resource identifiers.
[0035] In some implementations, a function ID 104 may have a
URL-like structure that utilizes a namespace other than http://,
such as "func://" which indicates that the string is a function ID
104. In the example of "exampleapp" above, the function ID 104
corresponding to the example state may be
func://exampleapp::param1=abc¶m2=xyz, which may map to the
access mechanisms described above. In this example, the function ID
104 can be said to be parameterized, whereby the value of "param1"
is set to "abc" and the value of "param2" is set equal to
"xyz."
[0036] In some implementations, a function ID 104 may take the form
of a parameterizable function. For instance, a function ID 104 may
be in the form of "app_id[action(param_1, param_2, . . . ,
parameter_n)]", where app_id is an identifier (e.g., name) of a
software application, action is an action that is performed by the
application (e.g., "view menu"), and parameter_1 . . . parameter_n
are n parameters that the software application receives in order to
access the state corresponding to the action and the parameters.
Drawing from the example above, a function ID 104 may be
"exampleapp[example action(abc, xyz)]". In this example, the
function ID 104 can be said to be parameterized, whereby the value
of "param1" is set to "abc" and the value of "param2" is set equal
to "xyz." Given this function ID 104 and the referencing schema of
the example application, the foregoing function ID 104 may be used
to generate or look up the access mechanisms defined above.
Furthermore, while function IDs 104 have been described with
respect to resource identifiers, a function ID 104 may be used to
generate or look up one or more scripts that access a state of a
software application. Further, a function ID 104 may take any other
suitable format. For example, the function ID 104 may be a
human-readable string that describes the state of the application
to which the function ID 104 corresponds.
[0037] As previously mentioned, the analytics engine 300 collects
usage data 102 from a plurality of user devices 200, whereby the
usage data 102 can indicate a resource identifier 106, a function
ID 104, and/or search activity log 108. In some implementations,
the analytics engine 300 identifies the states of software
applications accessed by users of user devices 200 that provided
the usage data 102. The usage data may be anonymized, thereby
minimizing risks to users' privacy. A user device 200 can be
configured to collect and transmit usage data 102 only when a user
explicitly agrees to share such usage data 102.
[0038] In some implementations, the analytics engine 300 generates
or updates application state records 332 (FIG. 3B) corresponding to
the received usage data 102. As will be discussed, an application
state record corresponds to a particular state of a software
application. In some implementations, the application state record
includes a function ID 104 corresponding to the state as well as a
set of features. The features can include ontological features
corresponding to the state and/or statistical features regarding
the state. For example, ontological features of the state may
include entity information as well as function information (e.g.,
view menu or make flight reservation).
[0039] Entity information corresponding to a state of a software
application can define one or more entities corresponding to the
state and the entity types of the respective entities. An entity
can refer to a value (e.g., a noun or number) that is known to the
deep-linking system 100 and able to be categorized by an ontology
of the deep-linking system 100. An entity type can refer to a
categorization of an entity. An entity can have more than one
entity type. For example, the entity "New York Yankees" may have
the entity types "professional sports team," "New York professional
sports team," and "Major League Baseball team" associated
therewith. Furthermore, entity types may be subtypes of other
entity types. For example, the entity type "New York professional
sports teams" may be a subtype of the entity type "professional
sports teams." As will be discussed in greater detail below, the
relationship between entities and entity types may be defined in
accordance with an entity ontology (FIG. 3D).
[0040] Functional information corresponding to a state of an
application can define a function performed by the software
application when in the given state. In some implementations, a
given state can perform more than one function (e.g., make
reservations for a restaurant and see reviews of the restaurant).
The functional information corresponding to a known collection of
software applications may be defined according to a functional
ontology, which is discussed below (FIG. 3E).
[0041] Statistical features can include any statistics regarding a
state of a software application. The statistics may be based, at
least in part, on the usage data 102 received by the analytics
engine 300. Examples of statistical features may include a value
indicating how many times the state of the software application is
accessed by user devices and a rate at which the state is accessed.
The record may further store geographical features. Geographical
features may indicate a location from which the state was accessed
and a language corresponding to the state.
[0042] The analytics engine 300 can identify clusters of
application state records 332 (or function IDs 104 thereof) based
on the various features. The process by which a cluster is
identified may be referred to as "clustering." In some
implementations, the analytics engine 300 clusters application
state records based on a specific set of features. For example, the
analytics engine 300 may cluster records based on entity types and
location. The resulting clusters 110 may, for example, result in a
first cluster that corresponds to popular states of software
applications relating to restaurants in Mountain View, Calif., a
second cluster that corresponds to popular states of software
applications relating to bars in New York City, and a third cluster
that corresponds to unpopular states of software applications
relating to bakeries in Des Moines, Iowa. In the foregoing example,
there are likely more clusters not explicitly discussed. The states
of the software applications may be represented by the function IDs
104.
[0043] Thus, the function IDs 104 in the first cluster may include
a function ID 104 identifying a state of a first software
application where users can read reviews of a particular restaurant
in Mountain View, a second function ID 104 identifying a state of a
second software application where users can view a photograph of a
particular dish served at a different restaurant in Mountain View,
and a third function ID 104 identifying a state of a third software
application where users can make a reservation at yet another
restaurant in Mountain View.
[0044] The analytics engine 300 may identify hundreds, thousands,
or millions of clusters, as the analytics engine 300 clusters the
application state records 332 with respect to certain set of
features. Furthermore, the analytics engine 300 may cluster the
application state records with respect to different sets of
features, thereby identifying clusters 110 that identify different
information. For example, clusters 110 that are identified based on
function, geographic location, and time of the day may indicate the
types of actions certain users perform on their user devices 200 at
certain times of the day. For instance, such clusters may reveal
that users in Los Angeles are more likely to view movie reviews on
a Friday night than users in San Diego. Implementations of the
analytics engine 300 are described in greater detail below.
[0045] The deep-linking system 100 may utilize the clusters 110 in
performing various tasks. In some implementations, a recommendation
engine 400 may utilize the clusters 110 to improve recommendations
to users. A recommendation engine 400 receives a recommendation
request 402 from a user device indicating a state of a software
application that the user device 200 is currently set to and
identifies other states to recommend to the user of the user device
200 based on the data contained in the request. In these
implementations, the recommendations may indicate other states of
software applications that are indicated in the same cluster 110 as
the state identified in the recommendation request 402. For
example, if a user is viewing a video about a famous reggae artist
using a first software application, the recommendation engine 400
may identify an article about the famous reggae artist that is
accessible via a second software application because the two states
(i.e., the state corresponding to the video and the state
corresponding to the article) are indicated in the same cluster
110. In this example, the application state records 332
corresponding to the states may be clustered according to entity
type and the type of action being performed. Implementations of the
recommendation engine 400 are described in greater detail
below.
[0046] The deep-linking system 100 can provide data and
instructions to a user device that causes the user device to render
and display user selectable links. In some implementations,
individual recommendation results 460 can be communicated in result
objects. A result object can contain data and instructions that,
when rendered by a user device 200, result in a recommendation
result that includes one or more user selectable links. A result
object can include a function ID 104 and/or one or more access
mechanisms that correspond to a state of a software application. In
the former scenario, a user device 200 utilizes the function ID 104
to determine the one or more access mechanisms (e.g., a URL, one or
more application resource identifiers, and/or a script). A user
selectable link, when selected (e.g., pressed on or clicked on) by
a user, instructs the user device 200 to access the resource
identified by the underlying access mechanism(s).
[0047] FIG. 1B illustrates an example of a user device 200
displaying a recommended link 408. A recommended link 408 may refer
to a user selectable link that is provided by a recommendation
engine 400. In the illustrated example, the user device 200 is
executing a native application. The native application may be
configured to request recommendations from the deep-linking system
100. The deep-linking system 100 provides result objects containing
recommendations, which the user device 200 renders and displays in
a GUI of the native application.
[0048] The user selectable links of FIG. 1B are provided for
example only and are not intended to limit the scope of the
disclosure. Any suitable types of user selectable links may be
implemented by the deep-linking system 100.
[0049] FIG. 2 illustrates an example user device 200 and example
components thereof In the illustrated example, the user device 200
includes a processing device 210, a storage device 220, a network
interface 230, and a user interface 240. The user device 200 may
include additional components not shown in FIG. 2. The components
of the user device 200 may be interconnected by, for example, a bus
or other communication circuitry.
[0050] The processing device 210 can include one or more processors
that execute computer-executable instructions and associated memory
(e.g., RAM and/or ROM) that stores the computer-executable
instructions. In implementations where the processing device 210
includes more than one processor, the processors can execute in a
distributed or individual manner. The processing device 210 can
execute an operating system 214, one or more native applications
212 (which may include a search application), a web browser 216,
and/or a behavior monitor 218, all of which can be implemented as
computer-readable instructions. One or more of the native
applications may include a native application module 215 that
communicates with the deep-linking s system 100.
[0051] The storage device 220 can include one or more
computer-readable mediums (e.g., hard disk drives, solid state
memory drives, and/or flash memory drives). The storage device 220
can store any suitable data that is utilized by the operating
system of the user device 200. The storage device 220 can be in
communication with the processing device 210, such that the
processing device 210 can retrieve any needed data therefrom.
[0052] The network interface 230 includes one or more devices that
are configured to communicate with the network 150. The network
interface 230 can include one or more transceivers for performing
wired or wireless communication. Examples of the network interface
230 can include, but are not limited to, a transceiver configured
to perform communications using the IEEE 802.11 wireless standard,
an Ethernet port, a wireless transmitter, and a universal serial
bus (USB) port.
[0053] The user interface 240 includes one or more devices that
receive input from and/or provide output to a user. The user
interface 240 can include, but is not limited to, a touchscreen, a
display, a QWERTY keyboard, a numeric keypad, a touchpad, a
microphone, and/or speakers.
[0054] The processing device 210 executes one or more native
applications 212. In some implementations, a native application 212
includes a native application module (hereafter referred to as
"NAM") 215. The NAM 215 is a set of computer readable instructions
embedded (e.g., by the developer) in the native application 212. In
some implementations, the developers may utilize a software
developer kit (hereafter referred to as "SDK") provided by the
provider of the recommendation engine 400 to implement the NAM 215.
When the user accesses a state of the native application 212 that
calls the NAM 215, the NAM 215 generates a recommendation request
402 based on the state of the native application that is currently
being accessed (referred to as the "accessed state"). An example
recommendation request 402 can define a state of the native
application (e.g., a function identifier 104 corresponding to the
accessed state or a resource identifier 106 corresponding to the
accessed state) and can further define zero or more context
parameters 404 that may be used by the recommendation engine 400 to
make recommendations. In some implementations, the NAM 215
determines an application resource identifier of the accessed state
and includes the application resource identifier in the
recommendation request 402. Additionally or alternatively, the NAM
215 can determine a function ID 104 corresponding to the accessed
state and can include the function ID 104 in the recommendation
request 402. The NAM 215 may further request a geolocation of the
user device 200 from the operating system 214 of the user device
200, which the NAM 215 includes in the recommendation request 402.
Further, in some implementations, the NAM 215 can include user
information (information which the user has agreed to share, such
as age, gender, and/or preferences) in the recommendation request
402. Moreover, in some implementations, the NAM 215 may seek
consent from the user to include usage data acquired by the
behavior monitor 218 (discussed in detail below). Additionally or
alternatively, the NAM 215 can include request parameters in the
recommendation request. Request parameters can include any type of
data that relates to the contents of the request 402. Examples of
request parameters include, but are not limited to, a number of
recommendation objects to include in the recommendation results 460
and the types of links to include (e.g., only to the requesting
native application, to other native applications, to
advertisements, etc.). The NAM 215 transmits the recommendation
request 402 to the recommendation engine 400.
[0055] Upon receiving the recommendation results 460, the NAM 215
can render and display the recommendation results 460 in a
graphical user interface (hereafter referred to as "GUI") of the
native application 212. The recommendation results 460 can include
one or more recommended links 408 (FIG. 1B). Each recommended link
408 may be included in a recommendation result object (discussed in
greater detail below). A recommendation result object can include
one or more access mechanisms, a layout file, and result data. The
result data can include the content that is displayed in the
recommended link 408. Examples of content may be text descriptions
of a state of a software application, icons, screenshots of the
state, and data used to populate the individual result. For
instance, if the recommendation result object corresponds to a
state of a restaurant review application (e.g., a review of a
specific restaurant), the result data may include an icon of the
application, a number of star ratings of the restaurant, a price
rating (e.g., is the restaurant expensive or cheap), and any
information that may be displayed in the user selectable link. The
NAM 215 renders the recommended links 408 from the recommendation
result objects and outputs recommended links 408 to the GUI. If the
user selects a recommended link 408, the NAM 215 can initiate the
accessing of the state of the software application indicated by the
recommended link 408. If the software application indicated by the
selected link is the same as the software application of the native
application, then the NAM 215 can access the state of the native
application to the state indicated by the access mechanism
contained in the recommended link 408. If, however, the software
application indicated by the selected link 408 is different than
the software application of the native application, the NAM 215 may
instruct the operating system 214 to access the state of the
software application. For example, the NAM 215 may provide the
access mechanism of the selected link 408 to the operating system
214. The operating system 214 can then perform any necessary
operations to access the state indicated by the access mechanism
(e.g., launch a native application indicated by an access mechanism
and set the state of the native application to the state indicated
by the access mechanism). In some examples, the operating system
214 or another component of the user device 200 may recognize the
software application indicated by the selected link 408 and proceed
to access the indicated state without instruction from the NAM
215.
[0056] The processing device 210 further executes a behavior
monitor 218. A behavior monitor 218 is a set of computer-readable
instructions that may be a standalone application or may be
incorporated into the operating system 214, the web browser 216,
and/or any other native applications 212. The behavior monitor 218
monitors the use of the user device 200 and generates usage data
102 based thereon. The behavior monitor 218 may execute as a
background process that monitors the current state of the user
device and/or monitors a user's response to a set of search results
460.
[0057] In some implementations, the behavior monitor 218 monitors
the current state of the user device 200. In these implementations,
the behavior monitor 218 can monitor the operation of the user
device 200 to determine when the user device 200 switches to a
state of a software application that is different from the current
state. For example, a user may be using a movie database
application to view a bio of a famous actor and may switch the
state of the movie database application to a state that lists start
times of newly released movies. In another example, a user may open
a media streaming application and begin playing a song. In yet
another example, a user may open a search application, enter a
search query, and click on a search result that takes the user to a
different application. In all of these examples the user device 200
switches to a different state of a software application from a
current state. The different state may be within the same software
application (e.g., going from a bio of an actor of a movie to time
listings of the movie) or may be across different software
applications (e.g., switching from a state within a search
application to a state of an unrelated software application listed
in a set of search results).
[0058] Each time the user device 200 switches to a different state,
the behavior monitor 218 records the transition and generates usage
data 102 corresponding to the different state. In some
implementations, the behavior monitor 218 determines a function ID
104 or a resource identifier of the different state. For example,
if the behavior monitor 218 is integrated into the operating system
214 or an application edition corresponding to the different state,
the behavior monitor can determine a resource identifier 106
indicating the different state. In another example, when the
different state is accessed using a web application, the behavior
monitor 218 can record the web resource identifier corresponding to
the different state.
[0059] In some of the implementations where the behavior monitor
218 identifies resource identifiers 106 instead of function IDs
104, the behavior monitor 218 translates the resource identifier
106 into a function ID 104. In some examples, the behavior monitor
218 obtains custom URL schemes of various software applications
(e.g., those that are installed on the user device 200). Examples
of how to implement a custom URL scheme may be found at, for
example, appurl.org, (maintained by Quixey, Inc.) or schma.org
(maintained by Google, Inc., Yahoo, Inc., Microsoft Corporation,
and Yandex). The behavior monitor 218 utilizes the custom URL
scheme to translate the resource identifier into a function ID
104.
[0060] In implementations where the user device executes a search
application, the behavior monitor 218 can monitor the search
application to determine search activity log data 108. In these
implementations, the behavior monitor 218 must first receive
consent from the user to begin gathering activity log data 108. For
example, once the behavior monitor 218 obtains consent, the
behavior monitor 218 can record search queries that the user device
200 transmits and a user's responses to the search results returned
in response to search queries. For example, the behavior monitor
218 can identify the user selectable links (i.e., search results)
that were selected by the user. In some implementations, a result
object of a selected link, which links to a state of a software
application, can include the function ID 104 of the linked-to
state. Thus, when the user selects the link, the behavior monitor
218 can obtain the function ID 104 of the linked-to state. The
behavior monitor 218 can record the function ID 104 and the search
query in the usage data 102.
[0061] The behavior monitor 218 identifies additional information.
For example, the behavior monitor 218 can determine a date or day
of the week, a time, and/or geolocation of the user device 200. The
behavior monitor 218 can include the additional data (e.g., an
identifier of the different state, a time, a day of the week, and a
geolocation) in the usage data 102 of the user device 200.
[0062] The behavior monitor 218 transmits the usage data to the
analytics engine 300. Prior to transmission, the behavior monitor
218 can scrub the usage data 102 to remove any data that may be
used to identify the user of the user device 200. The behavior
monitor 218 can transmit the usage data 102 at each state
transition or at predetermined intervals (e.g., every five minutes,
every six hours, every day). In order to further protect the
privacy of the user, the behavior monitor 218 may purge the
collected usage data 102 from memory (e.g., from the storage device
220) each time it transmits the usage data 102 to the analytics
engine 300.
[0063] FIG. 3A illustrates example components of an analytics
engine 300. In the illustrated example the analytics engine 300
includes a processing system 310, a storage system 320, and a
network interface 370. The analytics engine may include additional
components not explicitly shown in FIG. 3A. The components of the
analytics engine 300 may be interconnected, for example, by a bus
and/or any other form or medium of digital data communication,
e.g., a communication network 150.
[0064] The processing system 310 is a collection of one or more
processors that execute computer readable instructions. In
implementations having two or more processors, the two or more
processors can operate in an individual or distributed manner. In
these implementations, the processors may be connected via a bus
and/or a network. The processors may be located in the same
physical device or may be located in different physical devices.
The processing system executes a data collection module 312, an
entity matching module 314, and a clustering module 316.
[0065] The network interface device 370 includes one or more
devices that perform wired or wireless (e.g., Wi-Fi or cellular)
communication. Examples of the network interface devices include,
but are not limited to, a transceiver configured to perform
communications using the IEEE 802.11 wireless standard, an Ethernet
port, a wireless transmitter, and a universal serial bus (USB)
port.
[0066] The storage system 320 includes one or more storage devices.
The storage devices may be any suitable type of computer readable
mediums, including but not limited to read-only memory, solid state
memory devices, hard disk memory devices, and optical disk drives.
The storage devices may be connected via a bus and/or a network.
Storage devices may be located at the same physical location (e.g.,
in the same device and/or the same data center) or may be
distributed across multiple physical locations (e.g., across
multiple data centers). The storage system 320 stores an
application state record data store 330, a knowledge data store
350, and a cluster record data store 360. Example contents of the
respective data stores 330, 350, 360 are discussed in detail
below.
[0067] The application state record data store 330 includes a
plurality of different application state records 332. FIG. 3B
illustrates an example state record 332. Each state record 332 may
include data related to a state of the software application
resulting from performance of the function. In some
implementations, a state record 332 includes a function identifier
(ID) 104, application state information 334, entity information
336, one or more access mechanisms 338 used to access the state of
the software application, and state statistics 340. The application
state data store 330 may include one or more databases, indices
(e.g., inverted indices), tables, files, or other data structures
which may be used to implement the techniques of the present
disclosure.
[0068] The function ID 104 may be used to identify the application
state record 332 among the other state records 332 included in the
application state data store 330. The function ID 104 may be
represented in any suitable format, as described above. An
application state record 332 further includes one or more access
mechanisms 338. The access mechanism(s) 338 may include one or more
application access mechanisms, one or more web access mechanisms,
one or more application download addresses, and/or one or more
scripts. A user device 200 may use the one or more application
access mechanisms and the one or more web access mechanisms to
access the same, state of the software application using a
corresponding edition of the software application. For example, the
user device 200 may use the different access mechanism(s) 338 to
retrieve similar information, play the same song, or play the same
movie. The application download addresses may indicate locations
where the native application editions referenced in the application
access mechanisms can be downloaded.
[0069] The application state information 334 may include data that
describes the application state to which the record corresponds.
The state of the application may be accessed by an edition of the
software application using one of the access mechanisms 338 in the
application state record 332. Additionally, or alternatively, the
application state information 334 may include data that describes
the function performed according to the access mechanism(s) 338
included in the application state record 332. The application state
information 334 may include a variety of different types of data.
For example, the application state information 334 may include
structured, semi-structured, and/or unstructured data.
[0070] In some implementations, the application state information
334 may include the content that is provided in a result object.
The content corresponds to the data provided by a software
application when the software application is set in the application
state defined by the access mechanism(s) 338 defined in the
application state record 332. The types of data included in the
application state information 334 may depend on the type of
information associated with the application state and the
functionality defined by the access mechanism(s) 338. For example,
if the application state record 332 is for an application that
provides reviews of restaurants, the application state information
334 may include information (e.g., text and numbers) related to a
restaurant, such as a category of the restaurant, reviews of the
restaurant (e.g., textual reviews and/or a star rating), and a
price rating of the restaurant. In another example, if the
application state record 332 is associated with a shopping
application, the application state information may include data
that describes products (e.g., names, ratings, and prices) that are
shown when the shopping application is set to a state defined by an
access mechanism(s) 338 stored in the record 332.
[0071] The application state information 334 may further define the
function performed by the software application when set to the
state. The application state information 334 may include a name of
an action that is performed by the software application. The
application state information 334 may also define the types of
parameters that the software application receives in order to
access the state. For example, if a state of a software application
allows a user to view a particular photograph or file, the action
may be "view document" and the software application requires a
filename parameter in order to access the state.
[0072] The entity information 336 defines the entities and entity
types corresponding to the state of the software application
defined by the application state record 332. The entities may be
entities that are identified in the content corresponding to the
state of the software application or entities that can be accepted
by the software application when set to the state of the software
application. For instance, if a state record 332 defines a state of
a shopping application where a user can purchase a particular
product, the entities may be a name of the product, a maker of the
product, and a price of the product. In another example, the
application state record 332 may correspond to a state of an
airline application where a user can make flight reservations. In
this example, the entities may include all known airport codes that
the airline flies in and out of. The entity types may be the entity
types of the entities defined in the entity information. As
previously discussed an entity may have multiple entity types.
[0073] The entity information 336 may further include geographic
entities relating to the state of the software application. For
example, if the state of a software application refers to a
restaurant in a particular city, the geographic entities may
include the city, the state, and/or the country of the restaurant.
In another example, if the state of a software application allows a
user to purchase a particular product, the geographic entity may
identify countries where the product may be shipped or countries
where the state of the software application may accessed. To the
extent the state of the software application is not limited by
geography (e.g., a level of a game), the entity information 336 may
identify the state as having global relevance. The entity
information 336 may further include time related information. For
example, the time related entities may indicate a date of
publication.
[0074] The statistics 340 can define statistics relating to the
state of the software application. Examples of the statistics are
the number of times the state of the software application is
accessed, how often (on average) the state is accessed over a
period of time (e.g., per hour or per day), the times of the day
when the state is accessed, how many times the state is accessed
for each day of the week, and the geolocations of the user devices
when the state is accessed. The statistics can include any other
additional statistics relating to the state of the software
application.
[0075] The knowledge data store 350 stores a knowledge base 352. In
some implementations, the knowledge base 352 includes one or more
entity tables. In these implementations, an entity table is a
lookup table that relates a term or combination of terms to the
possible entity types of the term or combination of terms. Each
relation can also have an associated entity score that is a
probability value that indicates a likelihood that the term is of
that entity type. The entity scores can be determined, for example,
heuristically by analyzing large sets of text and documents.
[0076] The knowledge base 352 can include any other additional or
alternative data structures. For example, in some implementations
at least a portion the knowledge base 352 is structured in
accordance with an entity ontology 354 (FIG. 3D) and/or a
functional ontology (FIG. 3E). FIG. 3D illustrates an example of an
entity ontology 354. The entity ontology 354 may define a formal
framework for expressing relationships between different items in
the knowledge base 352. The entity ontology 354 may define
relationships between general entity types to app-specific entity
types. For example, the "name" general entity type may relate to a
"Biz ID" app-specific entity type for a first software application
and "Rest name" app-specific entity type for a second software
application. In this way, the first software application's schema
refers to a restaurant name as "Biz ID" and the second software
application's schema refers to a restaurant name as "Rest_name."
Furthermore, entity types may relate to other entity types. For
example, the general entity type "Thai cuisine" may reference an
"Asian cuisine" entity type as Thai cuisine may be thought of as a
subclass of "Asian Food." Further, the entity type "restaurant"
entity type may relate to an "address" entity type, a "cuisine"
entity type, and any other relevant classifications. An "address"
entity type may include a "street address" entity type, a "state"
entity type, a "city" entity type, and a "zip code" entity type.
The knowledge base 352 includes data points that populate the
ontology. For example, the string "Thai" may be related to the
"Thai cuisine," while the string "Tom's Thai" may relate to "Thai
cuisine" entity type and "restaurants" entity type. As the
analytics engine 300 learns about new entities, the analytics
engine 300 can connect the new entity to its corresponding entity
types. In this way, the knowledge base 352 indicates how an entity
relates to other entities and the entity type(s) of the entity
given the entity ontology 354. For instance, the entity "Tom's
Thai" may be linked to a state entity "California," a city entity
"Mountain View," and a zip code entity "94040."
[0077] Furthermore, as the ontology also includes app-specific
entities, the analytics engine 300 is able to represent the
restaurant name "Tom's Thai" in a manner that is understood by
third party applications (e.g., "1234" for a first application and
"Toms_Thai" for a second application). In some implementations, the
ontology and its corresponding data points (i.e., the specific
entities) may be indexed and stored in the knowledge base 352. For
example, the analytics engine may index the ontology and
corresponding data points into one or more entity tables. In these
implementations, components of the analytics engine 300 can query
the entity tables with a query term, and if the query term (or
combination of query terms) is listed in the entity table as an
entity, the entity table returns to potential entity type(s) of the
query term (or query terms).
[0078] FIG. 3E illustrates an example of a portion of a knowledge
base 352 that is structured according to a functional ontology 356.
A functional ontology can define the relationships between known
verticals, functions that support the vertical, the software
applications that perform those functions, and the entity types
that the software applications require in order to perform the
function. The example of FIG. 3E relates to a vertical focused on
movies. Typical functions relating to movies are purchasing movie
tickets, finding listings of times a movie is playing, finding
information about the title, streaming a movie, finding reviews of
a movie, and finding information on actors and actresses. In the
illustrated example, the knowledge base identifies purchasing movie
tickets, finding listings of times a movie is playing, finding
information of the title as possible functions associated with the
movie vertical. A first software application (App_1) and a second
software application (App_2) can be used to find movie times.
[0079] The first software application can also be used to purchase
tickets and the second software application can be used to get
information about a movie. According to the knowledge base 352 the
first software application requires a movie name entity, a theatre
name entity, and an address entity in order to perform the purchase
movie tickets function. Further, the knowledge base 352 indicates
that the second software application requires a movie name entity
and an address to perform the purchase movie tickets function. The
example of FIG. 3E is a simplified example of the movie vertical.
The functional ontology 356 may include any number of verticals and
any number of functions defined therein. Furthermore, the
functional ontology 356 may be structured in other suitable
manners.
[0080] The cluster data store 360 stores cluster records 362. Each
cluster record 362 relates to a unique cluster 110 identified by
the analytics engine 300. FIG. 3C illustrates an example of a
cluster record 362. A cluster record may include a cluster ID 364,
function ID data 366, and feature information 368.
[0081] A cluster ID 364 may be a string made up of letters,
numbers, and/or characters that identify a cluster 110 from other
clusters 110. The cluster ID 364 may be a random value (a random
arrangement of letters and numbers) or a human understandable value
(e.g., a name of the cluster). As will be discussed, when the
clustering module 316 identifies a new cluster 110, the clustering
module 316 can create a new cluster record 362 and can assign a new
cluster ID 364 to the new cluster record 362.
[0082] The function ID data 366 identifies the states of the
software application that belong to the cluster. The states of the
software applications may be represented by function IDs 104. Thus,
the function ID data 366 can define the function IDs that were
included in the cluster 110 corresponding to the cluster record
362.
[0083] The feature information 368 identifies the features that
were used to identify the cluster 110 corresponding to the cluster
record 362. As will be discussed, the clustering module 316 can
cluster states of applications based on different features. For
example, when recommending a state of an application, functional
features and entities defined by the state may be relevant, but
statistics that tend to show popularity may not be relevant. In
this example, some clusters 110 may be clustered based on whether
an application contains a relevant function or associated entity.
Thus, the feature information 368 can define the features that were
used to identify the cluster 110 defined by the cluster record
362.
[0084] The data collection module 312 receives usage data 102 from
a plurality of user devices 200. In some implementations, the data
collection module 312 generates and/or updates state records 332
based on the usage data 102. When the data collection module 312
receives usage data 102 from a user device 200, the data collection
module 312 identifies one or more states of one or more software
applications accessed by a user device 200. As previously
discussed, the state of the software application may be represented
in the usage data 102 by a function ID 104 or a resource identifier
106. In the case that the state is represented by a resource
identifier 106, the data collection module 312 can translate the
resource identifier 106 to a function ID 104 using the custom URL
scheme of the software application to which the resource identifier
106 corresponds.
[0085] For each state of a software application identified in the
usage data 102, the data collection module 312 determines whether
the application state data store 330 includes a state record 332
corresponding to the state. For instance, the data collection
module 312 can search the application state record data store 330
using the function ID 104 representing a particular state. If the
data collection module 312 finds a state record 332 corresponding
to the function ID 104, the data collection module 312 can update
the statistics 340 of the application state record 332 with
information contained in the usage data 102. For instance, the data
collection module 312 can increment a total number of times that
the state was accessed, can indicate a time that the state was
accessed, a geolocation from which the state was accessed, and a
day of the week that the state was accessed.
[0086] In the event that the data collection module 312 does not
find a state record 332 corresponding to a function ID 104, the
data collection module 312 can create a state record 332
corresponding to the state of the software application represented
by the function ID 104. The data collection module 312 can create a
new state record 332. The data collection module 312 can further
instruct a crawler (not shown) to crawl the software application at
the given state, so as to identify the application state
information 334 and the access mechanisms used to access the state.
The data collection module 312 can also update the statistics of
the new application state record 332 in the manner described
above.
[0087] In the event the data collection module 312 creates a new
state record 332, the entity matching module 314 can identify the
ontological features of the new state record 332. In some
implementations, the entity matching module 314 obtains ontological
features corresponding to the function ID 104 provided by data
collection module 312. Ontological features can include entity
features and functional features. An entity feature identifies
entities that are relevant to the state and the entity types
thereof. For example, if a function ID corresponds to a software
application that, amongst other functions, allows users to view
photos of food, the entity features may include a name of the
restaurant, a name of the dish, or a type of cuisine. The entity
matching module 314 can utilize the portion of the knowledge base
352 organized according to the entity ontology 354 to identify the
entity features and the portion of the knowledge base 352 organized
according to the function ontology 356 to identify the functional
features. The entity matching module 314 can also fetch other
features pertaining to the function ID. The entity matching module
can store the identified ontological features in the application
state record 332.
[0088] The clustering module 316 identifies clusters 110 of states
of software applications and generates/updates cluster records 362
based thereon. Identifying clusters 110 of states of software
applications can refer to the clustering of application state
records 332 and/or of function IDs 104 defined in the application
state records 332 based on one or more features defined in the
application state records 332. A developer (e.g., a developer of
the recommendation engine 400) can define a set of features on
which to cluster the states (e.g., function IDs 104). For instance,
a developer wishing to identify the most popular restaurants in an
area can define the following set of features on which to cluster
the states: business type, number of accesses over a given period
of time, and geographic location. In this example, the clustering
module 316 can cluster the states based on these features to
identify a plurality of clusters 110. One of the clusters 110 may
include function IDs 104 corresponding to states of software
applications that relate to restaurants that are popular and within
a specific geographic region. Furthermore, states of software
applications that do not relate to restaurants may be clustered
together in a non-relevant cluster 110. In another example, a
developer may want to identify states of applications that
correspond to similar actions. In this example, the developer can
define the following set of features: action type and entity types.
In this example, function IDs 104 corresponding to similar actions
and/or states that receive or define similar entity types may
reside in the same clusters 110. A developer can select any set of
features on which to cluster the states of the software
applications. The clustering module 316 can be configured to
perform any suitable clustering algorithm. Examples of clustering
algorithms include, but are not limited to, k-means clustering,
bi-clustering, tri-clustering, and k-nearest neighbors.
[0089] In operation the clustering module 316 receives a set of
feature types. The clustering module 316 then clusters the function
IDs 104 based on the feature types. The result of the clustering is
one or more clusters 110. For each cluster 110 identified by the
clustering module 316, the clustering module 316 generates a
cluster record 362 corresponding to the cluster 110. The clustering
module 316 may assign a cluster ID 364 to the cluster record 362.
The cluster ID 364 may be any suitable value. In some
implementations, the clustering module 316 increments a counter
each time it identifies a new cluster 110 and uses the new counter
value as the cluster ID 364.
[0090] The function ID data 366 defines the membership of the
cluster 110. The clustering module 316 includes the function IDs
104 of the application state records 332 that were grouped in the
identified cluster 110 in the function ID data 366 of the cluster
record 362. In this way, the function ID data 366 identifies which
application state records 332 belong to a particular cluster
110.
[0091] The clustering module 316 further includes the feature types
that were used to identify the cluster 110 in the feature
information 368 of the cluster record 362. In this way, the feature
information 368 indicates the features that were used to identify
the cluster 110.
[0092] Each time the clustering module 316 is called, the
clustering module 316 can identify new clusters 110 of function
records 332 and/or update preexisting clusters 110. For example,
when the clustering module 316 receives a set of feature types that
it has not yet clustered, the clusters 110 resulting from the
clustering on the new set of feature types are new clusters. In
such a situation, the clustering module 316 identifies new clusters
110 and, therefore, generates new cluster records 362. In the event
that the clustering module 316 is operating with a previously used
set of feature types, the clustering module 316 may identify new
members of preexisting clusters 110 (e.g., newly discovered states
of software applications and/or states of software applications
whose features have changed over time) or may identify clusters 110
with new members altogether. In the former scenario, the clustering
module 316 may update clusters 110 that are previously identified
clusters 110 with new members (e.g., newly discovered states of
software applications and/or states of software applications whose
features have changed over time). In the latter scenario, the
clustering module 316 may identify one or more new clusters 110 all
while updating one or more preexisting clusters 110.
[0093] The cluster records 362 identified by the analytics engine
300 can be used for many suitable applications. In some
implementations, the cluster records 362 can be used by the
recommendation engine 400 to improve recommendation results
460.
[0094] FIG. 4 illustrates an example recommendation engine 400
according to some implementations of the present disclosure. In the
illustrated example, a recommendation engine 400 includes a
processing system 410, a storage system 420, and a network
interface 450. The processing system 410, storage system 420, and
network interface 450 of the recommendation engine 400 may be
substantially similar to those of the analytics engine 400. In some
instances, one or more of the components may be shared amongst the
recommendation engine 400, the analytics engine 300, and/or any
other engines of the deep linking system 100. The processing system
410 executes a recommendation module 412. The recommendation module
412 accesses the cluster data store 360 and the application state
record data store 330.
[0095] The recommendation engine 400 receives a recommendation
request 402 and, in some implementations, context parameters 404
from a user device 200 and provides the recommendation results 460
to the user device 200 in response to the recommendation request
402. The recommendation results 460 indicate one or more
recommended states of software applications. A recommended state of
a software application can refer to a state of a software
application that the user of the user device 200 may want to view
given the user's current use of the user device 200 (e.g., the
state of the software application currently being accessed) or
given the context parameters 404 (e.g., the time of day and
location). The recommendation engine 400 references the cluster
data store 360 to determine the recommended states.
[0096] In some implementations, the recommendation engine 400
determines the recommended states based on the recommendation
request 402 received from a user device 200. As previously
discussed, the recommendation request 402 may identify a state of a
software application currently being accessed by the user device
200 (referred to as the "current state"). In some implementations,
the user device 200 provides the function ID 104 or resource
identifier 106 corresponding to the current state in the
recommendation request 402. In the case that the recommendation
request 402 includes a resource identifier 106 identifying the
current state, the recommendation module 412 translates the
resource identifier to a function ID 104 corresponding to the
state. The recommendation module 412 can query the cluster data
store 360 using the function ID 104 of the current state. The
cluster data store 360 returns the cluster IDs 364 of the clusters
110 that contain the function ID 104 of the current state. In some
implementations, the cluster data store 360 may return the cluster
IDs 364 of the clusters 110 clustered according to features related
to the function ID 104 of the current state. The returned clusters
IDs 364 indicate the clusters 110 that contain function IDs 104 of
states of software applications that are similar or related to the
current state. The recommendation module 412 identifies the
recommended states from the clusters 110 of the returned cluster
IDs 364.
[0097] In an example, the current state being accessed by a user
device 200 may be an article about a professional baseball team
(e.g., the Detroit Tigers). The function ID 104 of the current
state may result in a number of clusters 110 being identified by
the recommendation module 412. For example, a first cluster 110 may
identify other current articles relating to professional baseball
teams (e.g., articles about Major League Baseball teams), a second
cluster 110 about professional sports teams in the same city or
state as the professional baseball team (e.g., articles about the
Detroit Tigers, Detroit Lions, Detroit Pistons, and Detroit
Redwings), and a third cluster 110 identifying different states of
software applications where baseball tickets or baseball
memorabilia of professional baseball teams may be purchased (e.g.,
tickets to sporting events or team jerseys). In this example, the
cluster record 362 of the first cluster 110 may indicate that the
first cluster 110 was clustered using entity types, time, and
action type. Thus, the states defined in the first cluster 110 may
all relate to professional baseball teams, have the action "view
article," and were recently published. The cluster record 362 of
the second cluster 110 may indicate that the second cluster 110 was
clustered according to entity type, geography, time, and action
type. Thus, the second cluster 110 may indicate states that all
relate to professional sports teams from the city of Detroit, that
have the action "view article," and that were recently published.
The cluster record 362 of the second cluster 110 may indicate that
the third cluster 110 was clustered according to entity type. Thus,
the states defined in the third cluster 110 may all indicate states
that relate to professional sports. Accordingly, this cluster 110
may define states that relate to professional sports teams in any
capacity. The foregoing example assumes an entity ontology that
includes a professional sports team entity and a professional
baseball team entity and a functional ontology that defines a "view
article" action.
[0098] The recommendation module 412 then determines which states
from the clusters to recommend to a user. The recommendation module
412 can be configured to make this determination in a number of
different manners. In some implementations, the recommendation
module 412 identifies the function IDs 104 other than the function
ID 104 of the current state appearing in the greatest number of the
identified clusters 110. In these implementations, the
recommendation module 412 can retrieve the cluster records 362 of
the identified clusters 110. For each cluster record 362, the
recommendation module 412 can identify the function IDs appearing
in the respective cluster 110 from the function ID data 366
identified therein. The recommendation module 412 can then identify
the N function IDs 104 appearing in the most clusters 110, wherein
N is an integer greater than or equal to one.
[0099] Additionally or alternatively, the recommendation module 412
can identify one or more states most similar to the current state.
In these implementations, the recommendation module 412 may utilize
a distance formula to calculate distances between a state appearing
in one or more of clusters 110 of the current state. Examples of
distance formulas include Euclidean distance formulas and cosine
similarity formulas. The recommendation module 412 can then select
the N "nearest" states of the software applications to recommend to
a user.
[0100] In some implementations, the distance between two states can
be calculated using the application state information 334 defined
in the respective application state records 332 of the two states.
In some implementations, the recommendation module 412 retrieves
the application state record 332 corresponding to the current state
and, for each function ID 104 appearing in an identified cluster
110, retrieves the application state record 332 corresponding to
the function ID 104. The recommendation module 412 then calculates
the distance (e.g., Euclidean distance or cosine similarity)
between the application state record 332 of the current state and
the application state record 332 of the function ID 104. The
recommendation module 412 can calculate the distance using a set of
predetermined features. For instance, the recommendation module 412
can calculate the distance using the entity types defined in the
records 332, the actions defined in the records 332, geographic
entities defined in the records 332, and time related information
defined in the records 332. In some implementations, the
recommendation request 402 may identify the relevant features on
which to calculate the distance. For example, the NAM 215 that
issues the recommendation request 402 may define one or more
features on which to base the distance calculation. It is noted
that many features may be binary in nature. For example, with
respect to entity types and actions, two application state records
332 can either include the same entity types or actions or they do
not. In the case that they do contain the same entity type or
action, the distance between the two records 332 with respect to
the entity type or action may be set to zero and another value
(e.g., one) if they do not contain the same entity type. Further,
with respect to these types of features, the distance between two
application state records 332 may be weighted. For example, more
specific entity types may be assigned a greater weight than less
specific entity types.
[0101] In some implementations, the recommendation module 412
determines recommended states based on context parameters 404 that
are provided with a recommendation request 402. In these
implementations, the recommendation request 402 can indicate that
the recommended states are to be identified based on the context
parameters 404. A NAM 215 of a native application 212 executing on
a user device 200 may issue the recommendation request 402 and may
specify that the recommendations are to be based on the context
parameters 404 provided by the user device 200.
[0102] In these implementations, the recommendation module 412
receives a set of context parameters 404 from the user device 200.
The context parameters 404 may indicate a time that the
recommendation request 402 is sent and a geographic location from
which the recommendation request 402 is sent. The recommendation
request 402 may indicate the current state of the user device 200.
In these implementations, the recommendation module 412 can
identify clusters corresponding to the current state of the user
device 200 and the context parameters 404 surrounding the
recommendation request. For example, if the native application that
issues the recommendation request is a restaurant review
application and the user is accessing a state having a review of a
restaurant in New York City, and the context parameters 404
indicate that the time of the request is 6:00 PM and the geographic
location of the request is in New York City, the recommendation
module 412 may reference a cluster 110 that identifies states for
making dinner reservations for sushi restaurants because the most
popular restaurant related states of software applications during
the evenings in New York City include states that allow users to
make reservations for sushi restaurants. Conversely, if the native
application that issues the recommendation request is a restaurant
review application and the user is accessing a state having a
review of a restaurant in Dubuque Iowa, and the context parameters
404 indicate that the time of the request is 6:00 PM and the
geographic location of the request is in Dubuque Iowa, the
recommendation module 412 may reference a cluster 110 that
identifies states of software applications that allows users to
read menus for all-you-can eat buffets in Dubuque Iowa, as the most
popular states of software applications during evenings in
northeast Iowa include states that identify all-you-can-eat buffets
in Dubuque, Iowa and the menus of said buffets. In this way, the
recommendation module takes into account the geographic and/or
temporal context of a user when making recommendations.
[0103] In operation, the recommendation module 412 receives a
recommendation request 402 and context parameters 404. The context
parameters 404 can include a time and a geographic location
corresponding to the user. The context parameters 404 may include
additional information, such as a user profile ID or demographic
information (e.g., male or female, age group).
[0104] In some implementations, the recommendation module 412
queries the cluster record data store using the geographic location
and any other relevant parameters. For instance, if the
recommendation module 412 wants to make geographically and
temporally relevant recommendations, the recommendation module 412
queries the cluster record data store 360 using the time and
geographic location of the user device 200 (received in the context
parameters). In these implementations, the cluster data store 360
returns cluster IDs 364 of cluster records 362 that pertain to the
geographic region and time range surrounding the recommendation
request 402. Drawing from the examples above, if the recommendation
request 402 was transmitted from a location in or around New York
City at 6:00 PM, the clusters IDs 364 returned may correspond to
clusters 110 that contain function IDs 104 of states of software
applications that were accessed by user devices located in New York
City in evenings. Assuming that one of the features on which the
clusters 110 were clustered included statistics that indicate
popularity (e.g., accesses per hour), the clusters 110 represent
states that are accessed from New York City in the evening with
varying degrees of popularity. It is noted that other clusters 110
that are clustered on the same features would correspond to other
locations and/or other time ranges and identify states of varying
popularity (e.g., western Ohio in the mornings, Beijing China in
the evenings, or New York City late night). In other words, the
recommendation module can utilize the context parameters 404
provided by a user device 200 to select clusters that are relevant
to the time and geographic location indicated by the context
parameters 404.
[0105] It is further noted that while requesting clusters 110 of
states of software applications clustered according to geographic
location, time ranges, and popularity, the recommendation module
412 can request clusters 110 clustered according to other features
as well. For instance, a particular application developer that
includes the NAM in its native applications may request that the
identified states be clustered on age, sex, and popularity of the
user. In this scenario, the returned clusters 110 may include a
first cluster 110 that identifies very popular states with males
between the ages of 26 and 35, a second cluster 110 that identifies
moderately popular state with females between the ages 18 and 25,
and a third cluster 110 that identifies very popular states with
females between the ages 36 and 50. The recommendation module 412
can request clusters 110 clustered according to any suitable
features, so long as the analytics engine 300 has previously
clustered states of software applications according to those
features or is able to cluster states of software applications
according to those features.
[0106] The recommendation module 412 selects a recommended state
from the returned clusters 110. In some implementations, the
recommendation module 412 can select N recommended states from one
or more of the returned clusters 110 based on the relative distance
to the currently accessed state. In these implementations, the
recommendation module 412 can calculate similarity between the
currently accessed state and states represented by one or more of
the returned clusters 110 (e.g., the cluster 110 identifying the
most popular states) in the manner defined above. Additionally or
alternatively, the user device 200 providing the recommendation
request 402 may provide a set of conditions that must be adhered
to. For example, the NAM issuing the recommendation request 402 may
require that the recommended states must correspond to a particular
software application or set of software applications. In this way,
the NAM 215 can ensure that the user of the user device 200 is
directed to a software application that is affiliated with the
native application 212 executing the NAM 215.
[0107] Once the recommendation module 412 selects the recommended
states, the recommendation module 412 can generate the
recommendation results 460 based on the recommended states. As
previously discussed, the recommended states are represented by
function IDs 104. The recommendation module 412 can retrieve the
application state records 332 corresponding to the recommended
states using the function IDs thereof. The recommendation module
412 can, for each recommended state, generate a recommendation
result object based on the contents contained in the application
state record 332 corresponding to the recommended state. In some
implementations, the recommendation module 412 can utilize a
recommendation result object template that defines the look and
feel of a recommendation link 408. In these implementations, the
recommendation module 412 can instantiate a new recommendation
result object by populating the fields of the result object
template with information contained in the application state
information 334 of the application state record 332. A
recommendation result object can contain data and instructions
that, when rendered by a user device 200, provide a recommendation
that includes one or more user selectable links. In this way, the
recommendation module 412 generates a recommendation result object
that may be rendered by the user device 200 when delivered in the
recommendation results 460.
[0108] The recommendation result object template may include an
access mechanism field that receives an access mechanism to access
the recommended state. The recommendation result object template
may also include a field that receives a textual description of the
recommended state. The recommendation module 412 may obtain the
textual description from the application state information 334 of
the application state record 332. The recommendation result object
template may also include a field that receives a file containing
an image of an icon of the software application. The recommendation
module 412 may obtain the address of the file from the application
state information 334 of the application state record 332. The
recommendation module 412 may include any other suitable
information in the result object. The recommendation module 412 can
encode the recommendation results (e.g., the recommendation result
objects) in a container, such as a hyper-text markup language
(HTML) document that can be embedded in another HTML document
(e.g., via an iFrame) or a Java script objection notation (JSON)
object. The recommendation module 412 may transmit the
recommendation results 460 to the user device 200 that issued the
recommendation request 402.
[0109] FIG. 5 illustrates an example set of operations of a method
500 for processing a recommendation request 402. For purposes of
explanation, the method 500 is explained with respect to the
recommendation engine 400 of FIG. 4 and is executed by the
processing device 410 thereof. The method 500 may, however, be
executed in any suitable computing device.
[0110] At operation 510, the recommendation engine 400 receives a
recommendation request 402. The recommendation request 402 may
include, but is not limited to, a current state of the requesting
user device, a function ID 104 or resource identifier associated
with the current state of the requesting user device, or any other
suitable information associated with the user device 200 or the
current state of the application that is currently being accessed
by the user device 200. For example, if a user device 200 is
accessing a video game review application and currently viewing a
review for the video game STARCRAFT.RTM. (by Blizzard
Entertainment, Inc.), the recommendation request 402 may include
the function ID 104 corresponding to the particular state of the
video game review application for the review of STARCRAFT.RTM.. The
recommendation request 402 may include, but is not limited to,
other suitable information such as the function ID 104 of a
previous application state accessed by the user device 200, the
names of other applications on the user device 200 capable of
accessing video game reviews, and/or the function ID of an
application state frequently accessed by the user device 200. In
examples where the recommendation request 402 is transmitted by a
server device, such as a search engine, the recommendation request
402 may contain one or more function IDs 104 corresponding to
application states in a set of search results in addition to any
other suitable information. In some implementations, the
recommendation engine 400 may also receive context parameters 404
(see, e.g., FIG. 1A). The context parameters 404 may indicate a
time that the recommendation request 402 is sent and a geographic
location from which the recommendation request 402 is sent.
[0111] At operation 512, the recommendation module 412 identifies
one or more clusters by querying the cluster data store 360. The
recommendation module 412 uses the information provided by the
recommendation request 402 to query the cluster data store 360 for
relevant clusters 110. For example, the recommendation module 412
can search the cluster data store 360 using the function ID 104 of
the current state of the user device 200. In some implementations,
the cluster data store 360 is indexed using an inverted index that
maps state identifiers (e.g., function identifiers or resource
identifiers) to clusters containing the state identifiers. In these
implementations, the recommendation module 412 searches the cluster
data store 360 by querying the inverted index using the state
identifier received in the recommendation request 402. The inverted
index outputs the cluster IDs 364 of the clusters 110 that contain
the function ID 104 of the current state. Because the clusters 110
were clustered according to the attributes of the underlying states
of applications, the returned clusters 110 contain function IDs 104
of states of software applications that are similar or related to
the current state of the requesting user device 200 (e.g., the
state of the software application being accessed by the user device
200). For example, if the current state being accessed by the user
device 200 is an article about a video game (e.g., an article about
the game STARCRAFT.RTM. by Blizzard Entertainment, Inc.), an
example returned cluster 110 may identify other articles relating
to the developer of the video game (e.g., an article about the
sequel, STARCRAFT.RTM. II, also by Blizzard Entertainment, Inc.)
while yet another cluster 110 may identify message board forums
regarding the game itself
[0112] At operation 514, the recommendation module 412 selects the
states from the identified clusters 110 to recommend to a user. The
recommendation module 412 can be configured to make this
determination using various techniques. In one example, the
recommendation module may recommend a state associated with a
function ID 104 appearing the greatest number of identified
clusters 110. In this example, the recommendation module 412
retrieves the cluster records 362 of the identified clusters 110.
For each cluster record 362, the recommendation module 412 can
identify the function IDs appearing in the respective cluster 110
from the function ID data 366 identified therein. The
recommendation module 412 identifies the N function IDs 104
appearing in the most clusters 110, where N is an integer greater
than or equal to one. In another example, the recommendation module
412 may recommend a state that is most similar to the current
state. In this example, the recommendation module 412 utilizes a
distance formula to calculate distances between a state appearing
in one or more clusters 110 and the current state. Examples of
distance formulas include Euclidean distance formulas and cosine
similarity formulas. The recommendation module 412 selects the N
"nearest" states of the software applications to recommend. More
specifically, the recommendation module 412, for each function ID
104 (i.e., the function ID of the recommendation request 402 and
the function IDs 104 of the identified clusters 110), populates a
feature vector (using binary or numerical values) based on a
predefined set of features (e.g., time, location, category,
cuisine, etc.). In this way, the recommendation module 412 may
implement a distance formula using the feature vectors associated
with each respective function ID 104 to determine the relative
distance between the function IDs 104 appearing in the one or more
identified clusters 110 and the function ID 104 indicated by the
recommendation request 402. The recommendation module 412 may then
select the one or more states corresponding to the function IDs 104
of the identified clusters 110 that have the shortest distance to
the function ID 104 of the recommendation request 402. In the
STARCRAFT.RTM. example above, the feature vectors utilized by the
recommendation request 402 may be populated based on features
commonly associated with review applications such as rating and
category. In this way, the recommendation module 402 selects the
function IDs of application states corresponding to reviews of
highly rated video games in the same category as STARCRAFT.RTM..
Feature vectors may be based on, but not limited to, features such
as a time frame, a geo-location, a category, and a cuisine.
Additionally or alternatively, the recommendation module may
recommend a state from a cluster 110 identified using the context
parameters 404 that are provided with a recommendation request 402.
In this example, the context parameters 404 may indicate a time,
geographic location, and/or any other suitable information. The
context parameters 404 may further indicate a set of conditions
from the NAM 215, such as a condition indicating that the
recommended states should correspond to a particular software
application or set of software applications. In this situation, the
recommendation module 412 can provide recommendations that comply
with the conditions set forth by the NAM 215 and are also relevant
to other information provided by the context parameters 404. In a
specific example, the current state may correspond to a news
application and the user may be in San Jose, CA. The NAM issuing
the recommendation request may indicate that any recommended states
must be from the same application. In this example, the
recommendation module 412 may identify a cluster that has articles
concerning Northern California. From this cluster, the
recommendation module 412 limits the selected states to states
pertaining to the news application of the current state. The
recommendation module 412 may utilize any other suitable techniques
to determine which states from the identified clusters 110 to
recommend to a user.
[0113] At operation 516, the recommendation module 412 generates
recommendation results 460 based on the recommended states. The
recommendation module 412 retrieves the application state records
332 corresponding to the recommended states using their function
IDs. For each retrieved application state record 332, the
recommendation module 412 can generate a recommendation result
object based on the contents of the retrieved application state
record 332. The recommendation module 412 can utilize a result
object template to generate the recommendation result object. The
recommendation module 412 can encode content from the retrieved
application state record 332 in the result object template, such as
a title of the application and/or state of the application and an
access mechanism used to access the state. The foregoing may be
used by the user device 200 to generate a link to the recommended
state. The recommendation module 412 encodes the recommendation
result objects in a container, such as a HTML document or JSON
object. At operation 518, the recommendation module transmits the
recommendation results 460 to the user device 200 that issued the
recommendation request 402.
[0114] The method 500 of FIG. 5 is provided for example only and
not intended to limit the scope of the disclosure. A recommendation
engine 400 may provide recommendations that utilize the cluster
records 362 in other suitable manners as well without departing
from the scope of the disclosure.
[0115] Various implementations of the systems and techniques
described here can be realized in digital electronic and/or optical
circuitry, integrated circuitry, specially designed ASICs
(application specific integrated circuits), computer hardware,
firmware, software, and/or combinations thereof. These various
implementations can include implementation in one or more computer
programs that are executable and/or interpretable on a programmable
system including at least one programmable processor, which may be
special or general purpose, coupled to receive data and
instructions from, and to transmit data and instructions to, a
storage system, at least one input device, and at least one output
device.
[0116] These computer programs (also known as programs, software,
software applications or code) include machine instructions for a
programmable processor, and can be implemented in a high-level
procedural and/or object-oriented programming language, and/or in
assembly/machine language. As used herein, the terms
"machine-readable medium" and "computer-readable medium" refer to
any computer program product, non-transitory computer readable
medium, apparatus and/or device (e.g., magnetic discs, optical
disks, memory, Programmable Logic Devices (PLDs)) used to provide
machine instructions and/or data to a programmable processor,
including a machine-readable medium that receives machine
instructions as a machine-readable signal. The term
"machine-readable signal" refers to any signal used to provide
machine instructions and/or data to a programmable processor.
[0117] Implementations of the subject matter and the functional
operations described in this specification can be implemented in
digital electronic circuitry, or in computer software, firmware, or
hardware, including the structures disclosed in this specification
and their structural equivalents, or in combinations of one or more
of them. Moreover, subject matter described in this specification
can be implemented as one or more computer program products, i.e.,
one or more modules of computer program instructions encoded on a
computer readable medium for execution by, or to control the
operation of, data processing apparatus. The computer readable
medium can be a machine-readable storage device, a machine-readable
storage substrate, a memory device, a composition of matter
effecting a machine-readable propagated signal, or a combination of
one or more of them. The terms "data processing apparatus,"
"computing device" and "computing processor" encompass all
apparatus, devices, and machines for processing data, including by
way of example a programmable processor, a computer, or multiple
processors or computers. The apparatus can include, in addition to
hardware, code that creates an execution environment for the
computer program in question, e.g., code that constitutes processor
firmware, a protocol stack, a database management system, an
operating system, or a combination of one or more of them. A
propagated signal is an artificially generated signal, e.g., a
machine-generated electrical, optical, or electromagnetic signal
that is generated to encode information for transmission to
suitable receiver apparatus.
[0118] A computer program (also known as an application, program,
software, software application, script, or code) can be written in
any form of programming language, including compiled or interpreted
languages, and it can be deployed in any form, including as a
stand-alone program or as a module, component, subroutine, or other
unit suitable for use in a computing environment. A computer
program does not necessarily correspond to a file in a file system.
A program can be stored in a portion of a file that holds other
programs or data (e.g., one or more scripts stored in a markup
language document), in a single file dedicated to the program in
question, or in multiple coordinated files (e.g., files that store
one or more modules, sub programs, or portions of code). A computer
program can be deployed to be executed on one computer or on
multiple computers that are located at one site or distributed
across multiple sites and interconnected by a communication
network.
[0119] The processes and logic flows described in this
specification can be performed by one or more programmable
processors executing one or more computer programs to perform
functions by operating on input data and generating output. The
processes and logic flows can also be performed by, and apparatus
can also be implemented as, special purpose logic circuitry, e.g.,
an FPGA (field programmable gate array) or an ASIC (application
specific integrated circuit).
[0120] Processors suitable for the execution of a computer program
include, by way of example, both general and special purpose
microprocessors, and any one or more processors of any kind of
digital computer. Generally, a processor will receive instructions
and data from a read only memory or a random access memory or both.
The essential elements of a computer are a processor for performing
instructions and one or more memory devices for storing
instructions and data. Generally, a computer will also include, or
be operatively coupled to receive data from or transfer data to, or
both, one or more mass storage devices for storing data, e.g.,
magnetic, magneto optical disks, or optical disks. However, a
computer need not have such devices. Moreover, a computer can be
embedded in another device, e.g., a mobile telephone, a personal
digital assistant (PDA), a mobile audio player, a Global
Positioning System (GPS) receiver, to name just a few. Computer
readable media suitable for storing computer program instructions
and data include all forms of non-volatile memory, media and memory
devices, including by way of example semiconductor memory devices,
e.g., EPROM, EEPROM, and flash memory devices; magnetic disks,
e.g., internal hard disks or removable disks; magneto optical
disks; and CD-ROM and DVD-ROM disks. The processor and the memory
can be supplemented by, or incorporated in, special purpose logic
circuitry.
[0121] To provide for interaction with a user, one or more aspects
of the disclosure can be implemented on a computer having a display
device, e.g., a CRT (cathode ray tube), LCD (liquid crystal
display) monitor, or touch screen for displaying information to the
user and optionally a keyboard and a pointing device, e.g., a mouse
or a trackball, by which the user can provide input to the
computer. Other kinds of devices can be used to provide interaction
with a user as well; for example, feedback provided to the user can
be any form of sensory feedback, e.g., visual feedback, auditory
feedback, or tactile feedback; and input from the user can be
received in any form, including acoustic, speech, or tactile input.
In addition, a computer can interact with a user by sending
documents to and receiving documents from a device that is used by
the user; for example, by sending web pages to a web browser on a
user's client device in response to requests received from the web
browser.
[0122] One or more aspects of the disclosure can be implemented in
a computing system that includes a backend component, e.g., as a
data server, or that includes a middleware component, e.g., an
application server, or that includes a frontend component, e.g., a
client computer having a graphical user interface or a Web browser
through which a user can interact with an implementation of the
subject matter described in this specification, or any combination
of one or more such backend, middleware, or frontend components.
The components of the system can be interconnected by any form or
medium of digital data communication, e.g., a communication
network. Examples of communication networks include a local area
network ("LAN") and a wide area network ("WAN"), an inter-network
(e.g., the Internet), and peer-to-peer networks (e.g., ad hoc
peer-to-peer networks).
[0123] The computing system can include clients and servers. A
client and server are generally remote from each other and
typically interact through a communication network. The
relationship of client and server arises by virtue of computer
programs running on the respective computers and having a
client-server relationship to each other. In some implementations,
a server transmits data (e.g., an HTML page) to a client device
(e.g., for purposes of displaying data to and receiving user input
from a user interacting with the client device). Data generated at
the client device (e.g., a result of the user interaction) can be
received from the client device at the server.
[0124] While this specification contains many specifics, these
should not be construed as limitations on the scope of the
disclosure or of what may be claimed, but rather as descriptions of
features specific to particular implementations of the disclosure.
Certain features that are described in this specification in the
context of separate implementations can also be implemented in
combination in a single implementation. Conversely, various
features that are described in the context of a single
implementation can also be implemented in multiple implementations
separately or in any suitable sub-combination. Moreover, although
features may be described above as acting in certain combinations
and even initially claimed as such, one or more features from a
claimed combination can in some cases be excised from the
combination, and the claimed combination may be directed to a
sub-combination or variation of a sub-combination.
[0125] Similarly, while operations are depicted in the drawings in
a particular order, this should not be understood as requiring that
such operations be performed in the particular order shown or in
sequential order, or that all illustrated operations be performed,
to achieve desirable results. In certain circumstances,
multi-tasking and parallel processing may be advantageous.
Moreover, the separation of various system components in the
embodiments described above should not be understood as requiring
such separation in all embodiments, and it should be understood
that the described program components and systems can generally be
integrated together in a single software product or packaged into
multiple software products.
[0126] A number of implementations have been described.
Nevertheless, it will be understood that various modifications may
be made without departing from the spirit and scope of the
disclosure. Accordingly, other implementations are within the scope
of the following claims. For example, the actions recited in the
claims can be performed in a different order and still achieve
desirable results.
* * * * *
References