Premiers pas avec les graphes de connaissances dans RedisGraph

Premiers pas avec les graphes de connaissances dans RedisGraph

Un graphe de connaissances peut être une simple structure de données qui représente ce que nous savons d’une partie du monde réel. Par exemple, imaginez que vous recherchiez un produit sur votre site d’achat préféré. Vous pouvez rechercher des “lacets scintillants” et vous attendre à voir tous les produits de laçage correspondant à ce terme spécifique.

Mais comment le site sait-il afficher d’autres pièces de chaussures, ou les chaussures elles-mêmes ? La réponse simple serait des produits qui correspondent à un seul terme (par exemple, “chaussure”). Mais en tant que personnes connaissant le monde qui nous entoure, nous en savons beaucoup sur ce choix de recherche particulier qui peut aider à fournir de meilleures réponses.

Ce billet de blog explore le fonctionnement des graphes de connaissances, leur utilisation en informatique et leur utilisation avec le module RedisGraph de Redis Enterprise. Nous allons explorer brièvement comment vous pouvez utiliser les requêtes Cypher pour accéder aux informations dans un graphe de connaissances. Enfin, nous parlerons de l’utilisation de graphes de connaissances à grande échelle et discuterons de leurs utilisations futures. Si vous souhaitez créer un graphe de connaissances pour améliorer vos applications d’apprentissage automatique, c’est un excellent point de départ.

image1 9

Le terme de recherche est un type particulier de produit (un lacet avec un revêtement) que nous pouvons représenter dans un ontologie d’objets dans un graphe de connaissances. Bien qu’il puisse sembler y avoir beaucoup de choses dans le graphique ci-dessus, je l’ai simplifié en deux types de relations : “est un” (un sous-type de catégorie) et “a un» (une partie de quelque chose). Par exemple, un lacet est un laçage, une partie d’une chaussure, et a un revêtement, ou une chaussure à lacets a un lacet. L’algorithme n’a aucune connaissance a priori du monde en dehors de ce que nous avons encodé dans le graphe.

Lorsqu’un utilisateur recherche des “lacets scintillants”, un algorithme de recherche peut identifier une correspondance directe dans l’ontologie. Avec le graphe de connaissances, l’algorithme peut maintenant comprendre qu’un tel article a un revêtement pailleté et fait partie d’une catégorie plus large d’articles appelés « lacets » ou encore « laçage » (les flèches violettes). Il peut également suivre la relation « a » avec « chaussure » ​​pour comprendre qu’il fait partie d’un article plus important dans le catalogue de produits.

Lorsque nous commercialisons des produits, nous avons des choix quant à ce que nous pouvons faire avec les relations. Alors que le choix simple est d’afficher différentes catégories de lacets, peut-être voulons-nous montrer un anti-motif : des chaussures sans lacets ! Nous pouvons suivre le chemin “a un” vers les chaussures et interroger le graphique pour les produits qui n’ont pas de partie de lacet (les flèches magenta) et l’afficher comme résultat alternatif.

De même, peut-être que le consommateur essaie de remplacer des lacets cassés et nous ferions mieux de lui montrer de nouvelles chaussures qui correspondent à ses préférences. Dans notre ontologie, les chaussures ont également des revêtements (les flèches orange) et nous pouvons trouver des produits qui ont à la fois des lacets à paillettes et un revêtement à paillettes (également en orange). Peut-être préféreraient-ils une nouvelle chaussure fabuleuse plutôt que de remplacer ces lacets à paillettes cassés ?

Graphes de connaissances en informatique

Alors que la technique d’utilisation des structures de données de graphes existe depuis longtemps en informatique, le terme « graphe de connaissances » a été popularisé par Google en 2012. L’utilisation d’un graphe comme base de représentation des connaissances a une longue histoire, depuis les débuts de Web avec RDF (1997) à aujourd’hui, où il est souvent utilisé dans divers domaines de l’apprentissage automatique (ML), du traitement du langage naturel (NLP) et de la recherche.

Les graphes de connaissances sont souvent conceptualisés comme un moyen de capturer ce que nous savons sur un domaine particulier. Le graphique représente les termes, les relations et les instances de faits et de concepts. Ce que nous savons est représenté comme des données pouvant être traitées par des algorithmes, plutôt que comme des algorithmes qui codent les connaissances sous forme de règles écrites en code.

Cette représentation des connaissances sous forme de données dans un graphe est une distinction importante qui rend l’utilisation des graphes de connaissances importante pour la recherche et l’inférence de modèle dans l’apprentissage automatique. Ce que nous pouvons comprendre du monde peut être encodé et modifié au fil du temps au fur et à mesure que nous apprenons, sans nécessairement réécrire tous nos composants logiciels. À leur tour, les modèles peuvent apprendre en se réentraînant en permanence sur les informations encodées dans les graphes de connaissances. Ce cycle est devenu de plus en plus important pour les applications où l’échelle des données est massive et ne cesse d’augmenter.

Premiers pas avec RedisGraph

