Serie "Swissbib data goes linked"
In diesem Beitrag aus der Artikelserie zum SUK P-2-Projekt
linked.swissbib.ch möchten wir die eingesetzten Techniken zu Verlinkung und Anreicherung des swissbib-Datensatzes vorstellen. Mit diesem Arbeitspaket beschäftigt sich
GESIS – Leibniz-Institut für Sozialwissenschaften in Köln. Die Arbeitsgruppe, bestehend aus Felix Bensmann, Philipp Mayr, Benjamin Zapilko und Priyanka Dank, erprobt und implementiert Methoden, um die in Swissbib vorhandenen Metadaten mit bekannten quelloffenen Datenkorpora wie z.B. der
Virtual International Authority File (VIAF) oder
DBpedia zu verknüpfen. Die besondere Herausforderung besteht dabei im Umgang mit den sehr großen Datenmengen, allein der Bestand von Swissbib liegt bereits mit ca. 39 GB vor. Diese entfallen auf ca. 21 Mio. Dokumente (i.S.v. Publikationen), ca. 5,8 Mio. Personen und weitere Typen in RDF/XML-Repräsentation.
Überblick
Als Ausgangspunkt für unsere Arbeiten verwenden wir ausschließlich die Personendaten aus Swissbib. Diese werden im Rahmen der Metadatentransformation aus dem klassischen Swissbib mit den übrigen Daten exportiert, in das
RDF/XML-Format überführt und für die Anreicherung weiterverarbeitet.
Das
Resource Description Framework(RDF) eignet sich auf Grund seiner Natur besonders für die Verlinkung. Als grundlegender Baustein des Semantic Web, zu dem auch die
Linked Open Data (LOD) gehören, liegen die Korpora der Linked Open Data Cloud und eben auch DBpedia und VIAF in diesem Datenmodell vor. In der Folge können wir uns an bestehenden Arbeiten orientieren. Die Eingrenzung auf Personendaten ermöglicht uns außerdem, unsere Methoden an einem abgeschlossenen Anwendungsfall zu erproben. Die erprobten Methoden sollen später auf weitere RDF-Konzepte übertragbar sein.
Nachdem die Verlinkung stattgefunden hat und die Links zwischen den Personen der beteiligten Korpora vorliegen, reichern wir die Personen in Swissbib mit den Zusatzinformationen der Personen aus den externen Korpora an. Abschließend werden die Personendaten in den übergreifenden Verarbeitungsprozess zurückgeleitet.
Bei der ersten Inbetriebnahme ist der Vorgang einmalig für alle Personendaten zu durchlaufen, danach sollen täglich nur noch die Personendatensätze verarbeitet werden, die zwischen den Durchläufen verändert wurden.
Im Weiteren wollen wir den Verarbeitungsprozess kurz vorstellen.
Vorprozessierung
Das Ziel im ersten Schritt ist es, die Daten für die Verlinkung vorzubereiten. Bei der Verlinkung werden alle fraglichen Ressourcen des internen Korpusses mit allen fraglichen Ressourcen eines externen Korpus anhand verschiedener Kriterien verglichen. Wenn alle Kriterien erfüllt sind, wird angenommen, dass die beiden Vergleichspartner identisch sind und es wird ein Link ausgegeben. Bei zwei Korpora mit n und m Personen sind n*m Vergleiche notwendig. Etablierte Werkzeuge wie beispielsweise das
Silk-Frameworkder Universität Mannheim oder
LIMESder AKSW Research Group der Universität Leipzig, setzen diese Funktionen bereits um. Darüber hinaus bieten sie weit entwickelte Methoden um den Vergleichsaufwand zu minimieren. Bei einer Vollverlinkung weisen beide Werkzeuge einen enormen Memory footprint auf, was dazu führt, dass der Arbeitsspeicher schneller befüllt wird, als der Garbage-Collector Speicherplatz freigeben kann, in der Folge werden die Threads der Programme einer nach dem anderen von der JVM beendet. Eine direkte Verlinkung der Daten ist somit nicht möglich. Um dem entgegenzuwirken, teilen wir die Daten in kleinere Vergleichsmengen auf. Hierfür verwenden wir ein selbstentwickeltes prototypisches Kommandozeilenwerkzeug mit dem Namen
ReshapeRDF.
Zunächst werden die Daten der Korpora jeweils in
N-Tripleskonvertiert und in je einer Datei zusammengefasst. Bei diesem Vorgang müssen keine größeren Datenmengen im Arbeitsspeicher gehalten werden. Im nächsten Schritt werden die N-Triples alphabetisch sortiert (Unicode-Order), sodass die Statements einer Ressource direkt aufeinander folgen (s. Abb.
1).
|
Abb. 1: Sortierte N-Triples |
Die sortierten N-Triples stellen das Ausgangsformat für die nachfolgenden Schritte dar. Darin werden die zu verlinkenden Ressourcen, Personen, extrahiert und Statements, welche für die Verlinkung nicht benötigt werden, werden entfernt. Anschließend werden die Personen auf mehrere Dateien aufgeteilt. Hierzu wenden wir ein einfaches Blocking an. Im Gegensatz zu einer einfachen Aufteilung müssen hier später nur noch die einander entsprechenden Blöcke verlinkt werden (s. Abb.
2). Als Kriterium für die Blockbildung wird jeweils der Anfangsbuchstabe des Nachnamens verwendet.
|
Abb.2: Verlinkung mit einfacher Aufteilung (l) im Vergleich zu Blocking (r) |
Unser Ansatz mit sortierten N-Triples eignet sich vor allem für regelmäßige Datenstrukturen, wie wir sie bei größeren Datenmengen erwarten. Die Vorprozessierung dauert auf unserem System (192 GB RAM, 32x2,0 GHZ Multicore-Prozessor, HDD-Festplatte) etwa 4,5 Stunden für Swissbib, 6,5 Stunden für DBPedia und 17 Stunden für VIAF. Die Zeiten schwanken je nach Rechnerauslastung stark.
Verlinkung
Es werden die Personen zweier Blöcke kreuzweise mit einander verglichen. Eine Vergleichsvorschrift gibt an, welche Properties der Personen auf welche Weise miteinander verglichen werden sollen. Diese muss vorab von einem Anwender definiert werden. Abb. 3 zeigt ein Beispiel für den Vergleich zweier Personen.
|
Abb. 3: Vergleichsvorschrift für die Verlinkung |
Bei LIMES und Silk kann die Vorschrift mit Hilfe einer domänenspezifischen Sprache angegeben werden. Beispielsweise können Properties mit unterschiedlichen Namen einander zugeordnet werden, oder es können Ähnlichkeitsmetriken mit Schwellwerten für den Vergleich angegeben werden. Je mehr Properties wir vergleichen, desto höher ist die Wahrscheinlichkeit korrekte Links zu finden. Im vorliegenden Fall geschieht der Vergleich anhand der Werte der Properties für die Vornamen, Nachnamen und Geburtsdaten. Wir setzen LIMES ein, da dieses bei uns das bessere Laufzeitverhalten zeigt. Wird Gleichheit erkannt, dann wird ein owl:sameAs-Statement ausgegeben, das den Link repräsentiert.
Aus Gründen der Performanz generieren wir für jeden Vergleich zweier Blöcke eine Konfigurationsdatei und starten mehrere Vergleiche simultan. Auf unserem System dauert die Verlinkung mit VIAF etwa zwei Stunden und die mit DBpedia etwa eine halbe Stunde.
Anreicherung und Verifikation
Mit Hilfe der gefundenen Links extrahieren wir mit ReshapeRDF die zugehörigen Personen aus dem externen Korpus. Dies machen wir für jeden externen Korpus gegen den wir verlinken. Diese externen Daten werden mit den Personendaten des internen Korpus zusammengeführt. Abschließend werden alle Daten sortiert, Duplikate werden entfernt und die Daten werden in den übergreifenden Verarbeitungsprozess zurückgeführt. Die Anreicherung nimmt ungefähr zwei Stunden in Anspruch.
Die Links können stichprobenartig intellektuell überprüft werden. Dazu haben wir eine Benutzeranwendung entwickelt, die es Anwendern erlaubt, die Ressourcen, welche durch einen Link verknüpft sind, zu inspizieren. Die Anwendung mit Namen
Linkinspect greift dazu via SPARQL auf Triplestores zu und stellt die Ressourcen einander gegenüber. Der Nutzer hat dabei die Möglichkeit mittels Browsing in den Triplestores zusätzliche Informationen zu einer Ressource anzuzeigen.
Fazit
Dieser Artikel beschreibt die Vorprozessierung, Verlinkung und Anreicherung von Personendaten in Swissbib mit Informationen aus externen Korpora der LOD wie DBpedia und VIAF. Hierbei spielen die großen Datenmengen und die damit verbundenen langen Prozessierungszeiten eine besondere Rolle. Wir zeigen einen Ansatz, wie mit Hilfe eines speziellen Datenformats und verschiedenen Werkzeugen, diese Zeiten optimiert werden können. Im Vergleich zu einem naiven Ansatz konnten wir uns bei der reinen Verlinkung um den Faktor 20 verbessern.
Wir gehen davon aus, dass die einzelnen Vorprozessierungen, Verlinkungsprozesse und Anreicherungen, weitestgehend parallel zueinander ausgeführt werden können. Weitere Optimierungsmöglichkeiten sehen wir darin, den Grad der Flexibilität reduzieren und in der Vorprozessierung ein Pipelining-Konzept, wie in
Metafacture, einsetzen. Dies ist aber nur teilweise möglich.
Bei der Bearbeitung sind wir auf zwei wesentliche Hürden gestoßen: Zum einen können wir im vorgegebenen Zeitraum keine Personendisambiguierung vornehmen, sodass in der Ausgabe Personen mehrfach aufgeführt werden, zum anderen sind teils nicht ausreichend Informationen vorhanden um hochwertige Links zu erstellen. Hier beschränken wir uns auf Personen über die mehr Informationen vorliegen. Darüber hinaus arbeiten wir an Verfahren die Information verbundener Dokumente miteinbeziehen.
Serie "swissbib data goes linked"
Dans cet article issu de la série de contributions sur le projet CUS-P2
linked.swissbib.ch, nous souhaitons présenter les techniques mises en œuvre pour relier et enrichir le jeu de données swissbib. Ce volet du projet est réalisé par
GESIS – Leibniz-Institut für Sozialwissenschaften à Cologne. Le groupe de travail, constitué de Felix Bensmann, Philipp Mayr, Benjamin Zapilko et Priyanka Dank, teste et implémente des méthodes permettant de relier les métadonnées disponibles dans swissbib avec des corpus de données ouverts de référence tels que
Virtual International Authority File (VIAF) ou
DBpedia. L'enjeu majeur réside dans la manipulation d'une très grande masse de données, swissbib à lui seul en comportant environ 39 GB. Ces données correspondent à environ 21 mio de documents (i.e. publications), 5,8 mio de personnes ainsi que d'autres types représentés en RDF/XML.
Introduction générale
Comme base pour notre travail, nous utilisons exclusivement les données de swissbib sur les personnes. Dans le cadre de la transformation, ces données sont exportées du swissbib "classique" avec les autres données, puis converties en format
RDF/XML et traitées pour l'enrichissement.
En raison de sa nature, le
Resource Description Framework (RDF) se prête particulièrement bien à l'interconnexion. Mis à disposition selon ce modèle, les jeux de données du
Linked Open Data Cloud, comprenant justement DBpedia et VIAF, sont un pilier fondamental du web sémantique et des
Linked Open Data (LOD). Par la suite, nous pouvons nous orienter sur des travaux existants. La restriction aux données sur les personnes nous permet en outre de mettre à l'épreuve nos méthodes sur un cas d'application concret et ciblé. Les méthodes testées doivent être transposables ultérieurement sur d'autres concepts RDF.
Après la phase d'interconnexion, lorsque les liens entre les personnes des corpus concernés sont établis, nous enrichissons les personnes de swissbib avec les informations complémentaires provenant des jeux de données externes. Enfin, les données enrichies sont reversées dans le processus de traitement global de swissbib.
Pour la première mise en production, toutes ces étapes doivent être réalisées une fois. Par la suite ne devront être retraitées quotidiennement que les données de personnes qui auront été modifiées le jour en question.
Ci-dessous, nous présentons brièvement le processus de traitement.
Pré-traitement
Le but de la première étape est de préparer les données pour l'interconnexion. Lors de cette phase, toutes les ressources concernées dans le corpus de données interne sont comparées avec toutes les ressources concernées dans un corpus externe, selon divers critères. Si tous les critères sont remplis, les deux parties comparées sont présumées identiques et un lien est généré. En présence de deux corpus de
n et de
m personnes, le nombre de comparaisons nécessaires et de n*m. Des outils établis, comme par exemple le framework
Silkde l'Université de Mannheim ou
LIMESdu groupe de recherche AKSW de l'Université de Leipzig, mettent déjà en œuvre de telles fonctions. De plus, ils proposent des méthodes avancées pour minimiser le temps de calcul nécessaire. Lors d'une interconnexion complète, les deux outils ont une empreinte mémoire énorme, saturant la mémoire plus rapidement que ne peut en libérer le ramasse-miettes (garbage collector). Par conséquence, les threads du programme sont interrompus les uns après les autres. Ainsi, une interconnexion directe des données est impossible. Pour pallier ce problème, nous divisons les données en plus petites quantités comparables. Nous utilisons pour ce faire un prototype maison d'outil en ligne de commande nommé
ReshapeRDF.
Ensuite, les données du corpus sont converties en
N-Triples (triplets) et regroupées dans ces fichiers. Lors de ce processus, aucune grande quantité de données ne doit être gardée en mémoire. A l'étape suivante, les N-Triples sont triés en ordre alphabétique (ordre Unicode), afin que les déclarations sur une ressource soient rassemblées (voir figure 1).
|
Figure 1: N-Triples triés |
Les N-Triples triés constituent le format de sortie pour l'étape suivante, où les ressources à relier - les personnes - sont extraites, et les déclarations inutiles pour l'interconnexion sont éliminées. Ensuite, les personnes sont réparties en plusieurs fichiers. Nous utilisons ici un mécanisme de blocking. Dans ce cas, contrairement à un simple fractionnement, seuls les blocs devront être reliés entre eux (figure 2). Le critère utilisé pour la constitution des blocs est à chaque fois la première lettre du nom de famille.
|
Figure 2: Interconnexion avec simple fractionnement (gauche) et avec mécanisme de blocking (droite) |
Notre approche par tri de N-Triples se prête bien avant tout pour les structures de données uniformes, présentes habituellement lors de grandes quantités de données.
Notre infrastructure (192 GB RAM, processeur multi-cœurs 32x2,0 GHZ, disque dur HDD) effectue la phase de pré-traitement en environ 4h30 pour swissbib, 6h30 pour DBpedia et 17h pour VIAF. Les durées varie beaucoup en fonction du niveau d'occupation du processeur.
Interconnexion
Les personnes de chaque paire de blocs sont comparées entre elles. Des paramètres de comparaison indiquent quelles propriétés doivent être confrontées, et de quelle manière. Ces spécifications doivent être définies au préalable. La figure 3 montre un exemple de comparaison entre deux personnes.
|
Figure 3: Paramètres de comparaison pour l'interconnexion |
Dans LIMES et Silk, les paramètres sont spécifiés au moyen d'un langage dédié. Par exemple, des propriétés avec des noms différents peuvent être associées l'une à l'autre, ou des métriques de similarités avec des valeurs seuil pour la comparaison peuvent être précisées. Plus nous comparons de propriétés, meilleure sera la probabilité de déterminer des liens corrects. Dans le cas présent, la confrontation s'effectue selon les valeurs des propriétés des prénoms, des noms de famille et des dates de naissance. Pour linked.swissbib.ch, nous utilisons LIMES, car celui-ci est le plus efficace du point de vue du temps d'exécution. Lorsqu'une équivalence est reconnue, une assertion owl:sameAs est créée pour représenter le lien.
Pour des raisons de performance, nous générons un fichier de configuration pour chaque comparaison de deux blocs, et lançons plusieurs comparaisons simultanément. Dans notre infrastructure, l'interconnexion avec VIAF dure environ deux heures et celle avec DBpedia environ une demi-heure.
Enrichissement et vérification
Grâce aux liens trouvés, nous extrayons des jeux de données externes les personnes correspondantes au moyen de ReshapeRDF. Cette opération est réalisée pour chaque corpus ayant été interconnecté. Ces données externes sont ensuite fusionnées avec les données des personnes du corpus interne, puis triées. Enfin, les doublons éliminés et les données sont réintégrées dans le processus de traitement global. L'enrichissement nécessite environ deux heures.
Les liens peuvent être vérifiés intellectuellement par échantillons. Dans ce but, nous avons développé une application permettant à une personne de passer en revue les ressources qui ont été reliées. Cette application, nommée
Linkinspect, accède aux triplestores via SPARQL et présente les ressources équivalentes en parallèle. L'utilisateur a alors la possibilité d'afficher plus d'informations au sujet d'une ressource en naviguant dans les triplestores.
Conclusion
Cet article décrit le pré-traitement, l'interconnexion et l'enrichissement des données de personnes de swissbib avec des corpus externes disponibles en LOD tels que DBpedia et VIAF. Dans ce contexte, les grandes quantités de données et les longs temps de traitement correspondants joue un rôle considérable. Nous démontrons ici une méthode permettant d'optimiser ces temps de traitement au moyen d'un format de données spécifique et de divers outils. Par rapport à une approche naïve, nous avons pu améliorer la performance de la simple interconnexion d'un facteur 20.
Nous partons du principe que les différents pré-traitements, interconnexions et enrichissements peuvent être exécutés en parallèle. Nous voyons d'autres possibilités d'optimisation dans la réduction du degré de flexibilité et dans la mise en place d'un concept de pipeline pour le pré-traitement, comme dans Metafacture. Ceci n'est cependant que partiellement possible.
Durant les travaux, nous avons rencontré deux obstacles principaux. D'une part, nous n'avons pas pu effectué de désambiguïsation des personnes si bien que certaines personnes apparaissent plusieurs fois à la fin du traitement. D'autre part, les informations ne sont parfois pas suffisantes pour établir des liens de qualité. Nous nous limitons donc ici aux personnes comportant le plus d'informations. De ce fait, nous travaillons sur un processus permettant d'inclure dans la comparaison les informations des documents liés.