Das MehrebenenSuchtool ANNIS für Entwickler Das Mehrebenen-Suchtool ANNIS für Entwickler Thomas Krause Humboldt-Universität zu Berlin LAUDATIO Workshop 2014-10-07 Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 Das MehrebenenSuchtool ANNIS für Entwickler Überblick ● Stand der Implementierung ● Herausforderungen ● Ausblick und Lösungsmöglichkeiten Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 Das MehrebenenSuchtool ANNIS für Entwickler Stand der Implementierung Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 Das MehrebenenSuchtool ANNIS für Entwickler ● ● ● ● Einführung ANNIS ist eine Suchmaschine für linguistische Korpora ursprünglich für den Sonderforschungsbereich 632 entwickelt Open-Source (Apache 2.0 Lizenz) Entwicklung wird über GitHub organisiert: https://github.com/korpling/ANNIS Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 4 Das MehrebenenSuchtool ANNIS für Entwickler ● ANNIS ist Theorie agnostisch – ● ● Modellierung linguistischer Annotationen nicht an ein bestimmtes Korpus oder Annotationschema gebunden verschiedene Annotationsebenen können verschiedene Arten von Annotationen beinhalten Abbildung verschiedener linguistischer Annotationskonzepte (Token, Spannen, Syntaxbäume, Dependenzen, Koreferenz, RST, …) auf ein gemeinsames Modell → Graph Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 5 Das MehrebenenSuchtool ANNIS für Entwickler ● ● ● AQL eigene Anfragesprache: ANNIS Query Language – Datenmodell des Graphen benötigt entsprechend ausdruckstarke Anfragesprache – angelehnt an TIGERSearch-Anfragesprache ist analog zu aussagenlogischer Formel aufgebaut: term1 & term2 & (term3 | term4) & … Term kann entweder Constraint auf einzelnen Knoten sein oder die Beziehung zwischen zwei Knoten beschreiben Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 6 Das MehrebenenSuchtool ANNIS für Entwickler & & & & & & AQL - Beispiel pos=/V.FIN/ pos=/P.*/ "Zossener" cat="S" #1 ->dep[func="sbj"] #2 #2 .* #3 #4 > #1 Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 7 Das MehrebenenSuchtool ANNIS für Entwickler AQL – wichtige Operatoren Operator-Klasse Beispiele Präzedenz #1 . #2 (direkt) #1 .* #2 (indirekt) #1 .2,5 #2 (Bereichsangabe) Dominanz (impliziert Textabdeckung) #1 #1 #1 #1 #1 Pointing Relation (immer benannt) #1 ->dep #2 (direkt) #1 ->dep * #2 (indirekt) Abgedeckter Text #1 #1 #1 #1 #1 Wertevergleich #1 == #2 (Annotationswert gleich) #1 != #2 (Annotationswert ungleich) A x y zB > #2 (direkte Dominanz) A >* #2 (indirekt) ... >edge #2 (direkt, benannt) >[func=“HD“] #2 (direkt, mit Kantenannotation) >4,6 #2 (Bereichsangabe) B _=_ _o_ _l_ _r_ _i_ #2 (identische Abdeckung) #2 (Überlappung) #2 (links-aligniert) #2 (recht-aligniert) A AA #2 (inkludiert) B AAA BB AAA BB vollständige Liste im eingebetteten Tutorial oder unter http://korpling.github.io/ANNIS/doc/dev-aql.html Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 8 Das MehrebenenSuchtool ANNIS für Entwickler Webfrontend ● Architektur (1) REST-Service PostgreSQLDatenbank Webfrontend – in Java und kleinen Teilen JavaScript implementiert – nutzt das GUI-Framework Vaadin https://vaadin.com/ – ruft den ANNIS-Service per REST-API auf Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 9 Das MehrebenenSuchtool ANNIS für Entwickler Webfrontend ● Architektur (2) REST-Service PostgreSQLDatenbank REST-Service – ebenfalls in Java implementiert – konvertiert AQL nach SQL – bildet relationale Ergebnisse in das Salt-Metadatenmodell (Zipser 2010) ab ● – wird für die Visualisierung der Treffer genutzt administrative Aufgaben wie z.B. Import und Nutzerverwaltung Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 10 Das MehrebenenSuchtool ANNIS für Entwickler Webfrontend ● Architektur (3) REST-Service PostgreSQLDatenbank PostgreSQL-Datenbank – führt die eigentliche Suche aus Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 11 Das MehrebenenSuchtool ANNIS für Entwickler Übersicht zum Datenmodell ANNIS-Format Importformat ● wird selten verändert ● CSV Dateien, die dem normalisiertem Databankschema entsprechen Korpusdaten werden konvertiert Pepper Konverter (Zipser 2010) Suchergebnisse werden abgebildet Salt Umwandlung bei Import Datenbankschema in PostgreSQL ● optimiert für die Abfrage ● kann sich zwischen ANNISReleases ändern Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 12 Das MehrebenenSuchtool ANNIS für Entwickler Normalisiertes Datenbankschema (Rosenfeld 2010) Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 13 Das MehrebenenSuchtool ANNIS für Entwickler Normalisiertes Datenbankschema (Rosenfeld 2010) Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 14 Das MehrebenenSuchtool ANNIS für Entwickler Normalisiertes Datenbankschema (Rosenfeld 2010) Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 15 Das MehrebenenSuchtool ANNIS für Entwickler ● ● ● ● ● Komponenten jede Kante wird einer Komponente zugeordnet Aufteilung der Komponenten in Typen – c (coverage) → Spannen – d (dominance) → Dominanzrelationen wie z.B. Syntaxbäume – p (pointing relation) component id integer type char(1) namespace varchar name varchar außerdem Unterteilung nach Namen → entspricht den Kantennamen in AQL (z.B. „->dep“) jede Komponente ist azyklisch (DAG) ein Knoten kann Teil mehrerer Komponenten sein Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 dominance, „edge“ pointing, „dep“ pointing, „order“ 16 Das MehrebenenSuchtool ANNIS für Entwickler ● ● Erreichbarkeitsproblem (1) Problem: Finde alle erreichbaren Knoten von einem Ausgangsknoten in einer Komponente Implementierung durch Traversierung bei jeder Suchanfrage? – benötigt rekursives/iteratives SQL – sehr langsam – Statistik von PostgreSQL funktioniert schlecht Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 17 Das MehrebenenSuchtool ANNIS für Entwickler ● ● Erreichbarkeitsproblem (2) Lösung: vorberechnete Intervall-Kodierung – depth-first Traversierung jeder Komponente – Zuweisung „stretched pre- und post-order“ (Grust 2004) für jeden Knoten für jeden Nachfolgeknoten gilt: – pre-Order ist immer größer – post-Order ist immer kleiner Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin 1 2 v2 10 v1 3 5 LAUDATIO Workshop 2014-10-07 v3 4 v4 6 9 7 v5 8 18 Das MehrebenenSuchtool ANNIS für Entwickler ● ● Erreichbarkeitsproblem (3) Knoten n2 ist von n1 erreichbar wenn: n1.pre < n2.pre und n1.post > n2.post lässt sich gut in SQL formulieren und effizient über Indizes abfragen 1 2 v2 3 5 Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin 10 v1 LAUDATIO Workshop 2014-10-07 v3 4 v4 6 9 7 v5 8 19 Das MehrebenenSuchtool ANNIS für Entwickler ● Erreichbarkeitsproblem (4) Problem: Zuweisung exakt einer Pre- und Post-Order für jeden Knoten geht nur auf Bäumen, aber nicht auf DAGs 1 2 2 v2 X 3 4 9 3 5 4 Lizenz: Creative Commons Namensnennung 4.0 International 10 v1 v4 Thomas Krause, HU Berlin v3 6 5 9 8 7 v5 6 8 7 LAUDATIO Workshop 2014-10-07 20 Das MehrebenenSuchtool ANNIS für Entwickler ● Lösung: Umwandlung des DAGs in einen Baum mit „virtuellen“ Knoten – ● rank-Tabelle wenn Baum-Eigenschaft verletzt → Kopie des Unterbaums rank-Tabelle speichert für jeden Knoten alle pre/post-Order Kombinationen 1 2 v2 9 3 v3 8 16 v1 X 10 v3 15 11 v4 12 13 v5 14 rank pre integer post integer node_ref integer component_ref integer parent integer Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin 4 v4 5 6 v5 7 LAUDATIO Workshop 2014-10-07 21 Das MehrebenenSuchtool ANNIS für Entwickler ● ● ● Joins Beispiel-AQL: cat=“S“ & cat=“NP“ & #1 >* #2 benötigt Join auf 7 Tabellen: – 2x node_annotation – 2x node – 2x rank – 1x component je mehr Knoten in der AQLAnfrage enthalten sind, um so mehr Tabellen werden benötigt → in der Praxis viel zu langsam Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 22 Das MehrebenenSuchtool ANNIS für Entwickler Normalisiertes Datenbankschema Lösung: materialisierter Join der relevanten Tabellen Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 23 Das MehrebenenSuchtool ANNIS für Entwickler Denormalisiertes Datenbankschema Lösung: materialisierter Join der relevanten Tabellen Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 24 Das MehrebenenSuchtool ANNIS für Entwickler Herausforderungen Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 25 Das MehrebenenSuchtool ANNIS für Entwickler Duplizierung durch Annotationen node_annotation node_ref name value 0 pos ADJA 0 lemma mittel 0 morph Pos.Nom.Sg.M asc id token_index span 0 0 mittlere 1 1 Betriebe 1 pos NN [...] [...] [...] 1 lemma Betrieb 1 morph Nom.Pl.Masc facts node id token_index span node_anno_name node_anno_value 0 0 mittlere pos ADJA 0 0 mittlere lemma mittel 0 0 mittlere morph Pos.Nom.Sg.Masc 1 1 Betriebe pos NN 1 1 Betriebe lemma Betrieb 1 1 Betriebe morph Nom.Pl.Masc Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 26 Das MehrebenenSuchtool ANNIS für Entwickler ● weitere Probleme weitere Duplizierungen falls Knoten mehrere Kanten besitzen ● viele NULL-Werte in ungenutzten Spalten ● Indizes werden unnötig groß ● duplizierte Tupel in Ergebnismenge machen DISTINCT notwendig (sehr teuer bei vielen Ergebnissen) Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 27 Das MehrebenenSuchtool ANNIS für Entwickler ● ● ● Gegenmaßnahmen (1) Anfragen zu Präzedenz und abgedecktem Text werden nicht über Graphanfragen beantwortet – token_index: Index eines Token in der Kette aller Token – left_token/right_token: Index des am weitesten linken/rechten abgedeckten Token Beispiel: node . node → n1.right_token + 1 = n2.left_token erlaubt die Löschung der Coverage-Kanten Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 28 Das MehrebenenSuchtool ANNIS für Entwickler ● partionierte Indizes ● „sample“ Spalten ● Gegenmaßnahmen (2) – für jeden Knoten und jede Knotenannotation wird für genau eines der Tupel die „n_sample“ bzw. „na_sample“ Spalte auf TRUE gesetzt – bei Anfragen, die nur auf „node“ bzw. „node_annotation“ arbeiten, entstehen keine Duplikate, wenn nach der sample-Spalte gefiltert wird z.B. pos=“ART“ & pos=“NN“ & #1 . #2 partionierte Faktentabelle (pro Korpus) http://www.postgresql.org/docs/9.1/static/ddl-partitio ning.html Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 29 Das MehrebenenSuchtool ANNIS für Entwickler Partionierte Tabellen ● Elterntabelle „facts“ ● für jedes Korpus: facts_<id> ● – erbt von Elterntabelle – Constraint corpus_ref = <id> SELECT * FROM facts WHERE corpus_ref IN (1, 2) → Anfrage wird nur auf facts_1 und facts_2 ausgeführt Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 30 Das MehrebenenSuchtool ANNIS für Entwickler ● benutzter Index größer als der verfügbare Hauptspeicher („shared buffer“) → Performance bricht ein – ● PostgreSQLEigenheiten Faktentabelle verursacht aber große Indizes Nutzung der Statistik der Elterntabelle (über alle Korpora gemittelt) anstatt der selektierten Kindertabellen → Statistik wird stark verzerrt – Workaround: bei Anfrage auf nur einem Korpus direkt „facts_<id>“ abfragen Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 31 Das MehrebenenSuchtool ANNIS für Entwickler ● Statistik-Probleme (1) Fehler in der Abschätzung der Größe der Zwischenergebnisse führen zu – nicht-optimaler Join-Reihenfolge – Auswahl ungeigneter Join-Implementierung (z.B. Nested-Loop Join anstatt Merge Join bei zu kleiner Schätzung) Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 32 Das MehrebenenSuchtool ANNIS für Entwickler ● in PostgreSQL wird für Spalten immer statistische Unabhängigkeit angenommen – ● Einschränkung auf node_annotation_name und node_annotation_value multipliziert die Selektivität beider Spalten Problem: Annotationschemata haben feste Werte – ● Statistik-Probleme (2) beim Wert „NP“ weiß man fast sicher, dass der Name „cat“ ist diese Abhängigkeit kann in PostgreSQL nicht modelliert werden Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 33 Das MehrebenenSuchtool ANNIS für Entwickler ● Statistik-Probleme (3) Lösungsansatz: – Speicherung von Name und Wert in einer Spalte – z.B. als String „cat:NP“ – oder als ID mit externer Tabelle aller Annotationskombinationen Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 34 Das MehrebenenSuchtool ANNIS für Entwickler ● ● Potential für Verbesserungen (1) Annotationsarten haben verschiedene strukturelle Grapheigenschaften Beispiele: ● ● ● ● Spannen sind immer Bäume mit maximaler Höhe 1 Token-Präzedenz lässt sich als Pfad ausdrücken (jeder Knoten hat maximal eine Ausgangs- und eine Eingangskante) Dependenzgraphen sind keine DAGs sondern echte Bäume etc. Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 35 Das MehrebenenSuchtool ANNIS für Entwickler ● ● ● Potential für Verbesserungen (2) ANNIS hat eine Spezialbehandlung nur für Präzedenz und Abdeckung (token_index/left_token/right_token) ansonsten immer gleiche Implementierung über pre/post-Order Statistik über Graphen (z.B. durchschnittlicher fan-out) wird nicht von PostgreSQL benutzt Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 36 Das MehrebenenSuchtool ANNIS für Entwickler Ausblick und Lösungsmöglichkeiten Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 37 Das MehrebenenSuchtool ANNIS für Entwickler ● Ausblick (1) Nutzung einer Graphdatenbank wie neo4j? – auf Traversierung optimiert – nutzt keine Indizes auf der Struktur des Graphen, z.B. pre/post-Order für Bäume oder Ferrari-Index (Seufert, 2013) – Anfragen in der Cypher-Anfragesprache müssen mit Domainenwissen manuell optimiert werden Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 38 Das MehrebenenSuchtool ANNIS für Entwickler ● Ausblick (2) Implementierung einer spezialisierten linguistischen Suchmaschine, die auf Graphen basiert? – auch größere Korpora können bei effektiver Kodierung im Hauptspeicher gehalten werden – Trennung in einen Speicher für Annotationen auf Knoten und mehrere Speicher für jede Kantenart – jede Kantenart erhält eine spezifische Implementierung des Kantenspeichers – jeder Typ von Kantenspeicher nutzt spezifische Grapheigenschaften einer Annotationsart für die effiziente Implementierung aus Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 39 Das MehrebenenSuchtool ANNIS für Entwickler Knotenspeicher Ausblick (3) Kantenspeicher 1 Token Typ: Pfad Kantenspeicher 2 Syntax Typ: Baum Modul zur Abarbeitung der Anfrage Kantenspeicher 3 Dependenz Typ: Baum Kantenspeicher 4 Topic Typ: Spanne Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 40 Das MehrebenenSuchtool ANNIS für Entwickler ● ● Prototyp erster rudimentärer Prototyp in C++ für dieses Konzept bisher implementiert – Import des ANNIS-Formats – schnelles Speichern und Laden der internen Datenstrukturen (B+ Bäume) – Speicher für Knotenannotationen – Fallback-Kantenspeicher basierend auf Tiefensuche – Kantenspeicher für Pfade (z.B. Präzedenz) – Testfälle mit manuell implementierten Suchanfragen Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 41 Das MehrebenenSuchtool ANNIS für Entwickler Knoten Knotenannotationen Kanten Kantenannotationen Hauptspeicher Prototyp Tabellen- und Indexgröße ANNIS 3.1 Prototyp Speicherverbrauch Ridges Version 4.0 1.118.265 2.236.530 6.828.356 0 ~300 MB Tiger2 1.262.014 5.189.762 4.672.816 2.204.630 ~600 MB 424 MB (Tabelle) 2276 MB (Index) 967 MB (Tabelle) 4696 MB (Index) Kanten und Kantenannotationen inklusive Präzedenz und Abdeckung Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 42 Das MehrebenenSuchtool ANNIS für Entwickler Korpus AQL Anzahl Treffer Prototyp Anfragegeschwindigkeit Ausführungszeit ANNIS 3.1 Prototyp Pfad-Kantenspeicher Prototyp Tiefensuche 0,5 Sekunden 0,6 Sekunden 0,6 Sekunden 4 Sekunden 0,6 Sekunden 0,7 Sekunden 0,5 Sekunden 0,7 Sekunden Tiger2 cat RIDGES v4.0 pos="NN" 21.911 .2,10 pos="ART" RIDGES v4.0 tok .2,10 1.386.828 362 Sekunden tok 373.436 gemessen auf Intel i7-4800MQ CPU @ 2.70GHz, alle PostgreSQL-Daten im HauptspeicherCache Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 43 Das MehrebenenSuchtool ANNIS für Entwickler Vielen Dank für die Aufmerksamkeit! Gibt es Fragen oder Vorschläge? [email protected] Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 44 Das MehrebenenSuchtool ANNIS für Entwickler ● ● ● ● Literatur Grust, T.; Keulen, M. V. and Teubner, J. (2004). Accelerating XPath evaluation in any RDBMS, ACM Transactions on Database Systems (TODS). Rosenfeld, V. (2010). An implementation of the Annis 2 query language, Technical report, Humboldt-Universität zu Berlin. Seufert, S.; Anand, A.; Bedathur, S. and Weikum, G. (2013). Ferrari: Flexible and efficient reachability range assignment for graph indexing, Data Engineering (ICDE), 2013 IEEE 29th International Conference on : Seiten 1009-1020. Zipser, F.; Romary, L. (2010). A model oriented approach to the mapping of annotation formats using standards, Workshop on Language Resource and Language Technology Standards, LREC 2010. Lizenz: Creative Commons Namensnennung 4.0 International Thomas Krause, HU Berlin LAUDATIO Workshop 2014-10-07 45