itemis Blog

Optimierung des Requirements-Engineerings und der Dokumentation durch NLP und KI

Geschrieben von Ario Giancarlo Cecchettini | 15.02.2023

Natürliche Sprachverarbeitung (NLP) ist ein Teilgebiet der künstlichen Intelligenz (KI), das in immer mehr Anwendungen eingesetzt wird. Dazu gehören die Effizienzsteigerung von Forschungen in Bereichen wie Recht und Medizin, das automatische Extrahieren und Abrufen von Informationen sowie die Vereinfachung alltäglicher Aufgaben. In den letzten Jahren hat NLP aufgrund eines neuen Sets von Algorithmen, auch bekannt als Transformer-Modelle, eine signifikante Veränderung erfahren, einschließlich des bekannten BERT-Algorithmus. Diese Algorithmen vereinen die besten Merkmale früherer neuronaler Netzwerkarchitekturen und überwinden ihre Mängel, was zu bisher unerreichten Fortschritten in der Sprachtechnologie führt.

Ein Bereich, in dem NLP besonders nützlich sein kann, ist das Requirements Engineering, das das Management von Anforderungen beinhaltet. Dies ist oft eine manuelle Aufgabe, die zeitaufwändig, endlos und fehleranfällig sein kann. Dies kann den Fortschritt des Projekts verlangsamen, da zu viel Zeit für quantitativ orientierte Aufgaben aufgewendet wird, anstatt sich auf qualitativ orientierte Aufgaben zu konzentrieren, die ein präzisere Messung des Fortschritts sind.

In diesem Artikel werden wir entdecken, wie NLP während der Designphase des Requirements Engineering wirksam angewendet werden kann und wie es Unternehmen viele Stunden sparen kann, die für andere Aufgaben zugewiesen werden können, die Geschwindigkeit von Projekten erhöht und das Risiko eines Fehlschlags vermindert.

Transformationsmodelle in NLP, wie das erwähnte BERT, Googles GPT3 oder Nvidias T5, sind der Stand der Dinge des maschinellen Lernens für NLP und markieren den Beginn dessen, was von einigen als "das goldene Zeitalter des NLP" beschrieben wird, was von ähnlicher Bedeutung ist, wie ImageNet auf die Computer Vision. Natürliche Sprachen sind durch mehrere Arten von Ambiguität gekennzeichnet, weshalb es eine Herausforderung ist, einer Maschine beizubringen, sie zu parsen.

Tonalität, verschiedene Arten syntaktischer oder terminologischer Mehrdeutigkeit, unklare Semantik auf Satzebene, fehlende Struktur und wissenschaftliche Collokationen sind alles Faktoren, die ein Computer nicht verstehen kann. Ungefähr 80% der verfügbaren Daten im Web sind unstrukturierte Daten (also natürlicher Sprachtext). Eine Goldmine an Informationen und ungenutztem Potenzial. Um diese Informationen nutzen zu können, werden NLP-Algorithmen benötigt, um die Daten zu extrahieren, zu strukturieren und Semantik zu identifizieren, um Informationen und Einsichten aus Textdaten zu gewinnen. NLP ist der programmatische Bestandteil eines größeren Bereichs namens Computational Linguistics. Computational Linguistics stammt auch aus der traditionellen Linguistik (der Sprachstudie) und der Informatik.

Requirements Engineering (RE) ist ein Fachgebiet, das sich mit der Definition, Dokumentation und Verwaltung von Engineering-Anforderungen während der Entwurfsphasen von Engineering-Projekten befasst. Dies beinhaltet Anforderungsdatenbanken, die von Werkzeugen wie IBM Rational DOORS oder Textdateien wie Spezifikationsdokumenten verwaltet werden können, wobei letztere in der Regel in unstrukturiertem, natürlichen Sprachtext geschrieben sind. Es gibt eine Kombination aus unstrukturierten, halbstrukturierten und vollständig strukturierten Dokumenten. Anforderungen können in Bezug zueinander stehen, so dass eine Anforderung eine andere weiter spezifizieren, blockieren oder einschließen kann.

Es gibt auch verschiedene Anforderungstypen: Sie können als Softwareanforderungen, Systemanforderungen, Stakeholder-Anforderungen oder Testanforderungen definiert werden. Es bestehen oft Verbindungen zwischen Anforderungen verschiedener Typen, da beispielsweise eine Softwareanforderung mit einer entsprechenden Testanforderung verknüpft sein kann, um die Softwareanforderungen zu testen. Es ist wesentlich, sinnvolle Verbindungen zwischen diesen Anforderungen herzustellen, nicht nur für das zu entwerfende System oder die Software, sondern auch für die Geschwindigkeit und Produktivität des Projekts.

