Automatische Fragebeantwortung für Suchmaschinen
Angela Maennel
Was in Veröffentlichungen zum maschinellen Lernen als Open-Domain Question Answering bezeichnet wird, ist nichts anderes als die Beantwortung einer Frage auf der Grundlage einer großen Textsammlung, z. B. die Beantwortung der Frage eines Besuchers einer großen Website unter Verwendung des Inhalts der Website.
Aufgrund der jüngsten Fortschritte im Bereich des maschinellen Leseverstehens haben sich Open-Domain Question Answering-Systeme drastisch verbessert. Früher verließen sie sich auf die Redundanz von Informationen, aber jetzt sind sie in der Lage, sorgfältiger zu "lesen". Moderne Systeme sind in der Lage, einen Textabschnitt zu zitieren, der die Frage beantwortet, oder sie sogar neu zu formulieren. Was noch angestrebt wird, ist die Generierung längerer, absatzlanger Antworten oder die Verwendung mehrerer Quellen, um eine Antwort zusammenzustellen.
Google hat kürzlich eine solche Funktion in seine Suchmaschine implementiert. Wenn sie eine Passage finden, die die in das Suchfeld getippte Frage beantwortet, zeigt das erste Ergebnis die entsprechende Website mit der hervorgehobenen Passage.
Es gibt viele verschiedene Systeme, die sich mit Open-Domain Question Answering befassen, hier werde ich auf ein System im Besonderen eingehen, DrQA (von Chen et al. 2017). Dieses spezielle System teilt die Aufgabe in zwei Teile auf, für die es jeweils einfacher ist, Trainingsdaten zu erhalten als für die kombinierte Aufgabe. Ich werde auch erklären, wie diese Idee verwendet werden kann, um ein Fragebeantwortungssystem für eine Website aus einer bereits vorhandenen Suchfunktion zu erstellen.
Kurzer Überblick über DrQA
Die Eingabe für DrQA ist eine Datenbank von Texten und eine Frage. Das System versucht, in der Textsammlung eine Passage zu finden, die die Frage beantwortet. Die Ausgabe ist diese Passage.
Die Aufgabe, eine passende Passage zu finden, ist in zwei Teile aufgeteilt:
Ein Document Retriever, der eine kleine Anzahl von Dokumenten auswählt, die für die Fragestellung am relevantesten sind.
Ein Document Reader, der aus jedem vom Document Retriever weitergegebenen Dokument eine Passage extrahiert. Diese Passage sollte für die Frage aus diesem Dokument am relevantesten sein und der Document Reader sollte außerdem jeder Passage eine Punktzahl dafür geben, wie gut sie die Frage beantwortet.
Die Passage mit der höchsten Punktzahl wird dann dem Benutzer angezeigt. Im DrQA-System findet der Document Retriever immer genau 5 Dokumente, aber je nach Document Retriever kann es sinnvoll sein, diese Zahl anzupassen.
Wie Sie mit Fragebeantwortung Ihre Suche verbessern können
Wenn Sie nicht nur eine Suchfunktion, sondern auch ein System zur Beantwortung von Fragen haben, können Sie den Benutzern eine Menge Zeit und Kopfschmerzen ersparen. Anstatt die Suchergebnisse manuell durchzugehen und die Seiten zu durchforsten, um das Gesuchte zu finden, wird die Seite und die Passage angezeigt, auf der sich die Antwort befindet.
Falls es keine explizite Antwort gibt oder der Document Reader die Antwort nicht finden kann, können die üblichen Suchergebnisse angezeigt werden.
Wenn Sie bereits über eine Website-Suchfunktion verfügen, kann diese zur Erstellung eines Fragebeantwortungssystems verwendet werden, indem sie durch einen geeigneten Document Reader ergänzt wird. Je nach Inhalt kann der Document Reader auf öffentlichen Fragebeantwortungssets, basierend auf Wikipedia, trainiert werden oder das Sprachmodell muss ggf. feingetunt werden. Für die Feinabstimmung können Texte von der Website oder öffentlich verfügbare Daten/Texte, die dem Inhalt der Website ähnlich sind, verwendet werden.
Wenn Sie jetzt neugierig geworden sind und einen Document Reader in Aktion sehen wollen, schauen Sie sich unsere Demo zur automatsichen Fragebeantwortung an.
Wenn Sie neugierig sind, wie ein Document Retriever oder Document Reader aufgebaut ist, können Sie das in den nächsten beiden Abschnitten dieses Blogbeitrags herausfinden.
Document Retriever
Da wir davon ausgehen, dass die Datenbank groß ist, hat der Document Retriever relativ wenig Zeit, um zu prüfen, ob ein bestimmtes Dokument für eine bestimmte Frage relevant ist. Da wir auch davon ausgehen, dass sich die Datenbank nicht ändert (zumindest nicht schnell), kann man Merkmale aus jedem Dokument extrahieren und speichern, um die Antwortzeit zu verkürzen.
Das ist so ähnlich, wie wenn man sich einen Titel für einen wissenschaftlichen Artikel ausdenkt: Es braucht zwar etwas Zeit, sich einen guten Namen auszudenken, aber es macht es für die Leute viel einfacher, die Artikel zu finden, die für ihre Forschungsfrage relevant sind.
Anstelle von Titeln werden hier meist Vektoren verwendet. Um ein Dokument mit einer Frage zu vergleichen, wird die Frage ebenfalls als Vektor dargestellt, und dann wird üblicherweise das Skalarprodukt zwischen der Vektordarstellung von Frage und Dokument verwendet (wenn Sie mehr darüber wissen möchten, wie und warum Vektordarstellungen verwendet werden, empfehle ich Ihnen, diesen Blogbeitrag zu lesen). Es gibt eine Vielzahl verschiedener Document Retriever, aber sie alle folgen diesem Kernprinzip. Der Hauptunterschied zwischen ihnen besteht darin, wie sie über die Darstellung von Dokumenten und Fragen entscheiden.
Ein Merkmal, das häufig verwendet wird, ist Term Frequency-Inverse document Frequency (oder kurz TF-IDF). Die Heuristik dahinter ist, dass wenn ein Begriff wie "neuronales Netzwerk" in der Frage und einem bestimmten Dokument vorkommt, aber über alle Dokumente hinweg selten ist, dann sollte dies ein starkes Indiz dafür sein, dass das Dokument relevant ist. Wenn dagegen der Begriff "neuronales Netzwerk" in allen Dokumenten enthalten ist (weil sie z. B. von einer Konferenz für maschinelles Lernen stammen), dann sagt diese Information wenig über die relative Relevanz des Dokuments aus.
This can be used to create a vector representation in the following way: We take a set of terms $$T$$ (each term appears at least once in the collection of documents). We will represent documents and questions as $$|T|$$-dimensional vectors, one entry corresponding to each term. For the question an entry corresponding to a term $$t$$ is $$1$$ if the term appears in the question and otherwise $$0$$. For a document $$d$$ the entry corresponding to a term $$t$$ is equal to the following expression:
$$freq_{t,d}$$ ist die Häufigkeit, mit der der Begriff $$t$$ im Dokument $$d$$ auftritt
$$D$$ ist die Menge aller Dokumente
In jüngster Zeit hat das Training neuronaler Netze zur Erstellung von Vektorrepräsentationen noch bessere Ergebnisse geliefert als die Verwendung von Algorithmen mit "handverlesenen" Merkmalen wie TF-IDF (siehe z. B. Karpukhin et. al 2020). Allerdings benötigen diese Algorithmen große Mengen an Trainingsdaten und Rechenleistung, um diese Repräsentationen zu erstellen. Algorithmen, die "handverlesene" Merkmale verwenden, liefern bereits gute Ergebnisse.
In DrQA wurde eine TF-IDF-Repräsentation verwendet, bei der die Menge der Begriffe aus einzelnen Wörtern und aus Begriffen, die aus zwei aufeinanderfolgenden Wörtern bestehen, die in den Dokumenten vorkommen, gebildet wurde.
Im Prinzip kann jeder Suchalgorithmus als Document Retriever verwendet werden. Im Falle einer Website hat man in der Regel nicht nur strukturlosen Text. Die Verwendung von Strukturen wie Titeln und Links könnte eine Möglichkeit sein, den Document Retriever zu verbessern. Wenn es sich um eine etablierte Website handelt, kann auch das Nutzerverhalten helfen.
Document Reader
Wie ich bereits erwähnt habe, ist der Document Reader der Teil, in dem bedeutende Fortschritte gemacht wurden. Deep Learning spielte bei dieser Entwicklung eine Schlüsselrolle, ebenso wie eine Komponente der neuronalen Netzwerkarchitektur, die als Attentionmechanismus oder einfach nur Attention bezeichnet wird. Die Verwendung eines Attentionmechanismus wurde erstmals von Bahdanau et. al im Jahr 2015 vorgeschlagen. Die Idee dahinter ist, das neuronale Netzwerk lernen zu lassen, seine Aufmerksamkeit auf bestimmte Schlüsselmerkmale zu fokussieren, wie z. B. Subjekt und Verb in einem Satz oder auf Gesichter von Menschen in Bildern.
Ein sehr erfolgreiches Sprachmodell namens BERT verlässt sich stark auf solche Attentionmechanismen. Mein Kollege Mattes Mollenhauer hat einen Blogbeitrag darüber geschrieben, wie man BERT verwendet, um einen Document Reader zu erstellen. Mattes hat auch ein Webinar aufgezeichnet, falls Sie das Videoformat bevorzugen.
Im Folgenden möchte ich erklären, wie der in DrQA verwendete Document Reader aufgebaut ist. Er kann in drei Teile aufgeteilt werden:
eine Absatzkodierung,
eine Fragenkodierung und
das Berechnen einer Vorhersage aus diesen Kodierungen.
Bevor die Kodierungen angewandt werden, werden die Sätze in Wörter zerlegt, Satzzeichen entfernt und Satzanfangs- und Satzende-Markierungen hinzugefügt.
Wie die meisten neuronalen Netze benötigen auch die hier verwendeten neuronalen Netze eine feste Eingabegröße. Deshalb wird eine maximale Länge für Frage und Kontext (Dokument) gewählt. Ist die Frage oder der Kontext kürzer als die Mindestlänge, werden am Ende "leere" Marker hinzugefügt. Für die Frage wird eine relativ lange Maximallänge gewählt (z. B. 100 Wörter). Wenn eine Frage zu lang ist, würde sie abgeschnitten werden, aber in der Praxis wird dies fast nie passieren. Dokumente neigen dazu, lang zu sein und können in ihrer Länge stark variieren. Die Verwendung einer zu langen Maximallänge führt tendenziell zu einer geringeren Leistung. Daher wird das Dokument in Absätze von maximaler Länge aufgeteilt (oft funktionieren 300-400 Wörter gut).
Absatzkodierung
Absätze werden in eine Folge von Vektoren übersetzt. Dazu wird zunächst eine Worteinbettung verwendet (eine gelernte Abbildung von Wörtern auf Vektoren). Beachten Sie, dass eine Worteinbettung das Wort "Bank" in "Flussufer" und "Bankkredit" auf denselben Vektor abbildet, obwohl sie ganz unterschiedliche Bedeutungen haben. Die Sequenz von Vektoren wird dann durch ein bidirektionales RNN (Recurrent Neural Network) verfeinert. Diese neuronale Netzarchitektur wurde speziell dafür entwickelt, den Kontext (auf beiden Seiten, daher "bidirektional") zu berücksichtigen. Wenn Sie mehr über RNNs erfahren möchten, kann ich Ihnen das Webinar meines Kollegen Fabian Gringel empfehlen. Während die Worteinbettung eine allgemeinere Repräsentation ist, wird diese Verfeinerung auf die Fragebeantwortungsaufgabe trainiert und extrahiert daher Merkmale, die wichtig sind, um zu entscheiden, ob ein Wort Teil der Passage ist, die die Frage beantwortet.
Normalerweise funktioniert eine Worteinbettung, die für eine Sprachverarbeitungsaufgabe trainiert wurde, gut für eine breite Palette von Sprachverarbeitungsaufgaben. Da die Annotation von Daten zur Beantwortung von Fragen zeitaufwändig ist, wird die Worteinbettung auf eine Aufgabe trainiert, für die Daten automatisch annotiert werden können. Am häufigsten wird die Aufgabe verwendet, ein geschwärztes Wort in einem Text zu erraten. Um annotierte Daten für diese Aufgabe zu erstellen, kann man einen beliebigen Text nehmen, zufällig Wörter zum Schwärzen auswählen und diese Wörter separat als Annotationen speichern, bevor die Wörter geschwärzt werden.
Für den Absatz-Encoder wird eine vortrainierte Worteinbettung verwendet, aber es werden mehrere Merkmale hinzugefügt, die Folgendes kodieren:
ob das Wort Teil der Frage ist,
ob es einem Wort in der Frage ähnlich ist,
die Häufigkeit des Wortes über alle Dokumente hinweg
die Art des Tokens, das es ist (Anfangs-/Endmarker, Wortart oder benannte Entität).
Zur Überprüfung, ob das Wort einem Wort in der Frage ähnlich ist, wird eine Art Attentionmechanismus verwendet.
Fragenkodierung
Die Fragekodierung ist ganz ähnlich: Auch hier werden die Wörter in der Frage in Vektoren übersetzt, diesmal unter Verwendung einer vortrainierten Worteinbettung ohne zusätzliche Merkmale. Dann wird die Repräsentation der Frage als eine Sequenz von Vektoren mit Hilfe eines RNN verfeinert. Schließlich wird die Sequenz von Vektoren durch eine gewichtete Summe zu einem einzigen Vektor kombiniert.(image)
Vorhersage
Um eine Vorhersage aus dem Fragevektor und der Folge von Vektoren, die einen Absatz repräsentieren, zu erhalten, werden zwei Klassifikatoren trainiert: Einer, der klassifiziert, ob eine gegebene Position der Anfang der relevanten Passage ist, und einer, ob sie das Ende ist.
Mit diesen beiden Klassifikatoren wird die Punktzahl für alle Positionspaare $$(i,j)$$, die nicht weiter als eine maximale Passagenlänge $$m$$ voneinander entfernt sind, berechnet und verglichen. Die Punktzahl für ein Paar $$(i,j)$$ ist gleich dem Produkt aus der geschätzten Wahrscheinlichkeit, dass $$i$$ der Anfang einer Passage ist, die die Frage beantwortet, und der geschätzten Wahrscheinlichkeit, dass $$j$$ das Ende der Passage ist.
Beachten Sie, dass für fast alle dieser Paare die Punktzahl sehr niedrig sein wird, da oft die relevante Passage gar nicht in dem Absatz enthalten ist.
Das Paar mit der höchsten Punktzahl wird ausgewählt und dann mit den Passagen mit der höchsten Punktzahl aus anderen Absätzen desselben Dokuments verglichen. Die Passagen mit der höchsten Punktzahl aus jedem Dokument werden verglichen und diejenige mit der höchsten Punktzahl aus diesen fünf wird dann dem Benutzer angezeigt.
Obwohl es wie ein kleines Detail erscheinen mag, dass für jede Passage eine Punktzahl benötigt wird, ist es tatsächlich viel schwieriger, jeder Passage eine Punktzahl zu geben, die über verschiedene Dokumente hinweg verglichen werden kann, als einfach die relevanteste Passage aus jedem Absatz auszuwählen.
Fazit
Obwohl das Ziel, ein System zu schaffen, das in der Lage ist, komplexe Fragen auf der Grundlage einer Sammlung von Texten zu beantworten, noch nicht in Reichweite ist, gibt es viele Fortschritte in dieser Richtung. Aktuelle Fragebeantwortungssysteme können Fragen beantworten, deren Antwort explizit in einem der Texte gefunden werden kann. Da dies bei einer Webseitensuche oft der Fall ist, ermöglicht die Einbindung eines Fragebeantwortungssystems dem Benutzer, die gesuchten Informationen schneller zu finden.