Künstliche Intelligenz II - Exam
Aufgabe 1)
Gegeben sei ein Graph mit Knoten A, B, C, D und E sowie den folgenden Kanten mit den jeweiligen Kosten:
- A - B: 1
- A - C: 3
- B - D: 1
- C - D: 1
- D - E: 1
Die heuristische Funktion h(n) zu unserem Zielknoten E sei:- h(A) = 4
- h(B) = 2
- h(C) = 2
- h(D) = 1
- h(E) = 0
Benutze den A*-Algorithmus, um den kürzesten Pfad von A nach E zu finden. a)
Bestimme die Kosten g(n), die heuristischen Kosten h(n) und die geschätzten Gesamtkosten f(n) für alle Knoten, die besucht werden, solange der A*-Algorithmus läuft. Stelle diese Ergebnisse in tabellarischer Form dar.
Lösung:
Aufgabe: Gegeben sei ein Graph mit Knoten A, B, C, D und E sowie den folgenden Kanten mit den jeweiligen Kosten:
- A - B: 1
- A - C: 3
- B - D: 1
- C - D: 1
- D - E: 1
Die heuristische Funktion h(n) zu unserem Zielknoten E sei:- h(A) = 4
- h(B) = 2
- h(C) = 2
- h(D) = 1
- h(E) = 0
Benutze den A*-Algorithmus, um den kürzesten Pfad von A nach E zu finden. Bestimme die Kosten g(n), die heuristischen Kosten h(n) und die geschätzten Gesamtkosten f(n) für alle Knoten, die besucht werden, solange der A*-Algorithmus läuft. Stelle diese Ergebnisse in tabellarischer Form dar.Um den A*-Algorithmus zu verwenden, folge diesen Schritten:
- Starte beim Startknoten (A).
- Berechne die Kosten zum Nachbarknoten (g(n)) und füge die heuristische Schätzung (h(n)) hinzu, um die gesamten geschätzten Kosten (f(n)) zu bestimmen.
- Wähle dann den Knoten mit den geringsten geschätzten Gesamtkosten (f(n)) aus, um fortzufahren.
- Wiederhole die Schritte, bis Du beim Zielknoten angekommen bist.
Die Berechnungen sind wie folgt:
Knoten | g(n) | h(n) | f(n) = g(n) + h(n) |
---|
A | 0 | 4 | 4 |
B | 1 | 2 | 3 |
C | 3 | 2 | 5 |
D (über B) | 2 | 1 | 3 |
E (über D) | 3 | 0 | 3 |
Die endgültigen besuchten Knoten sind A, B, D und E, wobei der kürzeste Pfad von A nach E über die Knoten B und D führt.
b)
Zeichne den Graphen und markiere die Reihenfolge der Knoten, wie sie durch die Open-List und Closed-List bearbeitet werden.
Lösung:
Aufgabe: Gegeben sei ein Graph mit Knoten A, B, C, D und E sowie den folgenden Kanten mit den jeweiligen Kosten:
- A - B: 1
- A - C: 3
- B - D: 1
- C - D: 1
- D - E: 1
Die heuristische Funktion h(n) zu unserem Zielknoten E sei:- h(A) = 4
- h(B) = 2
- h(C) = 2
- h(D) = 1
- h(E) = 0
Benutze den A*-Algorithmus, um den kürzesten Pfad von A nach E zu finden. Zeichne den Graphen und markiere die Reihenfolge der Knoten, wie sie durch die Open-List und Closed-List bearbeitet werden.Um den A*-Algorithmus zu visualisieren, folge diesen Schritten und Zeichnungen:
- Starte beim Startknoten (A), füge A zur Open List hinzu
- Berechne die Gesamtkosten f(n) für die Nachbarn von A und füge sie der Open List hinzu: B (f=3), C (f=5)
- Wähle den Knoten mit den geringsten geschätzten Gesamtkosten: B, verschiebe B zur Closed List
- Berechne die Gesamtkosten f(n) für die Nachbarn von B: D (f=3)
- Wähle den Knoten mit den geringsten geschätzten Gesamtkosten: D, verschiebe D zur Closed List
- Berechne die Gesamtkosten f(n) für die Nachbarn von D: E (f=3)
- Wähle den Knoten mit den geringsten geschätzten Gesamtkosten: E, verschiebe E zur Closed List
Graphische Darstellung des A*-Algorithmus:Reihenfolge der Knoten, wie sie durch die Open-List und Closed-List bearbeitet werden:- Open List: A -> B, C -> D -> E
- Closed List: A -> B -> D -> E
Ergebnis: Der kürzeste Pfad von A nach E wurde gefunden, indem die Knoten in der Reihenfolge A -> B -> D -> E bearbeitet wurden.
c)
Erkläre, warum der A*-Algorithmus in diesem Fall optimal ist und vergleiche ihn mit einem anderen Suchalgorithmus (z.B. Dijkstra) hinsichtlich Effizienz und Ergebnisgenauigkeit.
Lösung:
Aufgabe: Gegeben sei ein Graph mit Knoten A, B, C, D und E sowie den folgenden Kanten mit den jeweiligen Kosten:
- A - B: 1
- A - C: 3
- B - D: 1
- C - D: 1
- D - E: 1
Die heuristische Funktion h(n) zu unserem Zielknoten E sei:- h(A) = 4
- h(B) = 2
- h(C) = 2
- h(D) = 1
- h(E) = 0
Benutze den A*-Algorithmus, um den kürzesten Pfad von A nach E zu finden. Erkläre, warum der A*-Algorithmus in diesem Fall optimal ist und vergleiche ihn mit einem anderen Suchalgorithmus (z.B. Dijkstra) hinsichtlich Effizienz und Ergebnisgenauigkeit.Warum der A*-Algorithmus in diesem Fall optimal ist:- Der A*-Algorithmus verwendet sowohl die tatsächlichen bisherigen Kosten zum aktuellen Knoten (g(n)) als auch eine heuristische Schätzung der verbleibenden Kosten (h(n)), um die gesamtkosten f(n) zu berechnen. Diese Kombination führt zu einer informierten und effizienten Suche.
- Die heuristische Funktion h(n) ist konsistent (oder monotoon), das bedeutet, dass für jeden Knoten n und seinen Nachbarn m gilt: h(n) <= c(n, m) + h(m), wobei c(n, m) die Kosten der Kante zwischen n und m sind. Diese Konsistenz stellt sicher, dass der A*-Algorithmus eine optimale Lösung findet, wenn er eine findet.
- In diesem speziellen Fall sind die Kantenkosten und die heuristischen Werte so gestaltet, dass sie den kürzesten Pfad korrekt vorhersagen können, was den A*-Algorithmus in der Tat optimal macht.
Vergleich mit dem Dijkstra-Algorithmus:- Effizienz: Der Dijkstra-Algorithmus verwendet nur die tatsächlichen bisherigen Kosten zum aktuellen Knoten g(n) und ignoriert zukünftige Kosten. Dies führt oft zu einer weiterreichenden Suche im Vergleich zum A*-Algorithmus, der durch die heuristische Funktion h(n) die Suche auf vielversprechendere Pfade einschränkt. Daher ist der A*-Algorithmus in vielen Fällen effizienter.
- Ergebnisgenauigkeit: Beide Algorithmen finden den optimalen kürzesten Pfad, wenn die Kosten nicht negativ sind. Der Unterschied liegt in der Suchstrategie: A* verwendet zusätzlich die heuristische Schätzung, um eine informierte Suche durchzuführen, während Dijkstra eine uninformierte Suche durchführt.
Fazit: Der A*-Algorithmus ist in diesem Fall optimal, weil er eine geeignete heuristische Funktion verwendet, die die Suche effizienter macht, ohne die Ergebnisgenauigkeit zu beeinträchtigen. Im Vergleich zum Dijkstra-Algorithmus bietet A* eine bessere Effizienz, da er die Suche auf vielversprechende Pfade beschränkt.
Aufgabe 2)
Angenommen, Du möchtest ein Convolutional Neural Network (CNN) für ein Bilderkennungsproblem entwickeln. Das CNN soll Handgeschriebene Ziffern klassifizieren, wie im MNIST-Datensatz.
a)
1. Erläutere die Struktur eines typischen CNNs. Gehe auf die verschiedenen Schichten wie Faltungs- und Pooling-Schicht ein und beschreibe deren Funktion. Welche Rolle spielen die Parameter Filtergröße, Stride und Padding in einer Faltungsschicht?
Lösung:
Um ein Convolutional Neural Network (CNN) für die Klassifikation handgeschriebener Ziffern im MNIST-Datensatz zu entwickeln, musst Du die Struktur eines typischen CNNs verstehen. Ein CNN besteht aus mehreren Schichten, von denen jede spezifische Aufgaben und Funktionen hat. Diese Schichten lassen sich grob in Faltungs-, Pooling-, und vollständig verbundene Schichten unterteilen.
- Faltungsschicht (Convolutional Layer)
Die Faltungsschicht ist eine der wichtigsten Komponenten eines CNNs. In dieser Schicht wird ein Filter (auch Kernel genannt) über das Eingabebild verschoben, um Merkmale wie Kanten, Ecken und andere wichtige Details zu extrahieren. Die Ergebnisse dieser Operationen sind sogenannte Aktivierungskarten. Wichtige Parameter für die Faltungsschicht sind:
- Filtergröße: Die Dimensionen des Filters (zum Beispiel 3x3 oder 5x5). Ein größerer Filter kann mehr von der Bildstruktur erfassen, während ein kleinerer Filter detailliertere Features extrahiert.
- Stride: Die Schrittweite, mit der der Filter über das Bild bewegt wird. Ein größerer Stride führt zu einer geringeren Auflösung der Aktivierungskarte, während ein kleinerer Stride feinere Details bewahrt.
- Padding: Das Auffüllen des Bildes an den Rändern, um sicherzustellen, dass der Filter auch die äußersten Pixel korrekt verarbeitet. Es gibt zwei Hauptarten von Padding: 'valid', bei der kein Padding angewendet wird, und 'same', bei der das Bild so gepolstert wird, dass die Aktivierungskarte die gleiche Größe wie das Eingabebild hat.
- Pooling-Schicht (Pooling Layer)
Die Pooling-Schicht dient zur Reduktion der Dimensionalität der Aktivierungskarten. Dies hilft, die Berechnungen zu beschleunigen und Überanpassung zu reduzieren. Übliche Arten der Pooling-Schicht sind:
- Max-Pooling: Es wird der maximale Wert innerhalb eines bestimmten Bereichs (zum Beispiel 2x2) der Aktivierungskarte ausgewählt. Dies hilft, die dominanten Merkmale beizubehalten.
- Average-Pooling: Es wird der Durchschnittswert innerhalb eines bestimmten Bereichs der Aktivierungskarte berechnet. Dies erzeugt glattere Aktivierungskarten und kann bei Bildern mit viel Rauschen hilfreich sein.
- Vollständig verbunden Schichten (Fully Connected Layers)
Die vollständig verbundenen Schichten erscheinen am Ende eines CNNs und sind mit jeder einzelnen Neurone der vorherigen Schicht verbunden. Diese Schichten sind verantwortlich für die endgültige Klassifikation basierend auf den extrahierten Merkmalen und resultieren oft in einer Wahrscheinlichkeitsverteilung über die Klassen, wenn Softmax am Ausgang verwendet wird.
- Aktivierungsfunktionen
Aktivierungsfunktionen wie ReLU (Rectified Linear Unit) werden häufig in Faltungs- und vollständig verbundenen Schichten verwendet, um die Nichtlinearität zu erhöhen und den Modellen zu ermöglichen, komplexe Muster zu lernen.
b)
2. Implementiere die folgende Faltung einer Bildmatrix von 5x5 mit einem 3x3 Filter und einem Stride von 1 in Python. Nutze dabei keine Bibliotheken wie TensorFlow oder PyTorch. Der 5x5 Eingabematrix sei:
[[1, 2, 3, 0, 1], [4, 6, 1, 2, 3], [0, 1, 3, 4, 5], [1, 2, 0, 1, 0], [0, 1, 2, 3, 4]]
Der 3x3 Filter sei:
[[1, 0, 1], [0, 1, 0], [1, 0, 1]]
Lösung:
Um eine Faltung einer Bildmatrix von 5x5 mit einem 3x3 Filter und einem Stride von 1 zu implementieren, ohne dabei Bibliotheken wie TensorFlow oder PyTorch zu verwenden, kannst Du den folgenden Python-Code nutzen:
input_matrix = [[1, 2, 3, 0, 1], [4, 6, 1, 2, 3], [0, 1, 3, 4, 5], [1, 2, 0, 1, 0], [0, 1, 2, 3, 4]]filter_matrix = [[1, 0, 1], [0, 1, 0], [1, 0, 1]]# Dimensionen der Eingabematrix und des Filtersinput_size = len(input_matrix)filter_size = len(filter_matrix)stride = 1# Berechnung der Dimension der Ausgabematrixoutput_size = (input_size - filter_size) // stride + 1# Initialisiere die Ausgabematrixoutput_matrix = [[0 for _ in range(output_size)] for _ in range(output_size)]# Durchlaufe die Eingabematrix und berechne die Faltungfor i in range(0, output_size, stride): for j in range(0, output_size, stride): sum = 0 for fi in range(filter_size): for fj in range(filter_size): sum += input_matrix[i + fi][j + fj] * filter_matrix[fi][fj] output_matrix[i][j] = sum# Ausgabe der resultierenden Matrixfor row in output_matrix: print(row)
In diesem Code:
- Die input_matrix ist die gegebene 5x5 Bildmatrix.
- Die filter_matrix ist der gegebene 3x3 Filter.
- Die Dimension der output_matrix wird basierend auf der Eingabematrixgröße, der Filtergröße und dem Stride berechnet.
- Die doppelt verschachtelten Schleifen
for i
und for j
durchlaufen die Eingabematrix, während die Schleifen for fi
und for fj
den Filter auf die entsprechenden Bereiche der Eingabematrix anwenden. - Das Produkt der korrespondierenden Elemente von Eingabematrix und Filter wird summiert und in der output_matrix gespeichert.
- Zum Schluss wird die resultierende Matrix ausgegeben.
c)
3. Angenommen, Du betreibst Max-Pooling auf das resultierende Feature-Map aus Aufgabe 2 mit einem 2x2 Pooling-Fenster und einem Stride von 2. Was ist das resultierende Feature-Map? Zeige die Berechnungen.
Lösung:
Um Max-Pooling auf das resultierende Feature-Map aus Aufgabe 2 mit einem 2x2 Pooling-Fenster und einem Stride von 2 durchzuführen, müssen wir die zuvor berechnete Feature-Map verwenden und dann das Max-Pooling anwenden.
Berechnung der resultierenden Feature-Map aus der Faltung:
Benutzen wir die resultierende Feature-Map aus der Faltung (Aufgabe 2):
result_feature_map = [[13, 8, 17], [14, 16, 16], [7, 9, 14]]
1. Durchführung von Max-Pooling:
Wir verwenden ein 2x2 Pooling-Fenster mit einem Stride von 2. Wir wenden das Fenster auf die Feature-Map an und suchen den maximalen Wert in jedem Fenster.
- Bereich (0,0) bis (1,1):
(13, 8)(14, 16)Max-Wert = 16
- Bereich (0,2) bis (1,3):
(8, 17)(16, 16)Max-Wert = 17
- Bereich (2,0) bis (3,1):
(7, 9)Max-Wert = 9
- Bereich (2,2) bis (3,3):
(9, 14)Max-Wert = 14
Die resultierende Matrix nach Max-Pooling sieht wie folgt aus:
[[16, 17], [9, 14]]
Aufgabe 3)
Tokenisierung und WortvektorenTokenisierung segmentiert Text in kleinere Einheiten (Tokens), Wortvektoren wandeln Wörter in numerische Vektoren um.
- Tokenisierung zerlegt Text in Wörter, Phrasen oder Symbole.
- Wortvektoren repräsentieren semantische Beziehungen zwischen Wörtern.
- Populäre Modelle: Word2Vec, GloVe, FastText.
- Wortvektoren in niedriger Dimension: \(\vec{w} \in \mathbb{R}^n \)
- Kollokationen und Kontext durch umgebende Wörter erfasst.
a)
Erläutere das Konzept der Tokenisierung und beschreibe zwei gängige Verfahren zur Tokenisierung von Texten.
Lösung:
Erläutere das Konzept der Tokenisierung und beschreibe zwei gängige Verfahren zur Tokenisierung von Texten
Tokenisierung bezieht sich auf den Prozess der Segmentierung eines Textes in kleinere Einheiten, sogenannte Tokens. Diese Tokens können Wörter, Phrasen, Symbole oder andere bedeutungstragende Einheiten sein. Die Tokenisierung ist ein grundlegender Schritt in der Sprachverarbeitung und eine Vorstufe zu vielen anderen NLP-Aufgaben wie der Textklassifikation, dem Named Entity Recognition oder dem maschinellen Übersetzen. Es gibt verschiedene Ansätze zur Tokenisierung. Hier sind zwei gängige Verfahren:
- Wortbasierte Tokenisierung: Hierbei wird der Text anhand von Leerzeichen und Interpunktionen in einzelne Wörter aufgeteilt. Dies ist die einfachste Form der Tokenisierung und funktioniert gut bei Sprachen, die Wörter durch Leerzeichen trennen, wie Englisch oder Deutsch.
'Beispiel: „Das ist ein Beispiel.“ wird zu [„Das“, „ist“, „ein“, „Beispiel“, „.“] '
- Satzbasierte Tokenisierung: Bei dieser Methode wird der Text in einzelne Sätze aufgeteilt. Satzbasierte Tokenisierung ist nützlich, wenn der Kontext von ganzen Sätzen analysiert werden soll, um bessere Einblicke in den Text zu erhalten. Hierbei können Punktuationen wie Punkt, Fragezeichen oder Ausrufezeichen als Indikatoren für Satzenden verwendet werden.
'Beispiel: „Das ist ein Beispiel. Hier ist noch ein Satz.“ wird zu [„Das ist ein Beispiel.“, „Hier ist noch ein Satz.“] '
b)
Angenommen, Du musst eine Textkorpusanalyse durchführen. Beschreibe, wie Du dabei vorgehen würdest, um Wortvektoren zu erstellen. Welche Modelle würdest Du verwenden und warum?
Lösung:
Angenommen, Du musst eine Textkorpusanalyse durchführen. Beschreibe, wie Du dabei vorgehen würdest, um Wortvektoren zu erstellen. Welche Modelle würdest Du verwenden und warum?
- Datensammlung: Zuerst würde ich den relevanten Textkorpus sammeln, der analysiert werden soll. Dies könnte eine Sammlung von Nachrichtenartikeln, wissenschaftlichen Arbeiten oder sozialen Medienbeiträgen sein, abhängig vom Ziel der Analyse.
- Datenvorverarbeitung: Als nächstes würde ich den Text reinigen und vorverarbeiten. Dies schließt die Entfernung von Stoppwörtern, Satzzeichen und anderen irrelevanten Zeichen ein. Außerdem könnte ich das gesamte Textmaterial auf Kleinbuchstaben umstellen und Tokenisierung anwenden, um den Text in einzelne Wörter oder Phrasen zu unterteilen.
- Wortvektoren erstellen: Um Wortvektoren zu erstellen, gibt es verschiedene Modelle, die ich einsetzen würde:
- Word2Vec: Dies ist eines der am häufigsten verwendeten Modelle zur Erstellung von Wortvektoren und basiert auf neuronalen Netzen. Es gibt zwei Hauptarchitekturen: Continuous Bag of Words (CBOW) und Skip-gram.
- CBOW prognostiziert ein Wort basierend auf seinem Kontext. Das Modell ist schneller und hat eine bessere Leistung bei häufig vorkommenden Wörtern.
- Skip-gram prognostiziert den Kontext basierend auf einem Wort. Dies ist nützlich für seltene Wörter und liefert detaillierte semantische Informationen.
Begründung: Word2Vec ist schnell, effizient und liefert gute Vektorrepräsentationen, besonders bei großen Textmengen. - GloVe (Global Vectors for Word Representation): GloVe ist ein weiteres populäres Modell zur Erstellung von Wortvektoren. Es nutzt sowohl lokalen Kontext (wie Word2Vec) als auch globale co-occurrence-Statistiken des gesamten Korpus.Begründung: GloVe kombiniert die Stärken von lokalen und globalen Textinformationen und eignet sich daher gut zur Erfassung semantischer Beziehungen zwischen Wörtern.
- FastText: FastText, entwickelt von Facebook, erweitert Word2Vec, indem es Subword-Information nutzt, das heißt, es erstellt Vektoren für n-Gramm-Substrings.Begründung: FastText ist besonders nützlich für morphologisch reichere Sprachen oder wenn der Korpus viele seltene oder zusammengesetzte Wörter enthält. Es ermöglicht eine bessere Generalisierung und Capturing der Wortbedeutungen.
- Training des Modells: Nachdem ich das geeignete Modell oder die Kombination aus Modellen ausgewählt habe, würde ich das Modell auf dem vorbereiteten Textkorpus trainieren. Dies könnte einige Zeit und Rechenleistung in Anspruch nehmen, besonders bei großen Korpora.
- Evaluierung: Nach dem Training würde ich die erzeugten Wortvektoren evaluieren, um sicherzustellen, dass sie die semantischen Beziehungen zwischen den Wörtern korrekt erfassen. Dies kann durch Betrachtung von ähnlichen und analogen Wörtern sowie durch Task-basierte Evaluierungen erfolgen.
Zusammengefasst hängt die Wahl des Modells und die Vorgehensweise stark vom Anwendungsfall und den Spezifika des Textkorpus ab. Word2Vec ist geeignet für allgemeine Anwendungen, während GloVe und FastText zusätzliche Vorteile für spezifischere Anforderungen bieten können.
c)
Ein Wortvektor \(\vec{w} \in \mathbb{R}^n\) ist eine Darstellung eines Wortes im n-dimensionalen Raum. Zeige mathematisch, wie der Kosinus zwischen zwei Wortvektoren \(\vec{w_1}\) und \(\vec{w_2}\) die semantische Ähnlichkeit berechnet:\[\text{similarity}(\vec{w_1}, \vec{w_2}) = \cos(\theta) = \frac{\vec{w_1} \cdot \vec{w_2}}{\|\vec{w_1}\| \|\vec{w_2}\|}\]
Lösung:
Ein Wortvektor \(\vec{w} \in \mathbb{R}^n\) ist eine Darstellung eines Wortes im n-dimensionalen Raum. Zeige mathematisch, wie der Kosinus zwischen zwei Wortvektoren \(\vec{w_1}\) und \(\vec{w_2}\) die semantische Ähnlichkeit berechnet:
Um die semantische Ähnlichkeit zwischen zwei Wortvektoren \(\vec{w_1}\) und \(\vec{w_2}\) zu berechnen, verwenden wir den Kosinus des Winkels \(\theta\) zwischen den beiden Vektoren. Dies wird als Kosinusähnlichkeit bezeichnet und kann durch die folgende Formel berechnet werden:\[\text{similarity}(\vec{w_1}, \vec{w_2}) = \cos(\theta) = \frac{\vec{w_1} \cdot \vec{w_2}}{\|\vec{w_1}\| \|\vec{w_2}\|}\] Erklärung der Formel:
- \(\vec{w_1} \cdot \vec{w_2}\) ist das Skalarprodukt (auch bekannt als Punktprodukt) der beiden Vektoren. Es ergibt einen Skalarwert und misst die Projektion eines Vektors auf den anderen.
- \(\|\vec{w_1}\|\) und \(\|\vec{w_2}\|\) sind die Euklidischen Normen (Längen) der Vektoren \(\vec{w_1}\) und \(\vec{w_2}\).
Die Kosinusähnlichkeit ist daher ein Verhältnis zwischen dem Skalarprodukt der Vektoren und dem Produkt ihrer Normen.
Details:
1.
Skalarprodukt (Punktprodukt)Das Skalarprodukt zweier Vektoren ist definiert als: \[\vec{w_1} \cdot \vec{w_2} = \sum_{i=1}^{n} \ w_{1i} \ w_{2i}\]Hier ist \(w_{1i}\) die \(i\)-te Komponente von \(\vec{w_1}\), und \(w_{2i}\) die \(i\)-te Komponente von \(\vec{w_2}\).2.
Euklidischen Norm (Länge eines Vektors):Die Euklidische Norm eines Vektors \(\vec{w}\) ist definiert als: \[\|\vec{w}\| = \sqrt{\sum_{i=1}^{n} (w_i)^2}\] Für \(\vec{w_1}\) und \(\vec{w_2}\): \[\|\vec{w_1}\| = \sqrt{\sum_{i=1}^{n} (w_{1i})^2}\] \[\|\vec{w_2}\| = \sqrt{\sum_{i=1}^{n} (w_{2i})^2}\] 3.
Zusammensetzen: Setzen wir die obigen Teile zusammen, um die Kosinusähnlichkeit zu berechnen: \[\text{similarity}(\vec{w_1}, \vec{w_2}) = \frac{\vec{w_1} \cdot \vec{w_2}}{\|\vec{w_1}\| \|\vec{w_2}\|} \] Bei dieser Berechnung erhalten wir einen Wert zwischen -1 und 1, wobei 1 bedeutet, dass die Vektoren identisch sind (höchste semantische Ähnlichkeit), -1 bedeutet, dass die Vektoren entgegen gesetzt sind, und 0 bedeutet, dass sie orthogonal sind (keine semantische Ähnlichkeit).Zusammengefasst bietet die Kosinusähnlichkeit eine effektive Methode zur Messung der semantischen Ähnlichkeit zwischen Wörtern im Raum der Wortvektoren.
d)
Diskutiere die Unterschiede zwischen Word2Vec, GloVe und FastText bezüglich ihrer Herangehensweise an das Erstellen von Wortvektoren. Welche Vor- und Nachteile bieten diese Modelle jeweils?
Lösung:
Diskutiere die Unterschiede zwischen Word2Vec, GloVe und FastText bezüglich ihrer Herangehensweise an das Erstellen von Wortvektoren. Welche Vor- und Nachteile bieten diese Modelle jeweils?
Im Bereich der natürlichen Sprachverarbeitung (NLP) sind Word2Vec, GloVe und FastText drei der populärsten Modelle zur Erstellung von Wortvektoren. Jedes Modell hat seine eigene Herangehensweise und bietet spezifische Vor- und Nachteile.
- Word2Vec
- Herangehensweise: Word2Vec basiert auf neuronalen Netzen und bietet zwei Hauptarchitekturen: Continuous Bag of Words (CBOW) und Skip-gram. CBOW prognostiziert ein Wort basierend auf seinem Kontext, während Skip-gram den Kontext basierend auf einem Wort prognostiziert.Das Modell wird durch das minimieren des Skalarproduktes zwischen ähnlichen Wörtern und maximieren zwischen unähnlichen Wörtern trainiert.
- Vorteile:
- Effizient bezüglich der Berechnung und speicherbedürftigen Ressourcen.
- Liefert gute Ergebnisse bei großen Korpora und ist besonders gut darin, semantische und syntaktische Beziehungen zu erfassen.
- Nachteile:
- Erfasst keine Subwort-Informationen; dies bedeutet, dass seltene oder unbekannte Wörter schwierig zu handhaben sind.
- Das Modell benötigt eine Vorverarbeitung, einschließlich der Entfernung von Stoppwörtern und Satzzeichen.
- GloVe (Global Vectors for Word Representation)
- Herangehensweise: GloVe kombiniert lokale Kontextinformationen (ähnlich wie Word2Vec) mit globalen Ko-Occurrences-Matrizen des gesamten Korpus. Es optimiert eine Funktion, welche die Wahrscheinlichkeit der Ko-Occurrence zwischen Wörtern innerhalb eines Kontextfensters minimiert.
- Vorteile:
- Erfassen sowohl lokale als auch globale sprachliche Kontextinformationen.
- Bessere semantische Generalisierung verglichen mit reinen lokalen Kontextmethoden wie Word2Vec.
- Nachteile:
- Speicherintensiv, sowohl beim Training als auch beim Speichern der Ko-Occurrences-Matrix.
- Potentiell langsamer als Word2Vec, insbesondere für große Korpora.
- FastText
- Herangehensweise: FastText erweitert Word2Vec, indem neben den Vektoren für ganze Wörter auch Vektoren für n-Gramm-Substrings erstellt werden. Dies ermöglicht die Berücksichtigung von Charakterebenen-Informationen.
- Vorteile:
- Erfasst Informationen zu Subwörtern, was insbesondere für morphologisch reichere Sprachen und seltene Wörter nützlich ist.
- Liefert bessere Generalisierungsfähigkeiten für unbekannte und zusammengesetzte Wörter.
- Nachteile:
- Speicherintensiver und rechenaufwändiger im Vergleich zu reinen Word2Vec-Modellen aufgrund der n-Gramm-Repräsentation.
- Detaillierte Vektoren können in bestimmten Fällen möglicherweise überdetailliert sein und redundante Informationen enthalten.
Zusammenfassung
- Word2Vec: Gute Performance bei großen Korpora, erfasst semantische Beziehungen gut, jedoch keine Subwort-Information.
- GloVe: Kombination aus lokalen und globalen Kontextinformationen, gute semantische Generalisierung, jedoch speicherintensiv und langsamer im Training.
- FastText: Erfasst Subwort-Informationen, gut für morphologisch reichere Sprachen und seltene Wörter, jedoch speicherintensiv und rechenaufwändiger.
Die Wahl des Modells hängt stark vom spezifischen Anwendungsfall und den Anforderungen bezüglich Genauigkeit, Computationsressourcen und Sprachcharakteristika ab.Aufgabe 4)
Maschinelle ÜbersetzungDie Aufgabe beschäftigt sich mit der automatisierten Übersetzung, einem wichtigen Bereich der künstlichen Intelligenz. Es gibt verschiedene Verfahren wie die statistische maschinelle Übersetzung (SMT), die neuronale maschinelle Übersetzung (NMT) und die regelbasierte maschinelle Übersetzung. Insbesondere die NMT verwendet komplexe Modelle wie den Encoder-Decoder-Ansatz mit rekurrenten neuronalen Netzwerken (RNN) und Long Short-Term Memory (LSTM). Die modernen Ansätze nutzen jedoch häufiger die sogenannte Transformer-Architektur, die durch Multi-Head Attention und Positionskodierung gekennzeichnet ist. Für das Training werden umfangreiche und gut annotierte Datensätze benötigt, da die Qualität der Daten entscheidend für die Leistung der Modelle ist. Zur Evaluierung der Übersetzungsqualität wird häufig der BLEU-Score verwendet.
a)
(a) Beschreibe den Unterschied zwischen der klassischen Encoder-Decoder-Struktur, die in der neuronalen maschinellen Übersetzung (NMT) angewendet wird, und der Transformer-Architektur. Gehe dabei im Detail auf die Funktionsweise von RNNs bzw. LSTMs im Vergleich zu Multi-Head Attention und Positionskodierung ein.
Lösung:
Unterschied zwischen der klassischen Encoder-Decoder-Struktur und der Transformer-ArchitekturUm den Unterschied zwischen der klassischen Encoder-Decoder-Struktur und der Transformer-Architektur in der neuronalen maschinellen Übersetzung (NMT) zu verstehen, müssen wir die Funktionsweise der einzelnen Komponenten genauer betrachten.
- Klassische Encoder-Decoder-Struktur
Die klassische Encoder-Decoder-Struktur verwendet rekurrente neuronale Netzwerke (RNNs) oder Long Short-Term Memory (LSTM)-Netzwerke, um Sequenzen zu verarbeiten.- Rekurrente neuronale Netzwerke (RNNs)Ein RNN verarbeitet die Eingabesequenz schrittweise und behält dabei einen Hidden State bei, der die Information über die bisher verarbeiteten Elemente der Sequenz speichert. Ein Problem bei RNNs ist jedoch, dass sie anfällig für den vanishing gradient problem sind, was die Verarbeitung langer Sequenzen erschwert.
- Long Short-Term Memory (LSTMs)LSTMs sind eine spezielle Form von RNNs, die entwickelt wurden, um das vanishing gradient problem besser zu handhaben. Sie enthalten spezielle Gates (Eingangs-, Vergessens- und Ausgangsgates), die den Informationsfluss innerhalb der LSTM-Zelle steuern und es so ermöglichen, längerfristige Abhängigkeiten zu lernen.
Die Transformer-Architektur nutzt keine rekurrenten Strukturen wie RNNs oder LSTMs. Stattdessen basiert sie auf Self-Attention-Mechanismen und einer Positionskodierung.- Multi-Head AttentionDie Multi-Head Attention ermöglicht es dem Modell, Informationen aus verschiedenen Positionen der Eingabesequenz gleichzeitig zu betrachten. Sie berechnet Aufmerksamkeitsscores, die bestimmen, wie stark jedes Element der Sequenz auf die anderen Elemente achtet. Mehrere Kopfkomponenten (Heads) verbessern die Fähigkeit, unterschiedliche Aspekte der Eingabesequenz zu erfassen.
- PositionskodierungDa Transformermodelle keine rekurrente Struktur haben und somit die Positionsinformation nicht inhärent weitergeben können, wird zusätzlich eine Positionskodierung hinzugefügt. Diese kodiert explizit die Position jedes Tokens in der Sequenz und wird zu den Input-Embedding kombiniert, um die Reihenfolge der Elemente zu berücksichtigen.
Zusammengefasst:Die klassische Encoder-Decoder-Struktur verwendet RNNs oder LSTMs, um sequentiell Informationen von einem Wort zum nächsten weiterzugeben. Sie ist anfällig für das vanishing gradient problem und Schwierigkeiten bei der Modellierung langer Abhängigkeiten. Die Transformer-Architektur hingegen nutzt keine rekurrenten Strukturen, sondern setzt auf Multi-Head Attention und Positionskodierung, um effizienter und oft genauer mit Sequenzen zu arbeiten, indem sie die parallele Verarbeitung ermöglicht und gleichzeitig die Positionsinformation beibehält.b)
(b) Angenommen, Du bist dafür verantwortlich, ein neues neuronales maschinelles Übersetzungsmodell zu trainieren. Erläutere, wie Du den Training Prozess gestalten würdest und welche Schritte notwendig sind, um sicherzustellen, dass das Modell qualitativ hochwertige Übersetzungen liefert. Deine Antwort sollte auch die Bedeutung der Datenqualität und die Evaluierung des Modells mit dem BLEU-Score einschließen.
Lösung:
Trainingsprozess für ein neuronales maschinelles ÜbersetzungsmodellUm ein neuronales maschinelles Übersetzungsmodell (NMT) zu trainieren und qualitativ hochwertige Übersetzungen sicherzustellen, müssen verschiedene Schritte beachtet werden. Hier ist eine detaillierte Beschreibung des Prozesses:
- 1. Datenbeschaffung und -aufbereitung:
- Datensammlung: Beschaffe umfangreiche und gut annotierte parallel korpusierte Datensätze, die Sätze in der Ausgangs- und Zielsprache enthalten. Quellen können öffentlich zugängliche Datensätze wie Europarl, WMT oder spezielle industriell erstellte Datensätze sein.
- Datenbereinigung: Überprüfe die Daten auf Fehler, Duplikate und Inkonsistenzen. Es ist wichtig, nur qualitativ hochwertige und präzise übersetzte Sätze zu verwenden, da die Qualität der Eingangsdaten direkt die Qualität des Modells beeinflusst.
- Datenaufteilung: Teile die Daten in Trainings-, Validierungs- und Test-Sätze auf. Typischerweise könnten 80% für das Training, 10% für die Validierung und 10% für die Testphase verwendet werden.
- 2. Modellarchitektur auswählen:
- Entscheide, welche Art von Modell du verwenden möchtest. Moderne NMT-Modelle basieren häufig auf der Transformer-Architektur, da sie effizienter und genauer ist als RNN- oder LSTM-basierte Modelle.
- 3. Datentransformation und -vorverarbeitung:
- Tokenisierung: Zerlege die Sätze in Token. Es gibt verschiedene Tokenizer wie Byte Pair Encoding (BPE) oder WordPiece, die besonders gut für NMT-Modelle geeignet sind.
- Padding und Batching: Stelle sicher, dass alle Sätze in einem Batch die gleiche Länge haben, indem du kürzere Sätze auffüllst (padding). Dies erleichtert die parallele Verarbeitung.
- Einbettungen: Verwende Wort-Einbettungen (z.B. Word2Vec, GloVe oder trainiere eigene Einbettungen), um Wörter in Vektoren umzuwandeln, die das Modell verarbeiten kann.
- 4. Training des Modells:
- Hyperparametereinstellung: Lege die Hyperparameter des Modells fest, wie z.B. die Lernrate, die Batch-Größe und die Anzahl der Encoder-Decoder-Schichten.
- Loss-Funktion: Wähle eine geeignete Loss-Funktion, z.B. die Kreuzentropie, um die Fehler während des Trainings zu berechnen.
- Training: Starte den Trainingsprozess. Dieser beinhaltet das Durchlaufen mehrerer Epochen, wobei das Modell iterativ angepasst wird, um die Loss-Funktion zu minimieren. Regelmäßige Überprüfung der Leistung des Modells auf dem Validierungsdatensatz, um Overfitting zu vermeiden.
- 5. Evaluierung des Modells:
- Nach Abschluss des Trainings, evaluiere das Modell mithilfe des Test-Datensatzes. Hierbei wird der BLEU-Score (Bilingual Evaluation Understudy) verwendet, bei dem die Qualität der Übersetzungen durch den Vergleich mit einem oder mehreren Referenzübersetzungen gemessen wird.
- Der BLEU-Score basiert auf der n-Gramm-Präzision und gibt an, wie häufig n-Gramme der Modellübersetzung in den Referenzübersetzungen vorkommen. Ein hoher BLEU-Score bedeutet, dass die maschinelle Übersetzung näher an den menschlichen Übersetzungen liegt.
- 6. Optimierung und Feinabstimmung:
- Hyperparameter-Tuning: Passe die Hyperparameter des Modells basierend auf den Validierungs- und Test-Ergebnissen an, um die Leistung weiter zu verbessern.
- Feinabstimmung: Führe eine Feinabstimmung durch, indem du zusätzliche spezialisierte Daten oder Techniken wie Transfer Learning oder Data Augmentation verwendest.
- 7. Überwachung und Wartung:
- Stelle sicher, dass das Modell regelmäßig überwacht und mit neuen Daten aktualisiert wird, um die Leistungsfähigkeit und Aktualität zu gewährleisten.
- Überprüfe kontinuierlich die Übersetzungsqualität und passe das Modell an, falls sich die Anforderungen ändern oder neue Sprachpaare hinzugefügt werden müssen.
Durch die Einhaltung dieses strukturierten Prozesses und die Berücksichtigung der Datenqualität und Evaluierungsmetriken wie dem BLEU-Score kannst du sicherstellen, dass Dein neuronales maschinelles Übersetzungsmodell qualitativ hochwertige Ergebnisse liefert.