WEBVTT

00:05.200 --> 00:12.980
So, hallo und endlich wieder zurück zur automatischen Spracherkennung.

00:14.580 --> 00:19.180
Wir waren bei der letzten Vorlesung vor zwei Wochen stehen geblieben,

00:19.780 --> 00:24.200
dass wir uns angeschaut hatten ein alternatives Verfahren, um zu

00:24.200 --> 00:28.180
dekodieren und zwar ein Verfahren, das jetzt nicht den Satzfehler

00:28.180 --> 00:31.300
optimiert, wie das diese Fundamentalformel der automatischen

00:31.300 --> 00:35.540
Spracherkennung macht, die nach dem Maximum-Aposteriori-Prinzip die

00:35.540 --> 00:38.980
wahrscheinlichste Wortfolge sucht, sondern wie wir direkt unser

00:38.980 --> 00:47.820
eigentliches Fehlermaß, den Wortfehler, die Wortfehlerrate optimieren

00:47.820 --> 00:48.180
können.

00:49.100 --> 00:51.540
Und da hatten wir ein Beispiel gesehen, dass es in der Tat einen

00:51.540 --> 00:54.400
Unterschied machen kann, dass ich also durch Optimierung eines anderen

00:54.400 --> 00:59.220
Kriteriums, wenn ich mir für jede Wortposition nämlich das Wort

00:59.220 --> 01:02.020
raussuche, das in dieser Wortposition die wahrscheinlichste

01:02.020 --> 01:06.520
Aposteriori -Wahrscheinlichkeit hat, dass ich dann unter Umständen

01:06.520 --> 01:11.700
eine bessere Hypothese bekomme in Hinsicht auf Wortfehlerrate, als

01:11.700 --> 01:16.060
wenn ich direkt mit diesem Maximum-Aposteriori- dekodiere und danach

01:16.060 --> 01:19.620
nach dem Kriterium mir die beste Wortfolge global raussuche.

01:21.000 --> 01:25.940
Und wenn man sich jetzt das anschaut, wenn man das dann in der Formel

01:25.940 --> 01:29.220
gießt, dann kann man sich anschauen, wie hoch ist der erwartete

01:29.220 --> 01:33.700
Wortfehler, den ich bekomme unter der akustischen

01:33.700 --> 01:37.200
Modellwahrscheinlichkeit, die ich habe.

01:39.160 --> 01:44.600
Wie kann ich mich jetzt da für eins, nicht aus der Aposteriori

01:44.600 --> 01:48.560
-Wahrscheinlichkeit, die ich habe für die Wortfolge, wenn ich das

01:48.560 --> 01:51.480
weiß, wie kann ich da jetzt ausrechnen, welches wäre die Wortfolge,

01:51.600 --> 01:53.560
die die Wortfehlerrate minimiert.

01:53.560 --> 02:00.100
Und dann muss ich sozusagen über alle Referenzen drüber gehen und mir

02:00.100 --> 02:04.040
halt entsprechend dann die Wahrscheinlichkeit ausrechnen, wenn ich

02:04.040 --> 02:08.100
jetzt eine Referenz, eine Worthypothese festhalte, was ist die

02:08.100 --> 02:10.460
Aposteriori -Wahrscheinlichkeit der gesamten Wortfolge.

02:11.020 --> 02:14.700
Und das muss ich multiplizieren mit der Wortfehlerrate, die ich

02:14.700 --> 02:21.120
bekomme für eine neue Hypothese W und die Referenz R, die ich gegeben

02:21.120 --> 02:21.460
habe.

02:21.460 --> 02:24.400
Das heißt also, da habe ich sozusagen zwei Wortfolgen drin stehen.

02:24.500 --> 02:27.680
Ich habe einmal die Referenz, gegen die ich die Wortfehlerrate

02:27.680 --> 02:33.140
berechne und dann die Wortfolge, die ich hypothetisiere und gegen die

02:33.140 --> 02:36.000
ich die Wortfehlerrate berechne.

02:36.600 --> 02:41.240
Und das führt halt dazu, dass ich jetzt, wenn ich diesen Ausdruck hier

02:41.240 --> 02:46.720
minimieren will, optimieren muss, sowohl in der Wortfolge als auch in

02:46.720 --> 02:49.340
der Referenz, gegen die ich score.

02:50.500 --> 02:58.580
Und das führt halt dazu, dass ich, wenn ich das machen will, hier die

02:58.580 --> 03:03.920
Wortfolge suche, die mir diesen Ausdruck summiert über alle möglichen

03:03.920 --> 03:07.140
Referenzen, die es hätten sein können, über alle möglichen Wortfolgen

03:07.140 --> 03:09.800
minimieren muss.

03:09.880 --> 03:13.760
Und da das natürlich nicht geht, dass ich das über alle möglichen

03:13.760 --> 03:16.960
Wortfolgen mache und über alle möglichen Wortfolgen die Wortfehlerrate

03:16.960 --> 03:20.760
ausrechne, das multipliziere mit der Aposteoriewahrscheinlichkeit der

03:20.760 --> 03:24.340
Wortfolge und dann mich dann entsprechend für die Wortfolge

03:24.340 --> 03:27.920
entscheide, die dann auch noch die geringste Wortfehlerrate hat und in

03:27.920 --> 03:29.320
den Wortfolgen dann minimiere.

03:30.180 --> 03:33.620
Was ich machen muss ist oder machen kann ist, dass ich mich beschränke

03:33.620 --> 03:35.180
auf zum Beispiel einen besten Listen.

03:35.740 --> 03:41.840
Dass ich also erst mal einen normalen aposteoriewortbasierten,

03:41.840 --> 03:44.280
wortfolgenbasierten Spracherkenner laufen lasse, der das nach der

03:44.280 --> 03:48.960
Fundamentalformel die Wortfolgen raussucht, dass der dann in besten

03:48.960 --> 03:52.200
Listen erstellen lässt und dass ich mich dann bei dieser doppelten

03:52.200 --> 03:57.880
Anwendung von Wortlisten bei der Minimierung des Gesamtausdrucks und

03:57.880 --> 04:00.720
bei der Summe über alle möglichen Wortfolgen mich dann nur noch auf

04:00.720 --> 04:03.900
die Wortfolgen einschränke, die überhaupt in der besten Liste

04:03.900 --> 04:04.480
vorkommt.

04:06.340 --> 04:08.240
Jetzt gibt es auch eine andere Möglichkeit.

04:08.440 --> 04:11.120
Und die andere Möglichkeit, die wir uns dann letztes Mal kurz

04:11.120 --> 04:17.480
angesehen hatten, war, dass ich die N-besten Listen ersetze durch

04:17.480 --> 04:18.400
Wortgrafen.

04:19.020 --> 04:21.580
Und da hatten wir letztes Mal uns noch dieses Beispiel angeschaut.

04:22.920 --> 04:29.280
Wortgraf für eine mögliche Hypothese oder für eine mögliche

04:29.280 --> 04:30.240
Audioaufnahme.

04:30.680 --> 04:36.000
Und der Wortgraf erstellt mit einem Erkenner, der nach diesem Maximum

04:36.000 --> 04:40.800
Aposteori Prinzip auf Wortfolgen-Ebene operiert.

04:42.040 --> 04:48.020
Und was jetzt halt hilfreich wäre, um die Berechnung der

04:48.020 --> 04:51.640
Wortfehlerrate auf so einem Wortgraf möglich zu machen, wäre, wenn ich

04:51.640 --> 04:54.020
das Konzept von Wortpositionen hätte.

04:54.540 --> 05:01.180
Würde ich jetzt hier immer paarweise versuchen, die Wortfehlerrate zu

05:01.180 --> 05:05.200
minimieren, dann hätte ich das Problem, dass das kein global leicht zu

05:05.200 --> 05:07.700
optimierendes Problem ist.

05:08.180 --> 05:11.220
Hätte ich hingegen sowas wie Wortpositionen, also wüsste ich, das ist

05:11.220 --> 05:14.500
das erste Wort, das zweite Wort, das dritte Wort, dann würde das

05:14.500 --> 05:15.960
Problem sehr viel einfacher werden.

05:16.420 --> 05:18.840
Und wenn man sich halt sowas anschaut, dann sieht man schon, dass man

05:18.840 --> 05:24.120
so vom Prinzip her schon sowas wie vermutliche Wortpositionen sehen

05:24.120 --> 05:24.380
würde.

05:24.520 --> 05:26.980
Also am Anfang Stille, die kann ich zusammenfassen.

05:27.380 --> 05:30.640
Dann habe ich dieses I, das scheint irgendwie für sich alleine zu

05:30.640 --> 05:30.960
stehen.

05:31.060 --> 05:32.600
Der hier, der hat es irgendwie übersehen.

05:33.080 --> 05:35.640
Dann habe ich hier have, move, have, have, move.

05:35.820 --> 05:37.800
Das scheint irgendwie zusammen zu gehören.

05:38.260 --> 05:40.360
Diese It's scheinen irgendwie zusammen zu gehören.

05:40.480 --> 05:43.600
Und dann ist dieses very, veal scheint eine Position zu sein.

05:44.460 --> 05:46.900
Often und fine scheint eine Position zu sein.

05:46.980 --> 05:47.880
Und hinten wieder die Stille.

05:49.600 --> 05:52.360
Und was macht man, wenn man sich halt anschaut, dass man solche

05:52.360 --> 05:53.280
Positionen findet?

05:53.400 --> 05:57.080
Das erste, worauf man schaut, sind die Anfangs- und die Endzeiten der

05:57.080 --> 05:57.440
Wörter.

05:58.260 --> 06:01.720
Da sieht man, dass diese I's alle zur gleichen Zeit anfangen und zu

06:01.720 --> 06:03.100
sehr ähnlichen Zeiten aufhören.

06:04.220 --> 06:08.080
Dann diese haves und moves fangen auch ungefähr zur gleichen Zeit an

06:08.080 --> 06:09.620
und fangen zur gleichen Zeit auf.

06:09.980 --> 06:14.100
Und dann habe ich hier sowas wie ein it, das hier eigentlich auch zum

06:14.100 --> 06:16.220
Beispiel mit diesem move sehr zusammenlegen würde.

06:17.520 --> 06:19.800
Nichtsdestotrotz, oder auch dieses it fängt noch innerhalb dieses

06:19.800 --> 06:23.460
moves an, nichtsdestotrotz würde man sowas wie it und move nicht in

06:23.460 --> 06:27.200
eine Wortposition reinstecken, weil die sehr unterschiedlich

06:27.200 --> 06:27.960
voneinander klingen.

06:28.300 --> 06:32.260
Das heißt, das zweite Kriterium, das man hätte, wäre, wie phonetisch

06:32.260 --> 06:33.200
ähnlich sind die Wörter.

06:33.500 --> 06:37.080
Und deswegen würde man auch dieses it nicht zu diesem very und veal

06:37.080 --> 06:41.440
hinzufügen, weil das phonetisch sehr unähnlich ist, sehr

06:41.440 --> 06:42.280
unterschiedlich ist.

06:43.200 --> 06:45.940
Das heißt, wenn ich also hier versuche, Wortpositionen zu finden,

06:46.520 --> 06:48.800
nehme ich zwei heuristische Informationen.

06:49.040 --> 06:50.820
Wann fangen die Worte an, wann hören sie auf?

06:50.820 --> 06:54.020
Die sollten also irgendwie zeitlich ähnlich sein, liegen und sie

06:54.020 --> 06:56.880
sollten auch noch irgendwie ähnlich klingen, dass es plausibel ist,

06:57.260 --> 06:59.640
dass der Spracherkenner diese beiden Worte überhaupt miteinander

06:59.640 --> 07:00.360
verwechselt hat.

07:04.880 --> 07:08.420
Deswegen fängt man jetzt an, so eine Heuristik zusammenzubauen.

07:09.380 --> 07:15.160
Wenn man sich jetzt den Wortgrafen anschaut, den man dann hat, dann

07:15.160 --> 07:18.900
arbeitet man halt mit folgenden Definitionen.

07:18.920 --> 07:23.160
Wir haben die Edges, die E, die Menge aller Kanten in diesem

07:23.160 --> 07:24.140
Wortgrafen.

07:24.660 --> 07:29.220
Dann haben wir für jede Kante einen Anfangsknoten und einen Endknoten,

07:29.280 --> 07:30.720
den I-Note und den F-Note.

07:31.540 --> 07:35.100
Wir haben eine Anfangszeit jeder Kante und wir haben eine Endzeit

07:35.100 --> 07:36.920
jeder Kante, die I-Time und F-Time.

07:37.380 --> 07:39.920
Dann wissen wir, welches Wort zu jeder Kante gehört.

07:39.920 --> 07:45.620
Wir haben die Posteriori-Wahrscheinlichkeit der Kante.

07:45.880 --> 07:49.560
Die rechnen wir dadurch aus, indem wir die Posteriori

07:49.560 --> 07:53.260
-Wahrscheinlichkeiten aller Wortfolgen aufsummieren, die durch diese

07:53.260 --> 07:54.260
Kante durchführen.

07:55.560 --> 08:02.520
Und für eine Teilmenge von diesen Kanten E definieren wir Words als F

08:02.520 --> 08:07.640
aller möglichen Kanten, die Menge aller Worte, die zu so einer Kante

08:07.640 --> 08:08.640
zugeordnet sind.

08:09.060 --> 08:14.120
Und die Wahrscheinlichkeit der Kanten über eine Teilmenge F ist halt

08:14.120 --> 08:18.240
dann die Summe der Posteriori-Wahrscheinlichkeiten aller Kanten, die

08:18.240 --> 08:21.420
in dieser Teilmenge F der Menge aller möglichen Kanten drin liegen.

08:22.280 --> 08:25.420
Und wenn man sich jetzt anschaut, was so ein globales Alignment sein

08:25.420 --> 08:29.620
soll, dass also jedes Wort, jede Kante in diesem Wortgrafen einer

08:29.620 --> 08:34.320
Kantenposition zuordnet, dann ist das nichts anderes, als dass wir da

08:34.320 --> 08:35.720
Äquivalenzklassen definieren.

08:36.160 --> 08:40.260
Zwei Worte liegen sozusagen in der gleichen Äquivalenzklasse, wenn sie

08:40.260 --> 08:43.580
hinterher der gleichen Wortposition zugeordnet werden.

08:44.440 --> 08:47.400
Und dadurch, dass ich halt diese Wortpositionen habe, habe ich dann

08:47.400 --> 08:50.100
auch so was wie eine totale Ordnung der Klassen, der Reihenfolge.

08:50.420 --> 08:52.700
Wortposition 0, 1, 2, 3 und so weiter.

08:53.140 --> 08:57.920
Und diese Reihenfolge muss auch konsistent sein mit der Ordnung, die

08:57.920 --> 08:59.940
durch diese Lattice auftruiert wird.

09:00.360 --> 09:08.160
Das heißt also, ein Wort, dessen Endzeit vor der Anfangszeit eines

09:08.160 --> 09:11.560
anderen Wortes liegt, darf natürlich nicht in einer Äquivalenzklasse

09:11.560 --> 09:14.940
drin stecken, die sagt, du bist aber eine Wortposition hinter diesem

09:14.940 --> 09:21.600
Wort, das eigentlich später anfängt, als du aufhörst.

09:22.020 --> 09:26.840
Das meint man damit, dass das der Äquivalent ist.

09:28.900 --> 09:34.480
Und das kann man dann halt entsprechend erweitern auf die Menge der

09:34.480 --> 09:38.560
Kanten und indem man einfach sagt, man hat Endknoten, Teilknoten.

09:41.620 --> 09:49.500
Und was man jetzt machen möchte ist, dass man jetzt eine

09:49.500 --> 09:53.400
Äquivalenzrelation findet, die halt dieser Konsistenzbedingung

09:53.400 --> 09:54.660
gehorcht.

09:55.120 --> 09:58.100
Und gleichzeitig auch noch dafür sorgt, dass dieses Gefühl von

09:58.100 --> 10:01.520
phonetisch ähnlichen Wörtern auch noch irgendwie berücksichtigt wird.

10:03.020 --> 10:08.100
Also es gibt relativ viele mögliche Äquivalenzrelationen.

10:08.260 --> 10:10.880
Zum Beispiel kann man einfach topologisch den Graph sortieren.

10:11.540 --> 10:18.620
Dann hätte ich sehr viele Äquivalenzrelationen und sehr wenig Wörter

10:18.620 --> 10:20.200
in jeder einzelnen Äquivalenzklasse.

10:20.280 --> 10:21.440
Das ist natürlich nicht das, was ich will.

10:21.540 --> 10:25.140
Ich hätte schon gerne das ähnliche Wörter, die ähnlich konsistent

10:25.140 --> 10:28.880
sind, dann auch entsprechend in dieser Äquivalenzklasse drin sind.

10:29.620 --> 10:34.440
Und das kann man jetzt so lösen, dass man einen heuristischen,

10:34.640 --> 10:38.960
iterativen Algorithmus macht, der mehr so der menschlichen Intuition

10:38.960 --> 10:40.400
gehorcht.

10:42.140 --> 10:45.980
Am Anfang guckt man erstmal, welche Worte haben denn alle genau die

10:45.980 --> 10:48.000
gleiche Anfangs- und die gleiche Endzeit.

10:48.580 --> 10:52.900
Wenn ich mir diese Worte anschaue, dann macht es schon mal Sinn, dass

10:52.900 --> 10:55.160
die irgendwie in einer Klasse drinstecken.

10:55.280 --> 11:00.720
Wenn sie also genau zur gleichen Zeit anfangen und aufhören, dann ist

11:00.720 --> 11:03.420
es eher unwahrscheinlich, dass sie zu unterschiedlichen Wortpositionen

11:03.420 --> 11:03.700
gehören.

11:04.140 --> 11:05.640
Selbst wenn sie sehr unterschiedlich klingen.

11:06.720 --> 11:10.480
Und dann werde ich natürlich immer noch sehr viele verschiedene

