Tf-Idf est une méthode de pondération, souvent utilisée pour évaluer l’importance d’un mot dans un document.
L’idée est ici d’évaluer l’importance d’un prédicat ou d’une paire prédicat-valeur pour une entité d’un graphe sémantique.
Tf-Idf sur les prédicats
Nous allons, pour cette première évaluation, considérer qu’une entité d’un graphe est représentée par les prédicats qui la décrivent. L’équivalent d’un document dans l’utilisation classique de Tf-Idf est donc une entité et sa liste de prédicats (on pourrait étendre ça sur plusieurs niveaux de voisinage de l’entité).
Alors, la fréquence « brute » d’un prédicat est simplement le nombre d’occurrences de ce prédicat utilisés par l’entité considérée (on parle de « fréquence » par abus de langage). On peut choisir cette fréquence brute pour exprimer la fréquence d’un prédicat. Pour les documents, on peut aussi utiliser le nombre d’occurrences d’un mot relativement au nombre de mots du document. Lorsqu’on traite des documents de longueur à peu près homogène, cela n’a pas beaucoup d’importance. Dans le cas contraire, cela peut prendre vite de l’importance. De façon analogue, nous proposons donc d’utiliser le nombre d’occurence d’un prédicat associé à une entité normalisé par le nombre de prédicats total associé à cette entité.
to(p,e)=nombre d’occurrences de p pour l’entité e
s’obtient par exemple sur notre graphe <http://givingsense.eu/datamusee/onto/parismusees> avec la requête sparql
select (count(?o) as ?c) where { graph <http://givingsense.eu/datamusee/onto/parismusees> { <entité visée> <prédicat visé> ?o } }
tp(e)=nombre de prédicats associés à e
s’obtient par exemple sur notre graphe <http://givingsense.eu/datamusee/onto/parismusees> avec une requête sparql sur le modèle
select (count(?p) as ?c) where { graph <http://givingsense.eu/datamusee/onto/parismusees> { <entité visée> ?p []} }
tf(p,e)= to(p,e)/tp(e)
La fréquence inverse de document (IDF-inverse document frequency) est une mesure de l’importance du terme dans l’ensemble du corpus de documents. Pour nous, il va s’agir d’évaluer l’importance d’un prédicat sur l’ensemble du graphe.
Nous allons l’évaluer à l’aide du logarithme de l’inverse de la proportion d’entités qui utilisent ce prédicat.
Soit
D = nombre d’entités dans le graphe
s’obtient par exemple sur notre graphe <http://givingsense.eu/datamusee/onto/parismusees> avec la requête sparql
select (count(distinct ?s) as ?c) where { graph <http://givingsense.eu/datamusee/onto/parismusees> { ?s ?p []} }
d(p )= nombre d’entités qui utilisent le prédicat p
sur le graphe précédent, cela s’obtient pour les prédicats les plus utilisés avec
select ?p (count(distinct ?s) as ?c) where { graph <http://givingsense.eu/datamusee/onto/parismusees> { ?s ?p []} } group by ?p order by desc(?c)
alors
idf(p) = log(D/d(p))
et
tfidf(p,e) = tf(p,e)*idf(p)
Par exemple, pour le graphe précédent
D=255075
* pour le prédicat <http://dbpedia.org/ontology/wikiPageWikiLink> d(<http://dbpedia.org/ontology/wikiPageWikiLink>) = 118659 * pour le prédicat <http://purl.org/dc/terms/subject> d(<http://purl.org/dc/terms/subject>) = 2079 * pour le prédicat <http://xmlns.com/foaf/0.1/primaryTopic> d(<http://xmlns.com/foaf/0.1/primaryTopic>) = 1793 * pour le prédicat <http://www.w3.org/2002/07/owl#sameAs> d(<http://www.w3.org/2002/07/owl#sameAs>) = 1581
pour l’entité <http://fr.dbpedia.org/resource/Paris_Musées>, avec la requête
select ?p (count(?p) as ?c)where { graph <http://givingsense.eu/datamusee/onto/parismusees> { <http://fr.dbpedia.org/resource/Paris_Musées> ?p ?o } } group by ?p order by desc(?c)
on trouve les prédicats suivants (et un total de 84 prédicats)
<http://dbpedia.org/ontology/wikiPageWikiLink> 48 <http://fr.dbpedia.org/property/wikiPageUsesTemplate> 8 <http://purl.org/dc/terms/subject> 5 <http://www.w3.org/2002/07/owl#sameAs> 5 <http://dbpedia.org/ontology/abstract> 3 <http://www.w3.org/2000/01/rdf-schema#comment> 3 <http://www.w3.org/2000/01/rdf-schema#label> 3 <http://dbpedia.org/ontology/wikiPageExternalLink> 2 <http://dbpedia.org/ontology/wikiPageID> 1 <http://dbpedia.org/ontology/wikiPageLength> 1 <http://dbpedia.org/ontology/wikiPageOutDegree> 1 <http://dbpedia.org/ontology/wikiPageRevisionID> 1 <http://www.w3.org/ns/prov#wasDerivedFrom> 1 <http://xmlns.com/foaf/0.1/homepage> 1 <http://xmlns.com/foaf/0.1/isPrimaryTopicOf> 1
Et, par exemple, les tfidf suivants
tfidf(<http://dbpedia.org/ontology/wikiPageWikiLink>) = 0,63
tfidf(<http://purl.org/dc/terms/subject>) = 0,41
tfidf(<http://xmlns.com/foaf/0.1/primaryTopic>) = 0
tfidf(<http://www.w3.org/2002/07/owl#sameAs>) = 0,43
Extensions
Nous pouvons aussi faire ce type de calculs sur les prédicats utilisés par les classes d’entités ou sur les paires (prédicats, valeurs) utilisés. Nous pouvons aussi considérer les prédicats entrant vers une entité.