Entreprise Redis RedisGraph peut aider à charger et à utiliser des ontologies lors de la création d’infrastructures de graphes de connaissances. La structure de l’ontologie devient un ensemble de nœuds et d’arêtes de graphe avec des étiquettes qui peuvent être interrogées via Cypher et recherchées via RediRecherche. Un cas d’utilisation d’ontologie simple, comme la recherche d’un terme référencé et l’utilisation des relations dans le graphique pour suivre les bords du graphique afin de trouver des synonymes, des superclasses ou d’autres termes associés, peut être aussi simple qu’une seule requête Cypher.

Pour les domaines de la biologie/biomédical, par exemple, il existe des ontologies développées par la communauté disponibles au Fonderie d’ontologie biologique et biomédicale ouverte (OBO). Les ontologies sont disponibles dans l’OBO et CHOUETTE formats et couvrent une variété de domaines. Compte tenu de la pandémie actuelle, examinons Ontologie des maladies infectieuses à coronavirus.

Il existe également une bibliothèque Python, appelée pygobo, que j’ai développé pour lire et transformer les ontologies OBO en un graphe de propriétés utilisable avec RedisGraph. L’ontologie des maladies infectieuses du coronavirus est distribuée au format OWL et donc, une fois que nous convertir au format OBOnous pouvons charger l’ontologie et jeter un œil à sa structure.

Examinons cette ontologie en démarrage d’une instance RedisGraph locale:

% docker run -p 6379:6379 redis/redisgraph

On peut alors charger l’ontologie, ici appelée localement « cido.obo » :

% pip install pygobo
% python -m pygobo load cido.obo --graph cido

Une fois cette opération terminée, l’ontologie a été chargée dans un graphe appelé “cido”. La structure de ce graphique est documenté sur GitHub, mais voici un résumé simple : il existe des nœuds étiquetés Ontologie et Terme, les ontologies ont une relation « terme » et les termes se rapportent aux termes avec une relation « is_a ». Par exemple, nous pouvons interroger le terme « médicament antiviral » avec :

MATCH (r:Term) WHERE r.name="antiviral drug" RETURN r

Une requête plus intéressante serait de récupérer toute la hiérarchie des termes liés aux médicaments antiviraux qui se situent dans une certaine profondeur de la relation « is_a ».

MATCH (r:Term) WHERE r.name="antiviral drug"
MATCH p=(:Ontology)-[:term]->(:Term)<-[:is_a*1..3]-(r)
RETURN p

La RedisInsight La visualisation ci-dessous montre les relations de tous les chemins renvoyés dans cette requête. En bas à droite de l’image se trouve le nœud “médicament antiviral” que nous avons choisi comme racine. Au milieu se trouve le nœud d’ontologie. Les flèches jaunes entre les nœuds indiquent la relation “is_a” entre les termes. Enfin, les flèches grises montrent la relation de terme entre le nœud d’ontologie et les nœuds de terme.

image2 8

Dans la visualisation, nous pouvons suivre les relations “est un” du nœud “médicament antiviral” dans le coin droit à “agent antiviral” et “médicament antimicrobien”. Ces deux éléments conduisent à un « agent antimicrobien ». Ce sous-graphe récupéré par une simple requête nous donne un ensemble croissant de catégories et une compréhension de la relation “est un”. Si nous souhaitons rechercher un traitement alternatif pour un médicament en particulier, traverser ces relations nous permet de découvrir une catégorie plus large ou une catégorie alternative.

Notez que l’ontologie elle-même n’a pas de données d’instance. C’est-à-dire qu’il n’y a pas de médicaments portant l’étiquette “médicament antiviral”. Si nous voulons utiliser cette ontologie avec une base de données de médicaments, nous inclurons simplement l’identifiant du terme nœud (c’est-à-dire la propriété « id »), qui est garanti comme étant une valeur unique. Ensuite, les requêtes peuvent être utilisées pour naviguer d’un résultat dans la base de données de médicaments vers l’ontologie.

Par exemple, si une base de données de médicaments est étiquetée avec “CHEBI:36044” (médicament antiviral), cette simple requête découvrira les termes de superclasse “CHEBI:22587” (agent antiviral) et “CHEBI:36043” (médicament antimicrobien) :

MATCH (r:Term) WHERE r.id='CHEBI:36044'
MATCH (t:Term)<-[:is_a]-(r)
RETURN t.name,t.id

Ces termes peuvent être utilisés comme paramètres de recherche supplémentaires qui peuvent élargir les résultats de recherche de la base de données sur les médicaments. Bien que très simple, ce type de raisonnement ontologique permet aux algorithmes de recherche de la base de données d’être indépendants de l’organisation des termes.

Utiliser des graphes de connaissances à grande échelle

Les graphes de connaissances sont une ressource d’informations essentielle pour diverses applications évolutives de l’apprentissage automatique dans la recherche et l’inférence, comme nous l’avons montré avec des exemples de vente au détail et médicaux. Un graphe de connaissances peut être utilisé pour étendre les aspects sélectionnés à la main d’une ontologie dans les instances de données qui se rapportent aux éléments de l’ontologie. Les instances de données sont souvent annotées, manuellement ou automatiquement par des algorithmes, avec des termes issus des ontologies.

