Schéma de base de données avec relations sémantiques

WRInaute accro
Bonsoir


Je suis en passe de concrétiser un projet sur lequel je travaille disons... depuis un certain temps :mrgreen: et qui met en oeuvre un certain nombre de relations entre les mots que comportera la base de données (ces "mots" ou expressions clé permettront la classification de photographies)

Le principe de mon projet repose non pas sur des thésaurus pré mâchés comme on en trouve sur le net (et ne collant pas forcément aux besoins réels de l'utilisateur) mais à une construction au fil du temps par l'utilisateur / administrateur (il n'est pas question d'aborder ici la méthodologie : l'utilisateur ce sera moi, en tout cas dans un premier temps :) )

Parmi les relations prévues :
- synonymes
- hypéronymes (ce qui correspond à une hiérarchie : "mammifère / ongulé / suidé / sanglier" par exemple, "mammifère" est un hypéronyme d'ongulé, qui est lui-même hypéronyme de suidé, etc.)
- holonymes (principe légèrement différent en ce sens que la hiérarchie fonctionne par partitionnement physique : sanglier est holonyme de groin, ou poisson est holonyme d'écaille, par exemple)
- homonymes (seront gérés certainement de manière automatique par un algorithme soundex... à voir ce que ça donne sachant que la BDD sera bilingue !)

Seulement voilà, j'ai comme le sentiment que j'oublie des choses. Comment gérer aux mieux les singuliers / pluriels / genres / variantes d'âges ou je ne sais quoi encore ?

Par exemple : chevreuil, brocard (mâle), chevrette (femelle), chevrillard (jeune de plus de 6 mois), faon (jeune de moins de 6 mois), etc.

Ce sont des synonymes, mais qui ont une relation spécifique entre eux et un degré de synonymie si j'ose dire qui est différent.


Dans mon schéma, les mots sont liés entre eux par :
- hypéronymie
- holonymie
- synonymie (avec une importance de 1 à 5, 5 étant un parfait synonyme, 1 étant un synonyme "plus éloigné" ; je n'ai pas forcément le besoin de matérialiser la relation parent/enfant par exemple, il faut juste que je sache que "faon" est "moins synonyme" que "chevrette" pour un "chevreuil")
- relation phonétique (homonymes)

Ajoutons là-dessus une non correspondance systématique d'une langue à une autre :twisted: (en anglais, sauf erreur de ma part il n'y a pas de traduction pour "brocard", le chevreuil mâle !), j'en passe et des meilleures !

Enfin, j'aimerais ajouter des couplages de mots comme "chevreuil femelle" qui est synonyme de "chevrette" ! Dois-je en rajouter une couche, ou dois-je considérer "chevreuil femelle" comme un mot informatiquement parlant ? (sachant que si oui, il faudra aussi considérer son inverse : "femelle chevreuil" !)


Est-ce que certains d'entre vous ont déjà travaillé sur ce type de projet ? Je recherche éventuellement des exemples...
 
Olivier Duffez (admin)
Membre du personnel
ton projet semble passionnant en tout cas ! je n'ai pas vraiment la possibilité de t'aider mais j'ai qq questions :
- as-tu prévu un système de lemmatisation quelque part ?
- je ne connaissais pas l'holonymie, ça semble proche de la métonymie non ?
- peux-tu nous expliquer un peu plus comment tu comptes exploiter tout ça concrètement ? Ca va être utile à l'internaute ? Au maillage interne ? au référencement ?
 
WRInaute impliqué
Un gros morceau ce projet, en tout cas tu as l'air de bien avoir identifié tous les cas qui t'intéressent, et c'est le plus important pour ensuite structurer la base.

Bon courage!
 
WRInaute accro
Pas de système de lemmisation prévu (pas encore en tout cas) ; je ne connaissais pas la métonymie mais ça ne correspond pas vraiment à l'holonymie.

Au niveau des objectifs, il s'agit de proposer un ensemble fini d'expressions clé menant à des galeries photographiques correspondant à l'expression clé de la page en question (avec mise en exergue d'une ou plusieurs photos plus particulièrement - je n'ai pas encore défini ce point) ; cet ensemble d'expressions clé serait évidemment fortement maillé en interne...

Je dispose personnellement d'une photothèque de +30000 images (on dira environ 10000 images réellement vendables) ; l'objectif est donc de créer une "longue traîne" la plus vaste possible au niveau du champs lexical, avec à chaque expression clé une galerie pouvant répondre aux besoins de la personne qui recherche une photo.

Mon objectif est donc de créer une galerie beaucoup plus axée diversité au niveau des mots / contenu texte mais aussi des photos, de manière à minimiser le taux de rebond et permettre à l'internaute de naviguer / filtrer ses recherches avec un système à facettes.

L'interface d'admin sera développée en technologie .Net (application Windows), avec gestion des champs IPTC de manière à pouvoir reprendre plus ou moins automatiquement l'indexation existante (chez moi gérée avec Adobe Lightroom 2.3) ; je précise qu'à la base je suis développeur spécialisé en technos .Net (10 ans d'expérience en applis de contrôle de gestion...)


(actuellement avec un site comportant un peu plus de 250 photos très basiquement classées en catégories, j'arrive à faire 1200 à 1800 VU/jour selon les périodes de l'année... Avec un truc chiadé et quelques milliers de photos en ligne dans plusieurs centaines de thèmes, ça devrait le faire :mrgreen: ; l'objectif final étant d'exploser mon CA photo, de simplifier ma gestion des ventes, de gérer simplement les photos en droit géré - c.à.d que je diffuse via des agences - et de reprendre les parts de marché à certains discounters d'images qui cassent le marché en faisant bénéficier de mon projet à d'autres photographes !)

Moi, ambitieux ?... ;)
 
Nouveau WRInaute
Pour la classification de contenu, on parle me semble-t-il de "taxinomie". Tout repose sur la structure des bases de données et, en particulier, des relations entre tables. Et, ce n'est pas très éloigné d'un système de tags classique, chaque contenu étant associé à un ou plusieurs mots-clés synonymes, un ou plusieurs mots-clés homonymes, etc.

Pour le référencement, l'intérêt est évident :)

Seul bémol, le travail de classification peut s'avérer particulièrement long. C'est un travail de fourmi, si je peux me permettre...
 
WRInaute discret
Je répond rapidement, étant comme d'habitude à la bourre :D

1) Pour tes synonymes, préfère un poids codé en double sur [0, 1] que des entiers. Ca sera bien plus efficace pour mettre à jour (par exemple en fonction de ce que les gens suivent effectivement pour trouver une photo).
2) Pour ton exemple : "chevreuil femelle", il faut que tu remontes à un niveau de concept. Soit tu gère tout en tant que concept, soit que les associations. Pour l'ordre tu t'en fous, il suffit de faire comme cela :
NEW_CONCEPT = SUB_CONCEPT1 [RELATION_OPERATOR] SUB_CONCEPT2 ...
les relations étant les opérateurs logiques (or/and/...).
3) Tes hypéronymes correspondent à une taxonomie, non ? Fais très attention, ca prends énormément de temps à faire.
4) Tes holonymes peuvent se voir comme la chercher si un concept appartient à la description d'un autre concept, non ? Ca me semble le plus simple pour rester générique.
5) Pour la traduction, je ne comprends pas ce qui te bloque. Si un mot n'est pas directement traduit par un autre (brocard -> male deer), ce n'est pas le cas avec un concept, puisqu'il suffit alors d'ajouter des sous-concepts pour "compléter" la description.