11:10.480 --> 11:14.680
Äquivalenzklassen haben, weil ja die Wahrscheinlichkeit dafür, dass

11:14.680 --> 11:19.000
mehrere Worte zur genau gleichen Zeit anfangen und aufhören, eher

11:19.000 --> 11:19.620
gering ist.

11:20.320 --> 11:24.340
Und mit diesen Äquivalenzklassen fange ich jetzt an, die iterativ

11:24.340 --> 11:25.280
zusammenzulegen.

11:26.500 --> 11:29.600
Am Anfang verschmilzt man erstmal nur Klassen, die zum gleichen Wort

11:29.600 --> 11:30.000
gehören.

11:31.600 --> 11:34.280
Also wenn das gleiche Wort enthalten ist, dann kann ich die

11:34.280 --> 11:36.900
verschmelzen.

11:39.020 --> 11:46.000
Und wenn halt nicht mehr das gleiche Wort da drin ist, kann ich

11:46.000 --> 11:50.120
anfangen, möglichst phonetische ähnliche Klassen zu verschmelzen.

11:50.980 --> 11:54.280
Und die Sache ist die, die Reihenfolge, in der ich jetzt verschmelze,

11:54.720 --> 11:56.960
sollte natürlich auch was mit den Zeiten zu tun haben.

12:01.740 --> 12:08.460
Und wenn man jetzt Klassen mit gleichen Worten verschmilzt, dann mache

12:08.460 --> 12:12.560
ich das halt in der Reihenfolge, die basiert auf den Zeiten.

12:12.960 --> 12:16.280
Ich verschmelze also erstmal die Worte miteinander, die gleich sind

12:16.280 --> 12:19.660
und die den möglichst größten zeitlichen Overlap haben.

12:20.500 --> 12:23.720
Und auch nur dann, wenn der zeitliche Overlap überhaupt gegeben ist.

12:24.700 --> 12:29.760
Wenn ich also sehe, dass ich zum Beispiel die Ordnung nicht verletze,

12:29.820 --> 12:32.620
dass ich also da nicht mehr konsistent bin, dann kann ich natürlich so

12:32.620 --> 12:33.780
eine Verschmelzung nicht durchführen.

12:33.860 --> 12:36.560
Das geht immer nur dann, wenn ich es konsistent habe.

12:36.620 --> 12:40.840
Aber wenn jetzt so zwei Wörter sich zwar nicht gleiche Anfangs- und

12:40.840 --> 12:44.000
Endzeit haben, aber sehr stark überlappen, dann werden die ganzen

12:44.000 --> 12:47.620
beiden entsprechend miteinander verschmolzen.

12:47.880 --> 12:51.000
Und dieser Overlap wird nochmal gewichtet mit den Posteriori

12:51.000 --> 12:54.000
-Wahrscheinlichkeiten, die den Worten zugeordnet wird.

12:54.340 --> 12:59.340
Das ist also erstmal die eher wahrscheinlichen Wörter rein verschmelzt

12:59.340 --> 12:59.600
werden.

13:01.320 --> 13:04.340
Und wenn ich das gemacht habe, habe ich halt alle Äquivalenzklassen

13:04.340 --> 13:07.700
mit überlappenden gleichen Worten hergestellt.

13:09.160 --> 13:12.400
Und wenn die halt nicht überlappen, dann werden sie halt entsprechend

13:12.400 --> 13:13.580
nicht miteinander verschmolzen.

13:15.240 --> 13:18.940
Danach mache ich diesen Schritt, dass ich dann drübergehe und gemäß

13:18.940 --> 13:21.160
dieser phonetischen Ähnlichkeiten weiter verschmelze.

13:22.820 --> 13:28.580
Das sind also Kandidaten oder Wörter, die man verschmelzen kann, sind

13:28.580 --> 13:31.180
solche, die halt nicht in irgendeiner Relation zueinander stehen.

13:32.720 --> 13:36.880
Gemäß dieses verschmolzenen Graphen, wo ich immer weiter Knoten und

13:36.880 --> 13:37.820
Kanten zusammenlege.

13:39.240 --> 13:42.680
Und das mache ich dann so lange, bis ich halt keine Kandidaten mehr

13:42.680 --> 13:42.920
habe.

13:43.060 --> 13:46.760
Das heißt, bis alle Worte irgendwie in einer Relation drin sind.

13:47.480 --> 13:50.940
Und dieses Ähnlichkeitsmaß, nachdem ich jetzt aussuche, welche ich als

13:50.940 --> 13:55.720
nächste verschmelze, mache ich wieder eine Ähnlichkeit.

13:56.100 --> 14:00.000
Wobei die Ähnlichkeit halt letztendlich der Phonemfehler ist zwischen

14:00.000 --> 14:00.720
zwei Worten.

14:01.860 --> 14:11.920
Und das Ganze dann wieder gewichte mit den Posteriori- Klassen.

14:12.060 --> 14:20.220
Das heißt also, hier diese Ähnlichkeiten mache ich die

14:21.980 --> 14:24.880
durchschnittliche Ähnlichkeit der verschiedenen Worten, es können ja

14:24.880 --> 14:28.220
mehrere Wörter drin sein, muss ich halt den Durchschnitt bilden des

14:28.220 --> 14:28.940
Phonemfehlers.

14:29.340 --> 14:33.000
Und das Ganze wird dann hinterher gewichtet mit der Posteriori-

14:33.000 --> 14:39.160
Wahrscheinlichkeit des ersten Clusters und des Wortes in dem zweiten

14:39.160 --> 14:39.620
Cluster.

14:43.220 --> 14:52.500
Und wenn das dann passiert, habe ich danach eine Totalordnung auf

14:52.500 --> 14:56.760
solchen Äquivalenzklassen, die immer noch konsistent ist mit meiner

14:56.760 --> 14:57.720
ursprünglichen Lattice.

14:58.920 --> 15:02.780
Was sich herausgestellt hat, was ein relativ guter

15:02.780 --> 15:08.060
Vorverarbeitungsschritt ist, wenn man sich so Lattices anschaut, dann

15:08.060 --> 15:11.320
findet man da drin unter Umständen häufig Wörter, die an sich schon

15:11.320 --> 15:13.700
eine sehr geringe Posteriori-Wahrscheinlichkeit haben.

15:15.060 --> 15:18.400
Und die haben halt nur einen geringen Einfluss auf die Posteriori

15:18.400 --> 15:21.820
-Wahrscheinlichkeit von Worthypothesen, können aber dazu führen, dass

15:21.820 --> 15:26.320
man zum Beispiel nicht so schöne Äquivalenzklassen bildet, als wenn

15:26.320 --> 15:27.540
diese Wörter nicht drin waren.

15:28.260 --> 15:29.920
Es kann sein, dass sie dann irgendwie stören.

15:30.600 --> 15:33.560
Und was man dann halt machen kann, ist, dass man halt die vorher

15:33.560 --> 15:36.720
herauspont, dass man also Wörter aus der Lattice entfernt, Kanten aus

15:36.720 --> 15:40.060
der Lattice entfernt, die sowieso nur eine sehr geringe Posteriori

15:40.060 --> 15:41.020
-Wahrscheinlichkeit haben.

15:46.530 --> 15:50.790
Wenn ich das gemacht habe, dieses Verschmelzen, dann bin ich bei

15:50.790 --> 15:55.470
dieser ursprünglichen Struktur hier unten angelangt, dass ich dann

15:55.470 --> 15:58.550
diese Totalordnung habe, dass ich aufeinanderfolgende

15:58.550 --> 15:59.750
Äquivalenzklassen habe.

16:00.330 --> 16:03.470
Und sowas hier nennt man dann entsprechend ein Konfusionsnetzwerk oder

16:03.470 --> 16:07.010
manchmal nennt man das auch die Sausages, weil das wie so Würstchen

16:07.010 --> 16:11.450
sind, die miteinander an den Zipfeln verbunden sind, so eine

16:11.450 --> 16:13.030
Heißwürstchenkette.

16:19.480 --> 16:23.140
Weil eine Sache, die passieren kann, ist, dass wenn ich jetzt die

16:23.140 --> 16:26.440
Posteriori -Wahrscheinlichkeiten pro Äquivalenzklasse aufsummiere,

16:27.260 --> 16:30.440
dann müsste die ja eigentlich theoretisch 1 sein, weil pro

16:30.440 --> 16:34.460
Wortposition muss ja zumindest irgendein Wort vorkommen.

16:35.000 --> 16:38.120
Jetzt kann es sein aber, dass die vielleicht kleiner als 1 ist.

16:38.660 --> 16:41.500
Kann dadurch sein, dass ich halt vorher Sachen weggepumpt habe, dass

16:41.500 --> 16:47.920
ich sowieso durch die Verschmelzung irgendwelche komischen Sachen

16:47.920 --> 16:48.560
passiert sind.

16:49.000 --> 16:53.200
Und eine theoretisch-logische Erklärung ist auch, dass die kleiner 1

16:53.200 --> 16:55.740
sein kann, die Summe der Posteriori-Wahrscheinlichkeit innerhalb einer

16:55.740 --> 17:00.340
Äquivalenzklasse, dass ich ja auch Worthypothesen habe mit

17:00.340 --> 17:01.440
unterschiedlichen Wörtern drin.

17:01.960 --> 17:04.680
Das heißt, es ist ja eigentlich nicht garantiert, dass an dieser

17:04.680 --> 17:06.140
Stelle auch wirklich ein Wort sein muss.

17:07.080 --> 17:10.740
Das heißt, man kann das so interpretieren, das, was einem fehlt an der

17:10.740 --> 17:13.760
Summe zu 1 innerhalb der Äquivalenzklasse, das ist die

17:13.760 --> 17:16.980
Wahrscheinlichkeit dafür, dass an dieser Position überhaupt kein Wort

17:16.980 --> 17:17.260
steht.

17:19.640 --> 17:23.080
Und dementsprechend fügt man dann hinterher noch so ein Epsilon

17:23.080 --> 17:26.220
-Wortsymbol ein, das für das leere Wort steht, dass also an der Stelle

17:26.220 --> 17:30.440
kein Wort steht und das bekommt halt die Wahrscheinlichkeit, die noch

17:30.440 --> 17:34.740
fehlt, bis zur Summe 1.

17:36.300 --> 17:39.220
Wie gesagt, diese Sausage, das ist im Prinzip sowas wie eine Lattice,

17:40.120 --> 17:43.080
ist äquivalent zu einer Lattice.

17:43.440 --> 17:47.260
Der einzige Unterschied ist, dass die Zeitinformationen natürlich

17:47.260 --> 17:48.340
irgendwie verloren gehen.

17:49.100 --> 17:51.420
Also ich habe nicht mehr diese ursprünglichen, genauen

17:51.980 --> 17:52.420
Zeitinformationen.

17:52.440 --> 17:54.140
Hier fängt ein Wort an und da hört es auf.

17:54.480 --> 17:58.320
Das kann ich nicht so ohne weiteres übertragen auf diese Lattice.

17:58.700 --> 18:04.020
Da muss ich sozusagen arbeiten mit unter Umständen sogar Overlaps oder

18:04.020 --> 18:06.720
sowas, dadurch, dass ich ja so überlappende Worte teilweise

18:06.720 --> 18:08.760
zusammensuche.

18:08.940 --> 18:11.880
Das heißt, da muss man sich irgendwas überlegen, wie man irgendwie den

18:11.880 --> 18:19.080
halbwegs vernünftigen Anfangs- und Endzeiten den Wörtern zuordnen

18:19.080 --> 18:19.380
kann.

18:21.020 --> 18:26.340
Und wenn ich jetzt so eine Sausage habe, so ein Konfidenz-Netzwerk,

18:27.040 --> 18:31.960
dann kann ich daraus jetzt relativ einfach die finale Single-Best

18:31.960 --> 18:37.100
-Hypothese ablesen, die mir dafür sorgt, dass die Posteriori

18:37.100 --> 18:39.480
-Wahrscheinlichkeit pro Wortposition maximiert wird.

18:39.840 --> 18:42.860
Ich muss einfach die Äquivalenzklassen der Reihe nach durchgehen und

18:42.860 --> 18:47.240
für jede Äquivalenzklasse hole ich mir das Wort raus, das da die

18:47.240 --> 18:49.320
höchste Aposteriori-Wahrscheinlichkeit hat.

18:49.780 --> 18:52.480
Und diese Aposteriori-Wahrscheinlichkeiten sind halt entstanden durch

18:52.480 --> 18:55.500
Aufsummieren der ursprünglichen Einzelwort- Aposteriori

18:55.500 --> 18:58.380
-Wahrscheinlichkeiten, wenn ich Wörter angefangen habe, selbe Wörter

18:58.380 --> 19:00.280
zu verschmelzen in einer Äquivalenzklasse.

19:00.380 --> 19:02.920
Dann habe ich einfach die Aposteriori- Wahrscheinlichkeiten

19:02.920 --> 19:05.980
aufsummiert und bekomme jetzt für jedes einzelne Wort in dieser

19:05.980 --> 19:09.900
Äquivalenzklasse dann diese teilweise aufsummierten Posteriori

19:09.900 --> 19:10.420
-Wahrscheinlichkeiten.

19:10.800 --> 19:13.780
Und für jede Wortposition wähle ich jetzt einfach das Wort raus, das

19:13.780 --> 19:15.720
die höchste Posteriori-Wahrscheinlichkeit hat.

19:16.980 --> 19:19.240
Das kann eventuell auch das leere Wort sein.

19:20.800 --> 19:24.880
Und wenn man das jetzt macht, dann stellt man fest, dass man

19:24.880 --> 19:29.460
tatsächlich seine Wortfehlerraten teilweise sehr gut verbessern kann.

19:30.000 --> 19:33.000
Das sind wieder Experimente, einmal auf Switchboard, also auf

19:33.000 --> 19:38.380
Telefonunterhaltungen und dann auf den Broadcast News, also auf

19:38.380 --> 19:41.360
Nachrichtensendungen, Radio und Fernsehen.

19:42.000 --> 19:45.520
Wenn man sich das jetzt mal auf Switchboard anschaut, da gab es zwei

19:46.220 --> 19:47.940
Testmengen über die Jahre, die entwickelt wurden.

19:48.540 --> 19:51.960
Oben in der ersten Zeile habe ich immer die Maximum-Aposteriori

19:51.960 --> 19:54.760
-Hypothese, das ist also die Wortfolge, die gemäß der

19:55.300 --> 19:59.800
Fundamentalformel die höchste Wahrscheinlichkeit hat gegeben, die

19:59.800 --> 20:00.560
Audioaufnahme.

20:01.020 --> 20:05.800
Dann komme ich halt so auf Wortfehlerraten 38,5, 42,9 Prozent.

20:05.800 --> 20:12.600
Wenn ich dann jetzt das Ganze mache, wähle die mit der höchsten

20:12.600 --> 20:15.820
Aposteriori -Wahrscheinlichkeit aus, einmal mit Hilfe von N

20:15.820 --> 20:20.200
-Bestenlisten, dann geht das schon mal runter auf 37,9 Prozent,

20:20.320 --> 20:22.080
beziehungsweise 42,3.

20:22.280 --> 20:25.380
Und wenn ich statt dann mit N-Bestenlisten wirklich mit den Wortgrafen

20:25.380 --> 20:29.720
arbeite und darauf das Konsensusdecoding durchführe, habe ich halt

20:29.720 --> 20:36.260
noch mal Gewinne, die runtergehen auf 37,3, 41,6 an Wortfehlerrate.

20:36.580 --> 20:39.560
Und wenn man das jetzt mal anschaut und die Wortfehlerrate halt

20:39.560 --> 20:45.880
gegenüberstellt der Satzfehlerrate, dann sieht man halt, wenn man das

20:45.880 --> 20:51.580
jetzt sich auf der ersten Menge anschaut, die Wortfehlerrate fällt von

20:51.580 --> 20:54.780
38,5 auf 37,3 Prozent.

20:55.040 --> 20:57.480
Das sind immerhin so was wie 1,2 Prozent absolut.

20:58.180 --> 21:01.820
Das sind also so was wie ungefähr 10 Prozent,

21:05.540 --> 21:09.760
so was wie 5 Prozent relativ, 4 Prozent relativ, das ist schon mal

21:09.760 --> 21:10.600
nicht schlecht.

21:12.740 --> 21:19.140
Der Satzfehler, das womit ich optimiere gemäß der Fundamentalformel,

21:19.180 --> 21:20.260
der steigt sogar leicht.

21:21.060 --> 21:24.880
Das heißt also, diese Tatsache, dass ich hier eine Wortfehlerrate

21:24.880 --> 21:28.760
bekomme, die kleiner ist als vorher, hat tatsächlich was damit zu tun,

21:28.900 --> 21:32.400
dass das Kriterium, nachdem ich vorher dekodiert habe, nachdem ich

21:32.400 --> 21:36.960
also die beste Wortfolge gesucht habe, nicht das Optimum ist, sondern

21:36.960 --> 21:39.860
dass ich nachher optimiert habe, den Satzfehler zu minimieren.

21:40.320 --> 21:43.160
Das hat also nichts mit Modelldefiziten irgendwie zu tun, sondern es

21:43.160 --> 21:46.520
hat wirklich was damit zu tun, dass die ursprüngliche Grundannahme der

21:46.520 --> 21:51.180
Fundamentalformel halt für Wortfehlerrate als Gütekriterium nicht

21:51.180 --> 21:52.340
geeignet ist.

21:53.220 --> 21:55.800
Und genauso kann man sich das anschauen halt bei den Broadcastnews.

21:56.260 --> 21:58.580
Da gibt es hier so unterschiedliche Konditionen, also die

21:59.120 --> 22:02.220
Broadcastnews unterteilt man dann noch mal in sogenannte F-Conditions.

22:02.840 --> 22:05.540
Die geben einfach an, wie schwierig das ist zu dekodieren.

22:05.840 --> 22:11.180
F0 ist der Nachrichtensprecher in Stille im Nachrichtenstudio und

22:11.180 --> 22:12.060
liest den Zettel ab.

