Hello everybody,
today I like to present the Recommendation Ontology, which is an ontology for modeling high level recommendations on/ for the Semantic Web. Thereby, the ontology hook up parts of the Similarity Ontology, DCMI Metadata Terms, the Association Ontology and the Ordered List Ontology.
The graphic above illustrates the core of the Recommendation Ontology, the rec:Recommendation concept (see also here, for an extended view, and here, for an extended graph with relations, of this concept). A rec:Recommendation instance can consist of
- an item or agent relation (rec:recommendation or its inverse property rec:for) to associate the resource, for which the recommendation was made
- an recommender relation (rec:recommender or its inverse property rec:recommends) to associate the instance, which provided or calculated the recommendation, e.g. an is:InfoService instance
- recommendation object relations (rec:recommendation_object or its inverse property rec:recommended_in) to associate appropriated objects to the recommendation subject
- recommendation audience relations (rec:recommendation_audience) to associate groups or stereotypes, which are probably appropriated as target group for this recommendation.
Since rec:Recommendation is a sub class of ao:LikeableAssociation, it is also possible to like (ao:likeminded), rate (rev:rating) or give a feedback (rev:Feedback) to a recommendation. Furthermore, one can also relate detailed association (sim:Association based) or similarity statements (sim:Similarity based) to a recommendation by using the property ao:included_association.
As an extension of rec:Recommendation, we built the rec:RankedRecommendation concept to enable also ordered (ranked) recommendations at a high level. The graphic above illustrates this concept as graph with relations (see also here, for an extended graph view). rec:RankedRecommendation is not only a sub class of rec:Recommendation, furthermore, it is also a sub class of olo:OrderedList, which enables all features of an ordered list also to this concept. Following this design, a rec:ranked_recommendation_object is not only a sub property of rec:recommendation_object, but also a sub property of olo:slot. That means the recommendation objects are now related by using the property olo:item.
Below are two examples of use cases modelled with help of the Recommendation Ontology. The first one describes an extended music track recommendation and the second one a simple music track recommendation example.
@prefix rec: <http://purl.org/ontology/rec/core#> .
@prefix ex: <http://example.org/> .
@prefix olo: <http://purl.org/ontology/olo/core#> .
@prefix isi: <http://purl.org/ontology/is/inst/> .
@prefix ao: <http://purl.org/ontology/ao/core#> .
@prefix sim: <http://purl.org/ontology/similarity/> .
@prefix is: <http://purl.org/ontology/is/core#> .
@prefix dbtune: <http://dbtune.org/musicbrainz/resource/track/> .
dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3
rec:recommendation ex:AMusicRecommendation .
ex:AMusicRecommendation a rec:RankedRecommendation ;
rec:recommender isi:lastfm ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:097c362d-72b7-4a53-96e2-d9ff02f8be1f ;
olo:index 1
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:161d35d9-3e31-41e9-8392-cf5d2c03b31d ;
olo:index 2
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:093c1742-ebda-45cd-a50c-734e5d92e7f2 ;
olo:index 3
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:0a208327-525a-429b-8e79-51669bfb81f7 ;
olo:index 4
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:0161855d-0b98-4f2d-b2ab-446dbd8d6759 ;
olo:index 5
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:014f2510-e653-43e9-862a-880ac6388bb1 ;
olo:index 6
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:0ab210b0-18c6-4c52-aee7-78f6012b9192 ;
olo:index 7
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:027326ef-1455-48c9-8543-ac908eb71925 ;
olo:index 8
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:04dc3d0b-dff4-41a0-8bf3-12b4b34460a6 ;
olo:index 9
] ;
rec:ranked_recommendation_object [
a olo:Slot ;
olo:item dbtune:0348eea1-8178-4dc1-8a37-d09b5897ace2 ;
olo:index 10
] ;
ao:included_association ex:SimAssociation01 ;
ao:included_association ex:SimAssociation02 ;
ao:included_association ex:SimAssociation03 ;
ao:included_association ex:SimAssociation04 ;
ao:included_association ex:SimAssociation05 ;
ao:included_association ex:SimAssociation06 ;
ao:included_association ex:SimAssociation07 ;
ao:included_association ex:SimAssociation08 ;
ao:included_association ex:SimAssociation09 ;
ao:included_association ex:SimAssociation10 .
ex:lfmTrackSimilarity a sim:AssociationMethod ;
is:info_service isi:lastfm .
ex:Association01 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:097c362d-72b7-4a53-96e2-d9ff02f8be1f ;
sim:weight 1.0 ;
sim:method ex:lfmTrackSimilarity .
ex:Association02 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:161d35d9-3e31-41e9-8392-cf5d2c03b31d ;
sim:weight 0.968842 ;
sim:method ex:lfmTrackSimilarity .
ex:Association03 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:093c1742-ebda-45cd-a50c-734e5d92e7f2 ;
sim:weight 0.547951 ;
sim:method ex:lfmTrackSimilarity .
ex:Association04 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:0a208327-525a-429b-8e79-51669bfb81f7 ;
sim:weight 0.449539 ;
sim:method ex:lfmTrackSimilarity .
ex:Association05 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:0161855d-0b98-4f2d-b2ab-446dbd8d6759 ;
sim:weight 0.401746 ;
sim:method ex:lfmTrackSimilarity .
ex:Association06 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:014f2510-e653-43e9-862a-880ac6388bb1 ;
sim:weight 0.36673 ;
sim:method ex:lfmTrackSimilarity .
ex:Association07 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:0ab210b0-18c6-4c52-aee7-78f6012b9192 ;
sim:weight 0.36142 ;
sim:method ex:lfmTrackSimilarity .
ex:Association08 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:027326ef-1455-48c9-8543-ac908eb71925 ;
sim:weight 0.351277 ;
sim:method ex:lfmTrackSimilarity .
ex:Association09 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:04dc3d0b-dff4-41a0-8bf3-12b4b34460a6 ;
sim:weight 0.350151 ;
sim:method ex:lfmTrackSimilarity .
ex:Association10 a sim:Similarity ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
sim:object dbtune:0348eea1-8178-4dc1-8a37-d09b5897ace2 ;
sim:weight 0.336997 ;
sim:method ex:lfmTrackSimilarity .
This RDF/Turtle representation shows an extended music track recommendation modeled as rec:RankedRecommendation instance. It is based on the music track recommendations of James Brown’s “Get Up (I Feel Like Being a) Sex Machine” from Last.fm. Hence, the subject of the rec:recommendation relation is a resolvable URI to a description of James Brown’s “Get Up (I Feel Like Being a) Sex Machine” at MusicBrainz, modeled and represented as Semantic Graph and provided by DBTune.
Since a rec:RankedRecommendation is a sub class of rec:Recommendation and olo:OrderedList, it can also make use of ordered list features. That means, this
enables the opportunity to also provide an ordered (/ranked) list of recommendation objects (related by rec:ranked_recommendation_object), by hiding the details of their ranking features on this level. These details are provided by further association statements (here sim:Similarity) related by using the ao:included_association property.
Each slot item (related by olo:item) is also a music track description at MusicBrainz, modeled and represented as Semantic Graph and provided by DBTune. Furthermore, each similarity statement (sim:Similarity) includes
- the seed music track (related by sim:subject), on which this similarity calculation is based on,
- the other music track (related by sim:object),
- the weight of the similarity (related by sim:weight) and
- the association (here similarity) method (related by sim:method) of the similarity calculation.
This association method (sim:AssociationMethod) can not be further specified here, because it is based on a proprietary algorithm from Last.fm. Therefore, the complete recommendation (related by rec:recommender) and also the association method itself
(related by is:info_service) is associated to the Information Service Last.fm.
@prefix rec: <http://purl.org/ontology/rec/core#> .
@prefix ex: <http://example.org/> .
@prefix isi: <http://purl.org/ontology/is/inst/> .
@prefix sim: <http://purl.org/ontology/similarity/> .
@prefix is: <http://purl.org/ontology/is/core#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix dbtune: <http://dbtune.org/musicbrainz/resource/track/> .
ex:AMusicRecommendation a rec:Recommendation ;
rec:for dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
rec:recommender isi:lastfm ;
rec:recommendation_audience ex:FunkyPeople ;
sim:subject dbtune:008e72df-6469-4557-8b5b-c54c3285fbd3 ;
rec:recommendation_object dbtune:097c362d-72b7-4a53-96e2-d9ff02f8be1f ;
rec:recommendation_object dbtune:161d35d9-3e31-41e9-8392-cf5d2c03b31d ;
rec:recommendation_object dbtune:093c1742-ebda-45cd-a50c-734e5d92e7f2 ;
rec:recommendation_object dbtune:0a208327-525a-429b-8e79-51669bfb81f7 ;
rec:recommendation_object dbtune:0161855d-0b98-4f2d-b2ab-446dbd8d6759 ;
rec:recommendation_object dbtune:014f2510-e653-43e9-862a-880ac6388bb1 ;
rec:recommendation_object dbtune:0ab210b0-18c6-4c52-aee7-78f6012b9192 ;
rec:recommendation_object dbtune:027326ef-1455-48c9-8543-ac908eb71925 ;
rec:recommendation_object dbtune:04dc3d0b-dff4-41a0-8bf3-12b4b34460a6 ;
rec:recommendation_object dbtune:0348eea1-8178-4dc1-8a37-d09b5897ace2 ;
sim:method ex:lfmTrackSimilarity .
ex:lfmTrackSimilarity a sim:AssociationMethod ;
is:info_service isi:lastfm .
ex:FunkyPeople a foaf:Group .
This RDF/Turle representation is a simplified example from the extended music track recommendation example above. It is simply stripped down to its high level recommendation. The target, where the recommendation is for, is now related by the inverse property of rec:recommendation, rec:for. Furthermore, it includes a fictional audience group (ex:FunkyPeople), which is related by the property rec:recommendation_audience. Finally, the recommendation objects are now simply related by the property rec:recommendation_object. Of course, this doesn’t include the ranking, it is now an unordered list. However, it still includes the relation to its similarity method (ex:lfmTrackSimilarity).
The Recommendation Ontology and the illustrated examples above demonstrates the reutilization, specialization and application of concepts of existing ontologies. I like to invite you to create further, more specialized concepts and properties, which are based on the introduced ontologies, or further examples, which make use of the Recommendation Ontology, e.g. suggested items from Amazon, which are maybe also modeled with help of the GoodRelations vocabulary.
I would like to thank very much the whole Music Ontology Specification mailing list group to help to establish this multiple purpose recommendation ontology and especially Kurt Jacobson for providing everytime new input and ideas. Please feel free to reuse and extend the Recommendation Ontology also for your own projects (let me know your use cases 😉 ). Comments, suggestions and critics are also very welcome.
Cheers,
Bob