Je me demande néanmoins si des algos de type Filtrage Collaboratif, ne sont pas plus adapté à ce genre de traitement. Si tu reste dans le domaine animalier, alors ton projet me semble réalisable.
Si tu veux faire quelque chose de plus générique et aussi détaillé, oublie si tu es seul, tu vas devenir fou.
 
WRInaute accro
Merci pour ton intervention éclairée.

Effectivement les hypéronymes correspondent peu ou prou à une taxonomie ; cela prend effectivement du temps, mais il est indispensable de pouvoir construire quelque chose d'assez "simple" (par rapport à ce qui existe, je reprends l'exemple des animaux : il existe plusieurs classifications possibles des espèces : systématique, scientifique, etc. Cela ne m'intéresse pas ! L'objectif est de construire une classification personnelle et d'avoir surtout un outil permettant de gérer cela très simplement... Les performances et l'ergonomie de l'outil d'administration en amont sont donc extrêmement importantes !)


À terme, j'aimerais aussi (je n'en avais pas parlé) pouvoir définir des agrégats multi-critères spécifiques classés par thèmes. Par exemple, sur le thème "Animaux" nous pourrions définir les critères suivants :
- taxonomie (genre / groupe / sous-groupe / espèce / sous-espèce... avec gestion des synonymes)
- sexe (mâle / femelle)
- âge (adulte / juvénile / etc.)
- milieu (forêt / plaine / etc.)
- couleurs (noir / blanc / rouge / etc.)
- types de couleurs (uni / multicolore)


Cela permettrait par exemple de rechercher les oiseaux multicolores avec du noir vivant dans les forêts, ou les mammifères nocturnes vivant dans les jardins. Ce avec un moteur de recherche à facettes, qui permettrait donc d'avoir un ensemble fini de combinaisons (éventuellement couplé à une zone de recherche guidée à auto-complétion)

Mais bon j'ai dans un premier temps si j'ose dire "simplifié" mon projet, de manière à pouvoir sortir quelque chose pour l'été. Donc oubliez la partie "à facettes" ;)
 