22:12.360 --> 22:16.000
Und dann wird es immer schwieriger, bis man dann bei ganz Fx, das ist

22:16.000 --> 22:19.200
dann der Kriegsreporter, der unter Dauerbeschuss, der irgendwo im

22:19.200 --> 22:23.560
Schützenrahmen sitzt und unter schwierigen Bedingungen überträgt oder

22:23.560 --> 22:27.120
der Reporter, der da im Hurrikan irgendwo im Taifun steht und da

22:27.120 --> 22:27.520
berichtet.

22:28.980 --> 22:32.640
Und da sieht man halt auch, dass man durch die Bank weg bessere

22:32.640 --> 22:40.440
Ergebnisse bekommt, wenn man statt nach der MAP, nach dem Konsensus

22:40.440 --> 22:44.820
-Decoding, nach der Aposteriori-Wahrscheinlichkeit dekodiert.

22:45.240 --> 22:48.160
Und relativ gesehen sind die Verbesserungen sogar besser, wenn man

22:48.160 --> 22:51.940
unter den einfachen Konditionen arbeitet, als wenn man unter den

22:51.940 --> 22:54.280
schwierigen Konditionen arbeitet.

22:54.400 --> 22:57.720
Aber auch im Schnitt ist das Ganze immerhin noch eine schöne

22:57.720 --> 23:01.060
Verbesserung von so circa 2 Prozent relativ.

23:03.680 --> 23:10.160
Das Nächste, was man sich dann anschauen kann, ist, dass denjenigen

23:10.160 --> 23:13.440
Leuten, die diese Evaluation durchführen, Folgendes aufgefallen ist.

23:13.900 --> 23:17.640
Da gibt es halt in den USA dieses Standardisierungsinstitut, das

23:17.640 --> 23:21.600
National Institute of Science and Technology, die arbeiten als

23:21.600 --> 23:24.620
Evaluatoren.

23:24.820 --> 23:27.520
Also die machen mal diese Broadcast News und Switchboard Evaluation,

23:27.900 --> 23:31.980
die geben dann die Testdaten raus, dann die Leute schicken dann ihre

23:31.980 --> 23:36.440
Ergebnisse rein und die berechnen dann die Wortfederrate unter vorher

23:36.440 --> 23:39.220
festgelegten Bedingungen für alle und veröffentlichen die Ergebnisse.

23:40.080 --> 23:42.260
Und die waren halt in der Situation, dann haben sie halt zehn

23:42.260 --> 23:47.740
Teilnehmer und diese zehn Teilnehmer senden halt die Ergebnisse ein

23:47.740 --> 23:51.080
und dann wird halt festgelegt, wer ist der Gewinner und wer ist der

23:51.080 --> 23:51.600
Verlierer.

23:52.080 --> 23:54.280
Und dann haben die sich mal angefangen, diese Ergebnisse, die sie

23:54.280 --> 23:57.940
bekommen haben, auch genauer anzuschauen und haben festgestellt, der

23:57.940 --> 24:00.800
Unterschied so in Wortfehlerrate zwischen dem Besten und dem

24:00.800 --> 24:04.660
Zweitbesten und dem Viertbesten, der ist manchmal gar nicht so groß,

24:04.740 --> 24:05.960
der kann relativ klein sein.

24:06.340 --> 24:09.760
Wenn man sich aber die einzelnen Hypothesen anschaut, dann können die

24:09.760 --> 24:12.020
von Fall zu Fall deutlich unterschiedlich sein.

24:12.680 --> 24:16.260
Sprich, der eine macht halt die eine Audioaufnahme vielleicht besser

24:16.260 --> 24:19.860
und der andere macht die andere Audioaufnahme ein bisschen besser und

24:19.860 --> 24:21.720
im Schnitt am Ende sind sie ungefähr gleich.

24:22.680 --> 24:26.480
Und die Idee war, dass nachdem die gesehen haben, dass die Fehler auf

24:26.480 --> 24:29.680
unterschiedlichen Teilen teilweise sehr unterschiedlich sind, man

24:29.680 --> 24:34.120
vielleicht die Systeme so kombinieren kann, dass sich die

24:34.120 --> 24:37.160
unterschiedlichen Fehler gegenseitig ausgleichen.

24:38.500 --> 24:42.960
Also im einfachsten Fall, wenn ich drei Systeme habe und für eine

24:42.960 --> 24:47.200
Wortposition habe ich dann halt drei unterschiedliche Meinungen.

24:47.340 --> 24:50.380
Zwei sagen, es war das Wort A und einer sagt, das war das Wort B.

24:50.720 --> 24:54.860
Dann entscheide ich mich halt für die Meinung der Mehrheit, für die

24:54.860 --> 24:55.500
Mehrheitsseite.

24:55.920 --> 24:59.120
Dann entscheide ich mich halt dann für das Wort A und nicht für das

24:59.120 --> 24:59.580
Wort B.

25:00.500 --> 25:03.240
Und daraus haben die halt ein Verfahren entwickelt, das nennt sich

25:03.240 --> 25:06.480
halt VOVA, Recognizer Output Voting Error Reduction.

25:06.920 --> 25:09.000
Und die haben jetzt genau das gleiche Problem.

25:09.460 --> 25:14.440
Die Idee ist also, pro Wortposition, wenn man guckt, zehn Systeme, was

25:14.440 --> 25:16.560
ist denn die Mehrheitsmeinung für diese Wortposition?

25:17.460 --> 25:21.340
Allerdings gibt es keine Wortposition, sondern die Wortfolgen, die da

25:21.340 --> 25:24.040
rauskommen von den einzelnen Systemen, können durchaus unterschiedlich

25:24.040 --> 25:24.540
lang sein.

25:25.120 --> 25:28.280
Auch die müssen also irgendwie ein gemeinsames Alignment zwischen

25:28.280 --> 25:32.260
allen Systemen finden, so dass man hinterher Wortpositionen hat und

25:32.260 --> 25:34.900
dann diese Mehrheitsentscheidung pro Wortposition machen kann.

25:36.760 --> 25:41.440
Und dementsprechend haben die halt auch erst ein heuristisches

25:41.440 --> 25:44.400
Verfahren entwickelt, so ein globales Alignment zu finden, so ähnlich

25:44.400 --> 25:46.680
wie bei den Confusion-Netzwerken.

25:47.480 --> 25:54.820
Und dann gibt es ein Voting-Modul, das dann auf dieser gemeinsamen

25:54.820 --> 25:58.640
Alignment dann pro Wortposition das neue Wort aussucht.

25:59.360 --> 26:01.920
Wie gesagt, im einfachsten Fall kann das sein, dass man sich

26:01.920 --> 26:03.880
entscheidet, okay, was sagt die Mehrheitsmeinung?

26:04.420 --> 26:06.860
Aber was ist, wenn ich jetzt zum Beispiel drei Systeme habe und das

26:06.860 --> 26:10.460
erste System sagt, das Wort A, das zweite System sagt, das Wort B und

26:10.460 --> 26:12.260
das dritte System sagt, das Wort C?

26:13.060 --> 26:13.860
Dann habe ich ein Problem.

26:14.540 --> 26:17.020
Da muss ich trotzdem irgendwie noch eine Entscheidung treffen können.

26:17.560 --> 26:22.020
Und da kommt halt eine zweite Sache ins Spiel.

26:22.480 --> 26:28.260
Wenn man solche Ergebnisse liefert, dann gibt man meistens nicht nur

26:28.260 --> 26:33.280
an, welches Wort habe ich zu welcher Zeit erkannt, sondern man gibt in

26:33.280 --> 26:36.600
der Regel für jedes Wort auch so eine sogenannte Konfidenz an.

26:37.280 --> 26:40.500
Das ist ein Wert, der sagen soll, wie sicher ist man sich, dass man

26:40.500 --> 26:42.140
hier das richtige Wort erkannt hat.

26:44.020 --> 26:47.640
Das läuft also nicht so ab, dass man irgendwie, man bekommt eine

26:47.640 --> 26:51.060
Audiodatei und am Ende gibt man nur eine Wortfolge aus, sondern

26:51.060 --> 26:55.920
bekommt eine sehr lange Audiodatei und man gibt dann aus, hier diese

26:55.920 --> 26:59.360
Worte habe ich erkannt, für jedes Wort habe ich die genaue Anfangs-

26:59.360 --> 27:04.620
und die Endzeit und noch eine Zahl dazu, die mir sagt, bei 1,0 ganz

27:04.620 --> 27:07.500
sicher, habe keinen Fehler gemacht, bei 0,0 keine Ahnung, ist

27:07.500 --> 27:10.940
wahrscheinlich völliger Murks oder dann irgendwas zwischen 0 und 1, so

27:10.940 --> 27:12.920
gemäß, wie man das meint.

27:13.660 --> 27:16.580
Eine Möglichkeit, das zum Beispiel zu machen, ist, Posteriori

27:16.580 --> 27:19.060
-Wahrscheinlichkeiten zu berechnen, also so wie man das bei der

27:20.280 --> 27:22.700
Confusion -Network-Generierung macht.

27:22.800 --> 27:26.540
Da braucht man ja diese pro Wort, diese Posteriori-Wahrscheinlichkeit

27:26.540 --> 27:32.040
als Summe aller Posteriori-Wahrscheinlichkeiten aller Wortfolgen, die

27:32.040 --> 27:34.480
halt durch dieses Wort durchgehen in dieser Kante.

27:35.180 --> 27:43.060
Damit kann man also auch entsprechend dann da auch Posteriori

27:43.060 --> 27:45.480
-Wahrscheinlichkeiten für alle Worte eingeben und liegt auch zwischen

27:45.480 --> 27:47.980
0 und 1 und kann man zum Beispiel als so eine Konfidenz verwenden.

27:48.540 --> 27:51.520
Und die kann man dann halt auch entsprechend mit reinziehen in diese

27:51.520 --> 27:56.860
Mehrheitsentscheidung und zum Beispiel sagen, ich gewichte, nehme das

27:56.860 --> 28:00.320
Wort, das die meiste Summe an Posteriori-Wahrscheinlichkeiten hat.

28:00.840 --> 28:03.880
Und dann kann man anfangen, zusätzliche Parameter einzufügen, dass ich

28:03.880 --> 28:05.880
irgendwie die Posteriori-Wahrscheinlichkeit gewichte.

28:06.500 --> 28:10.220
Dass ich also zähle mal Posteriori-Wahrscheinlichkeit und dann noch

28:10.220 --> 28:12.800
ein Gewicht mache, ob ich mich eher aufs Zählen oder eher auf die

28:12.800 --> 28:14.620
Posteriori -Wahrscheinlichkeit verlassen will.

28:14.800 --> 28:17.500
Oder ob ich mich immer dann auf die Mehrheitsentscheidung verlassen

28:17.500 --> 28:20.000
will und nur wenn es keine Mehrheitsentscheidung gibt, dass ich dann

28:20.000 --> 28:23.160
noch irgendwie die Posteriori-Wahrscheinlichkeit mit reinbaue und so

28:23.160 --> 28:23.980
weiter und so fort.

28:24.360 --> 28:28.080
Und das sorgt dann dafür, dass dieses Voting-Modul, das dann hinterher

28:28.080 --> 28:31.420
das Wort-Proposition rausziehen muss, auch relativ komplex werden

28:31.420 --> 28:31.640
kann.

28:33.920 --> 28:38.460
Also um jetzt so ein optimales Alignment zu finden zwischen vielen

28:38.460 --> 28:41.780
Systemen, bräuchte man wieder so eine multidimensionale Suche.

28:42.260 --> 28:43.580
Wie gesagt, das ist zu aufwendig.

28:43.720 --> 28:44.980
Besser ist eine Approximation.

28:45.480 --> 28:49.580
Und da ist der iterative Algorithmus, und das ist dann wirklich sehr

28:49.580 --> 28:53.660
ähnlich diesem Konfessionsnetzwerk, dass man so tut, als sei jede

28:53.660 --> 28:57.260
Hypothese, jede Wortfolge, die man bekommt, auch nichts anderes als

28:57.260 --> 28:57.960
ein Wortgraf.

28:58.060 --> 29:00.440
Der ist halt nur relativ langweilig.

29:00.480 --> 29:01.140
Der ist halt linear.

29:01.420 --> 29:02.860
Der hat halt keine großen Verzweigungen.

29:03.860 --> 29:06.440
Und was man jetzt macht, ist, dass man iterativ hergeht.

29:06.560 --> 29:11.800
Man nimmt sich die erste und die zweite Hypothese, macht ein Alignment

29:11.800 --> 29:19.220
gemäß minimale Levenstein-Distanz, minimale Editier-Distanz und macht

29:19.220 --> 29:22.660
daraus ein neues Wortnetzwerk, das dann schon interessanter sein kann,

29:22.740 --> 29:23.740
das nicht mehr linear ist.

29:24.280 --> 29:27.700
Und dann nimmt man die nächste Hypothese dazu, alignt dagegen und

29:27.700 --> 29:29.400
macht daraus wieder ein neues Netzwerk.

29:30.380 --> 29:31.660
Also ein einfaches Beispiel.

29:31.760 --> 29:34.460
Angenommen, ich hätte so drei Hypothesen, eins, zwei und drei.

29:35.220 --> 29:38.340
Zwei sind gleich lang, die dritte ist noch einem Wort länger.

29:39.500 --> 29:42.020
Und ich gehe in der Reihenfolge vor.

29:42.680 --> 29:48.440
Das heißt, erstmal nehme ich das erste und verschmelze das dann mit

29:48.440 --> 29:49.960
dem zweiten Alignment.

29:50.800 --> 29:53.500
Und angenommen, wenn man sich das jetzt erstmal anschaut, dass man

29:53.500 --> 29:57.820
auch noch die ein bisschen anordnet gemäß der Zeitinformation, dann

29:57.820 --> 30:01.400
sieht das halt so aus, dass ich halt gucke, wo überlappen die sich und

30:01.400 --> 30:02.880
kann die dann entsprechend verschmelzen.

30:03.080 --> 30:05.580
Und da, wo ich halt zeitlich keinen Überlapp habe, muss ich halt

30:05.580 --> 30:10.760
entweder zusätzliche Wortpositionen oder Lehrwörter einfügen, kann die

30:10.760 --> 30:13.780
dann alignen und verschmelze das Ganze.

30:14.140 --> 30:17.100
Und das sieht dann so aus, dass das dann halt so wieder so ein Sausage

30:17.100 --> 30:19.460
-ähnliches Wortnetzwerk kommt.

30:20.000 --> 30:21.440
Das ist dann meine neue Basis.

30:21.520 --> 30:25.040
Und dann kommt halt noch die dritte Wortfolge mit hinzu und wird dann

30:25.040 --> 30:27.180
auch entsprechend miteinander alignen.

30:27.520 --> 30:30.080
Das hat natürlich hier nichts mit der Zeitfolge zu tun, sondern das

30:30.080 --> 30:33.900
ist rein dann basiert auf der Wortfolge, wie ich dieses Alignment

30:33.900 --> 30:36.440
bilde, dass ich also hier so ein Minimum-Edit-Distance mache.

30:36.940 --> 30:40.400
Und das sagt mir dann halt hier eine Deletion und dahinten eine

30:40.400 --> 30:40.920
Insertion.

30:41.060 --> 30:43.560
Und das muss ich halt dann entsprechend mit diesen Lehrworten hier als

30:43.560 --> 30:46.040
Klammerapfel dargestellt abbilden.

30:46.820 --> 30:49.700
Und dann kann ich entweder machen eine Mehrheitsentscheidung oder ich

30:49.700 --> 30:52.960
kann irgendwas völlig Kompliziertes machen.

30:53.080 --> 30:55.100
Im Allgemeinen sagt man das dann so, dass es hier einen

30:55.100 --> 31:01.580
Gewichtungsfaktor Alpha gibt, der gewichtet hier, wie häufig kommt das

31:01.580 --> 31:04.980
Wort vor im Verhältnis zur Gesamtanzahl der Wörter.

31:05.440 --> 31:10.640
Und dann 1 minus Alpha, was ist halt die Konfidenz der Worte.

31:10.760 --> 31:15.980
Und dann kann ich halt dieses Alpha optimieren und gucken, dass ich da

31:15.980 --> 31:18.680
halt dann entsprechend so eine Art Mehrheitsentscheidung oder

31:18.680 --> 31:22.780
Mehrheitsentscheidung gewichtet mit Konfidenz dann entsprechend

31:22.780 --> 31:23.800
rausbekomme.

31:25.500 --> 31:27.980
Ganze hat man auch entsprechend wieder Experimente gefahren.

31:28.860 --> 31:32.080
1997 war das wieder auf dieser Broadcast-News-Evaluation.

31:32.880 --> 31:34.840
Und wir haben damals halt fünf Systeme bekommen.

31:36.600 --> 31:40.020
Wortrederrate so zwischen 44,9 und 50,2 Prozent.

31:40.400 --> 31:43.060
Das ist gar nicht mal so wenig, die Spanne.

31:43.660 --> 31:48.720
Also von 45 nach 50, das ist schon relativ viel.

31:48.920 --> 31:50.340
Das sind 10 Prozent relativ.

31:51.020 --> 31:53.440
Da ist das eine System schon deutlich schlechter als das andere.

31:53.920 --> 31:56.820
Der erste zum zweiten, die waren im Prinzip gleich gut.

31:56.940 --> 32:03.440
Wenn man da statistische Signifikanz ausrechnen würde, die werden sich

32:03.440 --> 32:06.000
wahrscheinlich statistisch nicht sonderlich signifikant voneinander

32:06.000 --> 32:06.580
unterscheiden.

32:07.220 --> 32:10.720
Und dann hat man mal verschiedene Strategien ausprobiert, diese Sachen

32:10.720 --> 32:13.600
zu kombinieren.

32:13.720 --> 32:15.180
Einmal nur anhand der Häufigkeiten.

32:15.300 --> 32:17.420
Und wenn es halt keine klare Entscheidung gibt, dann wird halt

