WEBVTT

00:10.910 --> 00:13.630
Okay, dann weiter geht's.

00:15.610 --> 00:23.870
Wir werden heute dann noch den Themenbereich dieser multidimensionalen

00:23.870 --> 00:29.730
Vektorquantisierung abschließen und werden dann im zweiten Teil

00:29.730 --> 00:34.590
übergehen zu dem eigentlichen Teil, wo es dann sich nur noch drehen

00:34.590 --> 00:38.310
wird um statistische, stochastische Spracherkennung, so wie man das

00:38.310 --> 00:39.210
heutzutage macht.

00:40.530 --> 00:44.410
Wir hatten letztes Mal aufgehört mit einer Aufgabe.

00:45.650 --> 00:49.730
Da ging es darum, dass man diese zwei Techniken zur Beschleunigung,

00:49.770 --> 00:55.170
die man da mal kennengelernt hatte, beim Finden der karnäischen

00:55.170 --> 00:59.850
Nachbarn, anwenden sollte auf die Auswertung einer Gaussmixtur.

01:00.410 --> 01:02.650
Wir hatten gesehen, wenn wir eine einzelne Gaussglocke möglichst

01:02.650 --> 01:08.890
schnell auswerten wollen, dann kann man das dadurch machen, indem man

01:08.890 --> 01:10.030
einfach im Log-Bereich rechnet.

01:10.130 --> 01:12.170
Dass man nicht mehr eine Wahrscheinlichkeit ausrechnet, sondern eine

01:12.170 --> 01:15.730
logarithmierte Wahrscheinlichkeit und dann spart man sich die E

01:15.730 --> 01:17.810
-Funktion und das ist schon der Hauptrechenaufwand.

01:17.950 --> 01:21.230
Übrig bleiben dann nur so zwei Matrix-Multiplikationen.

01:21.270 --> 01:25.470
Einmal Vektor von links ran, einmal Vektor von rechts ran, die ja

01:25.470 --> 01:26.950
Matrix dran multipliziert.

01:27.770 --> 01:30.390
Bei der Gaussmixtur geht das halt leider nicht mehr.

01:30.470 --> 01:33.570
Wenn ich da logarithmiere, habe ich dann still sowas wie Logarithmus

01:33.570 --> 01:37.370
von der Summe aus Exponentialfunktionen und Logarithmus von der Summe

01:37.370 --> 01:38.750
können wir nicht auflösen.

01:39.350 --> 01:43.310
Die Aufgabe war jetzt, was kann man trotzdem machen, wenn man jetzt

01:43.310 --> 01:48.290
eine Gaussmixtur möglichst schnell ausrechnen möchte.

01:48.870 --> 01:51.650
Der Hintergedanke ist, dass man sich auf die Art und Weise so ein

01:51.650 --> 01:55.690
bisschen auch den Bogen spannt und klar macht, was das Ganze

01:55.690 --> 01:59.930
letztendlich mit karnäischen Nachbarn auch zu tun haben könnte und

01:59.930 --> 02:04.910
dass diese ganzen Techniken aus der Vektorquantisierung, aus dem

02:04.910 --> 02:08.570
karnäischen Nachbarn, dass man die auch übertragen kann, wenn man

02:08.570 --> 02:10.210
hinterher mit Gaussmixturen rechnet.

02:11.110 --> 02:14.830
Die Hinweise, die gegeben waren, waren also die Ausrechnung der

02:14.830 --> 02:16.670
Gaussmixtur muss nicht mehr exakt sein.

02:16.790 --> 02:21.150
Ich will also eine Beschleunigung haben auf Kosten des Ergebnisses und

02:21.150 --> 02:23.670
dann muss man sich überlegen, okay wie kann ich diese Techniken bei

02:23.670 --> 02:28.350
karnächster Nachbarn jetzt anwenden auf Gaussmixturen, wo habe ich da

02:28.350 --> 02:32.370
bei einer Gaussmixtur gegebenenfalls Referenzvektoren und was will ich

02:32.370 --> 02:32.670
machen.

02:33.990 --> 02:37.090
Ist irgendjemand eine schlaue Idee gekommen, was man machen könnte,

02:37.570 --> 02:39.970
wie man sowas machen könnte, wie kann ich jetzt eine Gaussmixtur

02:39.970 --> 02:42.650
möglichst schnell ausrechnen?

02:46.030 --> 02:47.650
Keiner eine Idee gehabt.

02:50.930 --> 02:53.110
Die erste Sache ist, wir wollen es approximieren.

02:53.230 --> 02:58.210
Wir wollen nur noch ein ungefähres Ergebnis haben und wir wollen nicht

02:58.210 --> 03:00.630
mehr das exakte Ergebnis haben, dafür wollen wir es schnell haben.

03:01.450 --> 03:04.930
Das Schwierige bei der Gaussmixtur ist das Auswerten der E-Funktion.

03:05.330 --> 03:09.050
Das heißt, wir müssen irgendwie, auf Teufel komm raus, es vermeiden

03:09.050 --> 03:12.210
eine E-Funktion auszurechnen.

03:13.330 --> 03:16.250
Wenn ich eine Summe habe, dann kann ich nicht mehr in den

03:16.250 --> 03:17.530
logarithmischen Bereich gehen.

03:17.870 --> 03:22.090
Das ist das, was mich davon abhält, die E-Funktion loszuwerden.

03:22.570 --> 03:25.010
Das heißt, ich muss irgendwie die Summe loswerden.

03:25.910 --> 03:28.790
Was ist eine einfache Art und Weise, die Summe loszuwerden?

03:31.290 --> 03:32.490
Bei der Gaussmixtur.

03:35.530 --> 03:36.750
Wie werde ich die Summe loswerden?

03:36.950 --> 03:39.290
Ich habe da eine Summe von mehreren E-Funktionen stehen, ich will

03:39.290 --> 03:40.350
keine Summe mehr ausrechnen.

03:42.210 --> 03:46.130
Also werte ich nur noch eine E-Funktion aus und nicht mehr die Summe.

03:47.950 --> 03:51.750
Dann kommt natürlich nicht mehr dasselbe raus, als wenn ich die Summe

03:51.750 --> 03:52.250
ausrechne.

03:52.670 --> 03:55.550
Es kommt etwas Falsches raus, nur eine Approximation dieser

03:55.550 --> 03:56.210
Gaussmixtur.

03:56.850 --> 04:00.970
Jetzt ist natürlich der Trick, welche E-Funktion nehme ich nur noch

04:00.970 --> 04:01.110
her?

04:03.890 --> 04:06.930
Natürlich muss ich die so wählen, dass der Fehler, den ich mache,

04:07.150 --> 04:08.470
möglichst klein wird.

04:09.310 --> 04:10.790
Und wie wird der Fehler möglichst klein?

04:10.950 --> 04:15.510
Also welche E-Funktion gegeben ein bestimmtes x, für die ich den Wert

04:15.510 --> 04:19.230
der Gaussmixtur ausrechnen will, welche E-Funktion nehme ich mir also

04:19.230 --> 04:20.330
her am besten?

04:22.290 --> 04:26.670
Welche von den 15 Gaussglocken, die ich habe, nehme ich mir jetzt her,

04:26.870 --> 04:31.510
um den Wert der Gaussmixtur für diesen einen bestimmten Wert x, für

04:31.510 --> 04:33.930
diesen einen Vektor x auszurechnen?

04:34.670 --> 04:36.050
Welche Gaussglocke nehme ich mir da?

04:39.990 --> 04:42.110
Was heißt mit dem höchsten Grad?

04:46.000 --> 04:47.640
Ja gut, aber die haben ja alle die gleiche Potenz, das ist eine

04:47.640 --> 04:48.900
lineare Summe.

04:49.000 --> 04:51.380
Die Gaussglocken unterscheiden sich ja nur durch ihre Mittelwerte und

04:51.380 --> 04:52.160
ihre Varianz.

04:54.800 --> 05:01.080
Naja, was ich brauche, ist eher die Gaussglocke, für die x den

05:01.080 --> 05:03.540
höchsten Wert haben wird, voraussichtlich.

05:04.700 --> 05:05.180
Warum?

05:06.940 --> 05:10.520
Wenn man sich so eine Gaussglocke anschaut, die fällt ja in der Regel

05:10.520 --> 05:12.540
an den Rändern hin ab.

05:12.780 --> 05:17.560
Die wird irgendwo in der Mitte einen hohen Wert haben und wenn man

05:17.560 --> 05:21.360
sich schnell weg bewegt von dem Mittelwert, wird in der Regel die

05:21.360 --> 05:22.700
Werte relativ schnell kleiner werden.

05:23.500 --> 05:26.980
Jetzt so eine Gaussglocke, so eine Gaussmixtur, da liegen halt jetzt

05:26.980 --> 05:29.920
irgendwo hier Gaussglocken in den Räumen und ich habe ein x.

05:30.640 --> 05:34.640
Dieses eine x wird relativ nah an irgendeiner Gaussglocke liegen und

05:34.640 --> 05:36.020
da wird es den höchsten Wert haben.

05:36.560 --> 05:40.340
Und die alle anderen Gaussglocken liegen vermutlich meistens schon

05:40.340 --> 05:43.460
relativ weit weg, sodass die einen deutlich geringeren Anteil an der

05:43.460 --> 05:44.140
Summe haben werden.

05:44.900 --> 05:48.160
Das heißt, was ich also brauche, ist die Gaussglocke, die am nächsten

05:48.160 --> 05:52.280
jetzt dran liegt an diesem x und dann nehme ich nur diesen Wert dieser

05:52.280 --> 05:54.060
einen Gaussglocke, die am nächsten dran liegt.

05:54.540 --> 05:57.420
Für unterschiedliche x werden das unterschiedliche Gaussglocken sein.

05:58.300 --> 06:01.400
Und ich nehme dann den Wert der Gaussglocke für dieses x, für der

06:01.400 --> 06:04.680
Gaussglocke, die am nächsten dran liegt und sage, dass es halt die,

06:04.960 --> 06:06.460
die am nächsten dran liegen soll.

06:07.240 --> 06:09.980
Das ist der Wert, der dann für die Gaussmixtur ist.

06:10.540 --> 06:13.260
Das heißt, die Summe aller anderen Gaussglocken, die nicht am nächsten

06:13.260 --> 06:16.780
dran liegen, ausgewertet an der Stelle x, ergibt dann den Fehler, den

06:16.780 --> 06:17.400
ich machen will.

06:18.020 --> 06:20.260
In der Praxis wird man feststellen, dass der in der Regel nicht so

06:20.260 --> 06:24.340
hoch ist, weil die Gaussglocken meistens schon relativ weit

06:24.340 --> 06:26.300
voneinander im Bereich entfernt liegen.

06:27.020 --> 06:29.940
Okay, ich brauche also die Gaussglocke, die am nächsten dran liegt.

06:30.400 --> 06:31.960
Nach welchem Distanzmaß denn?

06:38.000 --> 06:40.400
Welches Distanzmaß wird denn bei einer Gaussglocke verwendet?

06:41.360 --> 06:43.220
Ich habe einmal den Abstand zum Mittelwert.

06:44.080 --> 06:46.380
Je näher ich an dem Mittelwert dran liege, desto höher wird der Wert

06:46.380 --> 06:47.140
sein, der Gaussglocke.

06:47.720 --> 06:49.480
Das andere ist natürlich die Varianz.

06:50.600 --> 06:53.340
Ob ich jetzt eine sehr spitze oder eine sehr flache Gaussglocke habe,

06:53.440 --> 06:54.620
macht natürlich auch einen Unterschied.

06:55.660 --> 06:58.500
Das ist ja gerade die Mahnalobes-Distanz, die im Exponenten steht, die

06:58.500 --> 06:59.820
genau beides berücksichtigt.

07:00.400 --> 07:04.860
Das heißt, ich könnte jetzt einfach unter der Mahnalobes-Distanz die

07:04.860 --> 07:08.500
geniale Gaussglocke raussuchen, die am nächsten dran liegt, sprich die

07:08.500 --> 07:14.020
Gaussglocke, die im Exponenten den höchsten Wert für diesen Vektor X

07:14.020 --> 07:14.540
haben wird.

07:15.380 --> 07:17.280
Da muss ich wieder Distanzen ausrechnen.

07:17.880 --> 07:20.760
Wenn ich Distanzen ausrechnen will, welches ist der erste

07:20.760 --> 07:22.240
Beschleunigungstrick, den ich anwende?

07:23.600 --> 07:26.800
Ich suche also nach der mit der kleinsten Distanz.

07:27.520 --> 07:28.320
Was mache ich also wieder?

07:28.420 --> 07:30.860
Welche Beschleunigungstechnik, wenn ich das jetzt für mehrere

07:31.320 --> 07:33.660
ausrechnen muss und mich dann entscheiden muss, welches ist das mit

07:33.660 --> 07:34.560
der kleinsten Distanz?

07:35.660 --> 07:40.460
Genau, Early Abortion ist wieder die erste Beschleunigungstechnik.

07:40.460 --> 07:44.520
Und die zweite Beschleunigungstechnik war dieses Baumverfahren, das

07:44.520 --> 07:45.480
man jetzt anwenden könnte.

07:45.760 --> 07:48.300
Dass man wieder auf die Gaussglocken, die Repräsentanten dieser

07:48.300 --> 07:52.600
Gaussglocken, dieses Verfahren anwenden könnte und dann in den Raum

07:52.600 --> 07:56.480
geschickt organisieren, so dass ich dann auch nicht mehr Distanzen zu

07:56.480 --> 07:58.900
allen ausrechnen muss, sondern vielleicht nur zu einer Untermenge,

07:59.200 --> 08:04.320
weil ich weiß, gemäß der Aufteilung des Raumes wird das in dem Bereich

08:04.320 --> 08:04.560
liegen.

08:04.660 --> 08:07.400
Kommen noch überhaupt diese Untermenge an Gaussglocken in Frage, zu

08:07.400 --> 08:10.560
denen suche ich dann die geringste Distanz und mache das Ganze mit

08:10.560 --> 08:11.140
Early Abortion.

08:12.060 --> 08:15.320
Und auf die Art und Weise habe ich halt eine Approximation für den

08:15.320 --> 08:18.620
Wert einer Gaussmixtur, den ich sehr, sehr, sehr schnell ausrechnen

08:18.620 --> 08:21.280
kann im Vergleich zur vollständigen Auswertung der Gaussmixtur.

08:22.180 --> 08:25.280
Und in der Praxis zeigt sich, dass der Fehler, den man dann hinterher

08:25.280 --> 08:27.300
macht, vernachlässigbar gering ist.

08:27.380 --> 08:29.540
In der Regel zum Beispiel dann hinterher beim Spracherkenner keine

08:29.540 --> 08:31.660
Auswirkungen mehr haben wird auf die Wortfehlerrate.

08:34.120 --> 08:40.000
Das Interessante ist halt auch, man sieht auch hier im Prinzip die

08:40.000 --> 08:47.220
Analogie fast so einer Gaussmixtur zu den k-nächsten Nachbarn.

08:48.400 --> 08:54.900
Dass man jetzt also den Raum irgendwie aufspannt, aber nicht mehr mit

08:54.900 --> 08:59.120
euclidischen Distanzen, sondern mit echten analoges Distanzen.

08:59.260 --> 09:01.760
Und wenn ich jetzt zum Beispiel nur einzelne Gaussglocken verwenden

09:01.760 --> 09:07.760
würde und ich zum Beispiel anhand des Wertes der Gaussglocken

09:07.760 --> 09:11.200
klassifizieren würde, also angenommen, ich habe einen Vektor, ich will

09:11.200 --> 09:12.560
wissen, welches Phonem ist es.

09:12.620 --> 09:14.720
Für jedes Phonem habe ich eine Gaussglocke trainiert.

09:15.380 --> 09:17.700
Dann würde ich das mit k-nächsten Nachbarn so machen, dass ich halt

09:17.700 --> 09:20.780
Repräsentanten hätte und würde halt gucken, welches ist der am

09:20.780 --> 09:22.980
nächstgelegene Repräsentant, zu welchem Phonem gehört er.

09:23.240 --> 09:25.000
Das ist das Phonem, für das ich klassifiziere.

09:25.800 --> 09:28.840
Im naiven Bayes-Klassifikator würde ich das so machen, indem ich

09:28.840 --> 09:30.360
Wahrscheinlichkeiten ausrechne.

09:30.740 --> 09:34.940
Indem ich also für jede Phonem-Klasse eine Wahrscheinlichkeit

09:34.940 --> 09:38.420
trainieren würde, so eine Gaussglocke, und dann gucken würde, wo ist

09:38.420 --> 09:41.440
denn die Auswertung der Gaussglocke am höchsten, gegebenenfalls noch

09:41.440 --> 09:43.540
gewichtet mit der a priori Wahrscheinlichkeit.

