Teil 4: Konversationen und Kontext in Graphdatenbanken
Hast du dir schon einmal überlegt, welche Faktoren sich auf den Verlauf einer Konversation auswirken? Da wäre zum einen das Thema, um das es geht. Aber auch die Person, mit der du sprichst und die Umgebung bzw. die Situation sind entscheidend. Auch, welche Fragen schon beantwortet und welche Antworten bereits ausgetauscht wurden, bestimmt die weitere Richtung.
Man kann also sagen, dass das Gespräch von einem komplexen Kontext abhängt. Dieser Kontext besteht aus den folgenden Items:
- Um welches Thema geht es? Passen meine Fragen und Antwortvorschläge zum Thema?
- Mit wem spreche ich? Ist die Person männlich oder weiblich? Woran ist sie interessiert? Kenne ich die Person?
- Welche Fragen wurden in der Konversation schon beantwortet? Wurden die Fragen vielleicht schon früher einmal beantwortet, als es um ein anderes Thema ging?
- Welche Antworten habe ich bereits erhalten?
- Welche gesammelten Daten gelten generell für die Person und welche gelten nur in der aktuellen Konversation?
- Welche Schlussfolgerungen kann ich aus all den Antworten und Informationen ziehen?
Verschiedene kontextbezogene Items
Wie du siehst, besteht ein Kontext aus vielen verschiedenen Bereichen. Lass uns versuchen, diese in einzelne Knoten (Vertices) und Kanten (Edges) herunterzubrechen, die wir in einem Graph darstellen können.
- Conversation: Ein Benutzer startet für jedes Gespräch eine neue Konversation
- User: Der Nutzer selbst ist Teil der Konversation und damit Teil des Kontexts
- Topic: Ein Gespräch nimmt immer Bezug auf ein bestimmtes Thema, welches im Wesentlichen aus weiteren Fragen und Antworten besteht
- Question: Das sind die Fragen, die im Verlauf einer Konversation in einem Thema relevant werden können
- Suggestion: Eine Frage hat eine oder mehrere Antwortmöglichkeiten
- Conclusion: Verschiedene Antwortmöglichkeiten und Fragen führen zu Schlussfolgerungen
Im Verlauf dieser Blog-Serie werden übrigens noch andere Items hinzukommen, auf die ich aus Gründen der Übersichtlichkeit erst einmal nicht eingehen werde.
Die Items formen einen Graphen
Lass uns diese Items nun zu einem Graphen verbinden. Zunächst wäre hier unser Konversations-Flow bestehend aus Fragen, Antwortmöglichkeiten und Schlussfolgerungen. Das Thema führt zunächst zu einer bestimmten Frage. Diese hat wiederum verschiedene Antwortmöglichkeiten und führt selbst direkt zu einer weiteren Frage. Antwortmöglichkeiten können zu Fragen oder Schlussfolgerungen führen. Und Schlussfolgerungen können zu weiteren Schlussfolgerungen oder neuen Fragen führen.
In einer einzigen Grafik würden die zahlreichen Verbindungen schnell unübersichtlich wirken. Darum habe ich dir die Struktur eines Themas hier separat dargestellt. Ein Thema führt nämlich nicht nur zu einer oder mehreren initialen Fragen. Es beschreibt durch weitere Verbindungen auch, was überhaupt alles Gegenstand des Themas ist.
So gehört jede Frage, jede Antwortmöglichkeit und jede Schlussfolgerung zu einem bestimmten Thema. Sie können außerdem auch Teil weiterer Themen sein. So macht die Frage nach dem Alter oder die Antwortmöglichkeit "Ja" sicher in mehreren Topics Sinn.
Wie du in der nachfolgenden Grafik erkennen kannst, involviert jede Konversation einen User. Die Antworten des Users werden nicht als separater Node gespeichert. Es sind lediglich Verbindungen, die auf Antwortvorschläge gesetzt werden. Antworten können entweder direkt von einem User oder aber von einer Konversation ausgehen. So kann zwischen Antworten unterschieden werden, die nur in der jeweiligen Konversation gelten und zwischen Antworten, die global und überall für den User gelten.
Ein Knowledge-Graph entsteht
Stell dir nun vor, dass du ein Netzwerk hast, in dem noch viel mehr Items abgebildet sind, die alle miteinander verbunden sind. Dieses Netzwerk speichert, welche Frage auf welche Antwort folgt, wer welche Fragen beantwortet hat, welche Items zu welchem Thema gehören und ist in der Lage, Schlussfolgerungen zu ziehen. Man kann dieses Netzwerk auch als einen Knowledge-Graph bezeichnen. Also ein Netzwerk von Expertenwissen, welches nach und nach mit Eingaben von Usern angereichert wird.
Die wirklich spannende Aufgabe steht uns jedoch erst noch bevor: Wir erwecken das Netzwerk zum Leben und werden es mit Hilfe von Graph Traversal durchwandern, um die nächste sinnvolle Reaktion basierend auf dem komplexen Kontext zu finden. Im Verlauf dieser Serie wirst du feststellen, dass das überhaupt nicht schwer ist.
Übrigens: Die Idee Konversationen oder Chatverläufe in Graphen abzubilden, ist keineswegs neu. Ich bin bei meinen Recherchen auf verschiedene Ansätze gestoßen.
Zu nennen wäre da ein interessanter Beitrag von Mark Watson mit dem Namen have-you-had-the-talk-with-your-chatbot-about-graph-data-structures und das conversation-kit von pdtyreus.