32:17.420 --> 32:20.380
zufällig ein Wort ausgeführt, was zum Beispiel mal das erste.

32:22.480 --> 32:25.840
Dann mithilfe der Konfidenzen oder auch zum Beispiel mithilfe der

32:25.840 --> 32:29.360
maximalen Konfidenz, dass man also nicht die Konfidenzen pro Wort

32:29.360 --> 32:33.200
gewichtet hat, sondern dass man dann unter allen Worten die Konfidenz

32:33.200 --> 32:36.240
rausgeholt hat, unter allen gleichen Worten, die die höchste Konfidenz

32:36.240 --> 32:36.400
hat.

32:37.520 --> 32:41.940
Und wenn man sich das halt anschaut, wenn ich die kombiniere, dann

32:41.940 --> 32:44.540
komme ich von 44,9 auf 39,7 runter.

32:44.960 --> 32:46.220
Das ist schon mal sehr viel.

32:47.140 --> 32:51.940
Und je nachdem, wie ich kombiniere, kann das so zwischen 39,7 und 39,4

32:51.940 --> 32:52.200
liegen.

32:52.860 --> 32:55.440
Und wenn ich das jetzt vergleiche als Reduktion, dann ist das

32:55.440 --> 32:59.600
gegenüber zum Beispiel dem Konfusionsnetzwerk deutlich mehr.

32:59.680 --> 33:02.840
Beim Konfusionsnetzwerk hatten wir so zwei bis vier Prozent relative

33:02.840 --> 33:06.600
Reduktion und hier bin ich sowas in der Größenordnung elf bis zwölf

33:06.600 --> 33:09.700
Prozent relative Reduktion der Wortfehlerrate.

33:11.260 --> 33:17.520
Und jetzt gibt es dann entsprechend noch ein Verfahren, das noch mal

33:17.520 --> 33:22.040
fortschrittlicher ist, wo ich dann verschiedene Systeme miteinander

33:22.040 --> 33:28.760
kombiniere, aber nicht anhand der einzelnen First-Best-Wort

33:28.760 --> 33:33.180
-Hypothesen, sondern ich kann im Prinzip diese Kombination auch machen

33:33.180 --> 33:35.960
mit Hilfe von Konfusionsnetzwerken oder Lattices.

33:36.700 --> 33:39.420
Bei der Lattice von einem System, die habe ich einfach

33:40.820 --> 33:44.360
zusammenschrumpfen lassen auf so ein Konfusionsnetzwerk mit Hilfe

33:44.360 --> 33:46.180
dieses iterativen Verfahrens.

33:46.480 --> 33:49.760
Wenn ich jetzt aber drei Systeme hätte, die die gleiche Audiodatei

33:49.760 --> 33:54.180
dekodiert haben, die könnten mir drei Lattices liefern, die fangen

33:54.180 --> 33:56.880
alle zur gleichen Zeit an und hören alle zur gleichen Zeit auf.

33:57.360 --> 34:00.340
Das heißt, ich könnte diese drei Lattices ganz einfach zu einer

34:00.340 --> 34:03.060
einzigen großen Lattice machen, indem ich einfach den Anfang und die

34:03.060 --> 34:05.520
Ende zusammenklebe.

34:05.980 --> 34:07.680
Und dann hätte ich wieder eine große Lattice.

34:08.160 --> 34:10.200
Darauf kann man wieder das Ganze anwenden mit dieser

34:10.200 --> 34:12.520
Konfusionsnetzwerkkonstruktion.

34:12.980 --> 34:16.400
Und auf die Art und Weise kann ich dann zum Beispiel auch mehrere

34:16.400 --> 34:20.220
Systeme miteinander kombinieren, von denen ich dann aber Lattices

34:20.220 --> 34:20.840
haben muss.

34:21.180 --> 34:25.740
Und das führt dann nochmal zu etwas besseren Verbesserungen.

34:29.900 --> 34:33.260
Wo wir jetzt schon bei Problemen sind oder Sachen, die an der

34:33.260 --> 34:36.180
Fundamentalformel vielleicht nicht so toll sind und die man besser

34:36.180 --> 34:40.460
machen kann, kommen wir auch nochmal auf ein Problem zurück, das ich

34:40.460 --> 34:43.520
schon angesprochen hatte, zwischendurch immer mal wieder.

34:44.180 --> 34:47.920
Wenn wir das akustische Modell trainieren, dann machen wir das in der

34:47.920 --> 34:51.060
Regel nach der Maximum-Likelihood-Methode mit Hilfe des EM

34:51.060 --> 34:51.700
-Algorithmus.

34:52.320 --> 34:59.040
Sprich, für eine Menge an Trainingsdaten groß T, finde ich die

34:59.040 --> 35:04.800
Parameter Lambda für die HMMs, die dafür sorgen, dass also die

35:04.800 --> 35:09.160
Wahrscheinlichkeit, mit der die HMMs die Trainingsdaten hervorgebracht

35:09.160 --> 35:10.380
haben, maximal wird.

35:11.480 --> 35:15.140
Und da hatten wir schon diskutiert, das muss nicht notwendigerweise

35:15.140 --> 35:20.540
dazu führen, dass ich auch ein optimales Modell bekomme, das für die

35:20.540 --> 35:21.820
Erkennung besonders gut ist.

35:22.580 --> 35:26.920
Denn wenn ich eine besonders gute Erkennung haben will, dann bedeutet

35:26.920 --> 35:30.760
das eigentlich, dass ich diese Entscheidungsgrenze, die ich habe,

35:31.280 --> 35:32.540
möglichst scharf haben möchte.

35:33.300 --> 35:39.040
Wenn man sich das also im allgemeinen Klassifikationsfall anschaut,

35:48.690 --> 35:59.200
also angenommen, ich habe Klassen, ich habe rote Kreuze und ich habe

35:59.200 --> 36:00.040
grüne Kreuze,

36:05.340 --> 36:08.600
dann ist die Entscheidungsgrenze, die ich haben möchte, eine, die

36:08.600 --> 36:12.440
möglichst in der Mitte zwischen beiden liegt.

36:14.520 --> 36:19.260
Das hier wäre durchaus auch eine valide Grenze und das hier ist auch

36:19.260 --> 36:20.160
eine valide Grenze.

36:21.860 --> 36:25.120
Und diese HMMs machen ja nichts anderes, als dass sie so eine Grenze

36:25.120 --> 36:28.440
irgendwie implizit festlegen, indem sie die Wahrscheinlichkeiten halt

36:28.440 --> 36:28.920
festlegen.

36:29.620 --> 36:34.160
Und wenn ich nur das an Trainingsdaten habe, dann wäre ein HMM, das so

36:34.160 --> 36:38.120
eine Grenze hervorbringt, durchaus möglicherweise eins, das die

36:38.120 --> 36:40.320
Trainingsdaten mit höchster Wahrscheinlichkeit hervorbringt.

36:40.720 --> 36:44.580
Es garantiert mir rein gar nichts an diesem EM-Algorithmus, dass hier

36:44.580 --> 36:48.040
so eine Grenze gefunden wird, die möglichst gut die eine Klasse von

36:48.040 --> 36:51.300
der anderen Klasse separiert, die ja da möglichst gut diskriminiert.

36:53.680 --> 36:57.340
Wenn man das jetzt auf Spracherkennung überträgt, dann haben wir halt

36:57.340 --> 37:00.620
keine Kreuze mehr, grüne und rote, sondern was wir dann haben, sind

37:00.620 --> 37:01.560
halt Wortfolgen.

37:02.020 --> 37:05.900
Das heißt, dieser Merkmalsraum oder was, wie man ihn nennen möchte,

37:06.260 --> 37:08.640
der ist viel, viel, viel höher dimensionaler und viel, viel, viel

37:08.640 --> 37:09.260
komplexer.

37:10.440 --> 37:14.500
Was ich aber gerne möchte hinterher, wäre, dass ich ein Modell

37:14.500 --> 37:19.780
bekomme, das mir möglichst sagt, diese Wortfolge, die korrekte

37:19.780 --> 37:22.740
Wortfolge, hat die höchste Wahrscheinlichkeit.

37:23.600 --> 37:27.340
Und alle anderen Wortfolgen, die nicht korrekt sind, die haben

37:27.340 --> 37:29.740
möglichst eine möglichst kleine Wahrscheinlichkeit.

37:30.420 --> 37:37.000
Das heißt, der Abstand von der richtigen Wortfolge zur nächstbesten

37:37.000 --> 37:40.140
Wortfolge, mit der zweithöchsten Wahrscheinlichkeit für diese

37:40.140 --> 37:43.580
Audioaufnahme, dieser Abstand sollte möglichst groß werden.

37:44.680 --> 37:48.020
Der sollte möglichst weit weg sein, damit ich dann hinterher, wenn ich

37:48.020 --> 37:52.420
neue Sachen klassifiziere, auch mit besserer Wahrscheinlichkeit, mit

37:52.420 --> 37:55.920
besserer Genauigkeit, mit geringerer Fehlerwahrscheinlichkeit, diese

37:55.920 --> 37:57.580
Klassifikation durchführen kann.

37:59.820 --> 38:05.880
Und um das hinzubekommen, muss man halt anderes Training als dieses EM

38:05.880 --> 38:06.520
-Training machen.

38:07.720 --> 38:11.480
Und eines der Grundprobleme beim EM-Training und beim Maximum

38:11.480 --> 38:14.620
-Likelihood -Training ist halt das, dass ich nur anhand von

38:14.620 --> 38:16.020
Positivbeispielen lerne.

38:16.500 --> 38:19.620
Das heißt, ich habe lauter Beispiele, von denen weiß ich, das ist die

38:19.620 --> 38:22.700
Klasse und das ist das Trainingsbeispiel.

38:22.860 --> 38:26.300
Also diese Audioaufnahme ist diese Wortfolge und diese Audioaufnahme

38:26.300 --> 38:27.440
ist diese andere Wortfolge.

38:28.120 --> 38:31.180
Ich habe aber niemals so was wie, das ist eine Audioaufnahme und das

38:31.180 --> 38:32.620
ist nicht die korrekte Wortfolge.

38:33.020 --> 38:36.280
Diese Negativbeispiele habe ich nicht beim Lernen.

38:37.000 --> 38:40.620
Und deswegen muss man sich irgendwas überlegen, wie bekomme ich das

38:40.620 --> 38:45.020
jetzt rein, dass ich auch aus negativen Beispielen lernen kann.

38:46.920 --> 38:50.180
Wenn man sich anschaut, wie neuronale Netze das machen, die machen

38:50.180 --> 38:50.440
das.

38:51.260 --> 38:55.780
Neuronale Netze lernen auch auf den Negativbeispielen.

38:56.240 --> 38:56.480
Warum?

38:56.700 --> 38:59.260
Naja, in so einem neuronalen Netz, da oben habe ich irgendwo die

38:59.260 --> 39:02.900
Ausgabeschicht, zum Beispiel für jede Klasse ein Neuron.

39:03.100 --> 39:08.800
Und dann lerne ich meine Gewichte so, dass ich ein gewisses Fehlermaß

39:08.800 --> 39:09.340
optimiere.

39:09.420 --> 39:14.580
Und dieses Fehlermaß, das ich halt optimiere, ist zum Beispiel so was

39:14.580 --> 39:20.180
wie Minimum Squared Error, also minimaler quadrierter Error oder halt

39:20.180 --> 39:24.280
auch die Crossentropie, dass ich mit Crossentropie-Kriterium arbeite.

39:24.860 --> 39:28.840
Und da in diese Berechnung der Kriterien fließt immer mit ein, so gut

39:28.840 --> 39:33.660
wird die richtige Folge berechnet und diese anderen Klassen, für die

39:33.660 --> 39:41.060
es jetzt gerade nicht sind, wie gut werden die bewertet unter den

39:41.060 --> 39:43.480
aktuellen Gewichten mit diesem für sie falschen Beispiel.

39:43.580 --> 39:46.280
Das fließt alles mit rein in diesem Minimum Squared Error oder in die

39:46.280 --> 39:49.280
Crossentropie und basierend darauf werden dann halt entsprechend die

39:49.280 --> 39:50.120
Gewichte optimiert.

39:50.920 --> 39:53.200
Und sowas hätte ich halt gerne bei der Spracherkennung auch.

39:56.720 --> 40:00.860
Ein erster einfacher Ansatz ist, sowas mit Hilfe von korrektivem

40:00.860 --> 40:06.260
Training zu machen, wenn man möglichst wenig ändern will.

40:06.880 --> 40:10.840
Und eine Möglichkeit wäre dann halt, dass man halt normales

40:10.840 --> 40:13.940
Baumwelschtraining wie Turbitraining mit dem EM-Algorithmus macht.

40:14.580 --> 40:18.320
Und danach führe ich mit dem gelernten Modell eine Erkennung auf

40:18.320 --> 40:19.680
meinen Trainingsdaten durch.

40:20.580 --> 40:28.680
Und dann werde ich feststellen, es gibt irgendwo Fehler in meiner

40:28.680 --> 40:29.180
Erkennung.

40:29.340 --> 40:34.260
Wenn ich mir den Pfad anschaue, dann hat der halt korrekte Anteile und

40:34.260 --> 40:37.500
falsch erkannte Abschnitte.

40:38.100 --> 40:42.220
Und wenn ich dann falsch erkannte Abschnitte habe auf den

40:42.220 --> 40:45.780
Trainingsdaten, dann ist zum Beispiel eine Idee, dass ich diese falsch

40:45.780 --> 40:51.520
erkannten Abschnitte aus dem Training herausnehme.

40:53.560 --> 41:03.760
Dass die sozusagen, dieser falsch oder nicht gut erkannten Abschnitte,

41:03.800 --> 41:05.540
dass die sozusagen neutralisiert wird.

41:09.370 --> 41:11.990
Weil irgendwas scheint ja schiefgegangen zu sein.

41:12.070 --> 41:15.330
Aus irgendeinem Grund werde ich da ja irgendwie nicht in die falsche

41:15.330 --> 41:19.030
Richtung gelernt haben, wenn ich auf den Teilen arbeite.

41:22.890 --> 41:26.730
Oder ich kann halt versuchen, mein Training, mein

41:26.730 --> 41:31.510
Optimierungskriterium anders zu definieren.

41:32.490 --> 41:35.810
Wenn ich jetzt wieder auf die normale Fundamentalformel gucke, dann

41:35.810 --> 41:39.770
ist da ja das Kriterium, nach dem ich hinter dekordiere, ich hole die

41:39.770 --> 41:42.930
Wortfolge mit der höchsten Aposteoriewahrscheinlichkeit raus.

41:44.310 --> 41:52.990
Wenn ich jetzt trainiere nach dem normalen Maximum Likelihood, dann

41:52.990 --> 41:56.770
maximiere ich hier nur diesen Term in diesem Quotienten.

41:57.150 --> 41:59.910
Das ist ja mit der Bayes-Formel zerlegt und dann hat man hier P von X,

41:59.950 --> 42:01.470
W mal P von W durch P von X.

42:02.010 --> 42:05.710
Und beim EM-Training des akustischen Modelles maximiere ich nur diesen

42:05.710 --> 42:06.030
Term.

42:06.690 --> 42:09.990
Die anderen Terme und wie die dazueinander in Verbindung stehen, da

42:09.990 --> 42:11.130
steht überhaupt nichts für drin.

42:12.190 --> 42:15.410
Zu diesem P von X hat man schon gesagt, das ist ja eigentlich konstant

42:15.410 --> 42:16.070
in den Worten.

42:16.550 --> 42:21.590
Jetzt kann man das P von X auch noch umformulieren, so dass es auch

42:21.590 --> 42:23.630
über alle möglichen Wörter definiert wird.

42:24.190 --> 42:27.370
Dieses P von X kann ich auch wieder zerlegen als die

42:27.370 --> 42:32.230
Wahrscheinlichkeit summiert über alle Wörter, dass es die Audiodatei X

42:32.230 --> 42:34.330
war gegeben, W mal den P von W.

42:35.230 --> 42:42.350
Und wenn wir uns das jetzt umformulieren, dann heißt das, dass wir

42:42.350 --> 42:45.850
hier Modellparameter trainieren wollen.

42:45.910 --> 42:48.190
Die habe ich einmal hier oben drin stecken und die habe ich dann bei

42:48.190 --> 42:52.610
dieser Umformulierung von P von X da unten drin stecken und möchte die

42:52.610 --> 42:58.650
jetzt so optimieren, dass dieser gesamte Quotient maximiert wird.

43:00.410 --> 43:05.750
Das heißt also, ich suche jetzt nicht ein Tätersternchen, so dass P

43:05.750 --> 43:09.390
von X gegeben W Tätersternchen maximal wird, sondern ich suche jetzt

43:09.390 --> 43:14.010
ein Tätersternchen, so dass P von W gegeben X und meine

43:14.010 --> 43:16.790
Modellparameter Täter maximal wird.

43:16.910 --> 43:20.730
Das ist sozusagen intern, die Konditionierung über die Variablen wird

43:20.730 --> 43:21.310
umgedreht.

43:21.930 --> 43:25.170
Das kann ich jetzt entsprechend umformen, so dass ich dann hier stehen

43:25.170 --> 43:30.970
habe, dieses P von X W Täter mal P von W gegeben, diese Summe über

43:30.970 --> 43:33.490
alle W, P von X gegeben, W Täter P von W.

43:36.950 --> 43:42.070
Wenn man sich jetzt diese anschaut, diese Formel, dann kann man das

43:42.070 --> 43:45.830
Ganze interpretieren als Mutual Information, als

43:49.530 --> 43:49.970
Transinformation.

43:49.970 --> 43:54.570
Diese Transinformation zwischen zwei Zufallsgrößen, die gibt an, ob

43:54.570 --> 43:58.150
die irgendwie statistisch stark miteinander zusammenhängen oder nicht.

43:58.670 --> 44:01.210
Das heißt, wenn ich die eine ändere, ändert sich auch die andere.