09:44.140 --> 09:48.520
Und dieses Ausrechnen der Gaussglocke und wo ist das am höchsten, das

09:48.520 --> 09:51.320
ist dasselbe wie k-nächsten Nachbarn, halt nur mit analoges Distanz

09:51.320 --> 09:51.760
entsprechend.

09:52.560 --> 09:57.140
Und halt die Vektoren so gewählt, dass die Trainingsdaten halt nach

09:57.140 --> 10:00.060
Maximum -Likelihood eine Gaussglocke dort aufspannen.

10:00.760 --> 10:03.960
Ist also im Prinzip alles gar nicht so weit voneinander entfernt, es

10:03.960 --> 10:06.860
ist alles ein bisschen mehr ausgefuchster, aber am Ende ist es ein

10:06.860 --> 10:12.500
ganz einfaches Pattern-Matching, das man da macht, nur dass man halt

10:12.500 --> 10:14.480
ein bisschen unscharf mit Wahrscheinlichkeiten rechnet.

10:15.940 --> 10:18.980
Wir hatten letztes mal schon gesagt, Vektor-Quantisierung, was wir

10:18.980 --> 10:22.220
manchmal halt gerne wollen ist, dass wir aus diesem kontinuierlichen

10:22.220 --> 10:26.060
Vektorraum, diesem R hoch N, zurückgehen wieder auf was Diskretes,

10:26.360 --> 10:29.780
dass wir diskrete einzelne Vektoren haben.

10:31.940 --> 10:34.940
Dann kann man zum Beispiel Sachen vorberechnen, man spart

10:34.940 --> 10:41.260
Speicherplatz bei der Repräsentation der Daten, man spart Rechenzeit,

10:41.340 --> 10:45.380
wenn ich Sachen vorberechne und ich zum Beispiel wenig Rechenleistung

10:45.380 --> 10:46.240
zur Verfügung habe.

10:47.100 --> 10:50.180
Und wenn man mal so Repräsentanzvektoren hat, dann kann man mit sowas

10:50.180 --> 10:55.240
wie k-nächsten Nachbarn zum Beispiel dann klassifizieren.

10:55.660 --> 10:59.120
Das, was wir bisher noch nicht behandelt haben, ist, wo kriegen wir

10:59.120 --> 11:01.640
denn diese Referenzvektoren her?

11:02.940 --> 11:06.220
Und das nennt man in der Regel das Problem der Vektor-Quantisierung,

11:06.700 --> 11:11.020
ist dann nicht so sehr die Frage, wie quantisiere ich hinterher, das

11:11.020 --> 11:13.620
macht man mit k-nächsten Nachbarn oder ein-nächsten Nachbarn, sondern

11:13.620 --> 11:17.020
die Kunst ist, wo bekomme ich diese Referenzvektoren-my her?

11:21.700 --> 11:26.340
Wie bei der normalen Quantisierung im Eindimensionalen, bei der

11:26.340 --> 11:28.960
Digitalisierung, wenn man da die Werte quantisiert, kommt es zu

11:29.640 --> 11:31.420
Quantisierungsfehlern und man versucht jetzt diese

11:31.420 --> 11:34.540
Quantisierungsfehlern, die man auf repräsentativen Daten dann

11:34.540 --> 11:36.520
hinterher hat, möglichst klein zu halten.

11:36.620 --> 11:39.700
Und um diesen Quantisierungsfehler möglichst klein zu halten, muss man

11:39.700 --> 11:45.240
halt diese Repräsentanzvektoren-my geeignet auswählen.

11:46.460 --> 11:51.120
Die naive Idee ist halt, dass man seinen Raum gleichmäßig aufteilt in

11:51.120 --> 11:55.040
so ein Gitter, ähnlich wie mit den gleichverteilten Stufen bei der

11:55.040 --> 11:59.840
Wertequantisierung und dann einfach pro Kästchen, das man da hat, legt

11:59.840 --> 12:03.280
man in die Mitte einen Repräsentanten und ordnet die Sachen dazu.

12:04.100 --> 12:07.820
Das führt natürlich nur dann zu einem möglichst kleinen erwarteten

12:07.820 --> 12:10.920
Quantisierungsfehler, wenn meine Daten auch wirklich gleichmäßig über

12:10.920 --> 12:12.440
den gesamten Raum verteilt sind.

12:12.940 --> 12:15.720
Das ist in der Praxis natürlich häufig nicht der Fall.

12:16.340 --> 12:19.980
Häufig sieht das dann zum Beispiel eher so aus wie da rechts, dass es

12:19.980 --> 12:22.800
Bereiche gibt, in denen sich sehr viele Daten tummeln und es Bereiche

12:22.800 --> 12:25.800
gibt, in denen sich nie bis selten Daten tummeln.

12:26.260 --> 12:28.540
Und da wäre es natürlich schön, wenn man jetzt diesen summierten

12:28.540 --> 12:32.640
Quantisierungsfehler klein halten möchte, dass man diese Bereiche, in

12:32.640 --> 12:35.720
denen sich viele Vektoren tummeln, möglichst gut auflöst und die

12:35.720 --> 12:39.160
Bereiche, in denen man überhaupt nie Daten sehen wird, grob auflöst.

12:42.080 --> 12:47.240
Und eine Möglichkeit, wenn man jetzt solche Trainingsdaten gegeben

12:47.240 --> 12:50.200
hat, die repräsentativ sind für die Daten, die ich nachher bei der

12:50.200 --> 12:55.440
Quantisierung erwarte, eine Möglichkeit jetzt da geschickt Vektoren

12:55.440 --> 12:58.500
reinzulegen, ist der K-Mittelwerte-Algorithmus.

12:59.700 --> 13:03.620
Beim K-Mittelwerte-Algorithmus sagt man, man hat Trainingsdaten, die

13:03.620 --> 13:08.880
sind repräsentativ und ich weiß, ich suche K-Referenzvektoren, sprich

13:08.880 --> 13:12.860
zum Beispiel K-Quantisierungsstufen, wenn ich pro Quantisierungsstufe

13:12.860 --> 13:14.400
einen Repräsentanten haben möchte.

13:16.420 --> 13:18.780
Die Trainingsvektoren sind nicht klassifiziert.

13:18.880 --> 13:21.040
Ich weiß also nicht für jeden Trainingsvektor, zu welcher

13:21.040 --> 13:22.740
Quantisierungsstufe soll er denn gehören.

13:25.000 --> 13:29.380
Also macht man als erstes eine zufällige Initialisierung dieser K

13:29.380 --> 13:30.280
-Referenzvektoren.

13:30.360 --> 13:32.000
Man legt die zufällig irgendwo in den Raum.

13:33.320 --> 13:37.300
Dann im nächsten Schritt macht man die Klassifikation, die

13:37.300 --> 13:37.900
Quantisierung.

13:38.540 --> 13:42.720
Man ordnet jeden Trainingsvektor seinem Repräsentanten zu, der am

13:42.720 --> 13:43.700
nächsten dran liegt.

13:46.200 --> 13:49.860
Jetzt hat man also pro Repräsentanten eine Gruppe von Trainingsdaten,

13:49.920 --> 13:52.900
die diesem Repräsentanten zugeordnet wurden und anhand dieser

13:52.900 --> 13:56.440
Trainingsdaten berechnet man jetzt jeweils einen neuen Repräsentanten,

13:56.920 --> 13:59.450
indem man einfach den Mittelwert dieser Trainingsdaten zum Beispiel

13:59.450 --> 13:59.750
nimmt.

14:00.510 --> 14:04.190
Man bekommt dann einen neuen Satz von K-Repräsentanten und dann fängt

14:04.190 --> 14:05.090
man an zu iterieren.

14:05.530 --> 14:10.170
Man ordnet wieder zu, bekommt wieder eine neue Zuordnung der

14:10.170 --> 14:13.590
Repräsentanten zu den Mittelwerten, lässt wieder neuen Mittelwert

14:13.590 --> 14:16.210
ausrechnen pro Klasse und so weiter und so fort.

14:17.350 --> 14:19.910
Und das kann man dann entweder machen für eine feste Anzahl an

14:19.910 --> 14:23.990
Iterationen, bis man keine Lust mehr hat, oder man kann feststellen,

14:24.290 --> 14:26.910
dass die durchschnittliche Distanz, der durchschnittliche

14:26.910 --> 14:29.950
Quantisierungsfehler einen bestimmten Schwellwert unterschreitet.

14:30.410 --> 14:33.950
Oder ich kann feststellen zum Beispiel, dass sich die Lage der

14:33.950 --> 14:37.730
Repräsentanten, die ich in jeder Iteration neu ermittle, sich gar

14:37.730 --> 14:40.130
nicht mehr oder nur noch geringfügig ändert.

14:44.190 --> 14:50.730
Das Ganze ist häufig ein Beispiel für ein unüberwachtes Lernverfahren.

14:50.730 --> 14:53.630
Was macht dieses Lernverfahren unüberwacht?

14:56.530 --> 15:00.010
Warum ist es unüberwacht, das Lernverfahren?

15:06.820 --> 15:09.460
Genau, die Trainingsvektoren sind nicht klassifiziert, man weiß nicht,

15:09.560 --> 15:11.060
zu welchem Repräsentanten es gehört.

15:11.920 --> 15:15.540
Warum ist dieses Lernverfahren, wenn man genau hinschaut, doch nicht

15:15.540 --> 15:17.240
100 Prozent unüberwacht?

15:17.940 --> 15:18.940
Wo habe ich Überwachung?

15:24.250 --> 15:27.390
Die Überwachung steckt schon im Namen des Verfahrens.

15:31.290 --> 15:33.170
Genau, der Parameter k, wo kriege ich den her?

15:33.810 --> 15:37.290
Ich muss als Mensch vorher vorgeben, wie viele Quantisierungsstufen

15:37.290 --> 15:38.490
denn hinterher rauskommen sollen.

15:38.830 --> 15:41.250
Das lernt das Verfahren nicht selber anhand eines Kriteriums.

15:41.810 --> 15:46.890
Das heißt, man hat da so eine minimale Überwachung schon dabei, wo der

15:46.890 --> 15:48.930
Mensch eine Designentscheidung treffen muss.

15:50.650 --> 15:54.510
Man kann jetzt dieses Finden der Repräsentanten auch auf eine

15:54.510 --> 15:57.430
unüberwachte Art und Weise machen.

15:57.890 --> 16:00.250
Das Ganze nennt sich dann lernende Vektorquantisierung.

16:01.490 --> 16:05.870
Es gilt wieder, ich will I-Referenzvektoren finden für k-Klassen, wenn

16:05.870 --> 16:09.930
ich also zum Beispiel pro Klasse mehr als einen Referenzvektor

16:09.930 --> 16:10.450
zulasse.

16:11.090 --> 16:14.350
Und ich habe wieder eine Menge von Trainingsdaten, die repräsentativ

16:14.350 --> 16:16.510
sind für die Daten, die ich hinterquantisieren möchte.

16:17.750 --> 16:24.710
Und diesmal weiß ich auch für jeden Trainingsvektor, zu welcher Klasse

16:24.710 --> 16:27.910
soll er denn zugeordnet werden.

16:29.910 --> 16:34.350
Und jetzt kann man wieder ein iteratives Verfahren haben, um ideale

16:34.350 --> 16:40.690
oder möglichst gute, hinreichend gute Repräsentanten zu finden.

16:41.430 --> 16:45.210
Im ersten Schritt initialisiere ich wieder beliebige Repräsentanten

16:45.210 --> 16:45.870
zufällig.

16:46.630 --> 16:51.670
Dann für jedes Trainingsdatum führe ich die Klassifikation durch, zu

16:51.670 --> 16:54.210
welchem Repräsentanten wird es denn zugeordnet.

16:55.190 --> 16:58.530
Und dann, je nachdem, ob die Entscheidung, die dabei getroffen wird,

16:58.730 --> 17:02.510
korrekt ist oder falsch ist, ob es also dem richtigen Repräsentanten

17:02.510 --> 17:06.830
gemäß der Supervision des Labelings zugeordnet wird oder nicht, fange

17:06.830 --> 17:08.550
ich dann an, die Repräsentanten zu verändern.

17:09.850 --> 17:14.550
Wenn also die Klasse richtig ist, wenn also das Trainingsdatum XI der

17:14.550 --> 17:18.370
richtigen Klasse zugeordnet wird, dann bewege ich den Repräsentanten

17:18.370 --> 17:20.710
so ein kleines Stück in die Richtung dieses Trainingsdatums.

17:21.830 --> 17:25.370
Wenn das nicht der Fall ist, wenn also die Klasse XI der falschen

17:25.370 --> 17:30.490
Klasse VI zugeordnet wird, dann bewege ich den Repräsentanten VI ein

17:30.490 --> 17:33.850
bisschen weg von dem Vektor XI.

17:35.650 --> 17:38.990
Und das Ganze iteriere ich und dann, Abbruchdringungen wie immer, ich

17:38.990 --> 17:42.050
habe genug iteriert, die Änderung ist nicht mehr groß genug, der

17:42.050 --> 17:45.230
Fehler, den ich bekomme, ist klein genug.

17:46.650 --> 17:50.110
Und man kann das auch so machen, dass man zum Beispiel am Anfang

17:50.110 --> 17:54.990
dieses Verschieben, um wie viel verschiebe ich denn den Repräsentanten

17:54.990 --> 17:58.890
entweder hin zum Trainingsdatum oder weg vom Trainingsdatum, dass ich

17:58.890 --> 18:02.610
dieses, um wie viel ich den verschiebe, dieses ein bisschen, im Laufe

18:02.610 --> 18:06.630
der Zeit immer kleiner werden lasse und so irgendwann auch Konvergenz

18:06.630 --> 18:07.150
erzwinge.

18:09.030 --> 18:10.790
Davon gibt es dann ein paar Unterarten.

18:13.230 --> 18:17.350
Man kann dann jetzt anfangen, die Regeln, wann und wie ich einen

18:18.130 --> 18:21.870
Repräsentanten während des Trainings verschiebe, zu ändern.

18:22.870 --> 18:26.670
Zum Beispiel kann man sagen, wenn ein Repräsentant richtig

18:26.670 --> 18:30.810
klassifiziert wurde oder ein Trainingsdatum richtig klassifiziert

18:30.810 --> 18:33.030
wurde, dann verändere ich den Repräsentanten nicht mehr.

18:33.290 --> 18:36.150
Ich fange jetzt nur noch an, Repräsentanten zu verschieben, wenn ein

18:36.150 --> 18:38.190
Trainingsdatum falsch klassifiziert wird.

18:41.650 --> 18:42.350
Schiebe den hin.

18:43.310 --> 18:46.170
Und kann ich noch weiter einschlagen, eingrenzen.

18:48.250 --> 18:53.950
Ich kann zum Beispiel sagen, ich gucke mir die nächsten beiden

18:53.950 --> 18:58.490
Repräsentanten an, die an dem Trainingsdatum X, Y liegen, seien jetzt

18:58.490 --> 18:59.410
V, J und V, K.

18:59.970 --> 19:06.030
Erstnächster nach Vektor, zweitnächster Vektor und sage, okay, wenn

19:06.030 --> 19:09.750
die sich unterscheiden, dann berechne ich überhaupt erst mal nur neu.

19:09.970 --> 19:12.710
Wenn die beiden zur gleichen Repräsentanten der gleichen Klassen sind,

19:12.830 --> 19:13.930
lasse ich alles so, wie es ist.

19:15.210 --> 19:18.590
Und ich berechne den auch nur dann neu, wenn einer der beiden

19:18.590 --> 19:20.870
Repräsentanten mindestens die richtige Klasse war.

19:22.130 --> 19:27.810
Plus, ich berechne die auch nur dann neu, wenn X irgendwie zwischen

19:27.810 --> 19:29.670
diesen beiden Repräsentanten lag.

19:31.230 --> 19:37.410
Auf die Art und Weise schränke ich sozusagen die Art und Weise ein,

19:37.570 --> 19:40.250
wenn Repräsentanten nicht so häufig durch die Gegend geschoben,

19:40.390 --> 19:44.650
sondern ich begrenze mich mehr so auf pathologische Fälle.

19:45.630 --> 19:52.310
Oder man kann das Ganze dann noch ändern, indem ich diese Bedingung,

19:52.710 --> 19:56.350
dass die Klassen der beiden am nächsten gelegenen Repräsentanten

19:56.350 --> 19:58.950
unterschiedlich sein soll, dass ich die weglasse.

19:59.430 --> 20:04.690
Das ist dann die nächste Abart von LVQ, von der Learning Vector

20:04.690 --> 20:05.270
Quantization.

20:05.450 --> 20:08.630
Und da gibt es auch noch ein paar andere Spielereien, wie man das

20:08.630 --> 20:09.510
machen kann.

20:09.610 --> 20:10.910
Das sind alles so Details.