Verbesserung der Anforderungsverknüpfung durch NLP

Das Verbinden von Anforderungen ist normalerweise eine menschliche Aufgabe, die jedoch zeitaufwändig und frustrierend sein kann. Es besteht viel Raum für Fehler. So auch für Fachexperten, die Anforderungen verknüpfen. Insbesondere bei der Kennzeichnung der Beziehungen zwischen ihnen. Das Zuordnen von Beziehungen zu paarweise verknüpften Anforderungen ist nicht immer einfach und ist eine kognitiv anspruchsvolle Aufgabe. Die Grenzen zwischen Beziehungstypen können unscharf sein und es erfordert die gemeinsame Anstrengung mehrerer Fachexperten, um einen hohen Kennzeichnungsstandard bei der Verwaltung und Verknüpfung semantischer Anforderungen zu garantieren.

Im supervised learning wird dies als Labelling-Aufgabe betrachtet, die nicht unbedingt für ihre Einfachheit bekannt ist, da die Labelling-Wahl, wie ein bestimmter Eintrag zu kennzeichnen ist, nicht einfach ist. Sogar erfahrene Fachexperten können bei der Kennzeichnungsprozesse Entscheidungsprobleme haben. Die Übertragung der Aufgabe an nur einen Fachexperten könnte das Aussehen der Ground-Truth-Daten auf das subjektive Urteil einer einzigen Person reduzieren, aufgrund unserer menschlichen kognitiven Vorurteile, die wir möglicherweise nicht bewusst sind. Und das ist nicht das, was wir wollen, wenn wir das Wissens- und Informationsmanagement sensibler Ingenieurdaten durchführen. Bei der Verwaltung von Informationen und Wissen kann es für Teams bspw. ein erhöhtes Risiko geben, Informationen zu verzerren, die genau, sauber und zuverlässig genug sein müssen, um für die Schulung eines maschinellen Lernmodells verwendet zu werden.

Es ist für Ingenieure von entscheidender Bedeutung, ein präzises Wissen über alle Anforderungen für die Implementierung eines Systems oder einer Software zu haben. Aber das kann sehr umständlich sein. Anforderungsdokumente sind umfangreiche und komplexe Informationsquellen. Wäre es nicht viel besser, ein Hilfssystem zu haben, das diese Dokumente parsen und eine semantische Darstellung erstellen kann, die sowohl maschinenlesbar als auch für Projektmitglieder verständlicher ist? Das Ergebnis muss sicherlich noch von Domain-Experten überprüft werden, aber dafür müsste wesentlich weniger Zeit in die Verwaltung der Anforderungen insgesamt investiert werden. Das kann vielen Leuten viel Ärger ersparen. Aber wiederum stellt die Erstellung einer solchen Lösung eine Herausforderung dar.

Im Bereich der NLP werden benannte Entitäten in Texten (wie Personen, Organisationen, Produkte usw. oder andere domain-spezifische Varianten von Entitätstypen) durch das Training eines Modells auf einer Aufgabe namens NER (Named Entity Recognition) gefunden. Diese benannten Entitäten werden dann durch das Training eines weiteren NLP-Modells auf einer Aufgabe namens Relation Extraction verbunden, die eine der zentralen Herausforderungen des NLP ist. Die beiden verbundenen Entitäten zusammen mit ihrer Beziehung können dann als Informationsdreifaltigkeit gespeichert werden, indem die Entitäten als Knoten und ihre Beziehungen als Kanten/Vertex gespeichert werden. Diese Technik kann verwendet werden, um eine Graphdarstellung von Informationen innerhalb von Texten zu erzeugen und Informationen, die in textueller Form dargestellt werden, in eine graphische Darstellung umzuwandeln, ein end-to-end-Ansatz mit minimalem menschlichen Eingriff.

NLP verwendet normalerweise den Ansatz auf Begriffsebene, zum Beispiel wird aus einem Beispielsatz 'Tim Kook ist der CEO von Apple' das Dreifaltigkeit Tim Kook (PERSON) - CEO_von - Apple (ORG) erstellt. Die Schlagwörter 'PERSON' und 'ORG' werden den Substantiven im Satz automatisch von einem NLP-Modell zugewiesen, das trainiert wurde, die Named Entity Recognition mit gegebenen Labels auszuführen.