44:03.350 --> 44:07.450
Wenn also kein Zusammenhang besteht, dann verschwindet diese

44:07.450 --> 44:10.290
Transinformation, dann geht die gegen Null und wenn die beiden

44:10.290 --> 44:15.430
komplett voneinander abhängig sind, wenn ich also zum Beispiel die

44:15.430 --> 44:18.410
eine Größe aus der anderen berechnen kann, dann wird diese

44:18.410 --> 44:19.950
Transinformation maximal.

44:21.370 --> 44:24.810
Und wenn ich mir Transinformationen anschaue und ich will die

44:24.810 --> 44:33.110
maximieren, dann reicht es, wenn ich den Logarithmus dieses Terms

44:33.110 --> 44:33.750
maximiere.

44:33.810 --> 44:36.530
Und wenn ich das umforme, dann bin ich gerade wieder bei der

44:36.530 --> 44:40.310
Logarithmierung dessen, was ich vorher gesehen habe, dass es die

44:40.310 --> 44:45.610
Posteriori -Wahrscheinlichkeit der Wortfolge gegebener Aufnahme

44:45.610 --> 44:46.150
darstellt.

44:46.610 --> 44:48.830
Das Einzige, was ich halt maximiere, ist der Logarithmus.

44:50.290 --> 44:53.570
Wenn ich aber den Logarithmus hiervon maximiere, dann maximiere ich

44:53.570 --> 44:57.130
gleichzeitig auch den Term, der im Logarithmus steht, weil der

44:57.130 --> 44:58.710
Logarithmus halt streng monotom ist.

44:59.150 --> 45:03.670
Das heißt, wenn ich die Transinformation zwischen den Wortfolgen wi

45:03.670 --> 45:08.810
und der Audioaufnahme x maximiere, dann maximiere ich damit

45:08.810 --> 45:11.130
gleichzeitig die Posteriori-Wahrscheinlichkeit.

45:12.310 --> 45:19.610
Und man kann dann zeigen, dass wenn ich das Ganze so maximiere, dass

45:19.610 --> 45:23.810
ich also die MMI maximiere, dann maximiere ich auch die Posteriori

45:23.810 --> 45:24.530
-Wahrscheinlichkeit.

45:25.450 --> 45:32.030
Und dann kann man halt entsprechend ein bisschen was umformen und kann

45:32.030 --> 45:37.010
zu so einer Formulierung kommen von dieser Posteriori

45:37.010 --> 45:38.570
-Wahrscheinlichkeit, die so aussieht.

45:39.050 --> 45:42.510
Der Trick ist, den ich da mache, hier unten habe ich ja die Summe über

45:42.510 --> 45:45.070
alle möglichen Wortfolgen drin stehen.

45:45.450 --> 45:47.050
Und jetzt mache ich eine Fallunterscheidung.

45:47.550 --> 45:52.170
Ich gucke mir einmal an, die Wortfolge, die oben im Zähler steht, plus

45:52.170 --> 45:54.770
alle anderen Wortfolgen.

45:55.210 --> 45:57.730
Und wenn ich das mache, dann kann ich halt diese Umformung machen,

45:57.730 --> 46:01.110
dass daraus wird 1 durch 1 plus und so weiter und so fort.

46:01.590 --> 46:07.270
Das heißt, ich kann genauso gut das hier minimieren, dann habe ich den

46:07.270 --> 46:11.270
gesamten Quotienten maximiert.

46:14.650 --> 46:17.670
Oder umgekehrt, wenn ich es wieder als Maximierungsproblem darstellen

46:17.670 --> 46:20.950
will, dann kann ich halt auch hier den Quotienten umdrehen.

46:21.050 --> 46:23.910
Und wenn ich den dann maximiere, den hier, dann habe ich die ganze

46:23.910 --> 46:26.790
Posteriori -Wahrscheinlichkeit maximiert.

46:27.110 --> 46:32.050
Das heißt also, was ich jetzt maximieren möchte, ist dieser Term.

46:32.550 --> 46:35.210
Ich brauche wieder p von x gegeben wie i, das ist meine

46:35.210 --> 46:40.390
Trainingswortfolge, meine Trainingsaufnahme, geteilt durch Summe aller

46:40.390 --> 46:44.470
Wortfolgen, die sich von der hier unterscheiden, davon die

46:44.470 --> 46:46.210
klassenbedingte Wahrscheinlichkeit mal der

46:46.210 --> 46:47.950
Sprachmodellwahrscheinlichkeit.

46:50.290 --> 46:52.790
Und wenn man das Ganze dann noch wieder mit dem Logarithmus versieht,

46:53.250 --> 46:57.690
dann ergibt sich dann halt, dass ich diese Summe maximieren muss.

46:59.950 --> 47:04.010
Und wenn ich mir das dann anschaue, wie ich das interpretieren soll,

47:04.310 --> 47:05.030
was heißt das?

47:05.150 --> 47:11.930
Was da im Prinzip passiert im Log-Bereich ist, dass hier diesen Term,

47:12.010 --> 47:15.330
den ich eigentlich ursprünglich in der Fundamentalformel drinnen

47:15.330 --> 47:17.630
stehen habe, akustische Modellwahrscheinlichkeit mal

47:17.630 --> 47:22.650
Sprachmodellwahrscheinlichkeit, der soll möglichst weit wegliegen von

47:22.650 --> 47:23.930
allen anderen Hypothesen.

47:24.470 --> 47:27.650
Das heißt, das ist also gerade genau dieses diskriminative Kriterium,

47:27.770 --> 47:31.650
dass ich möchte, dass die Wortfolge, die die richtige ist, dass deren

47:31.650 --> 47:34.970
Wahrscheinlichkeit möglichst weit entfernt liegt von allen anderen

47:34.970 --> 47:36.810
Wortfolgen, die halt nicht die richtige sind.

47:46.860 --> 47:48.100
Gut, erstmal das da.

47:54.060 --> 47:58.560
Man kann in der Theorie durch theoretische Betrachtung zeigen, dass

47:58.560 --> 48:01.420
wenn man jetzt die korrekten a priori Wahrscheinlichkeiten hätte und

48:01.420 --> 48:04.780
die korrekten klassenbedingten Wahrscheinlichkeiten, dass dann

48:04.780 --> 48:08.860
eigentlich das Maximum Likelihood trotzdem zu besseren Ergebnissen

48:08.860 --> 48:10.620
kommen sollte als das MMII.

48:12.000 --> 48:16.100
In der Praxis sieht man dann aber, dass das in der Theorie nicht der

48:16.100 --> 48:23.160
Fall ist, weil eben die MMII aus den falschen Hypothesen Informationen

48:23.160 --> 48:24.020
mit rein ließ.

48:24.460 --> 48:28.480
Und das liegt einfach wieder daran, dass wir am Ende auch

48:28.480 --> 48:29.680
Modelldefizite haben.

48:30.320 --> 48:34.000
Dass also das HMM, das wir verwenden und die N-Gramm-Modelle, die wir

48:34.000 --> 48:36.600
verwenden, nicht die korrekten Modelle sind.

48:37.400 --> 48:40.380
Wir also nicht korrekte a posteriori Wahrscheinlichkeiten, nicht

48:40.380 --> 48:44.400
korrekte klassenbedingte Wahrscheinlichkeiten berechnen, sondern

48:44.400 --> 48:47.160
unsere Modelle sind fehlerhaft und dann sind die Parameter noch

48:47.160 --> 48:49.940
fehlerhaft geschätzt, weil wir nicht unendlich viele Trainingsdaten

48:49.940 --> 48:50.200
haben.

48:50.980 --> 48:54.600
Und dann ist es so in der Praxis, dass das MMII trotzdem besser

48:54.600 --> 48:58.300
funktioniert als das Maximum Likelihood, obwohl man in der Theorie

48:58.300 --> 49:01.740
zeigen könnte, dass eigentlich das Maximum Likelihood besser sein

49:01.740 --> 49:02.400
sollte.

49:03.200 --> 49:07.540
Und der Grund ist einfach, dass halt das MMII halt aus den falschen

49:07.540 --> 49:11.300
Hypothesen mitlernt und deshalb man sozusagen robuster wird gegen

49:11.300 --> 49:15.380
Fehler, die man im Modell hat und robuster gegen Fehler, die man in

49:15.380 --> 49:17.840
den Schätzungen der Parameter hat.

49:18.580 --> 49:21.860
Das Problem ist natürlich, das MMII ist sicherlich deutlich

49:21.860 --> 49:24.220
aufwendiger zu berechnen als Maximum Likelihood.

49:24.940 --> 49:27.880
Ich habe halt hier wieder das Problem, dass ich nicht nur die aktuelle

49:27.880 --> 49:30.660
Worthypothese anschauen muss, sondern ich muss mir wieder theoretisch

49:30.660 --> 49:35.300
alle möglichen Worthypothesen anschauen, die anders sind als die

49:35.300 --> 49:38.020
Referenz zu der aktuellen Audioaufnahme.

49:38.820 --> 49:41.500
Gut, jetzt haben wir das schon ein paar Mal gehabt, dieses Problem.

49:41.620 --> 49:42.540
Was machen wir also?

49:44.200 --> 49:45.300
Möglichkeit Nummer 1.

49:47.960 --> 49:50.660
Wenn ich da so etwas stehen habe, wie summieren wir irgendwas über

49:50.660 --> 49:55.200
alle möglichen Wortfolgen, multiplizieren wir irgendwas über alle

49:55.200 --> 49:57.060
möglichen Wortfolgen, was ist Lösung 1?

49:59.840 --> 50:01.720
Wir haben das bei einem Konfusionsnetzwerk gemacht.

50:02.640 --> 50:04.480
Möglichkeit Nummer 1 ist die N-Besten-Liste.

50:04.480 --> 50:05.640
Möglichkeit Nummer 2.

50:08.040 --> 50:09.780
Was funktioniert besser als N-Besten-Listen?

50:13.550 --> 50:15.550
Habe ich gerade eine halbe Stunde drüber gelabert.

50:18.570 --> 50:20.270
Was funktioniert besser als N-Besten-Listen?

50:22.950 --> 50:24.510
Lettices, Wortgrafen.

50:25.190 --> 50:29.190
Das heißt also hier an die Stelle nehme ich halt nicht wieder alle

50:29.190 --> 50:31.450
möglichen Wortfolgen, die sich von der aktuellen unterscheiden,

50:31.770 --> 50:35.010
sondern ich hole mir die raus aus N-Besten-Listen oder entsprechend

50:35.010 --> 50:36.290
aus Wortgrafen.

50:36.390 --> 50:41.870
Und da wir wissen, dass Wortgrafen besser funktionieren als N-Besten

50:41.870 --> 50:44.690
-Listen, macht man das in der Regel auch, wenn man es gut macht, über

50:44.690 --> 50:45.950
Wortlettices.

50:48.610 --> 50:50.770
Jetzt ist natürlich das zweite Problem noch.

50:51.430 --> 50:56.390
Also hier statt alle möglichen Wortfolgen nehme ich N-Besten-Listen

50:56.390 --> 50:58.410
oder was auch immer mir der Wortgraf hergibt.

50:59.050 --> 51:02.230
Das löst mir aber jetzt noch immer nicht das Problem, dass ich hier in

51:02.230 --> 51:06.450
diesem Schritt einen Täter finden möchte, dass dieser ganze diese

51:06.450 --> 51:07.390
Summe maximiert.

51:08.530 --> 51:11.850
Bei Maximum Likelihood konnte man zeigen, dass durch ein EM

51:11.850 --> 51:14.990
-Algorithmus hat man dann ein iteratives Verfahren, dass einen da

51:14.990 --> 51:17.390
gegen ein lokales Optimum iteriert.

51:17.850 --> 51:22.170
Hier hat man jetzt das Problem, dass es da nicht sowas gibt wie ein EM

51:22.170 --> 51:25.170
-Algorithmus, sondern was man da machen muss ist, da muss ich so aus

51:25.170 --> 51:29.850
dem allgemeinen Werkzeugkasten der Funktionenoptimierung bedienen, zum

51:29.850 --> 51:34.090
Beispiel Gradientenabstieg, so wie man es bei normalen neuronalen

51:34.090 --> 51:35.730
Netzen macht.

51:36.810 --> 51:39.610
Und das ist das, was man mal am Anfang in den 80er Jahren halt

51:39.610 --> 51:44.710
entsprechend für MMII verwendet hat, dass man halt Gradient immer in

51:44.710 --> 51:47.570
den Tetas geschätzt hat, dann entsprechend in die Richtung des

51:47.570 --> 51:49.710
Gradienten gegangen ist und dann hat man dann halt entsprechend

51:49.710 --> 51:50.230
iteriert.

51:50.690 --> 51:56.350
Hat das ganze Problem, dass so Gradientenabstiegsverfahren haben.

51:56.430 --> 51:58.950
Ich brauche eine Lernrate, zum Beispiel, um die richtige Richtung zu

51:58.950 --> 52:03.370
gehen, plus ich habe hier noch, hier glücklicherweise nicht das

52:03.370 --> 52:06.570
Problem, ich habe hier zumindest einen kontinuierlichen Gradienten, da

52:06.570 --> 52:09.770
ich hier mit Wahrscheinlichkeiten arbeite, aber ich muss dann trotzdem

52:09.770 --> 52:13.190
Lernraten schätzen und so weiter, brauche einen Startpunkt und so

52:13.190 --> 52:13.910
weiter und so fort.

52:14.290 --> 52:18.490
Aber so hat man das am Anfang gemacht und dann kam jemand auf die gute

52:18.490 --> 52:22.350
Idee und hat sich nochmal den EM-Algorithmus und die Baumwelchregeln

52:22.350 --> 52:22.890
angeschaut.

52:24.430 --> 52:29.370
Und was man da machen kann ist, dass man diese Baumwelchregeln

52:33.070 --> 52:39.730
erweitert, um den Anteil, der jetzt durch das MMII-Training

52:39.730 --> 52:40.410
hinzukommt.

52:41.050 --> 52:43.630
Bei den Baumwelchregeln, wenn man sich zum Beispiel anschaut, wie die

52:43.630 --> 52:46.770
Mittelwertsvektoren der Gaussglocken geschätzt wurden, da hat man

52:46.770 --> 52:54.630
diese Gammas mal gezählt, also man bildet im Prinzip das gewichtete

52:54.630 --> 52:58.170
arithmetische Mittel über alle Trainingsvektoren, die jetzt zu diesem

52:58.170 --> 53:00.970
Trainingsbeispiel gehören, gewichtet mit der Wahrscheinlichkeit, dass

53:00.970 --> 53:03.190
jetzt gerade diese Gausskomponente und so weiter das Ding

53:03.190 --> 53:04.030
hervorgebracht hat.

53:04.730 --> 53:09.350
Und wenn man jetzt anfängt, sich alle anderen anzuschauen, dann hat

53:09.350 --> 53:11.250
man hier sowas, das nennt man die Competing.

53:11.650 --> 53:16.170
Das sind dann alle die, die es nicht waren laut Referenz und zieht die

53:16.170 --> 53:21.070
wieder davon ab, von dem, was man dafür aufakkumuliert für die

53:21.070 --> 53:24.850
Schätzung der Mittelwertsvektoren beim Maximum-Leitlinien-Training.

53:26.310 --> 53:30.650
Und dann gibt es halt hier entsprechend noch einen Parameter d, der

53:30.650 --> 53:35.130
bestimmt, wie weit man in einer gewissen Weise abzieht.

53:35.630 --> 53:40.390
Das addiert nämlich dann entsprechend noch mal den alten, der

53:40.390 --> 53:44.610
eigentlich genommen werden sollte beim normalen Update, noch mal mit

53:44.610 --> 53:44.870
drauf.

53:44.950 --> 53:48.630
Das heißt, auf die Art und Weise hat man so wie beim Gradientenabstieg

53:48.630 --> 53:51.970
so eine Art Schrittweise, um wie stark man jetzt diesem korrektiven

53:51.970 --> 53:55.310
Einfluss dieser Informationen, die man hat für alle anderen, die es

53:55.310 --> 53:56.790
nicht waren, mit einfließen lässt.

53:58.910 --> 54:02.310
Was man feststellen wird, ist, dass dieser MMI-Suchraum nicht sehr

54:02.310 --> 54:03.670
glatt ist.

54:04.350 --> 54:10.990
Dass der also sehr, nicht unstetig, aber sehr, sehr steil in den

54:10.990 --> 54:14.450
Parametern, die ich da optimieren will, den Parametern des HMMs

54:14.450 --> 54:14.950
verläuft.

54:15.550 --> 54:18.390
Und wenn so etwas sehr steil verläuft, dann habe ich zum Beispiel bei

54:18.390 --> 54:20.310
solchen Sachen wie Gradientenabstieg etc.

54:20.850 --> 54:23.150
immer ein Problem, dass ich zum Beispiel ganz schnell in so einer

54:23.150 --> 54:25.910
Schlucht, wo das lokale Maximum ist, drin stecken bleibe.

54:26.690 --> 54:30.350
Und da hilft es zum Beispiel entweder mit sowas wie einem Momentum-

54:30.350 --> 54:38.530
oder die andere Möglichkeit ist, dass ich diesen Suchraum, in dem ich

54:38.530 --> 54:41.850
nach den optimalen Parametern suche, indem ich den einfach glätte.

54:42.170 --> 54:45.190
Dass man da so bestimmte Glättungstechniken darauf anwendet.

54:45.510 --> 54:49.210
Und eine Glättungstechnik, die man halt verwendet ist, dass man die

54:49.210 --> 54:53.550
Neuschätzung dieser Parameter interpoliert mit dem, was man

54:53.550 --> 54:56.430
normalerweise beim Expectation-Maximization machen würde.

54:59.770 --> 55:02.890
Dann, wenn man sich noch das MMI-Training anschaut, ich muss ja

55:02.890 --> 55:05.250
irgendwie so einen Wortgraf erstellen.

55:05.370 --> 55:07.450
Und wenn ich einen Wortgraf erstelle, dann heißt das, dass ich