20:11.110 --> 20:13.690
Je nachdem, welche Daten ich habe, kann man das eine oder das andere

20:13.690 --> 20:15.190
besser funktionieren.

20:16.110 --> 20:19.470
Das Interessante an diesem Learning Vector Quantization ist, der

20:19.470 --> 20:22.050
Algorithmus, so wie er hingeschrieben wurde, ist eigentlich relativ

20:22.050 --> 20:24.070
klar und leicht nachvollziehbar.

20:24.850 --> 20:29.330
Das Ganze ist in Wirklichkeit auch oder kann auch dargestellt werden

20:29.330 --> 20:31.530
als ein einfaches neuronales Netzwerk.

20:32.170 --> 20:35.690
Es ist so ziemlich mit eines der einfachsten neuronalen Netzwerke, die

20:35.690 --> 20:36.590
man aufbauen kann.

20:37.590 --> 20:42.730
Das macht man so, dass man hier bei der Eingabe des neuronalen Netzes

20:42.730 --> 20:47.190
den Vektor hat, den Eingabevektor, das Trainingsdatum.

20:47.310 --> 20:48.130
Das ist d-dimensional.

20:49.230 --> 20:53.450
Die Trainingsdaten werden der Reihe nach in diesem Neuron angelegt und

20:53.450 --> 20:58.250
oben als Ausgabe habe ich meine Referenzvektoren, auf die ich die

20:58.250 --> 20:58.950
abbilden kann.

21:01.450 --> 21:06.290
Und hier ist jedes Neuron mit jedem Referenzvektor verbunden und wenn

21:06.290 --> 21:09.590
ich mir dann zum Beispiel anschaue, nur die Verbindung der

21:09.590 --> 21:13.690
Eingabeneuronen zu einer bestimmten Klasse J, dann kriegen die

21:13.690 --> 21:21.630
Gewichte W1J bis WNJ, Klasse J, Dimension 1 bis, das müsste eigentlich

21:21.630 --> 21:24.450
D sein, eine gewisse Dimension DJ.

21:25.770 --> 21:31.490
Und diesen Vektor an Gewichten, den kann ich als Referenzvektor

21:31.490 --> 21:32.090
auffassen.

21:32.810 --> 21:37.310
Und den kann ich dann als Referenzvektor auffassen, wenn ich da oben

21:37.310 --> 21:44.370
bei der Berechnung der Ausgabe des Neurons J das so berechne, wie das

21:44.370 --> 21:47.430
Distanzmaß, das ich jetzt bei der Quantisierung verwenden würde.

21:48.150 --> 21:52.070
Angenommen, ich nehme das euklidische Distanzmaß, dann könnte ich hier

21:52.070 --> 21:56.790
in J mit dem Gewichtsvektor und dem Eingabevektor einfach die

21:56.790 --> 22:01.830
euklidische Distanz zu diesem J ausrechnen.

22:02.030 --> 22:06.250
Und ich sage, das Neuron gewinnt halt immer, das den kleinsten Wert

22:06.250 --> 22:07.930
hat, das die kleinste Distanz hat.

22:08.650 --> 22:14.090
Und wenn ich das mache, habe ich hier ein neuronales Netz, das bei

22:14.090 --> 22:17.090
gegebenen Gewichten halt gerade diese Klassifikation durchführt.

22:17.290 --> 22:19.650
Gewichtsvektor wird zu seinem nächstgelegenen Repräsentanten

22:19.650 --> 22:20.310
zugeordnet.

22:21.010 --> 22:24.350
Oder wenn ich trainiere, kann ich das so machen, hier lege ich

22:24.350 --> 22:28.650
Repräsentant an, schaue unter den aktuellen Gewichten, die meine

22:28.650 --> 22:31.830
Referenzvektoren bestimmen, welches ist die Klasse, die gewinnt.

22:32.470 --> 22:35.570
Und wenn es die richtige ist, dann werden halt die Gewichte zu dieser

22:35.570 --> 22:38.650
Klasse entsprechend in die richtige Richtung verschoben.

22:38.730 --> 22:41.650
Wenn es der falsche ist, werden sie entsprechend weggeschoben.

22:42.690 --> 22:45.510
Und auf die Art und Weise hat man ein relativ einfaches neuronales

22:45.510 --> 22:51.030
Netz, das halt die Vektorquantisierung lernt und auch hinterher als

22:51.030 --> 22:53.110
neuronales Netz die Vektorquantisierung durchführt.

22:53.470 --> 22:55.830
Und hat im Prinzip schon alles, was man so von einem

22:55.830 --> 22:58.870
Multilayerperzeptron her kennt, wie das hinterher auch trainiert wird

22:58.870 --> 23:02.690
mit Backpropagation etc., so die Grundzüge liegen da alle schon in dem

23:02.690 --> 23:04.870
Ding drin, ist aber trotzdem ein sehr einfaches Netz.

23:07.910 --> 23:10.850
Die interessante Frage wäre jetzt, wenn man Learning Vector

23:10.850 --> 23:14.830
Quantization sich anschaut und Vektorquantisierung und k-Nächsten am

23:14.830 --> 23:19.830
Nachbar oder auch k-Mittelwerte, um Repräsentanten zu finden, ist

23:19.830 --> 23:21.550
natürlich die Frage, ist das überhaupt noch relevant?

23:22.350 --> 23:25.310
Heutzutage automatische Spracherkenner arbeiten mit einem

23:25.310 --> 23:27.610
kontinuierlichen Eingaberaum, mit so einem R hoch N.

23:28.230 --> 23:31.690
Da wird in der Regel nichts mehr quantisiert, da wird direkt mit dem R

23:31.690 --> 23:33.170
hoch N gerechnet.

23:34.010 --> 23:41.210
Also könnte man sagen, das ist doch völlig uninteressant für moderne

23:41.210 --> 23:42.790
Spracherkennungssysteme.

23:43.750 --> 23:49.070
Und da gibt es jetzt einen Trick, wie man die Sachen trotzdem

23:49.070 --> 23:49.850
verwenden kann.

23:51.790 --> 23:54.850
Wie man eine einzelne Gaussglocke schätzt, das wissen wir.

23:55.910 --> 23:58.910
Also eine einzelne Gaussglocke, wenn ich da Mittelwert und Varianz

23:58.910 --> 24:01.690
berechnen will, ich habe Trainingsdaten, ich weiß, die gehören zu der

24:01.690 --> 24:04.350
Gaussglocke, schätze ich einfach drauf.

24:04.630 --> 24:07.910
Mittelwert, arithmetisches Mittel, Kovarianzmatrix, halt die

24:07.910 --> 24:11.610
erwarteten Abweichungen jeweils der Kovarianzen der unterschiedlichen

24:11.610 --> 24:13.630
Dimensionen.

24:14.850 --> 24:16.630
Was mache ich aber bei einer Gaussmixtur?

24:18.910 --> 24:21.230
Wie schätze ich denn die Parameter einer Gaussmixtur?

24:26.020 --> 24:26.620
Das ist ja blöd.

24:27.340 --> 24:29.680
Da kann ich nicht einfach einfach arithmetisches Mittel nehmen, da

24:29.680 --> 24:34.080
kriege ich ja nur alle Trainingsdaten, da kriege ich ja nur einen

24:34.080 --> 24:34.660
Mittelwert raus.

24:34.760 --> 24:36.200
Ich brauche aber 15 Mittelwerte.

24:37.300 --> 24:39.980
Ich brauche 15 Kovarianzmatrix.

24:39.980 --> 24:43.260
Ich habe Trainingsdaten, ich weiß, diese Trainingsdaten wurden von

24:43.260 --> 24:46.780
dieser Gaussmixtur hervorgebracht, aber ich weiß nicht, von welcher

24:46.780 --> 24:49.200
Gaussglocke die hervorgebracht wurden.

24:49.900 --> 24:51.900
Wenn ich also, sagen wir mal, die Trainingsdaten den einzelnen

24:51.900 --> 24:54.020
Gaussglocken zuordnen könnte, dann könnte ich wieder Mittelwert

24:54.020 --> 24:58.940
bilden, Kovarianz und einfach Anteil in den Trainingsdaten, Verhältnis

24:58.940 --> 25:01.860
zueinander, wären die Gewichte der einzelnen Gaussglocken, kann ich

25:01.860 --> 25:02.200
aber nicht.

25:02.820 --> 25:03.360
Weiß ich nicht.

25:03.900 --> 25:06.340
Ich weiß hinterher in der Regel nur, ich habe hier eine Gaussmixtur

25:06.340 --> 25:07.960
und das sind die Trainingsdaten, die dazugehören.

25:09.940 --> 25:13.340
Wenn man jetzt keine Mittelwerte als Werkzeug in der Hand hat, was

25:13.340 --> 25:14.200
könnte man da machen?

25:23.220 --> 25:26.600
Na ja, mit keinen Mittelwerten könnte man dann relativ einfach sich

25:26.600 --> 25:29.960
schon mal Parameter von so einer Gaussmixtur schätzen lassen.

25:32.260 --> 25:35.260
Angenommen, ich habe eine Gaussmixtur mit 16 Gaussglocken, ich habe

25:35.260 --> 25:39.200
jede Menge Trainingsdaten, von der ich weiß, die wurden von dieser

25:39.200 --> 25:43.700
Gaussmixtur hervorgerufen, dann lasse ich doch jetzt mal 16

25:43.700 --> 25:47.260
Mittelwerte drauflaufen auf den Trainingsdaten.

25:47.760 --> 25:48.700
Was kommt da raus?

25:49.820 --> 25:50.640
16 Vektoren.

25:50.880 --> 25:52.220
Was mache ich mit diesen Vektoren?

25:56.830 --> 25:59.490
Was kann ich die nehmen in meiner Gaussmixtur?

26:02.470 --> 26:02.870
Logischerweise.

26:02.870 --> 26:04.730
Das Ding heißt schon 16 Mittelwerte.

26:06.230 --> 26:06.990
Wofür nehme ich sie dann?

26:08.670 --> 26:10.790
Genau, nehme ich für die Mittelwerte meiner Gaussglocken.

26:10.870 --> 26:14.310
Habe ich also immerhin schon mal 16 Mittelwerte in meiner Gaussmixtur.

26:14.670 --> 26:18.270
Jetzt brauche ich noch eine Kovarianzmatrix, 16 Stück davon und ich

26:18.270 --> 26:19.110
brauche noch Gewichte.

26:20.070 --> 26:21.730
Wo kriege ich meine Kovarianzmatrix her?

26:28.180 --> 26:32.840
Naja, wenn ich jetzt 16 Mittelwerte habe und ich lasse kein nächster

26:32.840 --> 26:35.460
Nachbar drauflaufen, zum Beispiel mit einer euclidischen Distanz.

26:37.560 --> 26:38.620
Was sagt mir das denn?

26:38.780 --> 26:41.580
Es sagt mir für jeden Trainingsvektor, okay, du gehörst zu Wert 1, du

26:41.580 --> 26:43.400
gehörst zu Wert 13, du gehörst zu Wert 14.

26:44.220 --> 26:47.120
Das heißt, ich kann die Trainingsdaten dann erstmal diesen 16

26:47.120 --> 26:48.580
Mittelwerten zuordnen lassen.

26:50.500 --> 26:53.400
Dann kann ich ganz normal für jeder Gaussglocke auf den ihr

26:53.400 --> 26:56.140
zugehörigen Trainingsdaten, zum Beispiel eine Kovarianzmatrix

26:56.140 --> 26:56.900
ausrechnen lassen.

26:57.200 --> 27:00.020
Habe ich meine 16 Kovarianzmatrix.

27:00.020 --> 27:01.340
Fehlen mir nur noch die Gewichte.

27:02.180 --> 27:03.400
Was kann ich mit den Gewichten machen?

27:04.440 --> 27:05.160
Wo kriege ich die her?

27:13.950 --> 27:14.730
Das ist ganz einfach.

27:15.190 --> 27:19.550
Ich weiß ja, welches Trainingsdatum gehört zu welcher Klasse, zu

27:19.550 --> 27:20.290
welcher Gaussglocke.

27:20.990 --> 27:24.230
Ich weiß, wie viele Trainingsdaten zu welcher Gaussglocke gehören.

27:24.990 --> 27:29.750
Also teile ich einfach für die erste Gaussglocke 23 von 1000

27:29.750 --> 27:31.690
Trainingsdaten zugewiesen worden.

27:32.010 --> 27:34.390
Also ist das Gewicht der Gaussglocke 23 durch 1000.

27:35.070 --> 27:36.550
Und so mache ich das für alle Gaussglocke.

27:36.850 --> 27:39.670
Und auf die Art und Weise habe ich schon mal eine relativ einfache

27:39.670 --> 27:41.810
Schätzung für die Parameter meiner Gaussglocke.

27:42.690 --> 27:45.590
Jetzt mache ich statt der euclidischen Distanz die Mahanalobes

27:45.590 --> 27:46.010
Distanz.

27:46.810 --> 27:52.710
Muss ich halt noch nicht nur Vektoren initialisieren, sondern muss ich

27:52.710 --> 27:54.990
auch Kovarianzmatrixen pro Vektor initialisieren.

27:55.730 --> 27:57.810
Initialisiere ich wieder irgendwie zufällig in einem vernünftigen

27:57.810 --> 28:00.010
Bereich und lasse keine Mittelwerte laufen.

28:00.490 --> 28:03.530
Und jedes mal mache ich nicht nur die Neuberechnung des

28:03.530 --> 28:06.510
Mittelwertvektors, sondern ich mache jedes mal auch die Neuberechnung

28:06.510 --> 28:09.630
der Kovarianzmatrix anhand der zugeordneten Trainingsdaten.

28:10.290 --> 28:14.810
Und auf die Art und Weise habe ich dann einen iterativen Algorithmus,

28:15.110 --> 28:20.530
der mir schon relativ einfach und gut die Parameter so einer

28:20.530 --> 28:23.290
Gaussmixtur schätzt.

28:24.670 --> 28:28.750
Und wir werden später sehen, dass dieser Algorithmus letztendlich

28:28.750 --> 28:33.310
nichts anderes ist als ein Spezialpfeil eines Algorithmus, der sich

28:33.310 --> 28:35.550
Expectation Maximization nennt.

28:36.530 --> 28:39.490
Und auf die Art und Weise kann ich dann für meine Gaussmixtur

28:39.490 --> 28:45.350
entsprechende Parameter schätzen, ohne dass ich darauf angewiesen bin

28:45.350 --> 28:48.910
zu wissen, welche Gaussglocke hat denn jetzt welches Trainingsdatum

28:48.910 --> 28:49.590
hervorgebracht.

28:51.290 --> 28:54.270
Das also in meinem Hinterkopf behalten, wenn es hinterher darum geht,

28:54.390 --> 28:56.650
wenn ich ein Spracherkennungssystem so richtig von Grund auf

28:56.650 --> 28:57.330
trainieren möchte.

28:59.670 --> 29:02.250
Wir machen jetzt an dieser Stelle einen Schnitt.

29:02.390 --> 29:06.690
Wir verlassen jetzt den Bereich des allgemeinen maschinellen Lernens

29:06.690 --> 29:13.150
mit Karniester-Nachbarn und Quantisierung und Vektorquantisierung und

29:13.150 --> 29:17.290
was eine Gaussglocke ist und eine Gaussmixtur ist und sammeln jetzt

29:17.290 --> 29:21.530
diese ganzen Grundbausteine zusammen und machen den nächsten Schritt

29:21.530 --> 29:23.310
hin zur statistischen Spracherkennung.

29:24.650 --> 29:29.250
Wir schauen uns ab jetzt an, wie funktioniert ein modernes

29:29.250 --> 29:32.750
Spracherkennungssystem für Erkennung kontinuierlicher Sprache mit

29:32.750 --> 29:41.160
großem Vokabular im Rahmenwerk der statistischen Klassifikation und

29:41.160 --> 29:49.260
dafür gibt es ein schönes Tutorial, das ich jedem wärmstens ans Herz

29:49.260 --> 29:49.600
lege.

29:50.280 --> 29:53.160
Es nennt sich ja Tutorial on Hidden Markov Models and Selected

29:53.160 --> 29:54.840
Applications in Speech Recognition.

29:55.360 --> 29:58.060
Von diesem Tutorial ist ungefähr die erste Hälfte relevant.

29:59.400 --> 30:02.660
Der Rest hinterher, wenn es dann darum geht, um die Anwendung der

30:02.660 --> 30:05.940
Hidden Markov Modelle in Spracherkennung, das Ganze ist ein bisschen

30:05.940 --> 30:09.260
veraltet inzwischen, das werden wir hier moderner und neuer

30:09.260 --> 30:13.120
durchdiskutieren, aber der Teil, der sich damit beschäftigt, was sind

30:13.120 --> 30:16.220
Hidden Markov Modelle, wie funktionieren sie, welche Probleme gibt es

