Eine der größten Herausforderungen bei der Nutzung von Textdaten liegt in der unstrukturierten Natur der natürlichen Sprache. Dieses Datenformat macht für uns Menschen Sinn, ist aber bei der automatischen Verarbeitung sehr schwierig. Trotz dieser Herausforderung bestehen schätzungsweise 80-90 % der Daten in einem Unternehmen aus Text [1].
Der potenzielle Mehrwert, den die Nutzung dieser Datenquelle haben könnte, sollte nicht unterschätzt werden. Zum Beispiel verbringen Juristen im Durchschnitt 11,2 Stunden pro Woche mit Aufgaben im Zusammenhang mit der Informationsbeschaffung [2]. Ein möglicher Weg, diese Daten zu nutzen, ist ein effektives Suchsystem.
- Stellen Sie sich vor, Sie könnten Millionen von PDF-Dateien mit Rechtstexten effektiv durchsuchen, um das eine Gesetz zu finden, das auf Ihre Situation zutrifft.
- Stellen Sie sich vor, Sie könnten Unmengen von technischen Handbüchern sofort durchsuchen, um den Absatz zu finden, der genau erklärt, wie Sie das Problem lösen, vor dem Sie stehen.
Klingt nützlich, nicht wahr?
Hier kommt das Information Retrieval und insbesondere die semantische Suche ins Spiel, also genau der Zweig des NLP (Natural Language Processing), der sich mit diesem Problem befasst. In diesem Blogpost werden wir dieses Thema von einem sehr praktischen Standpunkt aus untersuchen. Wenn Sie sich also nicht für einen Mathematiker oder einen erfahrenen Programmierer halten, sollten Sie noch nicht wegklicken.
Ziel ist es, ein Gespür dafür zu bekommen, was semantische Suche ist und welche Herausforderungen bei der Implementierung einer semantischen Suchmaschine in der Praxis zu erwarten sind. Am Ende sollten Sie eine solide Vorstellung davon haben, (1) was semantische Suche ist, (2) wann semantische Suche eingesetzt werden sollte und (3) wie die Implementierung einer semantischen Suchmaschine aussehen sollte.
Wir werden die technischen Aspekte hier nicht ausführlich behandeln, aber wir werden einen weiteren Blogpost veröffentlichen, der sich mit denselben Themen befasst, aber von einem eher technischen Standpunkt aus. Der Schwerpunkt wird hier eher auf dem "Warum" als auf dem "Wie" liegen.
Wir wollen nicht zu weit vorgreifen und kurz erörtern, was die semantische Suche genau ist und wie sie funktioniert. Im Wesentlichen wird bei der semantischen Suche versucht, Suchanfragen mit relevanten Dokumenten auf der Grundlage der Bedeutung und nicht der reinen Syntax abzugleichen. In der Praxis hat ein solcher Ansatz vor allem zwei Vorteile:
(1) Der genaue Wortlaut wird weniger relevant 📝
Stellen Sie sich vor, Sie arbeiten für ein Immobilienunternehmen und haben eine Datenbank voller Artikel über Immobilien. Angenommen, Sie suchen einen Artikel über ein bestimmtes Haus, das Sie im Auge haben, und erstellen eine Abfrage, die die Informationen enthält, an die Sie sich über dieses Haus erinnern. Ihre Abfrage könnte etwa so aussehen: "ein Haus mit zwei Schlafzimmern in Los Angeles". Nehmen wir nun an, dass der Artikel, den Sie suchen, sich auf diese Immobilie als "ein Haus mit 2 Zimmern im sonnigen Kalifornien" bezieht .
Nun, wenn Sie eine nicht-semantische Suchmaschine verwenden würden, würden Sie dieses Ergebnis nicht finden, weil Ihre Anfrage keine gemeinsamen Wörter mit dem gesuchten Ergebnis hat. Ein Artikel über eine Immobilie, die als "zweistöckiges Haus in Los Angeles" beschrieben wird, würde zum Beispiel als viel relevanter eingestuft werden, da diese Beschreibung viele gemeinsame Wörter mit Ihrer ursprünglichen Suchanfrage hat, obwohl es einen wichtigen Unterschied in der Bedeutung zwischen "ein zwei Schlafzimmer Haus" und "ein zwei Stockwerk Haus".
Da sich eine semantische Suchmaschine jedoch eher mit der Bedeutung als mit der Syntax befasst, würde sie beispielsweise erkennen, dass "Wohnung" und "Haus", "Los Angeles" und "Kalifornien" usw. eng miteinander verwandt sind, und Sie würden wahrscheinlich finden, wonach Sie suchen. Sie wüsste also, dass "ein Haus mit zwei Schlafzimmern in Los Angeles" der Bedeutung nach näher an "ein Haus mit zwei Zimmern im sonnigen Kalifornien" liegt als an "ein zweistöckiges Haus in Los Angeles".
Oft gibt es einen Unterschied zwischen dem Wortlaut Ihrer Anfrage und dem Wortlaut der gewünschten Ergebnisse. Semantische Suchmaschinen können damit umgehen, klassische nicht-semantische Suchmaschinen hingegen nicht.
(2) Der Kontext wird berücksichtigt 📖
Menschen suchen in Suchmaschinen häufig nach Informationen, die auf einer Beschreibung eines Konzepts und nicht auf einer Reihe buchstäblicher Schlüsselwörter basieren. Wenn Sie z. B. nach "Python" suchen , sind ein Dokument mit dem Titel "Lernen Sie 5 lustige Fakten über Python-Schlangen" und ein Dokument mit dem Titel "Python-Programmiertutorial" beides potenziell relevante Ergebnisse, da nicht klar ist, auf welche Art von Python Sie sich beziehen.
Wenn Sie jedoch nach "Python lernen" suchen , wird eine semantische Suchmaschine erkennen, dass sich das Wort "Python" in diesem Zusammenhang eher auf die Programmiersprache als auf den Typ der Schlange bezieht. Daher wird sie das Programmiertutorial als relevanter einstufen. Sie trauen mir nicht? Probieren Sie es selbst aus: Suchen Sie in Google-Bildern nach "Python" und anschließend nach "Python lernen" und beobachten Sie, wie die Schlangen verschwinden.
Eine klassische nicht-semantische Suchmaschine wird jedoch "learn 5 fun facts about Python snakes" für relevanter halten, da dieser Titel mehr gemeinsame Wörter mit Ihrer Anfrage hat, da er sowohl "learn" als auch "Python" enthält .
Jetzt fragen Sie sich vielleicht, wie das alles funktioniert. 🤔
Kurz gesagt, funktioniert die semantische Suche durch den Vergleich von Satzeinbettungen: Sie suchen nach einem Ergebnis mit einer Satzeinbettung, die der Satzeinbettung Ihrer Anfrage nahe kommt. Haben Sie das verstanden? Perfekt, Sie können diesen Teil gerne überspringen. Falls nicht, keine Sorge, ich werde Ihnen einen kurzen NLP-Crashkurs geben.
Einbettungen spielen eine zentrale Rolle in fast jeder NLP-Anwendung. Im Grunde ist eine Einbettung ein Zahlenvektor, der die Bedeutung eines Wortes darstellt. Konkret bedeutet dies, dass Wörter mit ähnlichen Bedeutungen ähnliche Einbettungen haben und umgekehrt. Das folgende Diagramm veranschaulicht die (3-dimensionalen) Einbettungen. Man sieht deutlich, dass Wörter mit ähnlichen Bedeutungen ähnliche Einbettungen haben. So ist beispielsweise festzustellen, dass Wörter, die mit Schule zu tun haben, niedrige X-Werte und niedrige Z-Werte haben, während Wörter, die mit Sport zu tun haben, hohe X-Werte und hohe Z-Werte haben, usw.
Wie kommt es zu diesen Einbettungen, fragen Sie? Nun, heutzutage über transformatorbasierte Sprachmodelle [3]. Sie erkennen diese Modelle normalerweise daran, dass ihr Name ein Wortspiel mit dem Namen BERT ist. NLP-Forscher sind schließlich Sprachenthusiasten, also sind dumme Wortspiele unvermeidlich.
Du denkst jetzt vielleicht : "Ist Transformers nicht der Film über Autoroboter?". Ich muss dich leider enttäuschen, aber nein. Nun, technisch gesehen schon, aber leider macht Shia LaBeouf (noch) nicht wirklich NLP. Stark vereinfacht ausgedrückt sind Transformers Sprachmodelle, die riesige Textmengen verarbeiten und versuchen, herauszufinden, welche Wörter häufig im gleichen Kontext vorkommen (in der Regel mithilfe einer Technik namens Masked-Language-Modeling [4]), und die Einbettungen für diese Wörter nahe beieinander platzieren, da sie (in gewisser Weise) austauschbar verwendet werden können.
Inzwischen sollten Sie (auf hohem Niveau) wissen, was Worteinbettungen sind. Satzeinbettungen sind das völlig analoge Gegenstück zu Worteinbettungen, wobei der Hauptunterschied darin besteht, dass sie eine Einbettung für eine Folge von Wörtern und nicht eine Einbettung für jedes einzelne Wort erzeugen. Texte mit ähnlichen Bedeutungen haben also Satzeinbettungen, die nahe beieinander liegen.
Da Sie nun auch mit Satzeinbettungen vertraut sind, lassen Sie uns noch einmal einen Blick auf die zu Beginn dieses Absatzes gemachte Aussage werfen: "Die semantische Suche funktioniert durch den Vergleich von Satzeinbettungen: Sie suchen nach einem Ergebnis mit einer Satzeinbettung, die der Satzeinbettung Ihrer Anfrage nahe kommt". Ergibt das jetzt mehr Sinn? Perfekt. (Ich nehme an, Sie haben mit Ja geantwortet 🤞).
Wie Sie bald feststellen werden, ist die semantische Suche ein weites und sehr nuanciertes Thema. Um unsere Überlegungen zu strukturieren, werden wir das folgende Flussdiagramm als Leitfaden für unsere Reise in die semantische Suchwildnis verwenden.
Im Moment sieht es vielleicht noch nicht sehr informativ aus, aber es wird bald Sinn machen, das verspreche ich.
Bevor Sie sich an die Umsetzung machen, lassen Sie uns einen Moment innehalten und überlegen, ob die semantische Suche für Ihren Anwendungsfall überhaupt geeignet ist. Wie bereits erwähnt, bestehen die Hauptvorteile der semantischen Suche darin, dass sie mit Synonymen und mit Kontext umgehen kann. Daher ist es wichtig, kritisch abzuwägen, ob einer dieser Vorteile für Ihren Anwendungsfall relevant ist.
Nehmen wir an, Sie haben eine Datenbank mit medizinischen Dokumenten und wollen damit nach Dokumenten suchen, die bestimmte Krankheitsnamen oder bestimmte Codenamen enthalten. In diesem Fall nützen Ihnen Synonyme nicht viel (eine Krankheit hat nur einen Namen), und wenn Sie nur nach dem Namen der Krankheit suchen, gibt es auch nicht viel Kontext, den Sie berücksichtigen müssen.
Daher ist der Mehrwert, den die semantische Suche bringt, wahrscheinlich recht begrenzt, so dass Sie wahrscheinlich besser eine lexikalische Suchmaschine verwenden sollten. TF-IDF [5] oder insbesondere BM25 [6] sind (zumindest zum Zeitpunkt des Schreibens) solide lexikalische Suchalgorithmen, die man in Betracht ziehen sollte. Ich werde nicht näher darauf eingehen, wie diese Algorithmen funktionieren, aber wenn Sie daran interessiert sind, lesen Sie unseren kommenden Blogpost über die semantische Suche.
Abschließend gibt es hier zwei wichtige Überlegungen:
(1) Werden Ihre Nutzer nach Begriffen suchen? Suchen Ihre Nutzer zum Beispiel nach "Haus" oder "Villa mit zwei Schlafzimmern in LA mit Außenpool"? Die Berücksichtigung des Kontexts lohnt sich wirklich nur für Letzteres.
(2) Haben Sie einen vielfältigen Datensatz? Möchten Sie zum Beispiel die Verträge der Mitarbeiter in der Finanzabteilung oder alle Dokumente in Ihrem Unternehmen durchsuchen? Bei unterschiedlichen Daten macht der genaue Wortlaut einen größeren Unterschied, so dass sich die semantische Suche mehr auszahlt.
Nachdem Sie sich nun entschieden haben, dass die semantische Suche für Ihren speziellen Anwendungsfall geeignet ist, benötigen Sie einen Satzumwandler, der Ihnen den Einstieg erleichtert. Heutzutage gibt es viele Open-Source-Optionen, aus denen Sie wählen können. Sehen Sie sich diese hier an. Wenn der Bereich (z. B. juristische Texte, technische Handbücher usw.) Ihrer Daten recht allgemein ist, wie z. B. englische Nachrichten, spanische Artikel usw., werden Sie wahrscheinlich einen Satzumwandler finden, der nicht nur für Ihre Sprache, sondern auch für Ihren Bereich geeignet ist.
Vielleicht halten Sie sich aber auch für einen Liebhaber isländischer medizinischer Dokumente. Vielleicht mögen Sie auch slowenische Rechtstexte. Ganz ehrlich, wer kann Ihnen das verdenken? Tun wir das nicht alle?
Leider wird es für diese speziellen Situationen wahrscheinlich schwierig sein, ein Sprachmodell zu finden, das speziell für diesen Bereich geeignet ist. Sprachmodelle, die auf allgemeinem Text in dieser Sprache trainiert wurden, sind wahrscheinlich die beste Option, die Sie finden können.
Sie können sich aber sicher vorstellen, dass ein "alltäglicher" Text ganz anders aussieht als ein medizinischer Text. Ein isländisches Allzweck-Sprachmodell ist wahrscheinlich nur selten mit den medizinischen Fachwörtern (z. B. Krankheitsnamen, anatomische Wörter usw.) in Berührung gekommen, die in medizinischen Texten eine wichtige Rolle spielen. Daher wird es einem allgemeinen Sprachmodell wahrscheinlich schwer fallen, die Bedeutung medizinischer Texte richtig zu erfassen.
In einem solchen Szenario würden Sie eine Technik verwenden wollen, die "Domänenanpassung". Im Wesentlichen bedeutet dies, dass Sie Ihr Allzweck-Sprachmodell, das auf allgemeinen Text trainiert wurde , auf Daten aus Ihrem Interessengebiet weiter trainieren. Auch hier werde ich nicht ins Detail gehen, wie das alles funktioniert: Lesen Sie dazu unseren nächsten, eher technischen Blogpost.
Sie sollten sich diesen Prozess jedoch wie folgt vorstellen. Nehmen wir an, Sie sprechen kein einziges Wort Slowenisch. Das Training eines Sprachmodells würde dann bedeuten, dass Sie Unmengen von slowenischen Alltagstexten studieren müssen. Am Ende werden Sie wahrscheinlich ziemlich gut mit der slowenischen Sprache vertraut sein. Wenn ich Ihnen jedoch einen slowenischen Rechtstext gebe und Ihnen einige Fragen dazu stelle, können Sie sie wahrscheinlich immer noch nicht beantworten. Nun, eine Domänenanpassung würde bedeuten, dass man Sie auf eine slowenische juristische Fakultät schickt und Sie slowenische Rechtstexte studieren lässt. Obwohl dies eine ziemlich unangenehme Erfahrung zu sein scheint (ich entschuldige mich bei allen slowenischen Juristen, die dies lesen), wären Sie danach in der Lage, die Bedeutung der slowenischen Rechtstexte zu verstehen.
An diesem Punkt sind Sie einem funktionierenden semantischen Suchsystem schon recht nahe. Sie haben bereits die Entscheidung getroffen, die semantische Suche den Alternativen vorzuziehen, und Sie verfügen über ein geeignetes Sprachmodell, das Ihrer Lösung zugrunde liegen wird. Lassen Sie uns nun auf einen Nachteil der semantischen Suche eingehen: Sie kann recht langsam und rechenintensiv sein. Wenn Rechenressourcen und Latenzzeiten für Sie keine Rolle spielen, können Sie diesen Nachteil einfach in Kauf nehmen, und schon haben Sie eine Suchmaschine (herzlichen Glückwunsch 🎊).
In den meisten (praktischen) Fällen sind dies jedoch erhebliche Probleme. Aber keine Sorge, es gibt eine Lösung! Diese Lösung heißt "Abrufen und neu bewerten". Im Wesentlichen geht es darum, einen (schnellen und kostengünstigen) lexikalischen Suchalgorithmus (wie TF-IDF oder BM25, wie bereits erwähnt) zu verwenden, um die irrelevanten Dokumente in Ihrer Datenbank herauszufiltern, so dass Sie eine kleinere Teilmenge von "Kandidatendokumenten" erhalten, die alle potenziell relevant sein könnten. Dies ist der Schritt des "Abrufens". Dann verwenden Sie Ihre semantische Suchmaschine, um nur in diesen "Kandidatendokumenten" zu suchen und nicht in allen Dokumenten in Ihrer Datenbank. Dies ist der Schritt des "Rerankings". Grafisch sieht der Ablauf in etwa so aus wie das folgende Diagramm.
Lassen Sie uns dies anhand eines sehr praktischen Beispiels veranschaulichen. Sie haben eine Datenbank mit 100.000 Dokumenten. Nehmen wir an, eine lexikalische Suche in 1.000 Dokumenten dauert etwa 1 ms (= 0,001 Sekunden), während eine semantische Suche in 1.000 Dokumenten etwa 50 ms (= 0,05 Sekunden) dauert. Eine vollständige semantische Suche in allen 100.000 Dokumenten würde also (0,05 * 100 =) 5 Sekunden dauern.
Nehmen wir an, wir führen zunächst eine lexikalische Suche in den 100.000 Dokumenten durch und behalten nur die obersten 5.000 Dokumente. Dies dauert (0,001 * 100 =) 0,1 Sekunden. Dann können wir eine semantische Suche nur in diesen 5.000 Dokumenten durchführen. Dies dauert (0,05 * 5 =) 0,25 Sekunden. Wahrscheinlich werden wir in beiden Fällen zu weitgehend ähnlichen Ergebnissen kommen, obwohl die vollständige semantische Suche 5 Sekunden dauerte, während der Ansatz "Abrufen und neu ordnen" nur 0,35 Sekunden benötigte und weniger Rechenressourcen verbrauchte.
Wenn Sie diesen Punkt in diesem Beitrag erreicht haben, sollten Sie ein solides (allgemeines) Verständnis der semantischen Suche sowie der wichtigsten praktischen Überlegungen haben, die bei der Implementierung eines semantischen Suchsystems in einem realen Szenario ins Spiel kommen.
Ich habe bereits ein paar schamlose Anpreisungen gemacht, aber wenn Sie sich für die technischen Aspekte der semantischen Suche interessieren, können Sie sich gerne unseren kommenden, eher technischen Blogpost zu diesem Thema ansehen.
Wenn Sie sich über einige reale Anwendungsfälle der semantischen Suche informieren möchten, empfehle ich Ihnen einen Blick auf die Fallstudien über unsere Arbeit für Fednot (belgischer Notarverband) und Funke (deutsche Mediengruppe).
Ich hoffe, dieser Blogpost war das, wonach Sie gesucht haben! (Wortspiel sehr beabsichtigt)
[1]: Bill Inmon. (28. Juni 2016). Warum nennen wir Text "unstrukturiert"?
https://tdwi.org/articles/2016/06/28/text-unstructured.aspx.
[2]: IDC's Information Worker Survey. (June 2012).
https://metajure.com/lawyers-waste-six-hours-a-week-on-document-management-issues-2/
[3]: Devlin, et al. (24 May 2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
https://arxiv.org/pdf/1810.04805.pdf.
[4]: James Briggs. (19. Mai 2021). Masken-Sprachmodellierung mit BERT
https://towardsdatascience.com/masked-language-modelling-with-bert-7d49793e5d2c
[5]: Anirudha Simha. (6. Oktober 2021). Verstehen von TF-IDF für maschinelles Lernen
https://www.capitalone.com/tech/machine-learning/understanding-tf-idf/
[6]: Vinh Nguyên. (1. September 2019). Okapi BM25 mit Game of Thrones
https://blog.mimacom.com/bm25-got/.