55:07.450 --> 55:07.970
dekodiere.

55:08.090 --> 55:11.730
Das heißt, ich muss irgendwie meine Trainingsdaten dekodieren.

55:12.250 --> 55:14.550
Damit ich meine Trainingsdaten dekodieren kann, brauche ich ein

55:14.550 --> 55:14.910
Modell.

55:15.170 --> 55:17.910
Gut, trainiert man halt mit Maximum-Likelihood erstmal ein erstes

55:17.910 --> 55:18.270
Modell.

55:18.670 --> 55:21.030
Damit dekodiere ich meine Trainingsdaten.

55:22.110 --> 55:24.870
Und jetzt kann man sich überlegen, ja Moment, wenn ich dekodiere, dann

55:24.870 --> 55:26.270
habe ich da auch ein Sprachmodell drin.

55:26.690 --> 55:29.430
Ich will aber jetzt hier in dem Fall nicht mein Sprachmodell

55:29.430 --> 55:29.790
trainieren.

55:29.890 --> 55:31.710
Ich trainiere nur mein akustisches Modell.

55:32.450 --> 55:35.710
Und das Sprachmodell hat durchaus die Möglichkeit, Fehler im

55:35.710 --> 55:38.290
akustischen Modell zu kaschieren oder auszugleichen.

55:38.370 --> 55:41.650
Also wo das akustische Modell was Falsches sagt, das Sprachmodell das

55:41.650 --> 55:43.010
Ganze doch nochmal übertrifft.

55:43.610 --> 55:46.470
Gleichzeitig ist das Sprachmodell aber wichtig bei der Berechnung der

55:46.470 --> 55:47.890
Aposteoriewahrscheinlichkeit.

55:48.510 --> 55:52.030
Und was man da deshalb häufig macht, ist, dass man kein starkes,

55:52.130 --> 55:53.650
sondern ein schwaches Sprachmodell nimmt.

55:54.170 --> 55:58.070
Damit halt doch der Fokus darauf liegt, das akustische Modell zu

55:58.070 --> 56:01.470
optimieren und dass nicht dessen Fehler durch das Sprachmodell

56:01.470 --> 56:02.730
ausgeglichen werden.

56:03.130 --> 56:05.410
Und deswegen dekodiert man zum Beispiel mit einem Unigram

56:05.410 --> 56:06.070
-Sprachmodell.

56:06.730 --> 56:09.850
Hat auch den Vorteil, dass dadurch das Dekodieren deutlich schneller

56:09.850 --> 56:10.490
werden kann.

56:12.030 --> 56:17.650
Kriegt diesen Wortgrafen raus und macht dann mehrere Iterationen

56:17.650 --> 56:19.290
dieser Extended-Baum-Weltschräge.

56:20.210 --> 56:22.470
Währenddessen kann man den Wortgrafen konstant halten.

56:23.190 --> 56:25.470
Und wenn man dann mehrere Iterationen gemacht hat, wenn man viel

56:25.470 --> 56:28.150
Arbeit reinstecken will, kann man nochmal dekodieren.

56:28.250 --> 56:30.090
In der Praxis bringt es dann meistens nicht mehr.

56:33.210 --> 56:36.910
Und was man auch noch festgestellt hat, das gilt allgemein für viele

56:36.910 --> 56:40.770
diskriminative Trainingsverfahren, dass man relativ sensibel ist in

56:40.770 --> 56:42.030
der Anzahl der Trainingsdaten.

56:42.250 --> 56:47.450
Also so diskriminative Lernverfahren haben in der Regel einen sehr

56:47.450 --> 56:48.530
großen Datenhunger.

56:49.210 --> 56:52.250
Es ist also meistens so, dass ich bei diskriminativen Lernverfahren

56:52.250 --> 56:54.930
mehr Trainingsdaten brauche, als bei so Maximum-Likelihood

56:54.930 --> 56:59.830
-Lernverfahren, dass die also durchaus empfindlicher sind gegenüber

56:59.830 --> 57:00.510
Overfitting.

57:01.350 --> 57:04.190
Und das wirklich diskriminative Trainingsverfahren immer dann am

57:04.190 --> 57:07.730
besten funktionieren, wenn ich wirklich mehr Trainingsdaten habe.

57:08.070 --> 57:10.710
Man muss sich das so vorstellen, das, was man mit Maximum-Likelihood

57:10.710 --> 57:13.570
hinterher aus dem Mehr an Trainingsdaten rausholen kann, ist dann

57:13.570 --> 57:17.430
deutlich weniger als das, was ich dann aus dem Mehr der Trainingsdaten

57:17.430 --> 57:19.550
durch diskriminatives Training herausholen kann.

57:21.910 --> 57:25.890
Und auch das hat man mal evaluiert und geschaut, wie gut das

57:25.890 --> 57:26.470
funktioniert.

57:27.090 --> 57:33.890
Und das sind wieder so Broadcast-News-Testsets, allerdings diesmal

57:33.890 --> 57:37.370
nicht auf Englisch, sondern auf nicht englischen Sprachen, Mandarin,

57:37.450 --> 57:38.350
Irak, Farsi.

57:39.610 --> 57:42.570
Und hat halt dann Modelle trainiert mit Maximum-Likelihood und mit

57:42.570 --> 57:47.410
MMII und sieht wieder, dass durch dieses neue Optimierungskriterium

57:47.410 --> 57:50.970
man plötzlich wieder viel bessere Ergebnisse bekommt und man auch so

57:50.970 --> 57:55.570
relative Verbesserungen in der Wortfehlerrate so um 8 bis 9 Prozent

57:55.570 --> 57:57.650
ungefähr erreichen kann.

58:00.900 --> 58:03.720
Dann gibt es noch ein alternatives Training.

58:03.920 --> 58:07.920
Ich meine, wir haben jetzt bisher diese Transinformation optimiert und

58:07.920 --> 58:11.180
haben festgestellt, wenn man die Transinformation optimiert, dann

58:11.180 --> 58:15.220
optimiert man die Aposteoriewahrscheinlichkeit der Wortfolge.

58:15.580 --> 58:18.440
Wenn ich die Aposteoriewahrscheinlichkeit der Wortfolge berechne und

58:18.440 --> 58:22.180
da ein bisschen rumrechne, stelle ich fest, dass ich damit dann im Log

58:22.180 --> 58:28.800
-Bereich die Distanz zwischen bester korrekter Wortfolge und allen

58:28.800 --> 58:31.580
nicht korrekten Wortfolgen, dass ich diese Distanz in der

58:31.580 --> 58:34.500
Wahrscheinlichkeit maximiere.

58:35.480 --> 58:39.100
Aber wir machen ja eigentlich, wir evaluieren ja hinterher unsere

58:39.100 --> 58:41.980
Spracherkenner mit Wortfehlerrate.

58:42.900 --> 58:45.320
Wäre es dann nicht sinnvoll, dann auch schon beim akustischen

58:45.320 --> 58:48.160
Modelltraining die Parameter so zu finden, dass nicht

58:48.160 --> 58:51.420
Aposteoriewahrscheinlichkeit oder klassenbedingte Wahrscheinlichkeit

58:51.420 --> 58:55.040
optimiert wird, wäre es nicht sinnvoll, die Parameter dann so zu

58:55.040 --> 58:57.740
finden, dass die Wortfehlerrate gleich optimiert wird.

58:59.300 --> 59:02.880
Dann, wenn man das macht, kommt man halt zu diesen Kriterien, die dann

59:02.880 --> 59:06.980
heißen Minimum Word Error Rate Training.

59:07.320 --> 59:09.960
Oder wenn ich allgemein sage, das ist Klassifikation, jetzt nicht

59:09.960 --> 59:13.020
unbedingt Spracherkennung, nennt man es halt Minimum Klassifikation

59:13.020 --> 59:13.860
Error Rate Training.

59:14.920 --> 59:17.500
Was ist die Klassifikation Error Rate bei der Spracherkennung?

59:19.180 --> 59:24.660
Wenn ich jetzt Konfusionsnetzwerke und den ganzen Kram rauslasse, ist

59:24.660 --> 59:27.200
dann Klassifikation Error Rate gleich Wortfehlerrate?

59:32.730 --> 59:33.790
Nein, weil?

59:34.510 --> 59:37.230
Was ist das Kriterium laut der Fundamentalformel?

59:39.310 --> 59:40.170
Satzfehlerrate, genau.

59:40.170 --> 59:43.370
Also eigentlich ist bei der Spracherkennung Minimum Klassifikation

59:43.370 --> 59:45.730
Error Training würde bedeuten, ich würde die Satzfehlerrate

59:45.730 --> 59:46.250
minimieren.

59:46.810 --> 59:49.770
Bei der Spracherkennung arbeiten wir mit der Wortfehlerrate, deswegen

59:49.770 --> 59:52.850
wollen wir da eigentlich gerne die Wortfehlerrate minimieren können.

59:58.090 --> 59:59.690
Jetzt könnte ich mir überlegen, es gibt ja

59:59.690 --> 01:00:03.170
Gradientenabstiegsverfahren, berechne ich halt die Wortfehlerrate und

01:00:03.170 --> 01:00:08.750
berechne dann den Gradienten in Abhängigkeit von den Parametern von

01:00:08.750 --> 01:00:10.450
der Wortfehlerrate und optimiere daran.

01:00:11.810 --> 01:00:13.490
Das funktioniert schon mal nicht.

01:00:14.010 --> 01:00:14.270
Warum?

01:00:14.810 --> 01:00:20.190
Damit ich ein Kriterium ableiten kann, muss es erst mal ableitbar

01:00:20.190 --> 01:00:20.550
sein.

01:00:21.410 --> 01:00:23.730
Und die Wortfehlerrate ist halt nicht ableitbar.

01:00:24.530 --> 01:00:28.990
Wenn ich mir das anschaue, wenn man das so visualisieren wollte, dann

01:00:28.990 --> 01:00:30.330
sieht das im Prinzip so aus.

01:00:33.110 --> 01:00:35.370
Also wir machen uns die Welt schön einfach.

01:00:40.310 --> 01:00:41.710
Ich habe zwei Dimensionen.

01:00:43.450 --> 01:00:46.490
Die eine Dimension ist der Wortfehler, die Wortfehlerrate.

01:00:48.670 --> 01:00:51.990
Und die andere Dimension, das sind die Parameter meines HMMs, das

01:00:51.990 --> 01:00:52.270
Theta.

01:00:54.230 --> 01:00:57.170
Und jetzt habe ich hier irgendwie ein Theta.

01:00:57.170 --> 01:00:59.150
Das ist natürlich viel hochdimensionaler.

01:00:59.230 --> 01:01:02.110
Ich habe natürlich zigtausende, abertausende Parameter.

01:01:02.230 --> 01:01:03.650
Aber ich habe jetzt erstmal hier nur eine Dimension.

01:01:04.230 --> 01:01:05.590
Dann habe ich hier eine Wortfehlerrate.

01:01:07.530 --> 01:01:13.090
Die sei hier x, sei 10%.

01:01:13.090 --> 01:01:15.850
Oder ich könnte genauso gut schreiben, dadurch dass meine

01:01:15.850 --> 01:01:19.410
Trainingsdate ist ja fix, das heißt die Anzahl der Referenzwörter ist

01:01:19.410 --> 01:01:22.930
fix, das heißt ich könnte hier genauso gut abtragen, Anzahl der

01:01:22.930 --> 01:01:23.230
Fehler.

01:01:23.650 --> 01:01:27.470
Also angenommen 10% seien 100 Fehler, abertausende Wörter,

01:01:27.550 --> 01:01:28.090
Trainingsdaten.

01:01:29.050 --> 01:01:33.610
Jetzt fange ich an, diese Parameter ein bisschen zu variieren.

01:01:35.490 --> 01:01:37.090
Ein klitzekleines bisschen habe ich sie variiert.

01:01:38.030 --> 01:01:39.190
Wie hoch ist dann die Wortfehlerrate?

01:01:39.550 --> 01:01:41.050
So ein bisschen variiert.

01:01:41.710 --> 01:01:43.710
Wie hoch ist dann die Wortfehlerrate?

01:01:44.930 --> 01:01:45.970
Aller voraussicht nach.

01:01:47.750 --> 01:01:50.570
Dann habe ich schon ein klitzekleines bisschen variiert.

01:01:51.090 --> 01:01:56.850
Ein ganz klein wenig variiert.

01:01:57.570 --> 01:01:58.450
Gleich, genau.

01:01:58.790 --> 01:02:02.810
Also wenn ich ein ganz klein wenig mache, ist sie gleich.

01:02:03.650 --> 01:02:05.630
Und jetzt habe ich nur ein klitzekleines bisschen mehr und dann

01:02:05.630 --> 01:02:06.530
passiert was irgendwann?

01:02:08.690 --> 01:02:10.090
Richtig, es passiert ein Sprung.

01:02:10.790 --> 01:02:13.190
Dann plötzlich mache ich zum Beispiel nicht nur 100 Fehler, sondern

01:02:13.190 --> 01:02:14.750
mache ich plötzlich 99 Fehler.

01:02:15.950 --> 01:02:17.410
Dann ist sie plötzlich hier.

01:02:18.230 --> 01:02:21.710
Das heißt, sie sieht so aus irgendwie.

01:02:25.600 --> 01:02:26.840
Das kann ich nicht ableiten.

01:02:28.340 --> 01:02:28.920
Das geht nicht.

01:02:29.460 --> 01:02:32.120
Die Wortfehlerrate ist nicht kontinuierlich.

01:02:33.340 --> 01:02:35.760
Letztendlich ist die Wortfehlerrate die Anzahl der Fehler, das heißt

01:02:35.760 --> 01:02:40.680
es ist eine Funktion, die von einem hochdimensionalen Vektor der

01:02:40.680 --> 01:02:43.940
reellen Zahlen, der Parameter meines Thetas, abbildet in den

01:02:43.940 --> 01:02:46.020
natürlichen Zahlen die Anzahl der Fehler, die ich gemacht habe.

01:02:46.520 --> 01:02:47.460
Ist also nicht updatable.

01:02:47.900 --> 01:02:48.200
Blöd.

01:02:49.160 --> 01:02:50.060
Was kann man machen?

01:02:53.280 --> 01:02:56.440
Wenn ich jetzt sowas sehe und würde trotzdem gerne sowas optimieren

01:02:56.440 --> 01:02:58.560
wollen, was könnte man machen?

01:02:58.660 --> 01:02:59.440
Ganz einfache Idee.

01:03:03.930 --> 01:03:07.990
Interpolieren oder anders ausgedrückt, das Ding ist nicht glatt, also

01:03:07.990 --> 01:03:09.630
glätte ich es.

01:03:10.150 --> 01:03:14.650
Lege ich irgendwie sowas durch.

01:03:15.470 --> 01:03:19.410
Und wenn ich das dann geschickter durchlege, dann kann ich da mit

01:03:19.410 --> 01:03:21.090
Gradientenabstiegsverfahren arbeiten.

01:03:23.030 --> 01:03:26.330
Also muss ich diese Wortfehlerrate irgendwie glätten und da gibt es

01:03:26.330 --> 01:03:27.410
lustige Verfahren zu.

01:03:28.030 --> 01:03:30.010
Eine Möglichkeit ist das mit der Formel zu machen.

01:03:30.010 --> 01:03:32.510
Du kannst mich nicht fragen, genau was da nochmal passiert.

01:03:35.550 --> 01:03:38.850
Letztendlich, was die macht ist, die guckt so, wenn ich so die

01:03:38.850 --> 01:03:43.630
Parameter ein bisschen variiere, wie sehen so die Wortfehlerraten aus

01:03:43.630 --> 01:03:47.170
und dann mache ich so eine Art Interpolation in dieser kleinen

01:03:47.170 --> 01:03:51.850
Umgebung um der Wortfehlerrate rum, die ich gemacht habe.

01:03:52.550 --> 01:03:56.430
Und dann gibt es hier oben ein paar Parameter, der hat mich in meiner

01:03:56.430 --> 01:03:58.910
Masterarbeit, also in meiner Diplomarbeit in den Wahnsinn getrieben.

01:03:59.930 --> 01:04:06.370
Dieser Parameter Theta, der sorgt dafür, wie stark glätte ich das.

01:04:07.190 --> 01:04:13.250
Also kommt sowas raus, das ist stark geglättet, oder kommt eher sowas

01:04:13.250 --> 01:04:18.230
raus, das

01:04:22.960 --> 01:04:25.560
wäre weniger stark geglättet.

01:04:25.680 --> 01:04:26.940
Also ich habe hier viel steilere Flanken.

01:04:28.600 --> 01:04:31.200
Je weniger stark ich glätte, desto besser.

01:04:31.920 --> 01:04:34.480
Desto näher bin ich ja eher dran an meiner Wortfehlerrate, desto

01:04:34.480 --> 01:04:35.760
besser kann ich einen Gradientenabstieg machen.

01:04:35.860 --> 01:04:38.560
Ist ja eher dem, was hinterher meine Wortfehlerrate optimiert.

01:04:39.680 --> 01:04:44.000
Nur wenn ich das mache, dann komme ich in numerische Schwierigkeiten,

01:04:44.800 --> 01:04:47.880
weil dann fange ich da an mit Steigungen zu arbeiten, während Steigung

01:04:47.880 --> 01:04:50.260
ziemlich nah in die Nähe von unendlich irgendwann mal kommt.

01:04:50.880 --> 01:04:54.240
Und wenn ich dann Gradienten bestimme, dann bekomme ich Gradienten,

01:04:54.300 --> 01:04:58.500
die sind sehr sehr sehr steil und dann sagt mir irgendwann mein

01:04:58.500 --> 01:05:00.920
Prozessor not a number.

01:05:01.600 --> 01:05:05.780
Ist halt unendlich groß oder Null, wo eigentlich weder Null sein

01:05:05.780 --> 01:05:06.840
sollte, noch unendlich groß.

01:05:07.240 --> 01:05:09.120
Dann komme ich einfach in numerische Schwierigkeiten, dass ich das