30:16.220 --> 30:19.380
da, wie kann ich die Probleme lösen, ist nach wie vor aktuell und ich

30:19.380 --> 30:20.880
persönlich finde den sehr gut geschrieben.

30:21.580 --> 30:24.520
Ich habe mir da vieles hier von der Vorlesung rausgenommen und da

30:24.520 --> 30:26.860
sollte man sich ruhig mal in einer ruhigen Stunde, ruhigen zwei

30:26.860 --> 30:31.420
Stunden hinsetzen und dieses Tutorial mal durcharbeiten, damit man den

30:31.420 --> 30:33.700
Bereich der Hidden Markov Modelle wirklich gut versteht.

30:37.020 --> 30:40.280
Die Motivation für die Stochastik in der Spracherkennung hatten wir

30:40.280 --> 30:40.840
schon gesagt.

30:40.940 --> 30:43.780
Am Ende läuft alles immer hinaus auf Variabilität.

30:44.320 --> 30:46.660
Spracherkennung ist schwierig wegen der Variabilität.

30:46.840 --> 30:50.120
Menschen sprechen dieselben Sachen immer ständig unterschiedlich aus,

30:50.180 --> 30:53.320
sie werden unterschiedlich aufgenommen durch unterschiedliche

30:53.320 --> 30:54.820
Mikrofone, Räume etc.

30:55.020 --> 30:55.300
etc.

30:55.300 --> 30:59.160
Und beim Dynamic Time Warping hatten wir schon gesagt, berücksichtigen

30:59.160 --> 31:00.040
wir das alles nicht.

31:00.320 --> 31:03.420
Das Einzige, was wir beim Dynamic Time Warping berücksichtigen, sind

31:03.420 --> 31:05.040
unterschiedliche Sprechgeschwindigkeiten.

31:05.340 --> 31:07.740
Das ist die einzige Variabilität, die wir da berücksichtigen.

31:08.220 --> 31:10.360
In Wirklichkeit gibt es noch viel mehr Variabilität.

31:10.500 --> 31:14.120
Es gibt zum Beispiel Variabilität bei der Einstellung der

31:14.120 --> 31:15.840
Artikulatoren.

31:16.120 --> 31:19.820
Das sorgt dafür, das sind ja der Merkmalsvektor, der extrahiert wird

31:19.820 --> 31:23.120
und zu einem bestimmten Phonem gehört, immer etwas anders aussieht,

31:23.120 --> 31:27.020
wenn ich das wieder und wieder und wieder spreche.

31:27.280 --> 31:29.960
Und er sieht erst recht deutlich anders aus, wenn unterschiedliche

31:29.960 --> 31:30.860
Sprecher ihn sprechen.

31:35.000 --> 31:38.960
Beim Dynamic Time Warping kann man ein bisschen was machen darüber,

31:39.060 --> 31:42.860
indem man erst mal Mittel bildet über mehrere Beispielmuster.

31:44.240 --> 31:47.980
Also statt für ein Wort ein Referenzmuster aufzunehmen, nehme ich für

31:47.980 --> 31:52.100
ein Wort mehrere Referenzmuster auf und nehme dann den Durchschnitt

31:52.100 --> 31:52.540
davon.

31:53.140 --> 31:55.940
Dadurch kann ich schon mal anfangen, ein bisschen so die Variabilität

31:55.940 --> 31:59.060
über Sprecher hinweg einzufangen, indem ich so eine Art

31:59.060 --> 32:00.080
Durchschnittssprecher bilde.

32:00.820 --> 32:04.600
Und ich kann die Variabilität damit anfangen, indem ich zum Beispiel

32:04.600 --> 32:09.960
ein analoges Distanz nehme, um die Distanz zwischen zwei Vektoren beim

32:09.960 --> 32:12.900
Dynamic Time Warping zu messen, statt der einfachen euclidischen

32:12.900 --> 32:13.360
Distanz.

32:14.260 --> 32:18.880
Aber selbst wenn ich das mache, bleiben noch einige unschöne Probleme

32:18.880 --> 32:19.360
übrig.

32:20.540 --> 32:28.880
Wir hatten schon gesagt, beim Dynamic Time Warping muss man jedes Wort

32:28.880 --> 32:31.320
im Vokabular einmal gehört haben.

32:31.400 --> 32:33.020
Es muss mindestens einmal gesprochen werden.

32:33.600 --> 32:36.540
Wenn ich das jetzt sprecherunabhängig haben will und also ein Mittel

32:36.540 --> 32:40.300
bilden will über mehrere Sprecher, müsste ich also jedes Wort von

32:40.300 --> 32:42.360
mehreren Sprechern mehrmals vorlesen lassen.

32:42.960 --> 32:47.880
Bei sehr großem Vokabular, 10.000, 60.000, 300.000 Wörtern, ist das

32:47.880 --> 32:50.320
einfach völlig illusorisch.

32:51.060 --> 32:55.200
Dann mit der Mahanalovis-Distanz modelliere ich nur die Varianz um

32:55.200 --> 32:56.240
einen Mittelwert herum.

32:57.480 --> 33:00.400
Wir hatten zwar gesagt, viele natürliche Prozesse sind normal

33:00.400 --> 33:03.960
verteilt, aber wir hatten auch gesagt, bei der Spracherkennung ist das

33:03.960 --> 33:04.840
häufig nicht der Fall.

33:05.360 --> 33:08.020
Deswegen hatten wir die Gauss-Mixtur-Verteilung eingeführt, weil man

33:08.020 --> 33:11.860
damit jede beliebige Wahrscheinlichkeitsverteilung abbilden kann.

33:12.400 --> 33:15.600
Das heißt, wir haben was Besseres als die Mahanalovis-Distanz, aber

33:15.600 --> 33:18.640
das können wir in diesem DTW nicht wirklich einbauen.

33:19.620 --> 33:23.480
Und plus, dieser DTW arbeitet nur oder das One-Stage-Dynamic

33:23.480 --> 33:26.300
-Programming arbeitet nur mit einer relativ einfachen Grammatik.

33:26.700 --> 33:30.860
Ich habe also keinerlei gute Informationen da drin stecken, die mir

33:30.860 --> 33:33.860
sagt, welche Wortfolgen wahrscheinlich sind und welche Wortfolgen eher

33:33.860 --> 33:34.680
unwahrscheinlich sind.

33:36.060 --> 33:40.780
Was wir also letztendlich hätten, wir hätten gerne so ein Framework,

33:40.880 --> 33:44.600
wo wir nicht jedes Wort mindestens einmal aufgenommen haben wollen.

33:45.100 --> 33:49.860
Wir wollen vielmehr mit kleineren Einheiten arbeiten, deren Anzahl so

33:49.860 --> 33:53.720
klein ist, dass ich von mehreren Sprechern möglichst viele

33:53.720 --> 33:59.000
Aufnahmebeispiele aufnehmen kann und die so flexibel sind, dass ich

33:59.000 --> 34:02.580
letztendlich jedes beliebige Wort aus ihnen zusammensetzen kann.

34:04.200 --> 34:10.240
Ich möchte diese Varianz der Ausprägung der Merkmalsvektoren auf

34:10.240 --> 34:15.160
möglichst komplexe Art und Weise modellieren und ich möchte auf

34:15.160 --> 34:18.760
möglichst komplexe Art und Weise modellieren, welche Wortfolgen sind

34:18.760 --> 34:22.100
zulässig in einer Sprache und wahrscheinlich welche Wortfolgen kann es

34:22.100 --> 34:22.820
überhaupt nicht geben.

34:24.020 --> 34:27.440
Und dafür verwendet man halt beim modernen Spracherkennungssystem

34:27.440 --> 34:32.020
Stochastik und insbesondere sehr viel Hidden Markov-Modelle.

34:33.920 --> 34:38.280
Die Stochastik wird schön durch eine einfache Formel ausgedrückt.

34:38.600 --> 34:41.720
Nennt sich die Fundamentalformel der automatischen Spracherkennung.

34:42.180 --> 34:45.180
Und wenn etwas Fundamentalformel heißt, dann kann man sich vorstellen,

34:45.320 --> 34:46.940
dass das Ding eminent wichtig ist.

34:47.580 --> 34:50.460
Also das ist eine Formel, die sollte man, auch wenn sie einfach

34:50.460 --> 34:54.900
aussieht, wirklich durchdrungen und verstanden haben und alle Aspekte

34:54.900 --> 34:56.200
dieser Formel kennen.

34:57.780 --> 34:59.460
Was besagt uns diese Formel?

35:00.320 --> 35:03.040
Was wir suchen bei der Spracherkennung ist eine Wortfolge.

35:03.380 --> 35:05.960
Wir suchen die Wortfolge, die gesprochen wurde.

35:07.480 --> 35:12.000
Und jetzt brauchen wir ein Kriterium, anhand derer wir uns unter allen

35:12.000 --> 35:15.540
möglichen Wortfolgen, die es geben kann, für die Wortfolge, die wir

35:15.540 --> 35:17.100
erkennen wollen, entscheiden wollen.

35:17.640 --> 35:20.200
Und dieses Kriterium ist eine Wahrscheinlichkeit.

35:20.940 --> 35:24.820
Wir suchen nach der wahrscheinlichsten Wortfolge gegeben eine

35:24.820 --> 35:25.380
Aufnahme.

35:27.060 --> 35:31.120
Das hier, diese x, ist unsere Aufnahme, in der Regel also unsere

35:31.120 --> 35:33.760
Merkmalsvektoren, wie sie aus der Vorverarbeitung rauskommen.

35:35.300 --> 35:38.660
Ich habe irgendeinen magischen Mechanismus, der mir berechnet, für

35:38.660 --> 35:45.020
jede Wortfolge, wie groß ist die Wahrscheinlichkeit dieser Wortfolge

35:45.020 --> 35:46.840
gegeben meiner Ausgabe x.

35:47.780 --> 35:52.500
Und jetzt maximiere ich dieses Argument so, indem ich die Wortfolge,

35:52.560 --> 35:55.780
wie Dach, suche, die diese Wahrscheinlichkeit maximiert.

35:56.040 --> 35:59.460
Das ist das, was der argmax-Operator macht.

35:59.560 --> 36:04.640
Das Argument Maximum variiert dieses Argument w in allen möglichen

36:04.640 --> 36:09.720
Wortfolgen und dieses argmax spuckt dann aus, wDach ist die Wortfolge,

36:09.780 --> 36:11.400
die diese Wahrscheinlichkeit maximiert.

36:13.060 --> 36:17.680
Das Dumme ist, wir kennen keinen vernünftigen Mechanismus, um direkt

36:17.680 --> 36:21.620
diese Wahrscheinlichkeit p von w gegeben x berechnen zu können.

36:22.700 --> 36:25.440
Was wir deshalb machen ist, dass wir die Bayes-Formel anwenden.

36:25.760 --> 36:29.400
Wir wenden die Bayes-Formel an, wir formen das hier um anhand der

36:29.400 --> 36:30.000
Bayes -Formel.

36:30.980 --> 36:36.200
Aus dem p von w gegeben x wird p von x gegeben w mal p von w durch p

36:36.200 --> 36:36.660
von x.

36:37.640 --> 36:42.960
Das heißt, ich muss irgendwie in der Lage sein zu berechnen, wie groß

36:42.960 --> 36:46.240
ist die Wahrscheinlichkeit, dass eine bestimmte Wortfolge w die

36:46.240 --> 36:49.380
Aufnahme, die ich beobachtet habe, x hervorgebracht hat.

36:50.580 --> 36:54.060
Dann brauche ich eine Wahrscheinlichkeit dafür, die mir sagt, diese

36:54.060 --> 36:56.880
Wortfolge w, wie wahrscheinlich ist das überhaupt, dass es eine

36:56.880 --> 36:58.460
Wortfolge ist, die gesprochen wurde.

36:59.320 --> 37:01.360
Völlig unabhängig davon, was ich gehört habe.

37:01.500 --> 37:05.200
Nur diese Wortfolge, unabhängig von der Akustik, wie wahrscheinlich

37:05.200 --> 37:08.000
ist es überhaupt, dass diese Wortfolge in der Sprache vorkommt.

37:08.600 --> 37:12.060
Und das Ganze wird noch geteilt durch die a priori Wahrscheinlichkeit,

37:12.160 --> 37:16.040
wie hoch ist die Wahrscheinlichkeit dafür, dass diese Wortfolge

37:16.040 --> 37:21.360
überhaupt vorkommt, dass diese Aufnahme überhaupt vorkommt, unabhängig

37:21.360 --> 37:23.960
dafür, welche Wortfolge sie hervorgebracht hat.

37:24.480 --> 37:26.260
Einfach erst mal nach Base umgeformt.

37:26.960 --> 37:30.980
Und was einem jetzt sofort auffällt, ich will dieses Ding maximieren.

37:31.680 --> 37:33.600
Der Nenner ist konstant.

37:33.920 --> 37:35.160
Das x wird ja nicht variiert.

37:35.320 --> 37:37.020
Das Einzige, was variiert wird, wird das w.

37:38.040 --> 37:42.700
Wenn ich also das Dingquotient maximieren will, reicht es aus, dass

37:42.700 --> 37:45.720
ich den Zähler maximiere, weil der Nenner konstant ist.

37:46.160 --> 37:49.640
Das heißt, ich kann den Zähler wegstreichen und kann sagen, ich will

37:49.640 --> 37:53.440
jetzt nur noch dieses Produkt aus diesen beiden Wahrscheinlichkeiten

37:53.440 --> 37:54.580
maximieren.

37:55.160 --> 37:57.300
Und diese beiden Wahrscheinlichkeiten bekommen Namen.

37:57.720 --> 38:01.000
Das hier nennen wir das akustische Modell und das hier nennen wir das

38:01.000 --> 38:01.940
Sprachmodell.

38:02.440 --> 38:05.820
Akustische Modell deshalb, weil es ein generatives Modell ist, das mir

38:05.820 --> 38:09.780
sagt, gegeben eine Wortsequenz, wie wahrscheinlich ist es, dass dann

38:09.780 --> 38:13.160
eine bestimmte Aufnahme hervorgebracht wird.

38:13.840 --> 38:16.840
Und das hier heißt im englischen Language Model, da haben wir wieder

38:16.840 --> 38:21.120
das Language, Speech und im Deutschen alle Spracheprobleme.

38:21.320 --> 38:24.680
Das hier sagt mir einfach nur aus, für die Sprache, wie wahrscheinlich

38:24.680 --> 38:25.500
ist die Wortfolge.

38:28.400 --> 38:32.520
Das heißt, wenn wir jetzt einen Spracherkenner bauen wollen, der das

38:32.520 --> 38:36.200
hier macht, müssen wir im Prinzip nur die Komponenten dieser einzelnen

38:36.200 --> 38:37.180
Formel implementieren.

38:37.800 --> 38:40.580
Wir brauchen irgendwas, das uns diese Wahrscheinlichkeit, die

38:40.580 --> 38:42.600
akustische Modellwahrscheinlichkeit, ausrechnet.

38:43.040 --> 38:47.160
Wir brauchen etwas, das die Sprachmodellwahrscheinlichkeit ausrechnet.

38:48.120 --> 38:51.800
Und dann müssen wir irgendwie diesen Argument Maximum Operator

38:51.800 --> 38:52.500
implementieren.

38:53.460 --> 38:56.960
Jetzt kann man sich vorstellen, angenommen, ich lasse zu, dass meine

38:56.960 --> 39:03.280
Wortfolgen zusammengesetzt sein dürfen aus 300.000 Wörtern, einem

39:03.280 --> 39:04.960
Vokabular aus 300.000 Wörtern.

39:05.840 --> 39:09.620
Wenn ich da mir die Menge aller möglichen Wortfolgen, die ich bilden

39:09.620 --> 39:11.680
kann, anschaue, die ist verdammt groß.

39:12.420 --> 39:17.000
Das heißt, dieser Argument Maximumsbildung klingt schon mal nach einem

39:17.000 --> 39:18.180
sehr schwierigen Problem.

39:19.740 --> 39:25.620
Und dann brauche ich noch eben Modelle, die das hier auch schnell und

39:25.620 --> 39:29.580
in annehmbarer Zeit hinreichend genau modellieren und berechnen.

39:30.780 --> 39:34.520
Und am Ende spielt das alles irgendwie hinterher zusammen.

39:35.480 --> 39:39.700
Man muss die Modelle so wählen, dass dieser Argument Maximumsbildung

39:39.700 --> 39:40.900
immer noch möglich ist.

39:41.580 --> 39:44.960
Und da diese Argument Maximumsbildung nicht in allen Details immer so

39:44.960 --> 39:47.680
möglich ist, wie man das will, weil es sonst zu lange dauern würde,

39:48.120 --> 39:51.380
muss man dann anfangen, irgendwo bei den Modellen auch noch Abstriche