WRInaute discret
cedric_g a dit:
L'objectif est de construire une classification personnelle et d'avoir surtout un outil permettant de gérer cela très simplement... Les performances et l'ergonomie de l'outil d'administration en amont sont donc extrêmement importantes !)

Justement, c'est ce que je te dis. A moins d'avoir un objectif limité (domaine animalier, ...) faire ça de façon générique ne sera pas
faisable.

cedric_g a dit:
Mais bon j'ai dans un premier temps si j'ose dire "simplifié" mon projet, de manière à pouvoir sortir quelque chose pour l'été. Donc

Je te conseillerais effectivement de développer uniquement une partie (les synonymes) de ton projet. Une fois fait, tu t'apercevra que c'est peut-être suffisant, ou tu auras une idée plus claire de ce qui est nécessaire.

Par exemple, plutôt que de rechercher des photos avec des descriptions similaires, tu pourrais directement faire la recherche sur l'image (histogramme de couleur / forme / ... ). Faire l'inverse, en étant en plus exhaustif sur la description des descripteurs, me parait trop gourmand.
 
WRInaute accro
Concernant les galeries, 1 site = 1 thématique (j'ai toujours fait ainsi... Les résultats sont bien meilleurs au niveau du positionnement que les galeries généralistes)

De fait, 1 thématique = 1 base de données (en réalité non, mais bon vous avez compris le principe : chaque site aura son propre domaine, et donc son propre paramétrage)


Par exemple actuellement mon site -http://www.aube-nature.com est dédié à la photographie de nature, et -http://champagne-ardenne.aube-nature.com est lui décliné plus spécifiquement sur ma région. Et pourtant derrière, je n'ai qu'un seul outil et qu'une seule base de données ;)
 
WRInaute discret
Dans ce cas tu veux constituer une base complète sur potentiellement tous les sujets, en permettant de lier chaque concepts à d'autres en fonction de critères de symétrie, de transitivité ou de sa présence dans la description du concept courant, de façon manuelle.

Et là, à mon humble avis, ton projet n'est plus faisable* puisqu'il revient à définir un système capable de s'auto-décrire (à un concept est liée une série d'autre concepts via une relation définie par un opérateur (qui peut être lui même un concept)), non pas sur une base définie et très limitée, mais sur "tout".

*pas techniquement, mais tout simplement par rapport au temps nécessaire à sa conception
 
WRInaute accro
Mmmm... Oui et non.

Les classifications à facettes existent déjà au niveau des métadonnées des banques d'images, il convient juste de les transposer à un système de navigation qui sera lui un peu plus simplifié et "fini" au niveau des dimensions possibles.

Quand on gère une banque d'images de plusieurs dizaines de milliers de photographies, sans système de classement point de salut ;)
 
WRInaute discret
Mmmmmh ça donne faim tout ça :D. Personellement j'ai un projet qui pourrait utiliser le même genre de technique, mais avant de me lancer je digère les informations que je croise par hasard sur le net (si qqn a un forum ou un site de référence sur la sémantique et la recherche je suis preneur :D).

Du coup j'ai appris pas mal de chose que j'ignorai notamment le concept de lemmatisation (merci Olivier), par contre je vois pas trop comment faire ça algorithmiquement. Le stemming à l'air beaucoup plus simple (avec libstemmer) et c'est certainement un bonne base pour faire de la lemmatisation.

Par contre concernant les concepts je ne vois pas trop comment déterminer les concepts.

Est ce que vous feriez ça à partir des mot-clés ou des stems ou d'autres choses (par regroupement ...)?
 
WRInaute discret
Je ne réponds pas à la question, mais pour ceux qui ne connaissent pas, ça peut être intéressant : la base Wordnet.
C'est en anglais et ça comprend beaucoup de relations sémantiques. La base n'est surement pas suffisamment spécialisée pour l'utilisation de cedric_g mais ça peut donner des idées. Il est possible de la télécharger en mysql, la prise en main est assez longue mais c'est très instructif.
 
WRInaute occasionnel
Est ce que tu pourrais creuser un peu le modèle de base que tu adosserais à ton système ?
Je trouve le concept ultra intéressant : j'ai parcouru snowball, pour le stemming, c'est tout aussi passionnant.
Etant un pro-php, ce concept objet de Concept, avec une interface abstraite, qui apporte la possibilité de construire un objet Concept à partir d'une association de concept, ça m'éclate !!
 