01:05:09.120 --> 01:05:10.180
nicht mehr schön berechnen kann.

01:05:10.680 --> 01:05:13.000
Und der Trick besteht dann darin, und wie gesagt, das hat mich in den

01:05:13.000 --> 01:05:17.020
Wahnsinn getrieben, etat zu finden, das zwar dafür sorgt, dass das

01:05:17.020 --> 01:05:20.600
Ganze möglichst unglatt ist, halt so weit glättet, dass ich nicht mehr

01:05:20.600 --> 01:05:23.280
in die numerischen Schwierigkeiten komme, aber trotzdem möglichst noch

01:05:23.280 --> 01:05:26.400
unglatt genug ist, dass ich dann anfangen kann, da vernünftige

01:05:26.400 --> 01:05:28.580
Parameter zu finden.

01:05:31.000 --> 01:05:34.960
Und wenn ich das habe, diese Glättung, dann kann ich halt anfangen zu

01:05:34.960 --> 01:05:36.200
trainieren.

01:05:37.160 --> 01:05:40.100
Dann mache ich halt diesen Gradientenabstieg in dieser geglätteten

01:05:40.100 --> 01:05:43.220
Wortfehlerraten -Funktion.

01:05:50.940 --> 01:05:55.820
Ich habe nirgendwo gesehen, dass das Ganze mal gemacht wurde für

01:05:55.820 --> 01:05:58.020
wirklich alle Parameter eines HMMs.

01:05:58.700 --> 01:06:03.440
Weil alle Parameter eines HMMs sind halt irgendwie, keine Ahnung, 50

01:06:03.440 --> 01:06:06.080
.000, 100.000, 200.000 Millionen Parameter.

01:06:07.000 --> 01:06:10.360
Ich habe das bei mir in der Diplomarbeit durfte ich das machen für

01:06:10.360 --> 01:06:15.300
einen Spezialfall, wo ich sowas wie 100, 200 Parameter hatte, die man

01:06:15.300 --> 01:06:18.040
wählen sollte, und die wurden halt per Minimum-Word-Error-Training

01:06:18.040 --> 01:06:19.040
gewählt.

01:06:19.340 --> 01:06:21.200
Und das war schon ein Riesenkäse.

01:06:21.680 --> 01:06:24.780
Das hat halt Ewigkeiten dekodiert, weil man muss ja nach jedem

01:06:24.780 --> 01:06:31.100
Schritt, den man gemacht hat, dadurch, dass man diese Approximation

01:06:31.100 --> 01:06:35.200
letztendlich nur macht um so eine Umgebung, wenn ich meinen neuen

01:06:35.200 --> 01:06:37.860
Zettel gewählt habe, bekomme ich ja eine andere Wortfehlerrate raus,

01:06:37.960 --> 01:06:40.500
dann bin ich irgendwo anders, dann muss ich diese ganzen Mist wieder

01:06:40.500 --> 01:06:43.240
neu dekodieren lassen, damit ich jetzt diese Schätzung der aktuellen

01:06:43.240 --> 01:06:46.000
Wortfehlerrate an der Stelle, beziehungsweise die Schätzung des

01:06:46.000 --> 01:06:48.520
Gradienten an der Stelle, wieder neu bekomme.

01:06:49.220 --> 01:06:51.760
Und da rechnet man sich also auf gut Deutsch zu Tode.

01:06:52.540 --> 01:06:56.780
Also muss man ständig wieder nach jeder Iteration neu dekodieren, und

01:06:56.780 --> 01:06:58.600
das ist einfach ein Riesenrechenaufwand.

01:07:04.840 --> 01:07:07.820
Das noch zum Thema Minimum-Word-Error-Training.

01:07:10.740 --> 01:07:15.720
Und das ist im Prinzip das, was ich sagen möchte zum Gebiet der

01:07:15.720 --> 01:07:17.060
automatischen Spracherkennung.

01:07:17.060 --> 01:07:22.100
Was jetzt noch übrig bleibt, sind so ein paar ganz interessante, aber

01:07:22.100 --> 01:07:26.740
doch eher Blümchen-Themen, die also nicht ganz so wichtig sind.

01:07:27.320 --> 01:07:29.960
In den nächsten zehn Minuten werden wir noch ganz schnell eins

01:07:29.960 --> 01:07:34.520
durchsprechen und das dann für heute entsprechend dann sein lassen.

01:07:35.180 --> 01:07:39.520
Zum Beispiel ein Problem, das man ja bei Spracherkennungssystemen hat,

01:07:40.080 --> 01:07:42.960
ist ja, dass man während der Suche beschränkt ist auf ein fixes

01:07:42.960 --> 01:07:43.400
Vokabular.

01:07:43.520 --> 01:07:46.820
Da gibt es ein Vokabular fixer Größe und fixer Länge und alles, was

01:07:46.820 --> 01:07:50.140
nicht in dem Vokabular drin ist, kann ich nicht erkennen.

01:07:51.300 --> 01:07:55.640
Wenn man dann also so etwas wie Sprachübersetzung noch macht, dann

01:07:55.640 --> 01:07:57.200
wird dieses Problem sehr mies.

01:07:57.980 --> 01:08:00.580
Also hier, das ist das Beispiel aus einer Dissertation von einem

01:08:00.580 --> 01:08:04.520
Kollegen, der jetzt bei Amazon Spracherkennung betreibt.

01:08:05.220 --> 01:08:06.680
Das war der Herr Schaaf.

01:08:06.880 --> 01:08:08.480
Und der hatte immer das Problem, wenn er in die

01:08:08.480 --> 01:08:11.480
Sprachübersetzungssysteme reingeschrieben hat, dann hat er

01:08:11.480 --> 01:08:14.300
reingesprochen, Hallo, ich bin Herr Schaaf, und dann wird das nicht

01:08:14.300 --> 01:08:14.620
erkannt.

01:08:14.720 --> 01:08:17.040
Der Spracherkenner erkennt dann zum Beispiel so etwas wie, Hallo, ich

01:08:17.040 --> 01:08:17.720
bin Herr Schaaf.

01:08:18.580 --> 01:08:21.600
Wenn man jetzt nochmal Deutsch spricht und noch so ein bisschen klar

01:08:21.600 --> 01:08:24.100
bei Verstand ist und sich ein bisschen mit Spracherkennungssystemen

01:08:24.100 --> 01:08:27.260
auskennt, dann kann man sich vorstellen, was da ungefähr passiert ist

01:08:27.260 --> 01:08:29.360
und dann kann man sich vielleicht noch so ungefähr vorstellen, was da

01:08:29.360 --> 01:08:30.560
eigentlich hätte bei rauskommen sollen.

01:08:31.000 --> 01:08:33.460
Wenn man das Ganze dann noch übersetzt, dann kommt da raus, Hello, I'm

01:08:33.460 --> 01:08:36.160
precise, und der Gegenüber hat überhaupt keine Chance, überhaupt zu

01:08:36.160 --> 01:08:39.280
erkennen, was da ursprünglich mal hätte gemeint werden sollen.

01:08:40.500 --> 01:08:43.320
Also ist der Herr Schaaf da hingegangen und hat sich überlegt, dieses

01:08:43.320 --> 01:08:46.240
Problem würde ich gerne für meine Dissertation bearbeiten und hat sich

01:08:46.240 --> 01:08:48.580
da eine Prozedur für überlegt.

01:08:49.340 --> 01:08:51.860
Das hatte dann entsprechend zur Folge, dass der Spracherkenner

01:08:51.860 --> 01:08:55.920
hinterher erkennen konnte, Hallo, ich bin Herr Schaaf, sodass dann die

01:08:55.920 --> 01:09:00.720
Übersetzung lautete, Hello, I'm Mr. Sheep, was auch dann das nächste

01:09:00.720 --> 01:09:01.360
Problem hatte.

01:09:01.440 --> 01:09:02.560
Aber das ist eine andere Baustelle.

01:09:03.060 --> 01:09:06.400
Also, es geht jetzt darum, wie kann der Spracherkenner ein Gefühl

01:09:06.400 --> 01:09:11.000
dafür bekommen, dass er gerade was erkennen soll, was er gar nicht

01:09:11.000 --> 01:09:11.720
erkennen kann.

01:09:12.080 --> 01:09:14.160
Also das Wort soll gar nicht da existieren.

01:09:15.200 --> 01:09:17.920
Existiert nicht, das ist extrem schwierig, das zu erkennen für so eine

01:09:17.920 --> 01:09:18.280
Maschine.

01:09:18.840 --> 01:09:22.720
Und dann, was kann ich machen, damit ich dann irgendwie dieses Wort

01:09:22.720 --> 01:09:24.140
automatisch mit hinzunehme.

01:09:31.140 --> 01:09:33.680
Erster Ansatz ist ja, dann macht doch das Vokabular größer.

01:09:33.680 --> 01:09:37.320
Hat halt den Nachteil, dass je größer das Vokabular, desto langsamer

01:09:37.320 --> 01:09:39.720
die Laufzeit des Erkenners.

01:09:40.620 --> 01:09:43.680
Besser wäre es, das Vokabular so klein wie möglich zu halten, aber

01:09:43.680 --> 01:09:47.420
trotzdem auf die Domäne gut zu passen.

01:09:47.500 --> 01:09:51.620
Und wenn man dann solche Sachen hat wie Eigennamen, Telefonnummern,

01:09:51.640 --> 01:09:54.560
Währungsbeträge, also Geldbeträge usw., dann kommt man halt schnell in

01:09:54.560 --> 01:09:57.300
das Problem, dass man zwar theoretisch die Domäne schön einschränken

01:09:57.300 --> 01:10:00.440
kann, aber dass man dann so an einzelnen Stellen extrem viele

01:10:00.440 --> 01:10:01.340
Möglichkeiten hat.

01:10:01.340 --> 01:10:03.780
So wie wir das bei dem Worteratespiel auch schon hatten.

01:10:05.860 --> 01:10:10.400
Jetzt kann man versuchen, vorher das ganze Vokabular zu adaptieren.

01:10:10.520 --> 01:10:13.240
Also wenn ich weiß, ich habe da ein Spracherkennungssystem, das ist

01:10:13.240 --> 01:10:16.720
das Spracherkennungssystem des Herrn Scharfs für Sprachübersetzung,

01:10:17.120 --> 01:10:19.660
dann sollte ich halt, wenn er sich registriert hat und das

01:10:19.660 --> 01:10:22.600
Registrierungsformular ausgefüllt hat, dafür sorgen, dass sein Name

01:10:22.600 --> 01:10:24.600
möglichst auch vorkommt.

01:10:25.180 --> 01:10:27.680
Das wäre so etwas wie eine Adaption, die man vorher machen kann.

01:10:27.680 --> 01:10:30.540
Und das ist auch etwas, was wir versuchen, zum Beispiel beim Lecture

01:10:30.540 --> 01:10:31.060
Translator.

01:10:31.460 --> 01:10:35.140
Da versuchen wir halt, die Domäne vorher auf die entsprechende

01:10:35.140 --> 01:10:37.420
Vorlesung anzupassen, auf diese Art und Weise.

01:10:38.340 --> 01:10:42.040
Die andere Möglichkeit ist, das Ganze dann aber versuchen, während der

01:10:42.040 --> 01:10:44.140
Laufzeit des Systems zu machen.

01:10:44.400 --> 01:10:47.640
Hat halt den Vorteil, wenn sich dann halt der Benutzer mal ändert und

01:10:47.640 --> 01:10:50.520
ich nicht irgendwie ein neues Registrierungsformular habe oder so oder

01:10:50.520 --> 01:10:53.440
irgendwas übersehen habe, dass ich dann trotzdem noch während des

01:10:53.440 --> 01:10:57.440
laufenden Betriebes, während der Lebenszeit des Systems das System

01:10:57.440 --> 01:11:00.700
adaptieren kann, neue OV-Wörter hinzufügen kann.

01:11:02.600 --> 01:11:09.800
Wenn man sich anschaut, wie so Wörter verteilt sind, dann gibt es

01:11:09.800 --> 01:11:12.020
etwas, das nennt sich das Zipf'sche Gesetz.

01:11:13.320 --> 01:11:19.240
Das Zipf'sche Gesetz macht so eine Annahmebeschreibung darüber, wie

01:11:19.240 --> 01:11:24.120
Wörter ihrer Häufigkeit nach verteilt sind.

01:11:24.120 --> 01:11:28.140
Und wenn man so das mal abzeichnet, dann kommt man gerade eben auf

01:11:28.140 --> 01:11:29.840
diese unschöne Kurve.

01:11:31.220 --> 01:11:40.460
Hier auf der Achse angezeigt, wie häufig kommen... oder wie viele

01:11:40.460 --> 01:11:46.660
Wörter gibt es, die gleich häufig vorkommen und wie häufig ist das,

01:11:46.820 --> 01:11:49.400
dass diese Wörter, die gleich häufig vorkommen, auch wirklich

01:11:49.400 --> 01:11:49.880
vorkommen.

01:11:49.880 --> 01:11:54.900
Und das ist sowohl auf der Achse als auch auf der Achse logarithmisch

01:11:54.900 --> 01:11:55.580
aufgetragen.

01:11:55.760 --> 01:11:58.660
Wenn man das dann logarithmisch aufträgt, dann bekommt man so eine

01:11:58.660 --> 01:12:02.110
schöne, ungefähr linienähnliche, lineare Verteilung.

01:12:03.220 --> 01:12:08.380
Und das heißt also, dass es hier so etwas gibt wie, sagen wir mal, 30

01:12:08.380 --> 01:12:14.360
.000 Wörter, die kommen vielleicht nur zweimal vor.

01:12:14.640 --> 01:12:17.600
Und hier gibt es Wörter, die kommen einmal vor und von denen gibt es

01:12:17.600 --> 01:12:18.480
100.000 viele.

01:12:19.220 --> 01:12:27.100
Und von den Wörtern, die sehr häufig vorkommen, gibt es halt leider

01:12:27.100 --> 01:12:29.380
sehr wenige.

01:12:29.600 --> 01:12:34.640
Es gibt also 10.000 Wörter, die nur einmal vorkommen überhaupt.

01:12:35.440 --> 01:12:40.060
Das heißt also, es gibt sehr, sehr, sehr viele Wörter, die nur sehr,

01:12:40.140 --> 01:12:41.280
sehr, sehr selten vorkommen.

01:12:42.060 --> 01:12:44.900
Und die kann ich halt nicht alle mit ins Vokabular problemlos

01:12:44.900 --> 01:12:45.680
aufnehmen vorher.

01:12:47.320 --> 01:12:51.940
Wenn ich jetzt also so ein System haben will, das neue Wörter während

01:12:51.940 --> 01:12:56.160
seines Betriebes lernt, dann muss ich mehrere Sachen angehen.

01:12:56.960 --> 01:13:00.700
Zum einen muss ich erstmal überhaupt in der Lage sein, zu erkennen, an

01:13:00.700 --> 01:13:02.900
der Stelle gibt es ein Wort, das ich noch nicht kenne.

01:13:04.000 --> 01:13:07.340
Dann, wenn ich das weiß, muss ich dann in der Lage sein, dieses Wort

01:13:07.340 --> 01:13:08.900
mit neu hinaufzunehmen.

01:13:09.620 --> 01:13:12.880
Das heißt, ich brauche zumindest einen Eintrag im Wörterbuch, der mir

01:13:12.880 --> 01:13:16.100
phonetisch transkribiert, dieses Wort wird so geschrieben und so wird

01:13:16.100 --> 01:13:16.800
es ausgesprochen.

01:13:18.500 --> 01:13:21.240
Und dann muss ich auch noch irgendwie sagen, das braucht ja auch noch

01:13:21.240 --> 01:13:22.900
eine Sprachmodellwahrscheinlichkeit.

01:13:23.500 --> 01:13:25.120
Und das kann man zum Beispiel mit so Klassen machen.

01:13:25.220 --> 01:13:28.800
Das heißt, ich müsste das zumindest auf irgendwie so ein anderes Wort

01:13:28.800 --> 01:13:31.480
im Sprachmodell abbilden, so dass ich, wenn ich das ins Sprachmodell

01:13:31.480 --> 01:13:34.460
reinwerfe, eine vernünftige Sprachmodellwahrscheinlichkeit mit

01:13:34.460 --> 01:13:35.020
rausbekomme.

01:13:36.520 --> 01:13:42.580
Jetzt dieses Finden, an dieser Stelle weiß ich nicht, welches Wort das

01:13:42.580 --> 01:13:45.280
ist, es ist ein Wort, das ich nicht kenne, kann man auf der

01:13:45.280 --> 01:13:49.220
akustischen Modellseite zum Beispiel lösen mit so generischen

01:13:49.220 --> 01:13:50.020
Wortmodellen.

01:13:50.760 --> 01:13:54.160
Dass man also ein Wortmodell hat, das modelliert OOV-Wörter, das

01:13:54.160 --> 01:13:56.320
modelliert Sprache im Allgemeinen.

01:13:56.740 --> 01:14:00.740
Und wenn das Wort, das für Sprache im Allgemeinen gut passt, anschlägt

01:14:00.740 --> 01:14:05.100
und kein anderes Wort, kein spezifisches Wort besser ist, dann kann

01:14:05.100 --> 01:14:08.380
man sagen, okay, an der Stelle habe ich vermutlich ein OOV-Wort

01:14:08.380 --> 01:14:10.800
erkannt.

01:14:12.720 --> 01:14:16.660
Andere Möglichkeit wäre, dass man halt so eine Phonemenschleife macht,

01:14:16.780 --> 01:14:18.780
dass man also dem Erkenner die Möglichkeit gibt, dass er auch

01:14:18.780 --> 01:14:21.020
irgendwann mal in so eine Phonemenschleife reinlaufen kann.

01:14:21.540 --> 01:14:27.800
Und wenn das passiert ist, dann kann ich da auch sagen, okay, hier war

01:14:27.800 --> 01:14:29.560
es offensichtlich ein OOV-Wort.