Die Verwendung von Transformatormodellen im Requirements Engineering

Im Requirements Engineering sieht unsere Problemstellung jedoch anders aus: Wir haben es oft mit ganzen Sätzen zu tun, die die kleinstmögliche Informationseinheit darstellen, meist eine kurze textuelle Beschreibung einer Software- oder Systemanforderung. Für viele dieser Anwendungsfälle wollen wir den Satz nicht zerlegen.

Obwohl es sinnvoll ist, jedes Wort im Satz mit seinen linguistischen Merkmalen mit einem NLP-System zu markieren, geht es beim Requirements Engineering darum, Verbindungen zwischen diesen Sätzen oder Anforderungsbeschreibungen herzustellen, was aus Sicht des maschinellen Lernens eine grundlegend andere Aufgabe ist. Daher werden uns viele der Standardansätze im NLP nicht helfen, die Kurve zu bekommen.

Durch die Verwendung von Transformationsmodellen können wir ein vortrainiertes Modell verwenden, das schnell ein recht umfassendes Verständnis des Eingabetextes erlangt, das auch für die Inferenz auf domänenspezifischen Text, wie er in Anforderungs- oder Rechtsdokumenten vorkommt, verwendet werden kann, um eine numerische Darstellung des eingehenden Textes vorherzusagen. Diese numerischen Repräsentationen, genannt Einbettungen, ein anderes Wort für Vektoren, können nun für fortgeschrittenere KI-Aufgaben verwendet werden.

Meine Erkenntnisse bei der Itemis AG haben gezeigt, dass die Modelle selbst in vielen domänenspezifischen Szenarien wie dem Requirements Engineering die Semantik der Eingabedaten recht gut abbilden können. 

Ein entscheidendes Merkmal von Transformer-Modellen ist jedoch, dass sie für spezifischere nachgelagerte Aufgaben in der NLP, wie z.B. die Beantwortung von Fragen in Chat-Bots und der Suche, Textzusammenfassung/-generierung oder die Vorhersage des nächsten Wortes oder der maschinellen Übersetzung, weiter feinabgestimmt werden können. Dieser Ansatz, bei dem ein aufgabenspezifischerer überwachter Stack auf die Ausgabe eines aufgabenunabhängigeren unüberwachten Stacks aufgesetzt wird, ist als Transferlernen bekannt.

In diesem Fall können uns jedoch die spezifischeren nachgelagerten Aufgaben, die bekanntermaßen mit Transformatormodellen verwendet werden, nicht direkt bei dem helfen, was wir zu tun beabsichtigen. Wir können auch kein vorläufiges Modell für die Erkennung von benannten Entitäten erstellen, da wir es mit ganzen Sätzen zu tun haben, die als einzelne Entitäten behandelt werden (da jeder dieser Sätze Beschreibungen einer spezifischen technischen Anforderung sind), eine recht ungewöhnliche Art der Darstellung von Daten oder Informationen im NLP, wie wir es kennen.

Man könnte zum Beispiel eine neue Art von eigenständigem Klassifikator entwickeln, der die vom vortrainierten Transformatormodell abgeleitete Datenrepräsentation auf unsere eigene, benutzerdefinierte, nachgelagerte Aufgabe anwendet, die von einem anderen, benutzerdefinierten Modell anstelle eines feinabgestimmten Transformatormodells bearbeitet wird. Dies gibt uns mehr Entscheidungsgewalt über die Art des Modells. Alles, was wir dazu brauchen, ist die Ausgabe des Transformatormodells, das wir für unsere Eingabedaten verwenden, als Eingabe für unser eigenes Modell.

Wie bereits erwähnt, erstellen Transformatoren Worteinbettungen (oder Wortvektoren), um Wörter im Eingabetext mit einem modernen dynamischen Ansatz zu repräsentieren, der in den Vektorraum abgebildet werden kann. Wir möchten jedoch ganze Sätze als Vektoren statt als Wörter darstellen. Es stellt sich heraus, dass wir einen Ansatz verwenden können, um eine zusammenfassende Satzvektordarstellung aus allen Wortvektoren innerhalb eines Satzes zu erstellen, um den Satz, in diesem Fall eine technische Anforderung, als Vektordarstellung genau zu repräsentieren, die für viele zukünftige Deep Learning-Bemühungen wiederverwendet werden kann. 