39:51.380 --> 39:53.820
zu machen und Kompromisse einzugehen.

39:55.740 --> 39:59.660
Wenn man das Ganze jetzt in einem Blockschaubild zusammenfasst, dann

39:59.660 --> 40:02.700
transformiert sich diese Formel sofort in dieses Bild.

40:03.940 --> 40:07.420
Die Erkennung, die Suche nach der wahrscheinlichsten Wortfolge, das

40:07.420 --> 40:08.620
ist unser Argument Maximum.

40:09.420 --> 40:13.020
Vorne rein kommt Sprache, die durchläuft die Vorverarbeitung, die wir

40:13.020 --> 40:14.000
schon kennengelernt haben.

40:14.180 --> 40:15.560
Es werden Merkmale extrahiert.

40:16.800 --> 40:19.800
Und hier am anderen Ende von der Suche kommt raus die

40:19.800 --> 40:21.280
wahrscheinlichste Wortfolge WDACH.

40:22.720 --> 40:28.620
Und dieser Argument Maximumsbildung, diese Suche, das Dekodieren, das

40:28.620 --> 40:33.120
bedient sich des akustischen Modells, des Sprachmodells und dann haben

40:33.120 --> 40:35.480
wir hinterher noch so etwas wie ein Wörterbuch.

40:36.560 --> 40:39.700
Das hat zwei Aufgaben.

40:39.920 --> 40:42.420
Das steht so ein bisschen zwischen Sprachmodell und akustischem

40:42.420 --> 40:42.740
Modell.

40:43.700 --> 40:48.520
Das Wörterbuch selber kann einmal ein Aussprache-Wörterbuch sein, das

40:48.520 --> 40:51.600
uns sagt, für bestimmte Wörter mit welchen Phonemen werden sie

40:51.600 --> 40:52.200
ausgesprochen.

40:52.980 --> 40:57.720
Es ist aber auch gleichzeitig die Liste der Wörter, die uns sagt, aus

40:57.720 --> 41:02.200
welchen Wörtern dürfen die Wortfolgen, die erkannt werden können,

41:02.300 --> 41:06.100
überhaupt aufgebaut sein und für welche Wortfolgen muss ich das

41:06.100 --> 41:09.360
akustische Modell und das Sprachmodell ausrechnen können.

41:11.220 --> 41:17.920
Meistens schlägt man es dem akustischen Modell zu, aber hier in der

41:17.920 --> 41:21.900
Formel findet man das implizit auch hier drunter, hier wieder.

41:22.140 --> 41:26.520
Denn hier steht die Menge aller möglichen Wortfolgen, die ich in meine

41:26.520 --> 41:31.180
Variable W einsetzen kann und die wird mir halt implizit definiert

41:31.180 --> 41:34.260
durch das Vokabular, aus dem sich diese Wortfolgen zusammensetzen

41:34.260 --> 41:34.580
dürfen.

41:40.040 --> 41:41.080
Noch eine Sache.

41:41.380 --> 41:45.560
Angenommen, ich habe eine Aufnahme einer bestimmten Menge und ich

41:45.560 --> 41:48.780
suche jetzt nach der Wortfolge, die gesprochen wurde.

41:48.860 --> 41:52.260
Ich weiß, die Wortfolge darf sich zusammensetzen aus Wörtern, die

41:52.260 --> 41:55.360
kommen aus einem Vokabular der Länge 10.000.

41:56.580 --> 42:01.120
Ist bisher die Menge aller möglichen Wortfolgen endlich?

42:06.380 --> 42:06.880
Nö.

42:08.120 --> 42:09.400
Kann ja beliebig lang sein.

42:09.620 --> 42:12.260
Ich kann beliebig lange Wortfolgen aus diesen 10.000 Wörtern

42:12.260 --> 42:17.060
konstruieren, habe ich erstmal unendlich viele mögliche Wortfolgen und

42:17.060 --> 42:17.340
Sätze.

42:18.860 --> 42:23.200
Gibt es aber etwas, was mir trotzdem vielleicht eine Obergrenze angibt

42:23.200 --> 42:24.420
für die Länge der Wortfolge?

42:27.760 --> 42:30.380
Kann man trotzdem irgendwie abschätzen, dass die Wortfolgen vielleicht

42:30.380 --> 42:33.020
eine bestimmte Grenzlänge haben sollen?

42:35.100 --> 42:36.560
Genau, die Länge der Aufnahme.

42:36.880 --> 42:39.220
Die Länge der Aufnahme ist ja auch diskret.

42:39.320 --> 42:41.140
Wir machen die Aufnahme ja zeitdiskret.

42:43.380 --> 42:47.980
Und sagen wir mal, dass pro Merkmalsvektor zwei Wörter vorkommen, ist

42:47.980 --> 42:52.480
eher unwahrscheinlich und in der Praxis unmöglich und wird nicht

42:52.480 --> 42:52.880
passieren.

42:53.480 --> 42:57.240
Das heißt, eine einfache Einschränkung, eine einfache Obergrenze ist

42:57.240 --> 43:01.540
zu sagen, die Anzahl der Wörter in der erkannten Wortfolge darf nicht

43:01.540 --> 43:07.100
mehr sein als die Anzahl der Merkmalsvektoren in der Vorverarbeitung.

43:07.380 --> 43:10.220
Das ist so eine mögliche Einschränkung.

43:11.100 --> 43:14.260
Dann komme ich immerhin dazu, dass ich mich nur noch unter einer

43:14.260 --> 43:17.680
endlichen Anzahl an möglichen Wortfolgen bei der Suche entscheiden

43:17.680 --> 43:17.960
muss.

43:20.600 --> 43:24.860
Und den Rest der Vorlesung werden wir uns jetzt darum kümmern, diese

43:24.860 --> 43:27.520
einzelnen Komponenten zu implementieren.

43:27.960 --> 43:29.840
Die Vorverarbeitung haben wir schon abgehakt.

43:30.060 --> 43:30.980
Da haben wir schon drüber gesprochen.

43:31.120 --> 43:33.440
Da können wir das nehmen, was wir so kennengelernt haben.

43:34.400 --> 43:36.880
Was wir jetzt noch brauchen, ist das akustische Modell, das

43:36.880 --> 43:38.140
Sprachmodell und die Suche.

43:39.720 --> 43:42.720
Und als erstes werden wir uns um das akustische Modell kümmern.

43:43.340 --> 43:45.780
Das ist somit das Interessanteste an der ganzen Sache.

43:46.300 --> 43:50.560
Wie kann ich diese Wahrscheinlichkeit p von x gegeben w modellieren

43:50.560 --> 43:51.480
und ausrechnen?

43:54.540 --> 43:59.880
Und um das machen zu können, brauche ich stochastische Prozesse.

44:01.380 --> 44:03.680
Jetzt muss ich selber immer aufpassen, dass ich mich hier nicht

44:03.680 --> 44:08.420
verheddere, weil das ist eine sehr formelle Beschreibung, die aus dem

44:08.420 --> 44:14.160
Bereich der Stochastik kommt, die mathematisch formell korrekt ist.

44:14.760 --> 44:16.220
Ich muss jetzt aufpassen, dass ich das hinbekomme.

44:16.440 --> 44:20.920
Also, ein stochastischer Prozess dient dazu, um zeitlich geordnete

44:20.920 --> 44:28.840
Prozesse, zeitlich geordnete zufällige Vorgänge zu beschreiben.

44:29.200 --> 44:31.820
Das macht man in der Regel so, dass man als erstes einen

44:31.820 --> 44:33.000
Wahrscheinlichkeitsraum hat.

44:33.400 --> 44:35.800
Besteht aus Omega, f und p.

44:37.640 --> 44:41.820
Weiß noch einer aus der Wahrscheinlichkeitstheorie, was Omega, f und p

44:41.820 --> 44:42.500
sein sollen.

44:43.060 --> 44:46.840
Welche Omega, f und p einen Wahrscheinlichkeitsraum aufmachen.

44:49.850 --> 44:54.390
Omega ist sowas wie die Menge der elementaren Ereignisse.

44:58.130 --> 45:02.430
Zum Beispiel, ich habe einen Würfel, den kann ich würfeln und es kann

45:02.430 --> 45:06.810
eine Zahl von 1 bis 6 hervorkommen.

45:07.470 --> 45:12.010
Dann wären die Zahlen 1 bis 6 sowas wie die elementaren Ereignisse.

45:12.990 --> 45:16.650
Und ich kann jetzt anfangen, Wahrscheinlichkeiten zu berechnen für

45:16.650 --> 45:18.690
solche elementaren Ereignisse.

45:18.890 --> 45:19.950
Also, ich würfel den Würfel.

45:20.030 --> 45:22.050
Wie hoch ist die Wahrscheinlichkeit, die Zahl 1 zu bekommen?

45:22.770 --> 45:27.970
Ich kann aber auch anfangen, komplexere Ereignisse herzunehmen.

45:28.370 --> 45:30.190
Wie hoch ist die Wahrscheinlichkeit, dass ich, wenn ich zweimal

45:30.190 --> 45:32.570
würfel, zweimal die Zahl 5 bekomme?

45:33.190 --> 45:35.830
Wie hoch ist die Wahrscheinlichkeit, dass wenn ich dreimal würfel,

45:35.890 --> 45:39.050
beim ersten Mal die Zahl im Intervall 1 bis 3 liegen wird, beim

45:39.050 --> 45:42.190
zweiten Mal im Intervall 4 bis 6 und beim dritten Mal ist die Zahl

45:42.190 --> 45:42.870
eine 2?

45:45.010 --> 45:51.270
Omega sind die elementaren Ereignisse, F sind die richtigen

45:51.270 --> 45:53.590
Ereignisse, die ich betrachten möchte.

45:54.230 --> 46:00.790
Und diese F sind mathematisch gesehen eine Sigma-Algebra über den

46:00.790 --> 46:02.870
elementaren Ereignissen Omega.

46:04.290 --> 46:06.190
Was ist eine Sigma-Algebra?

46:06.570 --> 46:10.930
Eine Sigma-Algebra ist so definiert, dass wenn ich eine Menge Omega

46:10.930 --> 46:19.510
habe, dann ist F eine Sigma-Algebra, wenn fast alle einzelnen Elemente

46:19.510 --> 46:21.870
von Omega Teil von F sind.

46:22.150 --> 46:29.450
Wenn ich Teilmengen habe, oder andersrum, F ist ein Unterraum der

46:29.450 --> 46:30.950
Potenzmenge von Omega.

46:31.110 --> 46:35.210
Also wenn ich die Potenzmenge von Omega bilde, dann ist F davon ein

46:35.210 --> 46:35.650
Teilraum.

46:36.170 --> 46:42.790
Wenn A in F liegt, dann muss auch Potenzmenge weg A in F liegen.

46:43.370 --> 46:50.730
Wenn ich eine endliche Menge von Mengen habe, A1 bis AN, und die

46:50.730 --> 46:54.970
liegen alle in der Sigma-Algebra F, dann muss auch die Vereinigung

46:54.970 --> 46:58.270
über alle diese einzelnen Mengen wiederum in der Sigma-Algebra F

46:58.270 --> 46:58.530
liegen.

46:59.010 --> 47:04.990
Die leere Menge muss Teil von der Sigma-Algebra sein, und ich glaube,

47:05.110 --> 47:05.530
das war es.

47:07.490 --> 47:12.510
In der Regel fährt man ganz gut damit, wenn man F direkt als die

47:12.510 --> 47:15.290
Potenzmenge nimmt, über diese Menge Omega.

47:17.190 --> 47:21.550
Und P ist dann entsprechend die Abbildung, die auch von F in den

47:21.550 --> 47:24.630
Wertebereich 0 bis 1 abbildet.

47:26.470 --> 47:29.730
Jetzt kommt noch ein dritter Parameter hinzu, die Zeit.

47:30.650 --> 47:34.050
Erstmal formell gesehen eine Indexmenge, kriegt den Namen T, weil es

47:34.050 --> 47:34.830
halt die Zeit ist.

47:35.650 --> 47:38.650
Und das können entweder ganze Zahlen sein oder reelle Zahlen.

47:38.710 --> 47:41.350
Wenn ich ganze Zahlen habe, dann habe ich halt eine diskrete Zeit.

47:41.810 --> 47:45.230
Wenn ich reelle Zahlen habe, habe ich eine kontinuierliche Zeit.

47:45.950 --> 47:49.630
Wir bei uns in der Spracherkennung haben ja bei der Vorverarbeitung

47:49.630 --> 47:51.650
das Signal zeitdiskret gemacht.

47:52.250 --> 47:55.710
Dementsprechend haben wir hier auch einen diskreten stochastischen

47:55.710 --> 47:57.070
Prozess, der uns interessiert.

47:58.470 --> 48:06.670
Und so ein stochastischer Prozess X bildet halt ab von Omega nach Z.

48:08.590 --> 48:14.190
So ein Prozess X besteht erstmal aus ganz vielen XT, die über diese

48:14.190 --> 48:18.170
Indexmenge definiert sind und von Omega nach Z abbilden.

48:21.910 --> 48:24.930
Z ist wieder ein Raum mit einer zugehörigen Sigma-Algebra.

48:26.250 --> 48:29.510
Und die Abbildung so allgemein einer Zufallsvariable kann man dann

48:29.510 --> 48:32.730
über diese einzelnen XT's dadurch machen, indem man einfach sagt Omega

48:32.730 --> 48:40.270
Kreuz T bildet ab nach Z und das Ganze muss FZ messbar sein.

48:40.370 --> 48:45.350
Das ist wieder eine Definition, die zusagt, ob zwei Mengen miteinander

48:45.350 --> 48:47.550
in der Wahrscheinlichkeitstheorie letztendlich kompatibel sind.

48:49.690 --> 48:53.930
Ganz einfach gesprochen heißt das nichts anderes als, dass ich ein

48:53.930 --> 48:58.110
Ereignis nehme, dem gebe ich noch eine Zeit hinzu und dieses Ereignis

48:58.110 --> 49:02.750
zusammen mit der Zeit wird auf eine zugrunde liegende einfache

49:02.750 --> 49:07.130
Wahrscheinlichkeitsvariable abgebildet, sodass dann wieder eine

49:07.130 --> 49:09.030
Wahrscheinlichkeit herauskommt.

49:12.870 --> 49:17.430
Wenn ich jetzt solche stochastischen Prozesse beschreiben will, dann

49:17.430 --> 49:20.850
gibt es unter anderem das Modell der Markov-Kette, mit der ich in der

49:20.850 --> 49:23.990
Lage bin, so stochastische Prozesse beschreiben zu können.

49:25.110 --> 49:28.870
Wie gesagt, unsere Vorverarbeitung ist zeitdiskret, dementsprechend

49:28.870 --> 49:32.370
interessieren uns nur zeitdiskrete stochastische Prozesse und

49:32.370 --> 49:35.710
dementsprechend interessieren uns auch nur zeitdiskrete Markov-Ketten.

49:36.510 --> 49:40.270
Damit ist t eine natürliche Zahl und in der Regel größer gleich 1.

49:40.410 --> 49:43.170
Aus irgendeinem Grund arbeitet man nicht mit Zeit t gleich 0, sondern

49:43.170 --> 49:45.530
man arbeitet mit Zeit t gleich 1, dann geht es los.

49:47.010 --> 49:50.350
Und die Idee hinter Markov-Ketten ist, dass man Zustände hat.

49:50.650 --> 49:54.430
Man befindet sich zu einem bestimmten Zeitpunkt in einem Zustand.

49:55.710 --> 50:01.390
Das ist mein Begrenzungsmengen an Zuständen.

50:01.510 --> 50:05.910
Für jeden Zustand habe ich eine eigene Zufallsvariable x und xt ist

50:05.910 --> 50:09.710
dann eben gerade diese Zufallsvariable, die zu dem Zustand gehört, zu

50:09.710 --> 50:11.250
dem ich mich in einem Zeitpunkt befinde.

50:12.290 --> 50:16.910
Und dann, von Zeitpunkt zu Zeitpunkt, bleibe ich entweder in dem

50:16.910 --> 50:20.470
Zustand oder ich wechsel in einen anderen Zustand mit einer bestimmten

50:20.470 --> 50:27.790
Wahrscheinlichkeit und bin dann wieder in einem anderen Zustand.

50:28.290 --> 50:32.610
Und von dem wechsle ich dann wieder zu einem Zeitpunkt entweder in

50:32.610 --> 50:35.130
einen anderen Zustand oder befinde mich in meinem Zustand.

50:35.590 --> 50:39.490
Und als Ergebnis dieses Markov-Kettenprozesses bekomme ich so eine

50:39.490 --> 50:42.710
Abfolge von Zuständen, die ich über die Zeit hinweg durchlaufe.