01:14:30.680 --> 01:14:34.480
Und dann, was der Herr Schaaf neu erfunden hat, sind sogenannte Head

01:14:34.480 --> 01:14:35.040
-Tail -Modelle.

01:14:35.140 --> 01:14:38.060
Das Problem bei den Phonemenschleifen ist ja, dass ich da nur so

01:14:38.060 --> 01:14:41.940
kleine kurze Modellierungseinheiten habe, die relativ leicht

01:14:41.940 --> 01:14:42.740
verwechselbar sind.

01:14:43.060 --> 01:14:45.480
Es kann relativ leicht sein, dass ich dann in so eine Phonemenschleife

01:14:45.480 --> 01:14:48.400
reinlaufe, obwohl ich da gar nicht reinschleifen, reinlaufen will.

01:14:48.900 --> 01:14:54.280
Und der Herr hat dann halt angefangen, nicht mit einzelnen Phonemen zu

01:14:54.280 --> 01:14:57.580
arbeiten, mit denen man ausbrechen kann, sondern er hat OOV-Wörter in

01:14:57.580 --> 01:14:59.120
den Kopf und den Schwanz zerteilt.

01:14:59.660 --> 01:15:03.880
Und der Schwanz kann so eine Phonemenschleife sein und der Kopf ist

01:15:03.880 --> 01:15:07.200
dann irgendwie ein Präfix von zwei, drei Phonemen.

01:15:07.600 --> 01:15:11.640
Dass ich also so gucke, was sind OOV-Wörter, dann gucke ich mir an,

01:15:11.740 --> 01:15:16.180
welche Phonemenfolgen können das überhaupt sein, sodass ich nicht alle

01:15:16.180 --> 01:15:21.640
Möglichkeiten von drei Phonemenfolgen habe, also nicht 50 x 50 x 50

01:15:21.640 --> 01:15:24.800
mögliche Heads, sondern nur die, die auch nach der Phonotaktik, nach

01:15:24.800 --> 01:15:28.320
der Struktur der Sprache, um die es im Augenblick geht, überhaupt

01:15:28.320 --> 01:15:28.940
zulässig sind.

01:15:29.840 --> 01:15:32.880
Und ich habe dann die Möglichkeit, solche Köpfe zu modellieren und

01:15:32.880 --> 01:15:36.900
danach in so eine Schleife reinzulaufen.

01:15:38.820 --> 01:15:42.580
Also das sind die Sachen nochmal im Allgemeinen.

01:15:42.660 --> 01:15:45.640
Das ist entweder eine Phonemenschleife, ich habe entweder so ein

01:15:45.640 --> 01:15:50.160
flaches Modell, wo ich Phoneme habe, die allgemein für Sprache stehen,

01:15:50.160 --> 01:15:53.100
oder ich mache halt so ein Head-Tail-Modell, wo ich am Anfang zwei,

01:15:53.260 --> 01:15:58.020
drei richtige Phoneme modelliere und danach laufen die in so ein

01:15:58.020 --> 01:15:59.020
flaches Modell rein.

01:16:03.120 --> 01:16:10.600
Was er dann festgestellt hat, dass wenn ich damit arbeite, dass dann

01:16:10.600 --> 01:16:15.620
die Modelle für die OOV-Wörter im Sprachmodell während der Erkennung

01:16:15.620 --> 01:16:17.320
kritisch sind.

01:16:17.820 --> 01:16:22.960
Weil das Sprachmodell halt die Eigenschaft hat, dass wenn die Akustik

01:16:22.960 --> 01:16:26.320
sich unsicher ist, und das ist ja halt bei OOV-Wörtern, da kommt halt

01:16:26.320 --> 01:16:28.860
was raus, was zwar nicht so ganz schlecht ist, aber es passt halt

01:16:28.860 --> 01:16:29.840
nicht so hundertprozentig.

01:16:30.240 --> 01:16:32.960
Und auch wenn ich diese flachen Wörter nehme, diese Head-Tail-Modelle,

01:16:33.400 --> 01:16:36.660
die Phonemenschleifen, dann kommt halt eine Akustik dabei raus, die

01:16:36.660 --> 01:16:39.160
ist zwar nicht ganz schlecht, aber auch nicht so richtig super.

01:16:39.160 --> 01:16:43.940
Und dann schlägt meistens das Sprachmodell zu und zwingt den Erkenner

01:16:43.940 --> 01:16:46.160
auf irgendeines der Wörter.

01:16:47.420 --> 01:16:52.320
Das heißt, man braucht dann auch im Sprachmodell die Möglichkeit zu

01:16:52.320 --> 01:16:54.520
erkennen, okay, das hier ist ein OOV-Modell.

01:16:55.380 --> 01:16:59.500
Und das ist relativ schwierig, weil diese OOV-Rate beim Sprachmodell

01:16:59.500 --> 01:17:01.540
-Training meistens unterschätzt wird.

01:17:02.720 --> 01:17:06.820
Ich trainiere ja das Sprachmodell auf allen Daten, die ich irgendwie

01:17:06.820 --> 01:17:08.020
so zur Verfügung habe.

01:17:08.020 --> 01:17:10.820
Und ich selektiere ja auch daraus das Vokabular.

01:17:12.480 --> 01:17:16.080
Und wie sollen wir das dann schätzen, Sachen vorherzusagen, die ich

01:17:16.080 --> 01:17:17.180
später nicht sehen werde.

01:17:18.840 --> 01:17:24.860
Und was sich da halt am besten bewährt hat, ist, wenn man Wortklassen

01:17:24.860 --> 01:17:28.320
definiert, in denen man in der Regel OOV-Wörter erwarten würde.

01:17:28.880 --> 01:17:31.540
Also für so ein Sprachübersetzungssystem wären es halt logischerweise

01:17:31.540 --> 01:17:33.940
Nachnamen, Städtenamen, Währungsbeträge.

01:17:33.940 --> 01:17:38.780
Dass man also sagt, wenn es irgendwie sowas ist, dann ist das Ganze

01:17:38.780 --> 01:17:42.960
etwas, was schnell in ein OOV-Wort reinlaufen kann.

01:17:43.600 --> 01:17:45.560
Und man kann halt solche Sachen per Hand definieren.

01:17:45.720 --> 01:17:49.140
Und die Frage war, kann man das Ganze auch unüberwacht finden, solche

01:17:49.140 --> 01:17:49.780
Klassen.

01:17:50.220 --> 01:17:53.220
Und er hat ja verschiedene Verfahren zum Clustering ausprobiert und

01:17:53.220 --> 01:17:57.900
hatte auch so ein spezielles Verfahren, mit dem er Cluster

01:17:57.900 --> 01:18:01.500
ausprobieren wollte, von wo er dann hinterher sagen könnte, okay, das

01:18:01.500 --> 01:18:05.720
scheinen eher unwahrscheinliche Worte zu sein, also OOV-Wörter.

01:18:06.280 --> 01:18:08.840
Und wenn er das zum Beispiel mal auf deutsche Texte angewandt hat,

01:18:09.320 --> 01:18:12.300
dann sind da so automatische Klassen rausgekommen für sehr häufig

01:18:12.300 --> 01:18:13.160
vorkommende Wörter.

01:18:13.220 --> 01:18:18.100
Da sieht man schon, da hat man irgendwie Nachnamen oder Städtenamen,

01:18:18.680 --> 01:18:21.840
die jetzt irgendwie in den Zeitungstexten, auf denen es trainiert

01:18:21.840 --> 01:18:24.340
wurde, aus der Zeit wohl relativ häufig vorgekommen sind.

01:18:24.340 --> 01:18:27.680
Dann sieht man hier, da gab es halt irgendwas, da ging es immer um

01:18:27.680 --> 01:18:32.200
irgendwelche russischen Politiker, war wahrscheinlich dann irgendwie

01:18:32.200 --> 01:18:34.420
aus den 80er-Jahren, Zeitungstexte.

01:18:34.640 --> 01:18:38.520
Und dann irgendwelche amerikanischen Villens oder so, die halt, so wie

01:18:38.520 --> 01:18:41.420
Kevorkian oder so, die halt damals aktuell waren oder die politischen

01:18:41.420 --> 01:18:43.600
Konflikte der Zeit mit Bagdad, Sarajevo.

01:18:44.160 --> 01:18:46.880
Dann irgendwie gab es halt Firmennamen, die halt relativ auch was

01:18:46.880 --> 01:18:50.460
zusammen zu tun haben, also Microsoft, Paramount, Intel, Viacom.

01:18:50.920 --> 01:18:53.480
Das ist irgendwie so eine Vermischung aus IT und Unterhaltung.

01:18:53.480 --> 01:18:57.980
Dann gab es irgendwie so medizinische Themen und so weiter und so

01:18:57.980 --> 01:18:58.240
fort.

01:18:59.180 --> 01:19:03.120
Und wenn man sich dann anschaut, was ist, wenn man sich die sehr eher

01:19:03.120 --> 01:19:07.920
unbekannten Worte anschaut, die also sehr selten vorkommen, dann hat

01:19:07.920 --> 01:19:09.200
man da ähnliche Klassen.

01:19:09.420 --> 01:19:17.620
Da hat man auch so Nachnamen und wohl Ortsnamen und auch wieder so

01:19:17.620 --> 01:19:18.960
medizinische Namen.

01:19:18.960 --> 01:19:21.980
Und man sieht zum Beispiel schön, dass hier anscheinend die Klasse E

01:19:21.980 --> 01:19:23.920
und E da oben, dass die irgendwie zusammengehören.

01:19:24.040 --> 01:19:29.320
Das sind alles irgendwie so Namen von Krankheiten, die da oben kamen

01:19:29.320 --> 01:19:31.900
halt zufälligerweise häufig vor, gerade in den Texten, und die da

01:19:31.900 --> 01:19:34.000
unten, die kamen halt eher seltener vor.

01:19:35.200 --> 01:19:38.540
Und wenn man jetzt das hernimmt und daraus dann einen Detektor baut,

01:19:38.600 --> 01:19:43.320
mit diesen Head-Tail-Modellen und solchen OV-Sprachmodellen, dann muss

01:19:43.320 --> 01:19:46.620
man halt gucken, wie evaluiere ich das, wie gut der funktioniert.

01:19:46.620 --> 01:19:50.580
Und da hat man halt immer zwei Möglichkeiten.

01:19:51.020 --> 01:19:56.240
Ich schlage an, sage hier ist ein OV und es ist tatsächlich ein OV.

01:19:56.740 --> 01:20:00.100
Ich schlage an und sage hier ist ein OV und in Wirklichkeit ist es

01:20:00.100 --> 01:20:00.640
kein OV.

01:20:00.760 --> 01:20:01.720
Ich mache also einen Fehlalarm.

01:20:02.400 --> 01:20:05.860
Oder da ist ein OV, aber ich habe nicht angeschlagen.

01:20:06.520 --> 01:20:08.360
Habe ich also etwas misst.

01:20:09.940 --> 01:20:11.820
Und dann gibt es halt Precision und Recall.

01:20:12.220 --> 01:20:15.940
Recall, wie viel Prozent der OV-Wörter, die denn drin waren, habe ich

01:20:15.940 --> 01:20:19.160
denn tatsächlich auch erkannt?

01:20:19.280 --> 01:20:20.700
Bei wie vielen habe ich denn angeschlagen?

01:20:21.900 --> 01:20:26.140
Versus Precision, von denen, wo ich angeschlagen habe, wie viele von

01:20:26.140 --> 01:20:27.420
denen waren denn überhaupt korrekt?

01:20:28.060 --> 01:20:30.260
Und dann kann man sich leicht überlegen, ich kann entweder dafür

01:20:30.260 --> 01:20:34.620
sorgen, dass der Recall sehr klein wird, der Recall sehr hoch wird,

01:20:34.700 --> 01:20:36.640
dass ich möglichst viel zurückhole, dann wird aber die Precision

01:20:36.640 --> 01:20:36.820
klein.

01:20:37.240 --> 01:20:39.940
Also im Ernstfall sage ich halt, jedes Wort ist ein OV, habe ich einen

01:20:39.940 --> 01:20:41.620
super Recall, aber die Precision ist misst.

01:20:42.000 --> 01:20:44.220
Oder ich mache halt die Precision gut, aber dann wird mein Recall

01:20:44.220 --> 01:20:44.540
kleiner.

01:20:45.240 --> 01:20:48.240
Und dann kann man das halt so für unterschiedliche Kombinationen auf

01:20:48.240 --> 01:20:50.820
der Sprachmodellseite mal ausprobieren und muss sich dann irgendwie,

01:20:50.940 --> 01:20:55.200
muss man eine Designentscheidung machen, für irgendwas entscheiden,

01:20:55.320 --> 01:20:57.820
was einen möglichst guten Trade-off zwischen Recall und Precision

01:20:57.820 --> 01:21:00.100
macht und auch zur Anwendung passt.

01:21:01.600 --> 01:21:06.840
Und wenn ich dann jetzt detektiert habe, hier ist ein OV-Wort, dann

01:21:06.840 --> 01:21:09.340
muss ich das ja irgendwie lernen und in mein System mit reinmachen.

01:21:09.760 --> 01:21:12.240
Ich brauche also eine phonetische Transkription, ich brauche auch

01:21:12.240 --> 01:21:15.520
irgendwie eine graphemische Transkription, also wie wir jetzt

01:21:15.520 --> 01:21:18.640
geschrieben, das Ganze muss zu einer Sprachmodellklasse zugeordnet

01:21:18.640 --> 01:21:20.100
werden, bei Sprachmodellklassen brauche ich

01:21:20.100 --> 01:21:23.280
Intraklassenwahrscheinlichkeiten und so weiter und so fort.

01:21:24.780 --> 01:21:27.960
Und die Art und Weise, wie er das gelöst hat, ist, dass er das Ganze

01:21:27.960 --> 01:21:32.120
halt im Dialog mit dem Benutzer gelöst hat.

01:21:32.540 --> 01:21:36.680
Dass er also dann zum Beispiel so einen Dialog hatte, da spricht dann

01:21:36.680 --> 01:21:39.560
die Frau Woschina rein und sagt, Hallo, mein Name ist Frau Woschina.

01:21:40.200 --> 01:21:43.500
Und wenn das System Glück hat, dann hat es den Namen Woschina halt

01:21:43.500 --> 01:21:45.100
noch nie gehört und schlägt an.

01:21:45.820 --> 01:21:48.260
Nur es kann ja halt sein, dass es halt fälschlicherweise anschlägt.

01:21:49.420 --> 01:21:52.340
Und dann will man ja nicht sofort alles versauen und deswegen kann man

01:21:52.340 --> 01:21:53.780
sowas schön in einem Dialog machen.

01:21:54.180 --> 01:21:58.120
So ein Dialog ist immer gut geeignet dann, um Fehler aufzulösen oder

01:21:58.120 --> 01:22:01.120
um zu bestätigen, dass man keinen Fehler gemacht hat.

01:22:01.120 --> 01:22:03.160
Und dann fragt das System zurück, Hallo, haben Sie gerade einen

01:22:03.160 --> 01:22:04.000
Nachnamen verwendet?

01:22:04.020 --> 01:22:06.080
Und dann muss es halt nur mit Ja oder Nein anfragen.

01:22:06.580 --> 01:22:08.840
Und dann sagt es halt, okay, können Sie den Namen nochmal sagen?

01:22:08.900 --> 01:22:10.320
Und dann sagt es halt, ja, der Woschina.

01:22:10.900 --> 01:22:14.760
Aha, dann hat man hoffentlich schon zweimal eine Audioaufnahme von dem

01:22:14.760 --> 01:22:18.820
Nachnamen wo man sich irgendwie eine Phonementranskription herausholen

01:22:18.820 --> 01:22:19.080
kann.

01:22:19.400 --> 01:22:21.620
Und dann kann man noch fragen, können Sie bitte den Nachnamen

01:22:21.620 --> 01:22:22.180
buchstabieren?

01:22:22.340 --> 01:22:29.520
Und dann kommt halt da WOSZCYCYNA bei raus und dann hat das System das

01:22:29.520 --> 01:22:29.880
gelernt.

01:22:30.520 --> 01:22:33.040
Und wenn man dann clever ist, dann hat man hier noch einen Graphem zu

01:22:33.040 --> 01:22:35.880
Phonemenwandler und kann dann das mit der automatischen

01:22:35.880 --> 01:22:39.800
Phonemensequenz nochmal abgleichen und gucken, ob man irgendwie damit

01:22:39.800 --> 01:22:41.020
zufrieden ist.

01:22:41.020 --> 01:22:44.820
Und dann weiß man noch, okay, der hat gemeint, das ist eine Nachname,

01:22:44.920 --> 01:22:47.080
sie hat das bestätigt, dann kommt das Ganze also in die Klasse

01:22:47.080 --> 01:22:47.880
Nachname rein.

01:22:48.280 --> 01:22:52.560
Ich habe die Schreibweise und habe hoffentlich auch eine halbwegs

01:22:52.560 --> 01:22:55.180
vernünftige phonetische Transkription, sodass das dann beim nächsten

01:22:55.180 --> 01:22:57.160
Mal hoffentlich richtig erkannt wird.

01:22:58.900 --> 01:23:02.500
Und auf die Art und Weise hat er dann in seiner Dissertation das Ganze

01:23:02.500 --> 01:23:06.220
halt gelöst und da so ein System gebaut und entsprechend evaluiert.

01:23:07.140 --> 01:23:08.800
Okay, das wäre es für heute.

01:23:09.220 --> 01:23:12.520
Dann machen wir nächstes Mal noch das Thema Adaption ein bisschen.

01:23:12.860 --> 01:23:15.240
Und ich hatte ja versprochen, dass ich was zum Thema HMMs nochmal

01:23:15.240 --> 01:23:19.940
sagen wollte, weil es so einen häufigen Fehler gibt, der häufig

01:23:19.940 --> 01:23:22.440
vorkommt, den ich versuchen will noch rauszuschleifen.

01:23:23.260 --> 01:23:25.080
Okay, dann bis Mittwoch.