Eine der wichtigsten Innovationen bei Modellen wie BERT besteht darin, dass wir, anstatt für jede Eingabeinstanz nach dem Zufallsprinzip Anfangsvektoren zu erzeugen und diese als Eingabe zum Trainieren eines classifiers zu verwenden, eine viel genauere vorläufige, trainierte Repräsentation erstellen, die zum Trainieren eines neuen classifiers verwendet wird, wodurch die Modellleistung zum Zeitpunkt der Inferenz verbessert wird. Transformer-Modelle sind im Vergleich zu den vorhergehenden Deep-Learning-Modellen, wie z. B. RNNs, auch dynamischer und kontextsensitiver, und die Eingabeeinbettungen haben eine ausgefeiltere Architektur, die im Vergleich zu den statischen Einbettungen von word2vec mehr Informationen über den Text, den sie repräsentieren, speichern, weshalb diese Vektoren allgemein als kontextuelle Worteinbettungen bezeichnet werden. 

Nachdem das System die Einbettungen für unsere Anforderungstexte berechnet hat, haben wir semantische Ähnlichkeitswerte zwischen jedem Vektorpaar berechnet, indem wir jeden Vektor mit jedem anderen Vektor außer mit sich selbst kombiniert haben.

Nehmen wir an, wir haben eine Datenbank mit zehntausend Anforderungen. Ohne KI müssten die Ingenieure die Anforderungen manuell miteinander verbinden oder gruppieren. Jetzt haben wir ein System, das die Einbettungen für jede Anforderung berechnet und mit Hilfe einer effizienten Matrixmultiplikation die Einbettungen stapelt und eine Tensordarstellung berechnet, die die semantischen Ähnlichkeitswerte für alle Kombinationen von Einbettungspaaren enthält.

Stellen Sie sich vor, zehntausend einzigartige technische Anforderungen paarweise miteinander zu verbinden, das ist mühsame, zeitraubende Handarbeit. Es ist für einen Menschen unmöglich, alle Anforderungen miteinander zu verbinden und dann im Nachhinein Ähnlichkeitsscores für jedes Paar zu berechnen, um zu entscheiden, welche Anforderungen kontextuell zusammengehören oder nicht, und zwar innerhalb weniger Minuten, und sie dann anhand der Scores in eine Rangfolge zu bringen! 

Wie bereits erwähnt, haben wir gelernt, dass wir die ausgegebenen Ähnlichkeitswerte als Tensoren darstellen können, indem wir die Tensordatenstruktur von pytorch verwenden und dann die zugehörigen Werte für jedes Paar extrahieren und als einheitliche Informationen speichern. Die einzelnen Werte für jedes Anforderungspaar werden als einwertige Tensoren gespeichert, um die numerische Stabilität zu gewährleisten. Bei der Typkonvertierung der Scores in normale numerische Typen wie z. B. Float kann es bei hochpräzisen Werten sonst zu einem numerischen Unterlauf kommen.

Durch die Verwendung robuster Pytorch-Tensoren können wir unsere Berechnungen stabil halten. Bei außergewöhnlich großen Anforderungsdatenbanken können die Berechnungen je nach Datenmenge eine Weile dauern, daher speichern wir unsere Vektoren, um sie nur einmal zu berechnen, gegebenenfalls auf einem cuda-fähigen Grafikprozessor. Das NLP-System, das wir aufbauen und das bisher ein Konglomerat von KI-Algorithmen in seinen Systemkomponenten verwendet, scheint auch auf einer CPU gut zu funktionieren, aber das hängt davon ab, wie viele Kundendaten es verarbeiten muss. 

Es ist eine aufregende Reise, ein System zu entwickeln, das all Ihre Dokumente lesen und die wichtigsten Informationen als verdauliche Datenstruktur aus miteinander verbundenen Informationsstücken darstellen kann, wie eine automatisch generierte, interaktive Mindmap, die auch visualisiert werden kann, in der die Dinge logisch miteinander verbunden sind, anstatt endlose Anforderungsdokumente zu durchforsten, nur um tonnenweise Arbeit zu erledigen, damit Ihr Team von vornherein mit den eigentlichen Projektaufgaben beginnen kann.

 

Seien Sie auf unsere zukünftigen Beiträge vorbereitet, in denen wir mehr über NLP sprechen werden, einschließlich Beiträgen, die für Geschäftsleute sinnvoller sind, um ein großes Bild von NLP für jeden zu zeichnen, der mit den erwähnten technischen Konzepten nicht vertraut ist. 

Wenn Ihnen dieser Artikel gefallen hat oder Sie uns Ihre Meinung mitteilen möchten, lassen Sie es uns in den Kommentaren wissen.