50:42.790 --> 50:45.430
Ich weiß immer zu welchem Zeitpunkt befinde ich mich in welchem

50:45.430 --> 50:45.910
Zustand.

50:46.370 --> 50:49.810
Ich durchlaufe diese Zustände über die Zeit hinweg in einer bestimmten

50:49.810 --> 50:53.070
Reihenfolge und das ist sozusagen die Beobachtung, die ich sehe.

50:54.270 --> 50:57.270
Jetzt kann man wieder endlichen oder unendlichen Zustandsraum haben.

50:57.390 --> 51:01.170
Für uns in der Spracherkennung sind nur endliche Zustandsräume

51:01.170 --> 51:01.570
interessant.

51:01.810 --> 51:04.770
Das heißt, ich habe eine endliche Menge von Zuständen, zwischen denen

51:04.770 --> 51:08.290
ich hin und her wechsle über die Zeit hinweg und die ich beobachte.

51:11.450 --> 51:15.930
Jetzt kann man diese Markov-Ketten noch weiter einschränken und kommt

51:15.930 --> 51:18.110
dann zu Markov-Ketten einer bestimmten Ordnung.

51:19.450 --> 51:23.150
Das hängt alles damit zusammen mit der Wahrscheinlichkeit, wenn ich

51:23.150 --> 51:25.710
mich zu einem bestimmten Zeitpunkt in einem Zustand befinde.

51:26.490 --> 51:29.730
Wie sieht die Wahrscheinlichkeit jetzt aus, in einen anderen Zustand

51:29.730 --> 51:30.730
zu wechseln?

51:32.490 --> 51:36.490
Prinzipiell könnte der erstmal im allgemeinsten Fall davon abhängen,

51:36.550 --> 51:39.030
von allen Zuständen, die ich in der Vergangenheit besucht habe.

51:39.590 --> 51:44.010
Das heißt, ich weiß zu einem bestimmten Zeitpunkt T, bin ich bisher

51:44.010 --> 51:53.310
die Zustände S zum Zustand 1 bis S zum Zustand T-1 durchlaufen.

51:53.510 --> 51:57.110
Jetzt befinde ich mich im Zustand im Zeitpunkt T und die

51:57.110 --> 52:00.670
Wahrscheinlichkeit dafür, in alle anderen Zustände überzugehen, die

52:00.670 --> 52:04.230
hängen davon ab, welche Zustände ich alle in der Vergangenheit

52:04.230 --> 52:05.570
durchlaufen habe.

52:06.810 --> 52:10.450
Und diese Historie, die schränke ich jetzt ein.

52:11.450 --> 52:15.830
Die Wahrscheinlichkeit, jetzt also in einen neuen Zustand zu gehen im

52:15.830 --> 52:20.010
nächsten Zeitpunkt, die hängt nicht dann mehr ab von der gesamten

52:20.010 --> 52:22.730
Historie, alle Zustände, die ich in der Vergangenheit durchlaufen

52:22.730 --> 52:26.650
habe, sondern ich schaue nur noch N Zustände in die Vergangenheit.

52:26.750 --> 52:30.030
Ich schaue mir nur noch die letzten N Zeitschritte an und davon

52:30.030 --> 52:33.590
abhängig mache ich dann die Wahrscheinlichkeiten, in andere Zustände

52:33.590 --> 52:34.350
überzugehen.

52:36.130 --> 52:39.730
Und für die Spracherkennung und für viele Anwendungen im Allgemeinen

52:39.730 --> 52:43.590
ist insbesondere interessant Markov-Ketten erster Ordnung.

52:44.070 --> 52:47.990
Sprich, die Wahrscheinlichkeiten dafür, in einen anderen Zustand zu

52:47.990 --> 52:51.690
gehen, hängen nur noch davon ab, in welchem Zustand ich mich befinde.

52:52.890 --> 52:56.390
Und wenn ich das mache, kann ich so eine Markov-Kette erster Ordnung

52:56.390 --> 52:59.530
mit relativ wenig Parametern beschreiben.

53:01.870 --> 53:04.590
Was ich erstmal brauche, sind Anfangswahrscheinlichkeiten.

53:04.930 --> 53:07.130
Ich brauche für jeden Zustand eine Wahrscheinlichkeit.

53:07.550 --> 53:09.990
Wie hoch ist die Wahrscheinlichkeit, dass ich mich überhaupt zum

53:09.990 --> 53:12.870
Zeitpunkt 1 in diesem Zustand befinde.

53:13.290 --> 53:15.770
Das ist ein Vektor von Zahlen.

53:15.910 --> 53:17.390
Jede Zahl liegt zwischen 0 und 1.

53:17.390 --> 53:19.550
Der Vektor muss sich zu 1 aufaddieren.

53:19.970 --> 53:21.550
Das ist dann eine Wahrscheinlichkeitsverteilung.

53:22.370 --> 53:25.090
Und wenn ich halt da so viele Zahlen, wie ich habe, wie ich Zustände

53:25.090 --> 53:28.530
habe, dann ist das Ganze dann eben die

53:30.090 --> 53:30.610
Anfangswahrscheinlichkeitsverteilung.

53:33.030 --> 53:36.890
Und dann, für jeden Zustand, brauche ich jetzt noch die

53:36.890 --> 53:40.370
Wahrscheinlichkeit, wie hoch ist die Wahrscheinlichkeit, in jeden

53:40.370 --> 53:43.930
anderen möglichen Zustand inklusive mir selber überzugehen.

53:44.150 --> 53:46.750
Das heißt, für jeden Zustand habe ich einen Vektor von solchen

53:46.750 --> 53:47.590
Wahrscheinlichkeiten.

53:48.350 --> 53:52.330
Und wenn ich diese Vektoren zusammentue, dann komme ich zu einer

53:52.330 --> 53:56.790
Matrix, die mir jemals sagt, die Wahrscheinlichkeit, im Zustand 1 zu

53:56.790 --> 54:00.390
sein und wieder in den Zustand 1 überzugehen, ist eben

54:01.270 --> 54:03.150
Wahrscheinlichkeit p1, a1.

54:03.430 --> 54:07.290
Und die Wahrscheinlichkeit, im Zustand m zu sein und im Zustand m

54:07.290 --> 54:09.490
wieder überzugehen, ist pm von m.

54:10.230 --> 54:13.510
Und da das nicht mehr von der Vergangenheit abhängt, hängt es jetzt

54:13.510 --> 54:16.350
nur noch ab von, in welchem Zustand bin ich im Augenblick und in

54:16.350 --> 54:17.810
welchen Zustand möchte ich übergehen.

54:19.090 --> 54:22.150
Das heißt, von der Markov-Kette erste Ordnung wird komplett

54:22.150 --> 54:25.870
beschrieben durch diese Matrix an Übergangswahrscheinlichkeiten und

54:25.870 --> 54:29.070
durch diesen initialen Vektor von Anfangswahrscheinlichkeiten.

54:32.900 --> 54:38.760
Das einzige Unschöne ist, dass man in dieser Definition hier noch den

54:38.760 --> 54:39.700
Parameter t hat.

54:40.640 --> 54:45.420
Das heißt, für jeden Zeitpunkt hat man eine eigene Matrix.

54:45.900 --> 54:49.100
Das heißt, theoretisch könnten diese Wahrscheinlichkeiten sich über

54:49.100 --> 54:51.400
die Zeit hinweg noch ändern.

54:52.780 --> 54:55.840
Und das ist einem auch zu kompliziert und da schränkt man auch

54:55.840 --> 54:59.600
entsprechend ein und kommt dann zu sogenannten homogenen Markov

54:59.600 --> 54:59.840
-Ketten.

55:01.280 --> 55:07.100
Wenn man jetzt davon ausgeht, dass diese Zeit keinen Einfluss mehr hat

55:07.100 --> 55:10.720
auf die Übergangswahrscheinlichkeiten, die also völlig unabhängig sind

55:10.720 --> 55:14.020
für der Zeit und immer gleich sind für alle Zeitschritte t, dann nennt

55:14.020 --> 55:19.800
man das Ganze eine homogene Markov-Kette und wird dann vollständig

55:19.800 --> 55:22.440
durch eine einzige Matrix und durch einen einzelnen Vektor

55:22.440 --> 55:23.880
beschrieben.

55:25.220 --> 55:28.620
Und mit solchen homogenen Markov-Ketten in erster Ordnung lässt sich

55:28.620 --> 55:33.880
relativ gut arbeiten und es stellt sich heraus, dass für die

55:33.880 --> 55:37.520
automatische Spracherkennung solche Ketten ganz interessant sind.

55:40.720 --> 55:47.960
Es gibt auch einfachere Beispiele, für was sowas interessant sein

55:47.960 --> 55:48.280
könnte.

55:48.780 --> 55:52.120
Zum Beispiel kann man damit relativ schön generative Modelle machen,

55:52.280 --> 55:57.120
die einem zufällige Namen oder zufällige Wörter generieren.

55:57.380 --> 55:58.940
Das hier zum Beispiel ist so eine Webseite.

55:59.080 --> 56:01.860
Früher gab es schönere Webseiten, aber in letzter Zeit sind sie ein

56:01.860 --> 56:02.520
bisschen schlechter geworden.

56:03.720 --> 56:07.340
Was man da gemacht hat, ist, dass man zum Beispiel sich die Menge

56:07.340 --> 56:12.260
aller möglichen Wörter, die es gibt, hernimmt und dann ausrechnet, wie

56:12.260 --> 56:14.180
hoch ist denn die Wahrscheinlichkeit, dass auf einem bestimmten

56:14.180 --> 56:19.000
Buchstabe ein anderer Buchstabe folgt, durch simples Auszählen.

56:19.660 --> 56:25.520
Was man jetzt machen kann, ist, dass man zum Beispiel sagt, ich fange

56:25.520 --> 56:35.860
mit einem ersten Buchstaben an, C, und möchte mir Wörter generieren

56:35.860 --> 56:40.460
lassen, die mindestens vier Zeichen lang sind.

56:43.550 --> 56:48.230
Und dann kann man anfangen, sich einfache Wörter generieren zu lassen,

56:48.230 --> 56:50.110
indem man einfach anfängt zu würfeln.

56:50.830 --> 56:56.150
Man sitzt also im Zustand C, würfelt eine Wahrscheinlichkeit aus,

56:56.370 --> 56:59.070
gemäß der Wahrscheinlichkeitsverteilung, die einem sagt, okay, vom

56:59.070 --> 57:01.590
Buchstaben C kann ich mit der und der Wahrscheinlichkeit in alle

57:01.590 --> 57:03.050
anderen möglichen Buchstaben übergehen.

57:03.650 --> 57:06.410
Gemäß dieser Wahrscheinlichkeitsverteilung würfelt man, wählt dann den

57:06.410 --> 57:08.950
nächsten Zustand, geht in den über und so weiter und so fort.

57:09.230 --> 57:10.410
Generiert einfach Ausgaben.

57:11.030 --> 57:16.270
Und dann kommt sowas bei raus, das sind Wörter, die müssen nicht

57:16.270 --> 57:17.930
existieren, die können existieren.

57:18.410 --> 57:24.390
Also sowas wie Chantage oder Kohosh oder sowas zum Mostly gibt es

57:24.390 --> 57:29.830
vermutlich nicht, aber so Wörter wie Circulating zum Beispiel, sowas

57:29.830 --> 57:30.410
existiert.

57:31.570 --> 57:36.810
Und man kann damit auf die Art und Weise Wörter generieren, die im

57:36.810 --> 57:40.230
Allgemeinen auch Nonsens sein können, die aber, wenn wir sie sehen und

57:40.230 --> 57:44.550
von unserem Gefühl nach durchaus normale Wörter sein können.

57:44.830 --> 57:48.390
Also so sehen Wörter im Allgemeinen aus, unabhängig davon, ob ich sie

57:48.390 --> 57:49.290
jetzt kenne oder nicht.

57:50.230 --> 57:52.250
Und das kann man auch mit Namen machen.

57:56.420 --> 57:58.880
Wenn man das auf Namen loslaufen lässt, da habe ich leider kein

57:58.880 --> 58:01.740
schönes interaktives Beispiel gefunden, da gibt es zwar jede Menge

58:01.740 --> 58:04.560
Skripte, die man sich runterladen kann oder Klassen.

58:05.040 --> 58:08.020
Das ist jetzt hier ein Beispiel, da hat das auch einfach mal einer

58:08.020 --> 58:11.680
loslaufen lassen und sich halt Namen generieren lassen.

58:11.680 --> 58:14.480
Man hat sowas auch mal auf Namen trainiert, großen Mengen von

58:14.480 --> 58:19.740
Vornamen, lässt sowas dann mal mit unterschiedlichen Anfangsbuchstaben

58:19.740 --> 58:22.720
oder einfach allgemein von Null an mit einer Anfangswahrscheinlichkeit

58:22.720 --> 58:29.620
loslaufen und dann kommen solche Sachen heraus wie Pantelope, Jacky

58:29.620 --> 58:31.660
Gar, Ponycat usw.

58:32.300 --> 58:36.360
Das klingt alles ähnlich wie Namen, das könnten durchaus Namen sein,

58:36.360 --> 58:38.960
aber ich glaube von denen, die hier rausgekommen sind, ist keiner

58:38.960 --> 58:43.860
dabei, den es tatsächlich gibt.

58:44.360 --> 58:47.520
Aber auf die Art und Weise hat man schon mal ein generatives Modell,

58:47.680 --> 58:52.880
das anscheinend gar nicht so schlecht für natürliche Sprache geeignet

58:52.880 --> 58:53.080
ist.

58:55.120 --> 58:59.640
Man könnte sich auch andere Sachen vorstellen, dass man z.B.

58:59.820 --> 59:03.340
ein einfaches Wettermodell macht, in dem man sagt, es gibt zwei

59:03.340 --> 59:11.340
Zustände, sonnig und regnet, oder bewölkt, hat drei Zustände, sonnig,

59:11.360 --> 59:16.140
regnerisch, bewölkt, hat dann Wahrscheinlichkeiten dafür, wenn es sich

59:16.140 --> 59:19.660
bewölkt ist, gibt es eine Wahrscheinlichkeit dafür, sonnig zu gehen,

59:19.780 --> 59:23.100
regnerisch oder bewölkt zu bleiben und so macht man das für alle.

59:23.600 --> 59:26.940
Und dann kann man sich hergehen und anfangen Fragen zu stellen.

59:27.160 --> 59:30.540
Man kann also erstmal generieren, vom aktuellen Zustand kann man

59:30.540 --> 59:33.140
einfach neue Zustände generieren.

59:33.640 --> 59:36.680
Man kann aber auch anfangen Hypothesen durchzurechnen.

59:36.900 --> 59:39.880
Also ich weiß, heute ist es sonnig, wie hoch ist die

59:39.880 --> 59:43.020
Wahrscheinlichkeit, dass es dann die nächsten Tage sonnig, sonnig ist

59:43.020 --> 59:43.960
und danach regnerisch.

59:45.160 --> 59:48.300
Im Vergleich dazu, wie sieht es aus, dass es die nächsten Tage

59:48.300 --> 59:50.320
bewölkt, bewölkt und sonnig ist.

59:51.720 --> 59:52.780
Und dann kann man z.B.

59:52.900 --> 59:57.040
alle Möglichkeiten durchrechnen, die in drei Tagen im Zustand sonnig

59:57.040 --> 01:00:00.280
enden und die in drei Tagen im Zustand regnerisch enden und die in

01:00:00.280 --> 01:00:02.640
drei Tagen im Zustand bewölkt enden.

01:00:03.080 --> 01:00:06.020
Und dann kann man Wahrscheinlichkeiten dafür angeben, wie das Wetter

01:00:06.020 --> 01:00:08.500
in drei Tagen wohl aussehen wird, gemäß diesem Modell.

01:00:08.720 --> 01:00:11.280
Das ist natürlich ein sehr einfaches Modell, moderne meteorologische

01:00:11.280 --> 01:00:16.600
Modelle arbeiten ein bisschen komplizierter und genauer.

01:00:16.980 --> 01:00:20.780
Aber auf die Art und Weise kann man dann anfangen, Vorhersagen zu

01:00:20.780 --> 01:00:22.420
treffen z.B.

01:00:22.940 --> 01:00:27.820
oder man kann Wahrscheinlichkeiten für bestimmte Sequenzen bewerten.

01:00:28.580 --> 01:00:29.280
Man kann z.B.

01:00:29.480 --> 01:00:33.180
auch angenommen, ich habe irgendeine Buchstabenfolge und ich habe ein

01:00:33.180 --> 01:00:38.040
Modell trainiert, das auf Namen trainiert wurde, dann kann man z.B.

01:00:38.220 --> 01:00:41.420
die Wahrscheinlichkeit dafür berechnen, ob das jetzt ein Name ist oder

01:00:41.420 --> 01:00:41.720
nicht.

01:00:42.580 --> 01:00:44.700
Die Wahrscheinlichkeit dafür, dass es ein Name ist, sei die

01:00:44.700 --> 01:00:48.400
Wahrscheinlichkeit, dass mein Markov-Modell, das auf Namen trainiert

01:00:48.400 --> 01:00:50.800
wurde, genau diese Beobachtung hervorgenommen hat.

01:00:51.120 --> 01:00:51.820
Und dann kann man z.B.

01:00:51.960 --> 01:00:54.860
einen Schwellwert anlegen und sagen, wenn es über einen bestimmten

01:00:54.860 --> 01:00:57.980
Schwellwert ist, ist es Name und ansonsten klassifiziere ich es eben

01:00:57.980 --> 01:00:59.720
nicht als Name.

01:01:04.410 --> 01:01:07.350
Das ist ein sehr schönes Modell und es ist relativ einfach

01:01:07.350 --> 01:01:09.210
mitzurechnen.

01:01:09.510 --> 01:01:15.390
Nur leider ist es so, dass wir sehr häufig die zugrunde liegenden

01:01:15.390 --> 01:01:16.990
Zustände gar nicht kennen.

01:01:17.930 --> 01:01:20.890
Sondern häufig machen wir irgendwelche Beobachtungen.

01:01:21.630 --> 01:01:25.270
Wir wissen, dem liegt ein zeitlicher stochastischer Prozess zugrunde,

01:01:25.710 --> 01:01:27.930
der hat bestimmte Menge von Zuständen.

01:01:28.410 --> 01:01:32.550
Aber beim Draufgucken auf die Beobachtung wissen wir noch nicht

01:01:32.550 --> 01:01:34.490
automatisch, welcher Zustand das war.

01:01:35.510 --> 01:01:37.130
Bei der Spracherkennung wäre das ja schön.

01:01:38.110 --> 01:01:40.370
Beobachten tun wir immer so Merkmalsvektoren.

01:01:41.330 --> 01:01:44.090
Und angenommen, wir könnten auf so einen Merkmalsvektor draufgucken

01:01:44.090 --> 01:01:45.690
und wüssten, welches Phonem das ist.

01:01:46.410 --> 01:01:50.850
Dann hätten wir die Spracherkennung ja schon zum großen Teil gelöst.

01:01:51.590 --> 01:01:54.710
Leider ist es aber so, dass wir zwar den Merkmalsvektor sehen, aber

01:01:54.710 --> 01:01:56.570
wir wissen nicht zu welchem Phonem es ist.

01:01:57.250 --> 01:02:00.210
Wir wissen, die menschliche Sprache ist eine Abfolge von Phonemen.

01:02:00.410 --> 01:02:06.350
Da wurden Phoneme in der Reihenfolge produziert und bei jedem Phonem

01:02:06.350 --> 01:02:16.790
wurde eine Menge von Merkmalsvektoren extrahiert, äh Phoneme.

01:02:16.790 --> 01:02:19.330
Und hier sehen wir diese Folge von Merkmalsvektoren und wir gucken

01:02:19.330 --> 01:02:23.270
drauf und wissen, jeder Merkmalsvektor gehört irgendwie zu einem

01:02:23.270 --> 01:02:23.770
Phonem.

01:02:24.410 --> 01:02:26.410
Und diese Phoneme wurden in Sequenz gesprochen.

01:02:27.250 --> 01:02:29.910
Aber wir wissen leider nicht die genaue Zuordnung, welcher

01:02:29.910 --> 01:02:32.170
Merkmalsvektor gehört jetzt zu welchem Phonem.

01:02:32.630 --> 01:02:37.150
Diese Menge der Zustände, die ist uns verborgen.

01:02:38.310 --> 01:02:42.930
Und wenn man damit umgeht, kommt man zu den sogenannten Hin-Markov

01:02:42.930 --> 01:02:43.310
-Modellen.

01:02:46.130 --> 01:02:50.490
Bei Hin-Markov-Modellen ist es so, dass man jetzt diesen zweistufigen

01:02:50.490 --> 01:02:51.150
Prozess hat.

01:02:51.670 --> 01:02:54.910
Es gibt Zustände, wie bei einer Markov-Kette kann man zwischen den

01:02:54.910 --> 01:02:58.990
Zuständen hin und her wechseln, aber wir sehen den Zustand nicht.

01:02:59.230 --> 01:03:02.790
Das Einzige, was wir sehen, ist irgendetwas, was der Zustand emittiert

01:03:02.790 --> 01:03:03.030
hat.

01:03:03.830 --> 01:03:07.910
Und das, was der Zustand emittiert, das emittiert er wieder gemäß

01:03:07.910 --> 01:03:09.510
einer Wahrscheinlichkeitsverteilung.

01:03:10.270 --> 01:03:13.030
Das ist wieder ein zweiter stochastischer Prozess, deswegen sagt man

01:03:13.030 --> 01:03:15.910
auch, dass Hin-Markov-Modelle einen doppelten stochastischen Prozess

01:03:15.910 --> 01:03:18.030
modellieren.

01:03:18.630 --> 01:03:23.290
Wenn man sich das veranschaulichen will, kann man das relativ gut mit

01:03:23.290 --> 01:03:24.210
Münzwürfen machen.

01:03:26.810 --> 01:03:31.870
Einfacher Münzwurf kann relativ leicht als stochastischer Prozess

01:03:31.870 --> 01:03:32.530
modelliert werden.

01:03:32.690 --> 01:03:34.530
Also ich will Kopf oder Zahl bei einer Münze haben.

01:03:34.970 --> 01:03:37.750
Ich werfe die Münze und sehe sofort das Ergebnis.

01:03:38.010 --> 01:03:39.390
Es ist entweder Kopf oder es ist Zahl.

01:03:39.630 --> 01:03:43.050
Dann werfe ich die Münze und werfe und jedes Mal notiere ich mir das

01:03:43.050 --> 01:03:43.490
Ergebnis.

01:03:45.330 --> 01:03:48.050
Und das kann ich als relativ einfachen stochastischen Prozess

01:03:48.050 --> 01:03:49.450
hinschreiben.

01:03:51.070 --> 01:03:54.370
Ich habe Zahl und ich habe Kopf.

01:03:54.970 --> 01:03:56.930
Und wenn das eine ideale Münze ist,

01:04:00.700 --> 01:04:03.660
dann bekomme ich mit der Wahrscheinlichkeit 0,5 beim nächsten Wurf

01:04:03.660 --> 01:04:04.460
wieder Zahl.

01:04:05.380 --> 01:04:11.340
Mit der Wahrscheinlichkeit 0,5 gehe ich über zu Kopf und wenn ich bei

01:04:11.340 --> 01:04:14.660
Kopf bin, dann gehe ich mit einer Wahrscheinlichkeit von 0,5 wieder

01:04:14.660 --> 01:04:21.060
zurück zur Zahl oder bleibe mit einer Wahrscheinlichkeit von 0,5 drin.

01:04:21.720 --> 01:04:23.340
Das ist so etwas wie eine ideale Münze.

01:04:24.000 --> 01:04:25.940
Jetzt kann es sein, dass die Münze gezinkt ist.

01:04:26.760 --> 01:04:29.420
Irgendwer hat eine Münze manipuliert, hat irgendwo Blei reingelegt

01:04:29.420 --> 01:04:36.760
oder so, das dafür sorgt, dass zum Beispiel wenn ich in Zahl bin, die

01:04:36.760 --> 01:04:44.720
Münze eher auf Kopf umschwenkt und wenn ich in Kopf bin, dann bleibt

01:04:44.720 --> 01:04:49.840
die zum Beispiel eher in Kopf drin.

01:04:50.380 --> 01:04:54.720
Dann hätte ich da eine gezinkte Münze und kann aber trotzdem das Ganze

01:04:54.720 --> 01:04:57.360
immer noch mit einem Mark-Off-Prozess modellieren, weil ich jedes Mal

01:04:57.360 --> 01:05:01.320
sehe, was ist denn das Ergebnis des Münzwurfs.

01:05:05.000 --> 01:05:12.240
Jetzt nehme ich zwei Münzen her und sage, die Münzen sind wieder nicht

01:05:12.240 --> 01:05:14.620
ideal, sondern die Münzen sind gezinkt.

01:05:15.060 --> 01:05:16.540
Und ich mache einen kleinen Vorhang.

01:05:18.280 --> 01:05:22.160
Und was jetzt der Münzwerfer macht, hinter dem Vorhang entscheidet er

01:05:22.160 --> 01:05:26.420
sich für eine von beiden Münzen, nimmt die Münze her, wirft die Münze

01:05:26.420 --> 01:05:29.420
und ruft mir dann zu, es war Kopf oder es war Zahl.

01:05:29.980 --> 01:05:33.040
Und wenn er sie hingelegt hat, entscheidet er sich wieder, entweder

01:05:33.040 --> 01:05:35.900
nehme ich die Münze nochmal oder ich wechsle zu der anderen Münze

01:05:35.900 --> 01:05:39.980
über, wirf die und ruft mir wieder zu, Kopf oder Zahl.

01:05:41.180 --> 01:05:46.080
Was ich jetzt beobachten kann, ist eben nur diese Reihenfolge der

01:05:46.080 --> 01:05:49.780
Ergebnisse der Münzwürfe, aber ich weiß nicht mehr, mit welcher Münze

01:05:50.360 --> 01:05:53.220
diese Münzwürfe durchgeführt wurden.

01:05:58.220 --> 01:05:59.420
Und sowas, das ist jetzt das Ergebnis des Münzwurfs.

01:05:59.440 --> 01:06:02.720
Kann man dann entsprechend mit Hilfe eines Hidden-Markov-Modells

01:06:02.720 --> 01:06:03.080
machen.

01:06:03.740 --> 01:06:07.780
Der Zustand ist jetzt nicht mehr gleich dem Ergebnis.

01:06:08.080 --> 01:06:11.740
Bei der einfachen Münze war der Zustand noch gleich des Ergebnisses,

01:06:11.920 --> 01:06:16.460
Kopf oder Zahl, sondern der Zustand wird jetzt modelliert, nehme ich

01:06:16.460 --> 01:06:18.300
Münze 1 oder nehme ich Münze 2.

01:06:21.300 --> 01:06:25.220
Und der Münzwerfer, der dahinter seinem Vorhang agiert, der hat eine

01:06:25.220 --> 01:06:30.200
bestimmte Präferenz, jeweils in die eine oder in die andere Münze

01:06:31.620 --> 01:06:32.320
überzugehen.

01:06:38.430 --> 01:06:49.230
Nennen wir mal P von Wechseln und das Ganze für Münze 1.

01:06:50.030 --> 01:06:57.710
Und hier dementsprechend hat er eine Wahrscheinlichkeit P von Wechseln

01:06:57.710 --> 01:06:58.510
für Münze 2.

01:06:59.810 --> 01:07:05.370
Und das hier ist jetzt die Wahrscheinlichkeit P von Wechseln für Münze

01:07:05.370 --> 01:07:05.690
2.

01:07:07.710 --> 01:07:12.470
Auf diese Art und Weise kann ich jetzt schon mal modellieren, bin ich

01:07:12.470 --> 01:07:18.870
hin und her gesprungen und dann kann ich jeder einzelnen Münze eine

01:07:18.870 --> 01:07:24.530
Ausgabe, eine Emissionszuweisung, die macht Kopf mit einer bestimmten

01:07:24.530 --> 01:07:28.490
Wahrscheinlichkeit und Zahl mit einer bestimmten Wahrscheinlichkeit.

01:07:29.170 --> 01:07:35.690
Und die hier macht Kopf mit einer anderen Wahrscheinlichkeit und Zahl

01:07:35.690 --> 01:07:36.970
mit einer anderen Wahrscheinlichkeit.

01:07:44.250 --> 01:07:48.310
Das wäre zum Beispiel so ein einfaches Mark-Off-Modell, dass das

01:07:48.310 --> 01:07:49.230
bestimmen würde.

01:07:53.090 --> 01:07:57.270
Das hier soll im Prinzip dazu hinführen, was man machen will.

01:08:07.870 --> 01:08:10.310
Also das ist noch für die einfache Münze.

01:08:11.330 --> 01:08:14.850
Wenn ich jetzt zwei gezinkte Münzen habe, dann habe ich genau das

01:08:14.850 --> 01:08:15.130
Bild.

01:08:15.750 --> 01:08:18.470
Ich habe meine beiden Münzen, die Übergangswahrscheinlichkeiten und

01:08:18.470 --> 01:08:22.570
für jede Münze habe ich eine Wahrscheinlichkeit, mit der sie Kopf oder

01:08:22.570 --> 01:08:23.430
Zahl ausgibt.

01:08:26.490 --> 01:08:32.030
Jetzt kommt als Komplikation noch hinzu, angenommen ich weiß nicht,

01:08:32.190 --> 01:08:34.330
wie viele Münzen der hinter dem Vorhang hat.

01:08:36.230 --> 01:08:39.370
Er hat mehrere Münzen, die gezinkt sind, zwischen denen wechselt er

01:08:39.370 --> 01:08:44.450
hin und her und dann macht er einen Münzwurf und gibt das Ergebnis

01:08:44.450 --> 01:08:44.730
mit.

01:08:45.170 --> 01:08:48.110
Ich könnte auch annehmen, dass er drei gezinkte Münzen hat.

01:08:50.490 --> 01:08:52.330
Dann würde das Ganze so aussehen.

01:08:52.610 --> 01:08:54.770
Dann habe ich dann drei Zustände für jede Münze.

01:08:54.950 --> 01:08:59.910
Einen, ich habe alle Übergangswahrscheinlichkeiten und ich habe für

01:08:59.910 --> 01:09:04.450
jede der drei Münzen eine Emissionswahrscheinlichkeit dafür, ob sie

01:09:04.450 --> 01:09:06.550
Kopf oder Zahl gegeben hat.

01:09:08.070 --> 01:09:09.690
Welches Modell ist angemessen?

01:09:10.350 --> 01:09:16.230
Idealerweise natürlich das Modell, das so viele Zustände hat, wie es

01:09:16.230 --> 01:09:16.790
Münzen gibt.

01:09:17.670 --> 01:09:20.990
Wenn ich jetzt nicht weiß, wie viele Münzen es sind, was mache ich

01:09:20.990 --> 01:09:21.230
dann?

01:09:21.730 --> 01:09:25.550
Wenn der drei Münzen hat und ich nehme nur zwei Zustände, dann habe

01:09:25.550 --> 01:09:32.930
ich ein Modell, das nicht mächtig genug ist, um diesen Prozess wie er

01:09:32.930 --> 01:09:34.790
tatsächlich passiert modellieren zu können.

01:09:35.870 --> 01:09:39.450
Nehme ich ein Modell mit drei Münzen, aber der hat nur zwei Münzen,

01:09:40.390 --> 01:09:41.250
dann habe ich kein Problem.

01:09:42.170 --> 01:09:45.070
Weil alles das, was das Zweiermodell machen kann, das kann das

01:09:45.070 --> 01:09:46.090
Dreiermodell auch machen.

01:09:46.570 --> 01:09:48.050
Da bräuchte ich zum Beispiel nur lernen, dass die

01:09:48.050 --> 01:09:50.790
Übergangswahrscheinlichkeiten von eins nach drei und von zwei nach

01:09:50.790 --> 01:09:52.330
drei jeweils Null sind.

01:09:53.750 --> 01:09:56.630
Der einzige Nachteil, den das hat, ist, dass ich sehr viele mehr

01:09:56.630 --> 01:09:58.590
Parameter als beim Zweiermodell habe.

01:09:58.910 --> 01:10:02.510
Um die Parameter robust schätzen zu können, brauche ich deutlich mehr

01:10:02.510 --> 01:10:05.650
Trainingsdaten als beim Zweiermodell.

01:10:06.210 --> 01:10:10.470
Aber wenn ich da die Anzahl der Münzen überschätze, passiert nichts

01:10:10.470 --> 01:10:13.010
Schlimmes, ich habe nur mehr zu rechnen und mehr Parameter zu

01:10:13.010 --> 01:10:13.750
trainieren.

01:10:16.430 --> 01:10:17.850
Das ist das, was das ausdrückt.

01:10:19.210 --> 01:10:21.630
Die Anzahl der Parameter steigt, je mehr Parameter ich benutze,

01:10:21.630 --> 01:10:22.730
quadratisch an.

01:10:23.570 --> 01:10:28.890
Ist damit am mächtigsten, kann alles das, was die unteren Modelle auch

01:10:28.890 --> 01:10:29.150
können.

01:10:30.050 --> 01:10:32.670
Wenn natürlich wenigstens vier Münzen verwendet wurden, ist das Modell

01:10:32.670 --> 01:10:35.170
wiederum nicht mächtig genug.