Par exemple, le Ontologie des gènes a été utilisé pour annoter des articles dans PubMed afin que les algorithmes de recherche puissent appliquer un raisonnement logique aux termes de l’ontologie sur la fonction des gènes. L’étiquetage des résumés dans PubMed avec des termes d’ontologie étend les classifications de l’ontologie aux métadonnées sur les articles. Pourtant, cela a été initialement fait en grande partie par l’annotation humaine et la conservation des étiquettes.

Le résultat de l’extension de l’ontologie dans les données d’instance est ce qui fait du résultat un graphe de connaissances – il inclut à la fois les données et les informations sur les données dans un grand graphe. Le défi ici est de faire ce genre d’analyse à grande échelle. La conservation humaine de l’annotation des données, bien que très importante dans certains cas, ne s’adaptera pas aux vastes quantités de données actuellement créées.

Lors du traitement d’une grande quantité de données, de l’inférence via l’apprentissage automatique, de l’analyse de texte via le traitement du langage naturel et de la collecte de données sur le Web via des annotations d’informations organisées par l’homme (c’est-à-dire, schema.org annotations) permettent toutes de stocker et de catégoriser une grande variété de données dans un graphe de connaissances. La grande échelle des données traitées permet aux algorithmes de naviguer d’une instance particulière à un très grand ensemble d’éléments similaires en passant des données d’instance dans le graphique à travers les termes de l’ontologie à un autre ensemble de données connexes. Les termes et les relations de l’ontologie nous permettent de savoir comment deux éléments spécifiques sont liés l’un à l’autre dans le cadre d’un très grand ensemble d’informations.

Le point critique ici pour l’évolutivité est que la partie ontologique du graphe de connaissances est beaucoup plus petite que les données d’instance. Nous pouvons facilement stocker les ontologies dans RedisGraph, sous la forme d’un seul graphique ou de plusieurs graphiques, et utiliser les autres structures de données dans Redis ou ailleurs pour stocker des données d’instance. Il n’est pas nécessaire d’utiliser des représentations basées sur des graphiques pour les données d’instance, qui peuvent déjà être tabulaires.

À partir de ces blocs de construction, nous pouvons créer des algorithmes de recherche, fournir des recommandations aux utilisateurs d’un service ou fournir aux experts des moyens de résumer et de suivre les relations au sein de grandes quantités d’informations. Une construction soignée du graphe de connaissances permet aux systèmes de soutenir les professionnels (par exemple, en milieu clinique ou pour le développement de médicaments) lorsque la classification des informations est importante pour un résultat correct.

Prochaines étapes et possibilités

L’échelle des données d’instance peut être trop grande pour être pratiquement stockée dans une structure de graphe. Heureusement, les graphes de connaissances n’ont pas besoin d’être complètement réalisés sous forme de graphes. Par exemple, les données d’instance peuvent être stockées dans un magasin de données tabulaires évolutif où elles peuvent être facilement complétées par des annotations de termes. En particulier, les données tabulaires peuvent également être stockées dans Redis aux côtés des ontologies associées stockées via RedisGraph.

Un résultat de requête à partir des données tabulaires avec des annotations de termes peut être utilisé par des algorithmes pour trouver des termes correspondants dans l’ontologie. Comme nous l’avons vu précédemment, les correspondances dans l’ontologie forment un sous-graphe d’informations. Nous pouvons utiliser ce sous-graphe comme entrée d’inférence de modèle. Par la suite, la sortie de l’inférence du modèle peut être utilisée directement ou pour des requêtes supplémentaires. La composition des différentes requêtes et inférences crée un système puissant et flexible avec des propriétés de requête atomiques.

Nous pouvons également interroger l’ontologie à l’aide des fonctionnalités RediSearch de RedisGraph pour effectuer des recherches en texte intégral sur les noms de termes, les descriptions et les relations. Une fois les termes candidats identifiés, nous pouvons utiliser les mêmes techniques avec le sous-graphe de l’ontologie comme mécanisme pour interroger les données précédemment stockées dans Redis. Par exemple, nous pouvons trouver une ligne tabulaire annotée avec l’un des termes correspondants de la recherche en texte intégral. L’ontologie nous fournit un moyen spécifique au domaine de filtrer les résultats de recherche.

Les techniques discutées ici utilisent toutes une seule ontologie. RedisGraph peut stocker plusieurs ontologies et autres structures de graphes dans un seul graphe plus grand ou sous forme de graphes séparés sous des clés distinctes. Cette flexibilité permet de créer des algorithmes en combinant différents composants graphiques dans un pipeline de données plus important.

Les possibilités de mise en œuvre et d’utilisation des graphes de connaissances dans Redis sont nombreuses. Vous pouvez essayer des ontologies et des graphes de connaissances sur RedisGraph via Dockeravec Entreprise Redisou sur notre Redis Cloud Pro service.

Development Source

Related Posts

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Clés Redis dans la RAM |  Redis

Clés Redis dans la RAM | Redis

No Comment

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *