Anforderungen des Kunden
Der Kunde verfügte über bereits vorhandene Lösungen (Chatbot und Gewerbeanmeldungsassistent), die als Schnittstelle verwendet werden konnte, so dass die Bürgerinnen und Bürger ihre Gewerbebeschreibungen in Umgangssprache eingeben konnten und die fünf relevantesten Branchencodes als Antwort vom Chatbot erhielten.
Beide vorhandenen Lösungen ermöglichen die Weiterleitung verschiedener Benutzerfragen an entsprechende API-Endpunkte, was bedeutet, dass wir die von Benutzern geschriebenen umgangssprachlichen Gewerbebeschreibungen als API-Aufrufe erhalten haben. Unser Algorithmus sollte eine Antwort auf diese API-Aufrufe erstellen, die die 5 relevantesten Branchencodes enthält.
Es gab eine bereits existierende Lösung mit einfachen Worteinbettungen, die oft unbefriedigende Ergebnisse zeigte. Dies deutete darauf hin, dass ein besseres semantisches Verständnis der Definitionen und Beschreibungen der verschiedenen Branchencodes sowie der umgangssprachlichen Gewerbebeschreibungen erforderlich war.
Unsere Lösung
Backend: Python, spaCy, PyTorch, NumPy, Pandas, fastAPI, Pydantic, Docker, Elasticsearch
Infrastruktur: Google Cloud (Training), Git, DVC, TensorBoard
Die Grundlage für unseren Algorithmus ist eine Version von BERT, einer von Google entwickelten neuronalen Netzarchitektur, die bereits auf einem großen deutschen Textkorpus vortrainiert wurde. Wir haben die vorhandenen Schichten nachtrainiert und die Ausgabe von BERT mit aufgabenspezifischen Features angereichert. Durch Hinzufügen einiger neuer Schichten und Nachbearbeitungsschritte waren wir in der Lage, einen Textklassifikator zu erstellen, der die vollen semantischen Fähigkeiten von BERT nutzt und gleichzeitig performant genug ist, um auf einer CPU zu laufen.
Dieser Klassifikator wurde dann anhand historischer Gewerbebeschreibung - Branchencode-Paare trainiert. Für eine gegebene Gewerbebeschreibung gibt er für jeden Branchencode einen Relevanzscore aus. Die 5 Branchencodes mit dem höchsten Score werden dann nach ihrer Relevanz sortiert und als Antwort auf die ursprüngliche Benutzeranfrage zurückgeschickt.