Transposer Tf-Idf sur des graphes

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é.

 

A propos Moissinac

Maitre de conférence à Télécom Paris, Département Image, Données, Signal - Groupe Multimédia Jean-Claude Moissinac a mené des recherches sur les techniques avancées pour la production, le transport, la représentation et l’utilisation des documents multimédia. Ces travaux d'abord ont évolué vers la représentation sémantique de données liées au multimédia (process de traitement de médias, description d'adaptations de média, description formelle d'interactions utilisateurs). Aujourd'hui, les travaux portent sur la constitution de graphes de connaissances. Principaux axes de recherche actuel : représentations sémantiques de connaissances, constitution de graphes de connaissances, techniques d'apprentissage automatique sur ces graphes
Ce contenu a été publié dans Outils, SPARQL. Vous pouvez le mettre en favoris avec ce permalien.