Nouveau WRInaute
Je comprends fort bien ta réflexion car je travaille également sur la mise en place d'un projet de ce type, sur un tout autre sujet bien sûr!
Je compte également bâtir plusieurs portails autour d'une base de données sémantique unique.
Depuis quelques mois je me passionne pour ces techniques d'ingénierie des connaissances mais c'est vaste et complexe.
Il faut avant tout créer une ontologie pour définir l'ensemble du vocabulaire de ton domaine et les relations entre tous ces termes.
La création de l'ontologie peut se faire avec un logiciel comme "Protégé".
Je connais les grandes lignes mais je n'ai pas encore développé ma propre ontologie, je dois d'abord trouver une formation pointue sur ce thème.
Ensuite je compte développer mon premier portail basé sur cette ontologie avec Drupal, l'un des seuls CMS gratuit qui supporte cette technologie. Drupal gère aussi les recherches à facettes.
Je suis également intéressée par tous les projets en cours dans ce domaine pour voir d'autres exemples. C'est un sujet absolument passionnant et qui ouvre des possibilités énormes pour faire évoluer les méthodes de recherche sur Internet.
 
WRInaute accro
salut cedric,

Dans mon jeune temps (quand le poil que j'ai dans la main était encore a l'etat de duvet), j'ai bossé sur un truc avec des contraintes de même nature. Je devais gérer des trucs mais sans savoir à priori lesquels, ni en quelles quantité et sans savoir quel usage il en serait fait ! Ca c'est un foutu cahier des charges non :mrgreen:

Au final j'étais revenu au fondement de merise, à savoir les entités et les associations et tout ca ramené dans une seule table centrale appelée RELATIONS. Il y avait 3 champs (les deux entités et la relation).

Simplifié ca donnait un truc de ce style :

A est lié par le lien 1 à B
A est lié par le lien 2 à C
B est lié par le lien 3 à D

Maintenant
A = M. dupon
B = Mme Durant
C = Societe IBM
D = Société APPLE

lien 1 = est le mari de
lien 2 = est le pdg de
lien 3 = est filiale de

Maintenat je te laisse traduire et imaginer le potentiel. Virtuellement c'est ilimmité en terme descriptif puisque tu crées autant de lien que tu souhaites. Ca fait vite de smilliers ou dizaine de milliers d elien et donc il convient ensuite de structurer un peu ces lien en catégories/sous catégories mais ca c'ets facile. Bien sur en interne, tu stokes des clés uniques et donc ca pese quelques octets et donc 100.000 relations ca pese disons 1 méga à peine (tu as donc tout loisir de colelr ca en mémoire et de boucler dedans à la vitesse de l'eclair (zero accès disques) pour combiner et rechercher ...

12-18-24 étant la premier ligne ci dessus personne 12 liée par le lien 18 à la personne 24).

Voila surement une piste a creuser pour ta problématique. Perso je gérais un table comportant environ 20.000 liens et 3 millions de relations et ca posait aucun probleme (sur les micro d'il y a 10 ans ... fallait juste coder sérré).

Mais plus générique est non limitatif tu peux pas ! Tout se passe ensuite dans la création des liens (est l'ami de, est l'ennemi de, détient des part dans, est concurent de, connait, a parlé de, joue au tennis avec, etc etc etc illimité !

L'étape au dessus c'ets le réseau neuronal mais la c'est une autre affaire à coder !!!!
 
WRInaute accro
Bonjour

Merci pour votre passage :)

Depuis j'ai revu mes "prétentions" légèrement à la baisse, même si je m'approche d'une solution "à la Zecat" ;)

Je me suis posé la question de savoir si cela valait le coup de monter une usine à gaz pour finalement si peu de choses en plus, car en terme de recherches cela ne représentera finalement pas tant de variantes que cela.

Maintenant, la question que je me pose est : une page par photo ou pas ? (sachant que je peux potentiellement avoir 50 photos sur même sujet !!! Risque avéré de duplicate...)
 
WRInaute accro
Up !

Un petit point sur l'avancement de mon projet... J'ai finalement opté pour un "simple" thésaurus, car j'ai au final calqué la hiérarchisation des mots-clés sur celle d'Adobe Lightroom (logiciel pro orienté photographes, permettant entre autres la gestion de photothèques - je gère personnellement près de 37000 photos avec :twisted: )

Sont donc gérés nativement :
- les hiérarchies (hypéronymes)
- les synonymes*

Les homonymes (via la phonétique : mise en oeuvre d'un algorithme de soundex ou équivalent) seront gérés si j'ose dire automatiquement au niveau du front-office web.

Je ne vais pas aller plus loin pour le moment.


* Au niveau des synonymes : comme Lightroom n'est pas multilingue, j'utilise cette possibilité pour intégrer les traductions anglaises. Vous n'êtes pas sans deviner que cela va poser quelque peu soucis au niveau de mon logiciel d'administration car je vais devoir mettre en oeuvre un outil pour "trier" les mots-clés selon les langues :( (mais je n'ai pas le choix : une très grande majorité des photographes que je connais utilisent Lightroom... Outil incontournable et sans import depuis cet outil, mon projet ne sera pas viable)

Voilà ! La suite au prochain épisode !
 
Discussions similaires
Haut