01:10:37.110 --> 01:10:40.430
Um sich jetzt zu überlegen, was so ein Hindenmarkoff-Modell alles

01:10:40.430 --> 01:10:44.550
machen kann, verwendet man häufig das Urne-Ball-Modell.

01:10:44.850 --> 01:10:48.430
Auf die Art und Weise kann man so ein Hindenmarkoff-Modell recht gut

01:10:48.430 --> 01:10:49.390
in den Griff bekommen.

01:10:50.210 --> 01:10:55.910
Man nimmt einfach pro Zustand eine Urne an und in jeder Urne sind

01:10:55.910 --> 01:11:01.290
Bälle verschiedener Farben in unterschiedlichen Mengen miteinander

01:11:01.290 --> 01:11:01.850
vermischt.

01:11:02.790 --> 01:11:07.230
Was man jetzt macht ist, man wählt sich eine Urne aus, zieht einen

01:11:07.230 --> 01:11:10.130
Ball, guckt sich an, welche Farbe der hat, legt den Ball wieder

01:11:10.130 --> 01:11:10.550
zurück.

01:11:11.590 --> 01:11:18.750
Dann wählt man eine neue Urne, basierend darauf was man aktuell für

01:11:18.750 --> 01:11:20.790
eine Urne hat.

01:11:22.610 --> 01:11:27.930
Das Wählen der neuen Urne ist auch ein Zufallsprozess, der zu der Urne

01:11:27.930 --> 01:11:28.270
gehört.

01:11:28.530 --> 01:11:31.790
Man könnte sich das auch so vorstellen, dass man eine Urne hat, es

01:11:31.790 --> 01:11:34.810
gibt auch diese Essig-Öl-Fläschchen, dass man so eine Urne hat mit

01:11:34.810 --> 01:11:36.050
zwei Hohlräumen.

01:11:36.190 --> 01:11:40.490
In dem einen Hohlraum zieht man raus Bälle unterschiedlicher Farbe und

01:11:40.490 --> 01:11:44.930
in dem anderen Hohlraum zieht man raus Bälle mit Zahlen von 1 bis 3

01:11:44.930 --> 01:11:47.510
und je nachdem, welchen Ball man rauszieht, welche Zahl da drauf

01:11:47.510 --> 01:11:49.990
steht, zu der Urne, wechselt man als nächstes.

01:11:51.890 --> 01:11:55.550
Das ist so das Urne-Ball-Modell, mit dem man sich die Funktionsweise

01:11:55.550 --> 01:11:58.430
eines Hind-Markov-Modells immer überlegen kann.

01:12:02.050 --> 01:12:05.730
Mathematisch ist ein Hind-Markov-Modell auf die Art und Weise

01:12:05.730 --> 01:12:06.310
definiert.

01:12:07.130 --> 01:12:10.430
Ich weiß, mathematische Definitionen sind langweilig, aber das ist

01:12:10.430 --> 01:12:13.770
eine Definition, die ist so elementar wichtig, die muss man wirklich

01:12:13.770 --> 01:12:14.070
können.

01:12:14.430 --> 01:12:18.090
Die muss jeder in- und auswendig runterbeten können.

01:12:18.190 --> 01:12:20.830
Wenn ich nachts um drei irgendwo anrufe und jemanden aus dem Schlaf

01:12:20.830 --> 01:12:24.290
räuste und frage, was ein Hind-Markov-Modell ist, dann muss das

01:12:24.290 --> 01:12:24.750
runtergehen.

01:12:24.850 --> 01:12:29.250
Ein Hind-Markov-Modell ist ein Quintupel bestehend aus dem hier.

01:12:30.230 --> 01:12:33.730
Also ein Hind-Markov-Modell wird definiert durch 5 Dinge, deswegen ein

01:12:33.730 --> 01:12:34.270
Quintupel.

01:12:34.870 --> 01:12:39.910
Als erstes seine Menge der Zustände, die Uhren, zwischen denen ich hin

01:12:39.910 --> 01:12:40.890
und her wechsle.

01:12:41.590 --> 01:12:45.150
Dann gibt es ein Alphabet mit Symbolen.

01:12:45.270 --> 01:12:48.250
Das sagt mir, wie viele Farben dürfen die Bälle in der Urne haben.

01:12:51.590 --> 01:12:55.950
Dann gibt es eine Übergangsverteilung, das ist das, wenn ich eine

01:12:55.950 --> 01:12:59.210
bestimmte Urne habe, mit welcher Wahrscheinlichkeit nehme ich für den

01:12:59.210 --> 01:13:04.390
nächsten Zeitschritt eine andere Urne und welche andere Urne.

01:13:05.370 --> 01:13:07.810
Dann brauche ich die Ausgabe-Wahrscheinlichkeit.

01:13:08.050 --> 01:13:11.210
Das ist das Verhältnis, mit der die Bälle unterschiedlicher Farben in

01:13:11.210 --> 01:13:13.370
einer Urne gemischt sind.

01:13:14.710 --> 01:13:18.690
Und ich brauche eine initiale Zustandsverteilung, die mir angibt,

01:13:19.150 --> 01:13:23.430
welches ist die Urne, die ich als erstes nehmen werde, aus der ich als

01:13:23.430 --> 01:13:24.470
erstes ziehen werde.

01:13:26.150 --> 01:13:28.450
Und jetzt gibt es eine kleine Komplikation.

01:13:29.150 --> 01:13:33.830
Man kann an diesem Alphabet was ändern.

01:13:34.650 --> 01:13:37.850
Bisher war es so, das Alphabet ist diskret, ich habe also diskrete

01:13:37.850 --> 01:13:40.030
Farben, aus denen meine Bälle zusammengesetzt sind.

01:13:40.510 --> 01:13:44.690
Ich hatte hier bei der Ausgabe entweder Kopf oder Zahl zwei diskrete

01:13:44.690 --> 01:13:45.350
Möglichkeiten.

01:13:46.010 --> 01:13:50.530
Wir in der Spracherkennung beobachten Merkmalsvektoren aus einem

01:13:50.530 --> 01:13:52.350
kontinuierlichen Raum, aus dem R hoch N.

01:13:52.830 --> 01:13:54.030
Der ist nicht mehr diskret.

01:13:54.690 --> 01:13:58.870
Das heißt, statt eines diskreten Alphabetes könnte ich auch einen

01:13:58.870 --> 01:14:00.490
kontinuierlichen Raum setzen.

01:14:01.070 --> 01:14:05.670
Zum Beispiel die Menge aller reellen Zahlen, den Raum R hoch N.

01:14:06.810 --> 01:14:10.370
Und wenn ich das mache, passiert halt wieder an anderer Stelle was.

01:14:10.830 --> 01:14:16.530
Wenn ich statt eines diskreten Alphabets habe, dann muss ich bei den

01:14:16.530 --> 01:14:19.530
Ausgabewahrscheinlichkeitsverteilungen was ändern.

01:14:19.790 --> 01:14:22.450
Dann habe ich nämlich keine Ausgabewahrscheinlichkeitsverteilung mehr,

01:14:22.850 --> 01:14:24.290
sondern dann muss an die Stelle der

01:14:24.290 --> 01:14:27.130
Ausgabewahrscheinlichkeitsverteilung entsprechend die

01:14:27.130 --> 01:14:30.350
Wahrscheinlichkeitsdichte treten, weil ich sonst wieder das Problem

01:14:30.350 --> 01:14:33.850
habe, dass die Wahrscheinlichkeit gleich Null ist, wenn ich über

01:14:33.850 --> 01:14:36.810
abzählbare und unendlich viele Ereignisse habe.

01:14:37.890 --> 01:14:42.610
Und je nachdem, ob ich einen kontinuierlichen Symbolraum habe für

01:14:42.610 --> 01:14:46.110
meine Ausgaben oder ob ich ein diskretes Alphabet habe, spreche ich

01:14:46.110 --> 01:14:52.050
von einem diskreten HMM oder einem kontinuierlichen HMM.

01:14:52.950 --> 01:14:55.730
Und jetzt kann man mit dem HMM halt auch wieder Sachen machen.

01:14:56.090 --> 01:14:58.590
Das einfachste ist halt die Beobachtungsgenerierung.

01:14:59.650 --> 01:15:00.810
So wie wir das hier gesagt haben.

01:15:00.870 --> 01:15:09.190
Ich wähle eine Urne aus, ziehe aus der Urne eine Kugel raus, wähle

01:15:09.190 --> 01:15:14.510
also die Ausgabe gemäß der Wahrscheinlichkeitsverteilung, dann gucke

01:15:14.510 --> 01:15:17.070
ich mir die zweite Wahrscheinlichkeitsverteilung an, die zu der Urne

01:15:17.070 --> 01:15:20.050
gehört, die Übergangswahrscheinlichkeitsverteilung, wähle eine neue

01:15:20.050 --> 01:15:25.310
Urne aus, gemäß dieser Übergangswahrscheinlichkeit, gehe dahin, Zeit

01:15:25.310 --> 01:15:28.690
wird um einen Zeitschritt erhöht und ich mache das Ganze wieder von

01:15:28.690 --> 01:15:28.950
vorne.

01:15:29.090 --> 01:15:31.950
Ziehe meinen Ball, wähle neue Urne, ziehe Ball, wähle neue Urne.

01:15:34.230 --> 01:15:38.490
Wenn man jetzt in der Literatur liest, gibt es wieder noch eine kleine

01:15:38.490 --> 01:15:40.930
Komplikation an kleinen Unschönheiten.

01:15:42.210 --> 01:15:49.170
Manche machen das so wie hier, dass ich zu einem Zeitpunkt bin, ziehe,

01:15:49.930 --> 01:15:52.730
mache dann einen Übergang in den nächsten Zeitraum.

01:15:54.230 --> 01:16:00.150
Andere machen es so, dass sie den Übergang machen und dann ziehen.

01:16:00.450 --> 01:16:05.050
Das ist also die Beobachtung, dass sie erst ziehen und dann den

01:16:05.050 --> 01:16:05.750
Übergang machen.

01:16:08.470 --> 01:16:12.410
Der Unterschied ist einfach, ob die Beobachtungen an den Zustand oder

01:16:12.410 --> 01:16:14.590
an den Zustandsübergang geknüpft sind.

01:16:15.110 --> 01:16:19.110
Das macht es zwar bei der Mathematik beim genauen Berechnen von

01:16:19.110 --> 01:16:22.250
Wahrscheinlichkeiten, wie man sie ausrechnet, einen Unterschied, bei

01:16:22.250 --> 01:16:24.470
der Mächtigkeit der Modelle macht es keinen Unterschied.

01:16:24.730 --> 01:16:29.250
Ob ich jetzt die Ausgabewahrscheinlichkeit an die Urne oder an den

01:16:29.250 --> 01:16:33.270
Übergang dran knüpfe, macht von der Mächtigkeit her keinen

01:16:33.270 --> 01:16:33.710
Unterschied.

01:16:33.910 --> 01:16:36.490
Man muss nur aufpassen, je nachdem welches Buch man liest, welches

01:16:36.490 --> 01:16:40.130
Paper man liest, machen sie es manchmal so oder manchmal so.

01:16:41.290 --> 01:16:46.230
IBM, die IBM Variante ist die Variante, wo die

01:16:47.230 --> 01:16:49.190
Emissionswahrscheinlichkeiten an die Übergänge geknüpft sind.

01:16:51.990 --> 01:16:57.590
Und wenn man das Ganze dann entsprechend hinschreiben will, was so wie

01:16:57.590 --> 01:17:02.810
so ein Prozess abgelaufen ist, so ein HMM stochastischer Prozess, dann

01:17:02.810 --> 01:17:04.310
kommt man zu der sogenannten Trellis.

01:17:05.290 --> 01:17:08.810
Das ist schon sehr ähnlich zu dem, was man zum Beispiel beim DTW

01:17:08.810 --> 01:17:13.270
hatte, nur jetzt macht man halt nicht mehr Merkmalsvektoren an jedem

01:17:13.270 --> 01:17:17.390
Zeitpunkt, sondern was man jetzt hat, ist hier unten die Zeit, die

01:17:17.390 --> 01:17:24.170
einzelnen Zeitschritte, an der Stelle hier die einzelnen Zustände und

01:17:24.170 --> 01:17:27.090
für jeden Zeitschritt habe ich noch die Beobachtung, die gemacht

01:17:27.090 --> 01:17:27.390
wurde.

01:17:28.870 --> 01:17:36.110
Das heißt hier zum Zeitpunkt 1 befand ich mich oben im Zustand n-1 und

01:17:36.110 --> 01:17:40.390
habe zum Zeitpunkt 1 die rote Kugel rausgezogen.

01:17:41.270 --> 01:17:48.750
Dann bin ich übergegangen zum Zustand n-2 und habe wieder eine rote

01:17:48.750 --> 01:17:50.090
Kugel gezogen.

01:17:51.050 --> 01:17:54.730
Dann bin ich wieder zurückgesprungen zum Zustand n-1 und habe dann zum

01:17:54.730 --> 01:17:57.050
Zeitpunkt t-1 wieder eine rote Kugel gezogen.

01:17:57.610 --> 01:18:01.110
Dann bin ich hier gesprungen zum Zustand 3, habe wieder eine rote

01:18:01.110 --> 01:18:03.090
Kugel gezogen und so weiter und so fort.

01:18:03.690 --> 01:18:07.830
Und auf die Art und Weise kann man auftragen, was genau das HMM bei

01:18:07.830 --> 01:18:12.350
der Generierung dieser Ausgabesequenz gemacht hat, wenn ich auf die

01:18:12.350 --> 01:18:15.530
Art und Weise eine Ausgabesequenz generiere.

01:18:16.290 --> 01:18:19.790
Und diese Darstellung mit diesem Gitter, Zeit, unten noch die

01:18:19.790 --> 01:18:23.270
Beobachtung dran und die Zustände auf der anderen Achse, die nennt man

01:18:23.270 --> 01:18:25.050
dementsprechend die HMM-Trellis.

01:18:26.490 --> 01:18:28.290
Weiß einer, was Trellis auf Deutsch bedeutet?

01:18:32.570 --> 01:18:35.370
Eine Trellis ist ein Gartengitter, ein Pflanzgitter und

01:18:35.370 --> 01:18:39.210
dementsprechend sieht das aus wie ein Pflanzgitter, wo man so Ranken

01:18:39.210 --> 01:18:41.730
dran hochlegen lässt mit so Stangen und quer streben.

01:18:42.110 --> 01:18:44.530
Deswegen nennt man das das HMM-Rattengitter.

01:18:45.570 --> 01:18:46.850
Oder halt die HMM-Trellis.

01:18:46.950 --> 01:18:47.530
Klingt halt cooler.

01:18:53.350 --> 01:19:00.590
Bei HMMs sind hilfreich, wenn man drei Probleme beachten möchte.

01:19:01.330 --> 01:19:04.890
Und diese drei Probleme sind auch fundamental wichtig bei HMMs und die

01:19:04.890 --> 01:19:09.970
muss man dann auch entsprechend auswendig kennen und wissen, wie man

01:19:09.970 --> 01:19:12.030
sie löst und mit welchem Algorithmus man sie löst.

01:19:12.550 --> 01:19:14.590
Dazu kommen wir dann aber beim nächsten Mal.

01:19:14.930 --> 01:19:17.930
Das macht keinen Sinn, das heute mehr anzufangen.

01:19:18.790 --> 01:19:24.850
Jetzt aufgepasst, Mittwoch, die Vorlesung wird ausfallen, weil ich auf

01:19:24.850 --> 01:19:28.290
Reisen bin und auch keiner, alle anderen, die die Vorlesung halten

01:19:28.290 --> 01:19:30.230
könnten, auch mit mir auf Reise sind.

01:19:30.910 --> 01:19:37.870
Die Vorlesung am Montag werde ich dann von der Ferne aushalten, wieder

01:19:37.870 --> 01:19:38.550
per Skype.

01:19:38.750 --> 01:19:40.090
Das muss man dann noch arrangieren.

01:19:40.810 --> 01:19:45.050
Und die Vorlesung am Mittwoch selber wird dann wieder ausfallen.

01:19:45.650 --> 01:19:49.110
Ich könnte sie vermutlich theoretisch zeitlich sogar schaffen sie zu

01:19:49.110 --> 01:19:51.670
halten, aber ich werde da wahrscheinlich so durch den Wind sein, dass

01:19:51.670 --> 01:19:54.910
das keinen Sinn hat, dass ich dann eine Vorlesung halte.

01:19:55.370 --> 01:19:58.470
Das heißt also, die nächsten beiden Mittwoche werden die Vorlesungen

01:19:58.470 --> 01:20:02.490
ausfallen und Montag dann einmal per Fernvorlesung wieder.

01:20:03.190 --> 01:20:05.330
Ok, dann hören wir uns Montag wieder.

01:20:05.930 --> 01:20:06.310
Bis dann.

