Transcript: Naive Bayes

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

Ja, hallo liebe Hörerinnen und Hörer. Wir kommen bei der 13. Episode vom Python-Podcast.

Dominik

Hier ist der Dominik, wir sind bei Jochen.

Dominik

Jo, hallo.

Dominik

Ja, heute haben wir ein schönes Thema für euch mitgebracht und zwar wollten wir über naive Base-Klassifikation sprechen und ein bisschen Spam sortieren.

Jochen

Genau, genau. Also eigentlich, was wir oder für mich die Idee dabei war, mal wieder so ein bisschen was einsteigermäßiges mehr zu machen.

Dominik

Und dann habe ich mir kurz Jochen Trepo angeguckt und so einsteigerfreundlich ist das nicht. Aber wenn euch das natürlich interessiert.

Jochen

Genau, oder sagen wir mal so einfach, weil ich denke, das ist, also ich habe halt nach einem Beispiel gesucht, was man irgendwie relativ leicht in Python machen kann und wo man jetzt in anderen Sprachen ein Problem hätte, das in der gleichen, ja, Kürze so hinzubekommen.

Dominik

Ja, da kann man auf jeden Fall wieder sehen, Python kann das richtig gut. Aber wenn ihr wirklich ein Einstiegsbeispiel haben wollt, also in unserer nächsten Folge haben wir wieder, glaube ich, was vor, in der übernächsten, wirklich für Einfänger nochmal.

Jochen

Da machen wir mal so wirklich Einsteiger-Geschichten,

Jochen

einfach grundsätzliche Datentypen

Jochen

und so. Ich habe jetzt auch versucht, mich dabei

Jochen

dem Beispiel auf so die grundlegenden

Jochen

Datenstrukturen zu beschränken, die es halt

Jochen

irgendwie eingebaut gibt. Aber

Jochen

gut, so ganz super einsteigerfreundlich ist es

Jochen

vielleicht nicht. Aber es ist vielleicht trotzdem interessant.

Dominik

Wir haben übrigens Ende August mittlerweile,

Dominik

2019 immer noch und es ist tatsächlich

Dominik

immer noch so unglaublich warm wieder.

Dominik

Also heute, ich weiß nicht.

Dominik

Ja, wollen wir irgendwie,

Jochen

keine Ahnung, wir können ja erstmal so ein bisschen darüber reden,

Jochen

was passiert ist in letzter Zeit.

Jochen

dass wir an so Dingen gesehen haben.

Dominik

Also wir waren auf der Frostcourt, also ich noch ganz kurz

Dominik

und du ein bisschen länger.

Dominik

Ja, das heißt, du hast ein bisschen mehr Vorträge gesehen.

Dominik

Ich habe nur den einen letzten zu

Dominik

Reinforced Learning mehr angehört.

Dominik

Du meinst den Workshop?

Dominik

Deep Learning Workshop, ja genau.

Jochen

Ja, dazu gab es auch einen Vortrag, den habe ich auch geguckt.

Jochen

Genau, ja.

Jochen

Ich habe auch so wahnsinnig

Jochen

viele Talks, habe ich gar nicht

Jochen

angeguckt.

Jochen

Du hast genetzt werden.

Jochen

Aber ansonsten, doch, ja, so ein paar Sachen

Jochen

habe ich auch schon gesehen, das stimmt.

Dominik

Ja, aber es war sehr interessant, es war viel los.

Dominik

Und es gab eine ganz tolle Kinderbetreuung.

Jochen

Ja, wenn ich das mal vorher gewusst hätte,

Jochen

ist mir gar nicht so aufgefallen.

Jochen

Aber es gab einen riesen Hüpfbock und so.

Jochen

Ja, hätte man...

Jochen

Hätten die Mädels Spaß haben können.

Jochen

Ja, genau.

Jochen

Was, also, genau, dieser Deep Learning-Vortrag

Jochen

war jetzt, für mich war der jetzt,

Jochen

also, es ist interessant, weil mich das Thema

Jochen

natürlich interessiert und so, aber so wahnsinnig viel Neues

Jochen

war jetzt nicht dabei für mich.

Jochen

Auch der Workshop war jetzt

Jochen

wahrscheinlich schon interessant

Jochen

für Leute, die das jetzt noch gar nicht kennen, war das

Jochen

Katzen-versus-Hunde-Beispiel aus

Jochen

Kegel. Das hatten wir auch schon mal gemacht.

Jochen

Das hatten wir auch schon mal gemacht. Deswegen fand ich das auch

Jochen

interessant, ob das Leute vielleicht aus einem Ahnblickwinkel

Jochen

etwas besser darstellen

Jochen

oder was die da so zu erzählen.

Jochen

Ja, also die haben da

Jochen

irgendwie bessere Netze verwendet.

Jochen

Also die Zahlen waren hinterher besser.

Jochen

Das war tatsächlich ganz cool zu sehen und da muss ich

Jochen

mal gucken, ob ich da nicht vielleicht einfach noch mal so ein bisschen

Jochen

ein paar stärkere Modelle mit reinbauen.

Jochen

Aber so ansonsten

Jochen

war das jetzt

Jochen

für mich jetzt gar nicht, also

Jochen

war jetzt nicht so viel

Jochen

Neues dabei.

Dominik

Ja, und wir haben Post bekommen.

Dominik

Nette Post. Ah, genau, natürlich.

Dominik

Ein ganz schöner Brief von Thorsten. Vielen Dank

Dominik

für deinen super netten Brief. Ja, dankeschön.

Jochen

Wir haben es irgendwie nicht so richtig geschafft, darauf zu antworten, weil

Jochen

gerade viel Stress war. Es ist immer noch viel Stress.

Jochen

Hier hört nicht auf.

Jochen

Ja, aber trotzdem hat uns sehr gefreut und genau, wir hatten auch noch eine Mail bekommen von jemandem, der sich dafür interessiert hat, wie das mit den Generatoren so funktioniert. Ja, und das ist natürlich auch eine interessante Frage und vielleicht kann man das da eigentlich auch hier auch mal kurz...

Dominik

Ja, Jocken, sag doch mal bitte, was ist denn mit einem Generator?

Jochen

Genau, man kann auch einfach Listen nehmen und dann funktioniert das auch alles.

Jochen

Ja, kann man, aber manchmal ist es halt schlauer, einen Generator zu nehmen.

Jochen

Also wenn man zum Beispiel eine sehr große Datenstruktur hat mit vielen Elementen in der Liste

Jochen

und darüber iteriert, dann passt die vielleicht gar nicht komplett in den Hauptspeicher.

Jochen

Das wäre natürlich dann schlecht, weil dann würde das nicht funktionieren.

Dominik

Ist das nicht auch einer der Unterschiede von Python 2 auf Python 3 gewesen,

Dominik

dass bestimmte Sachen dann als Generatoren

Dominik

zurückgegeben wurden, wie vorher?

Jochen

Ja, also bei The Dict ist es

Jochen

irgendwie ab Python 3 so, dass Items

Jochen

einen

Jochen

Generator zurückliefert, während

Jochen

bei Python 2, glaube ich,

Jochen

Iter-Items musste man dann aufrufen.

Jochen

Ich bin mir noch nicht sicher, ob das wirklich der Unterschied

Jochen

zwischen 2 und 3 war. Kann aber gut sein.

Jochen

Oder das Range und X-Range.

Jochen

Bei Python 2 musste man X-Range.

Jochen

Ja, und

Jochen

X-Range dann den Generator und

Jochen

jetzt mittlerweile ist es halt so, dass

Jochen

Range einen Generator zurückgibt, was

Jochen

ja, halt auch irgendwie sinnvoller ist,

Jochen

weil wenn man Range irgendwie

Jochen

ich weiß nicht,

Jochen

wie groß die Zahl sein muss,

Jochen

die man in Range reinsteckt, damit

Jochen

man den Hauptspeicher dann platt macht und

Jochen

das Programm sofort beendet wird

Jochen

vom Kernel, wahrscheinlich muss man

Jochen

eine große Zahl nehmen, aber dann ist halt

Jochen

das so ein bisschen frustrierendes Erlebnis vielleicht, wenn

Jochen

dann einfach gar nichts mehr geht.

Dominik

Ja, aber genau, was ist überhaupt ein Generator? Also eine Liste?

Dominik

Wir wissen ja vielleicht,

Dominik

Da ist eine kleine Datenstruktur, wo verschiedene Elemente drinstehen,

Dominik

über die man sowas kann wie iterieren.

Dominik

Das heißt, man geht über jedes einzelne Listen-Element durch

Dominik

und kann dann damit Dinge anstellen.

Jochen

Der große Unterschied ist im Grunde, dass die Liste halt schon fertig ist.

Jochen

Also alle Elemente der Liste sind halt schon drin

Jochen

und das Ding ist irgendwie in der Datenstruktur, die im Hauptspeicher liegt.

Jochen

Bei dem Generator ist es so, dass, wenn man darüber iteriert,

Jochen

halt immer das Objekt gefragt wird, was ist denn das nächste Element?

Jochen

Dann gibt man das nächste Ding oder so.

Jochen

Und intern sieht das dann halt so aus,

Jochen

dass eine Funktion meistens dann irgendwas

Jochen

rausgildet. Also nicht

Jochen

Return, sondern irgendwie

Jochen

das Ergebnis. Das heißt, sie merkt sich, wo sie gerade war.

Jochen

Ja, genau. Und

Jochen

gildet dann

Jochen

das nächste Ding raus und

Jochen

muss aber die Sachen vorher und nachher

Jochen

gar nicht alle speichern, sondern betrachtet immer nur

Jochen

das aktuelle

Jochen

Element sozusagen oder das

Jochen

aktuelle Ergebnis einer Berechnung und

Jochen

wird dann halt weiterhin weiter ausgeführt

Jochen

bei der nächsten Iteration. Also

Jochen

das heißt, man kann halt über eine, eben

Jochen

wenn man das Beispiel Range nimmt,

Jochen

eine Liste von, weiß ich nicht, Billionen Zahlen

Jochen

iterieren, ohne diese Liste der Billionen

Jochen

Zahlen jemals irgendwo tatsächlich halten zu

Dominik

müssen. Aber es könnte an einer Stelle ein bisschen länger

Dominik

dauern, es zu berechnen, diesen einen Schritt zu

Dominik

gehen, was wahrscheinlich relativ marginal ist bei

Dominik

der CPU, aber die Liste würde

Dominik

sonst im Speicher schon komplett liegen.

Dominik

Genau, bei einer Liste, ja.

Dominik

Der Generator hat dann viel

Dominik

weniger Speicher, den er verbraucht, gerade bei so

Dominik

großen Datenmengen. Genau.

Jochen

ja, also es ist halt. Entsprechend auch schneller?

Dominik

Ja? Warum ist denn der Generator

Dominik

so viel schneller als die Liste?

Jochen

Ja, das kommt drauf an. Also das würde ich jetzt so nicht sagen, dass

Jochen

ein Generator immer schneller ist. Das kann man so nicht sagen.

Jochen

Okay. Ja, wahrscheinlich ein bisschen langsamer, aber

Jochen

es hat halt andere Vorteile.

Jochen

Also der Vorteil ist halt, man kann damit Dinge tun,

Jochen

die mit Listen halt nicht gehen.

Jochen

Und ja,

Jochen

also

Jochen

auch wenn man jetzt irgendwie

Jochen

zum Beispiel Files passt oder so, man möchte

Jochen

halt möglicherweise, also das wäre vielleicht auch

Jochen

so ein Beispiel für, du kannst

Jochen

natürlich irgendwie, wenn du ein großes XML-Dokument

Jochen

beispielsweise hast, auch das Ding

Jochen

komplett

Jochen

in den Hauptspeicher parsen

Jochen

als Datenstruktur und dann

Jochen

damit irgendwas machen. Oder du

Jochen

kannst halt da Schritt für Schritt durchgehen.

Jochen

Und Generatoren

Jochen

werden halt sozusagen, also sozusagen, das wäre

Jochen

eine andere Möglichkeit, das zu vergleichen. So irgendwie

Jochen

DOM

Jochen

Parser versus

Jochen

SACS Parser. Das kennt wahrscheinlich auch keiner.

Jochen

Was ist denn bitte ein SACS Parser?

Jochen

Ach, warte, warte.

Dominik

Das ist doch mal das Webseiten-Strukturelement

Dominik

von den HTML.

Dominik

ObjectModel, ja, genau.

Dominik

Also diesen

Jochen

Baum gibt es aber nicht nur jetzt bei HTML-Seiten,

Jochen

sondern halt, wenn du jetzt irgendwie beliebige

Jochen

XML-Geschichten hast,

Jochen

kann man halt auch entweder das so parsen oder

Jochen

sich vom Parser so zurückgeben lassen, dass man halt

Jochen

den kompletten Baum im Hauptspeicher hat.

Jochen

Was bei kleineren Sachen ja gar kein Problem

Jochen

ist und es ist halt ein bisschen komfortabler, weil man halt

Jochen

irgendwie

Jochen

da hin und her springen kann

Jochen

oder aber man

Jochen

sozusagen

Jochen

parsed das Event basiert und lässt sich halt

Jochen

vom Parser Events geben, wie zum Beispiel da kommt jetzt

Jochen

ein neues Element vorbei oder so.

Jochen

Und dafür muss das Ding

Jochen

aber halt nicht komplett im Hauptspeicher liegen,

Jochen

sondern das wird dann halt sozusagen iterativ geparsed

Jochen

und damit kann man halt Sachen parsen, die halt so groß

Jochen

sind. Ich meine,

Jochen

man braucht, wenn man das, wenn man

Jochen

XML komplett parsed, wahrscheinlich das

Jochen

den zwei-, drei-, vierfachen Speicher

Jochen

von dem, wenn es auf der Platte liegt,

Jochen

im Hauptspeicher. Und wenn jetzt 2 GB

Jochen

Ding auf der Platte liegen hat, dann

Jochen

hat man unter Umständen ein Problem.

Jochen

Früher war das schlimmer. Früher als

Jochen

32-Bit-Systeme noch,

Jochen

da war schnell Ende.

Jochen

Ein V-Speicher voll. Ja, war halt mit 3 GB

Jochen

4, ja, das ist halt Hauptspeicher voll.

Jochen

Ohm war out of mana, ne?

Jochen

Ja.

Jochen

Mittlerweile kann man ja auch viele Hauptspeicher

Jochen

einstecken. Begegnet ist einem wahrscheinlich

Jochen

eher selten, dass man irgendwie

Jochen

den Hauptspeicher ausgeht, wenn man irgendwas passt.

Jochen

Aber selbst das kann natürlich immer noch passieren.

Jochen

Und wenn man jetzt sozusagen auch in der Lage sein möchte,

Jochen

Daten zu verarbeiten, die jetzt nicht in den Hauptspeicher passen,

Jochen

dann macht man eben sowas.

Jochen

Und passt halt eventbasiert.

Jochen

Ist ein bisschen mehr Arbeit dann sozusagen beim Programmieren,

Jochen

aber verbraucht halt nicht so viele Hauptspeicher.

Jochen

Und solche Arten von Fällen gibt es natürlich viele,

Jochen

wo man irgendwie Ströme von Daten hat.

Jochen

Auch wenn man sich an irgendwelche APIs dranhängt,

Jochen

Dann kriegt man halt da irgendwie

Dominik

Reppchen weiter, irgendwelche Requests.

Dominik

Genau, dann

Jochen

ja, für all diese Dinge ist das halt

Jochen

sehr sinnvoll und

Jochen

ja, man kann

Jochen

Generatoren halt auch quasi mehr oder

Jochen

weniger, also

Jochen

man kann diese Funktionssyntax mit Yield

Jochen

verwenden oder halt das

Jochen

Iterator-Protokoll beziehungsweise Generator-Protokoll

Jochen

dann halt verwenden oder man kann halt auch einfach

Jochen

eine Generator-Expression schreiben, das ist so ähnlich

Jochen

wie List Comprehension, bloß halt mit runden Klammern

Jochen

statt Eckigen und dann

Jochen

hat man das halt auch in einer Zeile irgendwie hingeschrieben,

Jochen

was halt auch unter Umständen sehr praktisch ist.

Dominik

Aha, das heißt also, wenn ich eine LIS-Kompräension

Dominik

mit runden Klammern schreibe, habe ich automatisch

Dominik

einen Generator und das funktioniert genauso.

Dominik

Ja, und wenn man jetzt noch eine andere

Jochen

Geschichte mit dazu nimmt, dann

Jochen

hat man sogar, also

Jochen

wenn man jetzt nicht nur Sachen aus einer Funktion

Jochen

rausgilden kann, also sozusagen da passiert

Jochen

ja folgendes,

Jochen

also wenn normalerweise eine Funktion retornt, dann ist die Funktion

Jochen

ja fertig, aber

Jochen

wenn man etwas rausgildet,

Jochen

dann wird die Funktion sozusagen nur unterbrochen,

Jochen

bis halt sozusagen das nächste Ergebnis

Jochen

daraus geholt wird.

Jochen

Und wenn man jetzt auch noch Sachen da reinstecken

Jochen

kann, dann

Jochen

kann man tatsächlich so bidirektionale

Jochen

Kommunikation irgendwie haben. Und dann kann man so was

Jochen

haben wie einen WebSocker-Server oder irgendwie einen Server,

Jochen

der halt Sachen annimmt und wieder Sachen

Jochen

zurückschickt. Und das halt...

Dominik

Auch das macht einen Generator schön.

Jochen

Das wäre dann jetzt nicht mehr wirklich Generator,

Jochen

sondern das wäre dann irgendwie so Co-Routine.

Jochen

Aber das kann man da machen.

Jochen

Und ja, sehr nett.

Jochen

Oh, was mir auch dabei beim Beantworten dieser Mail aufgefallen ist,

Jochen

ist halt, dass mittlerweile Listen relativ wenig Hauptspeicher verbrauchen.

Jochen

In Python 3.7 war das jetzt.

Jochen

Das war früher viel mehr.

Jochen

Früher waren das irgendwie, also ich sage mal,

Jochen

also keine Ahnung, was habe ich da hingeschrieben?

Jochen

So bei 30 Byte oder so, ich weiß es nicht mehr genau.

Jochen

Also vielleicht auch ein bisschen weniger,

Jochen

bis wir die genauen Zahlen nachgucken.

Jochen

Aber man hat halt einen gewissen Overhead dadurch,

Jochen

dass das halt ein Objekt ist, ein integer Objekt,

Jochen

das halt in der Liste steckt und dann braucht man halt auch noch

Jochen

irgendwie eben,

Jochen

man hat halt die Referenz

Jochen

auf das Integer-Objekt, das Integer-Objekt

Jochen

braucht selber irgendwie Platz und dann hat man halt

Jochen

nicht das, was das Ding eigentlich brauchen würde,

Jochen

nämlich irgendwie 8 Byte bei einem

Jochen

64-Bit. C-Programmierer werden sagen,

Jochen

völlig ineffektiv wollen wir eigentlich. Ja, super

Jochen

ineffizient, sondern halt irgendwie das mal

Jochen

3 oder sowas. Oder 4.

Jochen

Was

Jochen

immer noch ganz okay ist, aber

Jochen

das macht natürlich schon einen großen Unterschied, wenn man

Jochen

jetzt Listen mit

Jochen

in einer großen Menge von

Jochen

Zahlen

Jochen

im gleichen Datentyp hat oder so, dann

Jochen

denkt man sich so, naja gut, irgendwie bekloppt.

Jochen

Früher eine Möglichkeit,

Jochen

das Array-Modul in der

Jochen

Standardbibliothek zu verwenden, das macht das

Jochen

einfach quasi so ein Type-Memory-View

Jochen

in C, da ist das auch, dem gibt man halt

Jochen

einen Typ an und dann braucht das

Jochen

genauso viel Platz, wie man da, wie der

Jochen

Typ halt braucht, nativ.

Jochen

Oder man nimmt ein NumPy,

Jochen

da geht das auch.

Jochen

NumPy ist natürlich jetzt nicht in der Standardbibliothek, aber

Jochen

so und jetzt habe ich halt nachgeguckt,

Jochen

wie viel wir brauchen, das ist eine Liste und da habe ich

Jochen

eine Liste mit 100 Millionen Dingern genommen

Jochen

oder so und das hat dann nur noch irgendwie

Jochen

860, knapp

Jochen

68 Megabyte Hauptspeicher gebraucht auf meinem System

Jochen

und ich dachte so, huch, wie ist das, was ist das denn?

Jochen

Ehrlich gesagt, ich weiß nicht genau, woran das liegt, das müsste ich

Jochen

vielleicht bis zum nächsten Mal recherchieren,

Jochen

woran das liegt, aber das ist ja

Jochen

super, also das ist viel weniger

Jochen

als das früher war.

Dominik

Wie vielleicht das früher so im Bereich

Dominik

dann viermal so viel oder deutlich mehr.

Jochen

Ja, da hätte ich ja eher erwartet, dass das dann so

Jochen

drei Gigabyte werden oder so.

Jochen

Weil, ja.

Jochen

Ein Python-Spartplatz.

Jochen

Irgendjemand hat das vernünftig implementiert.

Jochen

Irgendwas ist da optimiert worden.

Jochen

Vielleicht weiß das ja auch jemand.

Dominik

Ja, Generatoren, liebe Männer.

Dominik

ChapterMark ist Zeit jetzt, glaube ich, für.

Dominik

Ja.

Dominik

Oh, ich habe gerade zufällig mein Handy gestaut.

Dominik

Herzlich Glückwunsch an meine Cousine, sie hat gerade einen Heiratsantrag bekommen.

Dominik

Oha.

Dominik

Ja, ja. Wir freuen uns alle für sie mit.

Jochen

Ja, genau.

Jochen

Ja, was hatten wir denn noch?

Jochen

Ah, genau.

Jochen

Dann habe ich irgendwie Podcasts gehört.

Jochen

Das war auch irgendwie wieder sehr nett.

Jochen

Du hörst sowas?

Jochen

Ja, ja.

Jochen

Der Django Chat Podcast hatte wieder eine ganz nette Folge mit ...

Jochen

Bevor du davon erzählst,

Dominik

also ich höre ja auch ab und zu mal gerne Podcasts.

Dominik

Also ich höre auch was zum Bilden,

Dominik

aber manchmal auch einfach Eishockey-Short in den News.

Dominik

Wenn ich einmal kurz Werbung machen darf.

Dominik

Ah, okay.

Dominik

falls man sich noch für Eishockey interessiert,

Dominik

weil es nicht so wahrscheinlich ist,

Dominik

aber vielleicht gibt es ja Menschen.

Dominik

Ja, tolles Ding, tolles Ding.

Dominik

Gab es einen kleinen Skandal?

Dominik

Nein, egal.

Dominik

Ja, Düsseldorf und Eishockey,

Dominik

ja, doch, hat ja auch irgendwie...

Dominik

Ja, ja, man hat sich über einen der Sponsoren aufgeregt,

Dominik

der war nicht so ganz...

Dominik

Der hat so ein paar komische Sachen gepostet.

Dominik

Das haben die investigativen Journalisten

Dominik

von John Nissen aufgedeckt.

Dominik

Mal gucken, ob wir nächstes Jahr noch in der Liga

Dominik

und in den Saisen kommen werden.

Jochen

Tja, genau, ja, nee, ich höre auch noch andere Podcasts, aber auch viel Zeugs und das, genau, da gab es eine Episode mit Andrew Godwin, der, das ist auch ein bekannter Django-Entwickler, hat viel erzählt, der von dem schreibt das ganze Migrations-Framework, was jetzt, was bei 1.7, glaube ich, in Django reingekommen ist. Früher hieß es South.

Dominik

Was musst du denn früher machen, bevor man Dango Migrations

Jochen

machen konnte? Naja, da gab es halt drei,

Jochen

ich glaube, es gab drei unterschiedliche Systeme. Es gab

Jochen

eins von Andrew Godwin, das ist halt das Haus.

Jochen

Es gab eins von Simon Willison

Jochen

und es gab noch eins von

Jochen

Rusty Chris McGee oder so.

Jochen

Das wird sich deutlich mehr Arbeit gewiesen

Jochen

früher. Ja, die meisten Leute haben dann schon

Jochen

das Haus verwendet irgendwie.

Jochen

Insofern,

Jochen

was ich nicht wusste, ist, dass es komplett reimplementiert worden ist,

Jochen

als es dann bei Django 1.7 reinkam.

Jochen

Also er hat das halt nicht einfach

Jochen

übernommen sozusagen, sondern er hat es nochmal komplett neu

Jochen

geschrieben.

Dominik

Ja, aber das ist doch nicht so alles lernt, wenn man irgendwie zwei Jahre weiter ist.

Dominik

Oh, nee, so macht man das.

Dominik

Was habe ich denn da

Dominik

geschrieben? So ein Unsinn.

Jochen

Naja, jedenfalls, der macht

Jochen

momentan beschäftigt sich ja ganz viel mit

Jochen

ja, damit

Jochen

Django so ein bisschen mehr auf

Jochen

diese Async

Jochen

Schiene zu kriegen, weil das ist ja so ein Ding,

Jochen

das ist halt Django überhaupt gar nicht, also die ganzen großen

Jochen

Frameworks sind das nicht, Flask ist das auch nicht.

Jochen

Bei Django ist es halt aber schwierig,

Jochen

das zu ändern, weil das einfach so viel

Jochen

Zwerg ist und

Jochen

weil halt die API, also die

Jochen

Whiskey-API

Jochen

gibt es halt nicht her.

Jochen

Es gibt Prost.

Jochen

Die wollte ich schon immer noch bringen.

Jochen

Er hatte da vorher

Jochen

ein Projekt Django Channels

Jochen

oder das gibt es natürlich immer noch, er ist dann halt

Jochen

irgendwann hat die Maintenance davon abgegeben, aber

Jochen

jetzt geht es darum

Jochen

halt sozusagen Django selber

Jochen

Async-fähig

Jochen

zu machen, was halt auch

Jochen

eines der Ziele ist für jetzt Django 3

Jochen

irgendwie und er hat da irgendwie

Jochen

ein Projekt, ein großes Projekt gestartet

Dominik

und ich bin mal gespannt. Das ermöglicht ja auf einmal ungeahnte

Jochen

weiten... Das wird tatsächlich

Jochen

sehr interessant. Also ich bin

Jochen

schon sehr gespannt. Also das wäre natürlich, also meine

Jochen

Idealvorstellung auch, dass man

Jochen

ja, naja gut,

Jochen

das wird halt auch lange dauern, aber

Jochen

dass halt alles asynchron ist von

Jochen

so einmal, dass man

Jochen

Websocket-Geschichten halt auch direkt machen kann,

Jochen

dass man Clients irgendwie, wenn sich

Jochen

irgendwas geändert hat, benachrichtigen

Jochen

kann und dass man halt auch

Jochen

irgendwie eine Menge Datenbankabfragen

Jochen

oder halt auch API-Anfragen an andere

Jochen

Geschichten, dass man halt sozusagen Endpunkte

Jochen

hat, die dann wiederum

Jochen

andere API-Endpunkte anfragen,

Jochen

irgendwo anders vielleicht

Jochen

und dass man das alles auch wieder asynchron

Jochen

zusammen aggregieren kann und dann nicht

Jochen

das synchron hintereinander machen muss, wie das

Jochen

momentan passiert. Und dann hat man halt irgendwie 200

Jochen

Abfragen, die man irgendwo hinmacht, dann macht man

Jochen

vielleicht 100 Statements und dann fragt man

Jochen

noch ein paar APIs und dann muss man halt

Jochen

manchmal vielleicht auch zwei oder drei Requests machen und

Jochen

dann verbreitet man

Jochen

unheimlich viel Zeit dabei zu warten und

Jochen

das ist natürlich blöd, weil die Latenz natürlich

Jochen

irgendwie entscheidend ist. Und

Jochen

wenn man das asynchron machen würde, dann müsste

Jochen

man halt sozusagen nur, dann würde

Jochen

der längst laufende Request

Jochen

halt dann noch die Latenz bestimmen, aber

Jochen

ja,

Jochen

wenn der halt auch relativ

Jochen

schnell wieder da ist, dann kann das relativ

Jochen

flott gehen. Das wäre sehr

Jochen

schön. Nicht schlecht. Ja.

Jochen

Jedenfalls, genau, der hat auch irgendwas,

Jochen

der hat tolle Sachen erzählt, der arbeitet irgendwie bei

Jochen

Eventbrite und also zum Beispiel eine Geschichte, wo ich

Jochen

dachte, hätte ich nie gedacht, dass Leute damit Probleme kriegen

Jochen

können, ist, dass sie

Jochen

teilweise sehr schnell darauf

Jochen

reagieren müssen, wenn sich irgendwie Traffic

Jochen

ändert

Jochen

bei ihnen. Manchmal kommen so, kriegen sie

Jochen

sehr kurz Bescheid gesagt und dann

Jochen

sehr viel Traffic.

Jochen

300.000 Leute wollen in den nächsten

Jochen

15 Sekunden unseren Service.

Jochen

Ja, und dann müssen sie halt entsprechend

Jochen

Maschinen hochfahren oder zumindest

Jochen

irgendwie neue Applikationsserver oder so

Jochen

für eine bestimmte Geschichte.

Jochen

Und sie haben das Problem, dass Django bei ihnen

Jochen

sehr langsam mittlerweile startet. Also das ist halt auch so

Jochen

ein Eventbrite, hat irgendwie so

Jochen

knapp über eine Million Zeilen

Jochen

Python-Code.

Jochen

In Django. Und ist ein Django-Projekt, ja.

Jochen

Und das

Jochen

startet relativ langsam. Eventbrite kennt

Jochen

ihr doch, oder? Ja, kennt ihr.

Jochen

Das ist, denke ich, auch eine bekannte Geschichte.

Jochen

Und das Ding

Jochen

braucht halt mindestens 30 Sekunden zum Starten,

Jochen

weil das einfach so lange dauert, bis die ganzen

Jochen

Imports aufgelöst sind.

Jochen

Oh Gott, oh Gott, oh Gott.

Dominik

Dann musst du 30 Sekunden vorher wissen, was passiert.

Dominik

Da kommt ein Sturm.

Jochen

Das Problem ist, du kannst es halt nicht optimieren.

Jochen

Wenn die Importe so lange dauern,

Jochen

dann dauert es halt so lange, da kannst du nicht viel machen.

Jochen

Das ist natürlich schon bitter.

Jochen

Man müsste welche rausschmeißen eigentlich.

Jochen

Ja, aber...

Jochen

Dann geht es funktioniert, geht es verloren.

Jochen

Das geht ja auch nicht.

Jochen

Ja, also hoffentlich...

Jochen

Ja, das muss man schon sagen.

Jochen

Ja, vielleicht dann doch irgendwie an der Zeit

Jochen

dann mal so den monolithischen Ansatz irgendwie.

Dominik

Es gibt ja mehrere Optionen, wie man sowas ausmisten kann.

Dominik

Irgendwo ab und zu mal ein paar Sachen abfackeln,

Dominik

gucken, was noch stehen bleibt.

Dominik

Oder mal wirklich mühevoll rangehen, alles neu umsortieren.

Dominik

Das ist halt die Frage.

Dominik

Wie lange dauert so ein Refactoring, wenn du dann komplett auf...

Dominik

Du kannst nicht viel machen.

Dominik

Also Refactoring hilft dir auch nicht.

Dominik

Ja, aber alle Features erstmal rausschmeißen.

Jochen

Ja gut, okay, die ganzen Features streichen, aber das ist nicht...

Dominik

Ja, aber du könntest ja zum Beispiel, kannst du nicht sowas machen wie Features

Dominik

nur dann laden, wenn du sie wirklich brauchst?

Dominik

Und dann dafür irgendwelche extra Requests machen, weil

Dominik

die ganzen Basissachen, vielleicht brauchen die gar nicht.

Jochen

Ja, so bei Django ist es so, da

Jochen

werden deine Installed-Apps, die werden alle

Jochen

importiert.

Jochen

Du kannst das, soweit ich weiß,

Jochen

auch später nicht ändern. Du kannst nicht sagen,

Jochen

jetzt irgendwas in Installed-Apps hinzufügen,

Jochen

dynamisch. Also, wahrscheinlich geht es schon

Jochen

doch. Wenn man

Jochen

sich da genug Mühe gibt, dann kriegt man das wahrscheinlich hin.

Jochen

aber das ist so nicht, sondern das passiert

Jochen

beim Starten. Da wird

Jochen

gehen, genau, wenn die ganzen

Jochen

Installed-Apps gehen, dann geht man durch

Jochen

und importiert die ganzen Dinger.

Dominik

Ja, falls jetzt noch jemand zuhört, der

Jochen

naja, wer ist das? Achso, ja genau.

Jochen

Moment, wir sind noch nicht ganz durch mit

Jochen

den

Jochen

Geschichten. Was haben

Jochen

wir denn noch?

Jochen

Ne, oder sind wir doch durch? Hattest du noch irgendwas?

Jochen

Nö, gerade für jetzt. Alles klar,

Jochen

okay, dann sind wir doch mit dem News-Teil durch. Alles klar.

Jochen

Ja, ja, ja. Okay.

Jochen

Dann mache ich hier mal

Jochen

eine Kapitelmarke zu

Jochen

ja,

Jochen

zum eigentlichen

Jochen

Thema.

Jochen

Ja, wir wollten natürlich jetzt

Dominik

erklären, was naiv-based denn ist.

Dominik

Was macht das denn? Wofür braucht man das denn?

Dominik

Und erst mal ist das, glaube ich, so eine

Dominik

Beschreibung einfach nur für so ein statistisches...

Dominik

Ja, also die

Jochen

Bayes-Riegel kennt man ja vielleicht.

Jochen

Kennt man das?

Jochen

Ja, warte, lass mich nochmal.

Dominik

Ja, das geht ja um bedingte Wahrscheinlichkeiten von Ereignissen berechnet, die in der Zukunft stattfinden oder anhand dessen von der Eintrittswahrscheinlichkeit, die in der Vergangenheit, die man schon kannte, von ähnlichen Dingen. Und ja, dann kann man die miteinander kombinieren.

Jochen

Also Base Theorem ist eigentlich einfach nur…

Dominik

Wir gucken jetzt nicht wirklich bei Wikipedia nach und lesen Wikipedia vor, oder?

Dominik

Nein, dachte ich.

Dominik

Okay, mit.

Jochen

Naja, also ja, im Grunde ist das einfach nur eine Möglichkeit, wie man halt sozusagen die Wahrscheinlichkeiten umdrehen kann.

Jochen

Also man weiß halt die Wahrscheinlichkeit von B, wenn A, ja, und jetzt möchte man das irgendwie umdrehen.

Jochen

Dafür gibt es halt diese Regel, die das dann sagt, wie das geht.

Dominik

Ja, nur immer als Beispiel, was kann man sich dann...

Dominik

Also ihr habt jetzt ein Kartenspiel oder sowas, ja, die Wahrscheinlichkeit dafür, dass ihr einen König zieht.

Dominik

Wie viel ist das denn? 4,52 oder so, ne?

Dominik

Und dann willst du halt wissen,

Dominik

wie hoch die Wahrscheinlichkeit ist, dass du ein Bild siehst.

Dominik

Und dann hast du wie viel?

Dominik

Dreimal, 4,52.

Dominik

Und dann kannst du dir überlegen,

Dominik

ja, die Wahrscheinlichkeit, dass du ein König siehst

Dominik

und es ein Bild ist.

Dominik

Dann hast du die Wahrscheinlichkeit, dass es ein Bild ist

Dominik

und die Wahrscheinlichkeit, dass es ein König ist und andersrum.

Dominik

Ja.

Dominik

Aber die Wahrscheinlichkeit, dass es ein Bild ist

Dominik

und die Bedingung, dass es ein König ist, ist halt 1,

Dominik

weil jeder König ein Bild ist.

Dominik

Und andersrum kannst du dann halt ausrechnen, was kommt denn da raus.

Dominik

Ja, also. Verknüpfst du halt die beiden

Dominik

Wahrscheinlichkeiten mit den Ereignissen und so kann man

Dominik

ein bisschen in die Zukunft schauen. Das ist ja das, was

Dominik

die Statistiker so gerne tun mit Technik.

Dominik

Darüber reibeln.

Dominik

Genau. Ja, wir haben eine Eintrittswahrscheinlichkeit, die würden wir gerne

Dominik

bestimmen anhand von

Dominik

Features. Und das ist ja das, was uns dann

Dominik

hinterher dann in diesem Machine Learning Ding, glaube ich,

Dominik

am meisten interessiert. Wie man aus diesem einfachen

Dominik

Beispiel von

Dominik

Feature-Dingern. Ich glaube, wir haben gesagt,

Dominik

wir machen das anhand diesem Spam-Beispiel. Das heißt, es geht

Dominik

darum, glaube ich, welche Worte

Dominik

da

Jochen

Genau, im Grunde sind halt die, was man halt weiß, ist sozusagen die Wahrscheinlichkeit, dass wenn man bestimmte Worte sieht, ob das jetzt Spam ist oder nicht, man möchte es halt umdrehen, man möchte halt sagen können, ja, wenn ich jetzt diese Nachricht mit den Worten gesehen habe, welche Wahrscheinlichkeit habe ich denn jetzt?

Dominik

Ja, das ist das Gute an anderen, deswegen ist das ja auch naiv, weil man tut so, als wäre die unabhängig voneinander, als wäre ein Wort entweder Spam oder nicht.

Jochen

Genau, und das ist es natürlich nicht so richtig.

Jochen

Das stimmt nicht.

Jochen

Man darf das nicht einfach so alles aufmultiplizieren.

Jochen

Man kann auch Idiot-Based sagen oder so.

Jochen

Ja, aber es funktioniert tatsächlich relativ gut.

Jochen

Genau, das ist ja auch irgendwie sozusagen der erste funktionierende Ansatz gewesen,

Jochen

um irgendwie mit diesem Spam-Ding fertig zu werden.

Jochen

2004, Programme, Plan for Spam.

Jochen

Ich habe das jetzt ehrlich gesagt gar nicht so deswegen gewählt,

Jochen

weil das für Machine Learning so eine interessante Geschichte ist,

Jochen

weil eigentlich ist es das nicht, das verwendet man

Jochen

eher, ja.

Dominik

Also Bildklassifikation, so einfache Dinge,

Dominik

ja, nein, bist du drauf, nicht?

Dominik

Ist mein Gesicht drauf, nicht? Kann ich nicht mit Base machen?

Dominik

Nee, da wird es wahrscheinlich eher,

Dominik

das wird schon nicht mehr gehen.

Dominik

Aber

Jochen

es ist trotzdem interessant.

Jochen

Und zwar, also ich habe das vor allen Dingen

Jochen

deswegen mir jetzt nochmal angeguckt,

Jochen

beziehungsweise überlegt, dass das ein gutes Beispiel wäre,

Jochen

weil ich

Jochen

ein Beispiel haben wollte für etwas, was man

Jochen

in Pure Python sozusagen

Jochen

machen kann, wo man nur die

Jochen

simplen Datenstrukturen

Jochen

irgendwie nimmt, die man halt irgendwie so

Jochen

dabei hat, also Skalare, Listen

Jochen

ja oder beziehungsweise

Jochen

Strings als eine Form

Jochen

von irgendwie Variablen, die jetzt

Jochen

halt einen bestimmten Wert haben,

Jochen

Listen,

Jochen

Dictionaries und das war's

Jochen

eigentlich und mehr braucht man gar nicht.

Jochen

Und halt hat man

Jochen

noch Funktionen, die man irgendwie aufruft und

Jochen

das war's.

Jochen

Also ihr seht, wir sind bei einer

Jochen

totalen Einsteigerfolge angekommen. Ja, eigentlich

Jochen

schon. Also das

Jochen

ist halt das Interessante,

Jochen

dass man damit halt so wahnsinnig viel machen kann.

Jochen

Und das ist halt etwas, was ich gerne

Jochen

irgendwie vermitteln würde.

Jochen

Also wenn man das hinkriegt, wenn man das

Jochen

versteht, dann hat man schon

Jochen

ganz viel.

Dominik

Das heißt, anhand Python lernen, ein bisschen anhand

Dominik

von Jochens Beispiel, mit dem man auch

Dominik

Machine Learning machen kann. Und zwar

Dominik

ein Notebook hast du auch auf deinem GitHub?

Dominik

Genau, das kann ich dann auch in den

Jochen

Show Notes verlinken, wo da halt dieses Notebook drin ist.

Jochen

und sich das mal angucken kann.

Jochen

Ich benutze ja einfach irgendwie, es gibt so

Jochen

ein SMS-Spam-

Jochen

Dataset, wobei Kekkel,

Jochen

das habe ich mir runtergeladen,

Jochen

irgendwie auf meinen S3 gepackt und

Jochen

das Notebook zieht sich das davon einfach

Jochen

und lädt das runter und dann hat man das.

Jochen

Das ist nicht so viel, das sind irgendwie, warte,

Jochen

lass mich mal gerade gucken. Ich werde die Stadt, das ist dieses Ding hier auch

Jochen

einfach mal erstmal neu.

Jochen

Okay.

Jochen

Lade das mal runter, es sind irgendwie nur so 200

Jochen

Kilowatt. Okay.

Jochen

So.

Jochen

Dann pausen wir das mal so.

Jochen

Okay, wie viele Nachrichten haben wir denn da drin?

Jochen

5.500.

Jochen

Und davon sind, ich weiß jetzt gar nicht genau, wie viele.

Jochen

1.500 sind, ah nee, ich weiß nicht, ihr müsst nachgucken.

Jochen

Also es ist deutlich mehr Hemm als Spam, aber...

Jochen

Ein Schinken?

Jochen

Ja, genau.

Jochen

Aber es ist halt

Jochen

eigentlich nicht viele Datenpunkte

Jochen

oder Beobachtungen, wenn man

Jochen

heutige Maßstäbe anlegt, aber

Jochen

es ist auf jeden Fall ein Datastat, wenn man schon

Jochen

ein bisschen was machen kann und es tut halt

Jochen

auch nicht weh, wenn man es irgendwo hinrotaliert.

Dominik

Du könntest ja auch erstmal ein bisschen Handling dafür bekommen,

Dominik

wie funktioniert das denn mit der Klassifikation,

Dominik

wenn ich jetzt so zwei Dinge habe, die ich voneinander

Dominik

trennen möchte. Genau, dieses Ding,

Jochen

das Beispiel hier würde übrigens auch für

Jochen

sozusagen beliebig,

Jochen

ganz beliebig vielleicht nicht, aber mehr als

Jochen

zwei auf jeden Fall auch funktionieren. Also ganz

Jochen

genauso. Also aber es wäre Multiclass

Jochen

Klassifikation. Das heißt,

Jochen

es würde hinterher sozusagen die

Jochen

bestpassendste Klasse rausfallen. Man würde

Jochen

nicht mehrere

Jochen

Klassen, zu denen jetzt irgendwas gehört,

Jochen

bekommen. Also man könnte sich ja vorstellen, es gibt jetzt

Jochen

nicht nur Spam

Jochen

und Ham, sondern es gibt auch noch irgendwie Newsletter

Jochen

oder irgendwie

Jochen

Notifikationen von irgendwelchen Social

Jochen

Networks oder sowas. Oder Spam.

Jochen

Ja, aber vielleicht möchte man das ja aus welchen Gründen auch immer irgendwie feiner unterteilen

Jochen

und die Notifikationen sehen, die dich irgendwie dahin latschen sollen,

Jochen

doch mal wieder ein bisschen Zeit auf Facebook zu verbringen oder so.

Jochen

Und dann würde man jetzt mit dem Ansatz auch immer nur eine von den Klassen kriegen.

Jochen

Aber es könnte natürlich eben sein, dass es zum Beispiel eine Notifikation ist und Spam.

Dominik

Ja, weil das da rausfällt, weil Naivbase halt einfach sagt, nö, ich will jetzt nur eins haben.

Jochen

Also das wäre jetzt, also das, was

Jochen

in dem Roadbook drinsteht,

Jochen

da fällt halt hinterher eine Kategorie

Jochen

bei raus. Man könnte es auch so

Jochen

umbauen, dass es Multilabel kann,

Jochen

aber ist halt nicht so.

Jochen

Wir machen ja das Anfängerbeispiel.

Jochen

Wir machen jetzt ein einfaches Beispiel.

Jochen

Also, genau.

Jochen

So, was wir

Jochen

jetzt da

Jochen

zuerst machen, ist das halt in Training und Test

Jochen

Dinger aufzuteilen. Da habe ich das einfach zufällig

Jochen

getrennt nach, also

Jochen

25% sind halt Test,

Jochen

der Rest ist Training, also 75%.

Jochen

75%.

Jochen

Und

Jochen

ja, das, was ich jetzt eigentlich

Jochen

sozusagen

Jochen

und das wäre natürlich schon

Jochen

schön, wenn man sich das irgendwie angucken würde oder so,

Jochen

aber was ich jetzt eigentlich

Jochen

zeigen

Jochen

wollen würde, ist, dass

Jochen

wie einfach das ist,

Jochen

sozusagen

Jochen

ein Modell zu trainieren, das jetzt

Jochen

zwischen Spam und Nicht-Spam unterscheiden kann.

Jochen

Und zwar das schon relativ gut.

Jochen

Also dem ist einfach die bedingte Wahrscheinlichkeit

Dominik

vorhersagt, dass es Wörter enthält,

Dominik

die Spam sind, unter der Bindung

Dominik

könnte Spam sein.

Dominik

Ich kann ja mal kurz versuchen

Jochen

mit Worten zu beschreiben, wie dieser Trainingsprozess

Jochen

aussieht.

Jochen

Und der ist halt, man

Jochen

geht jetzt über alle Dokumente,

Jochen

die entweder Spam oder Ham sind, drüber.

Jochen

Die in den Trainingsdaten steht ja dran.

Jochen

Und guckt, ob Penis drin steht.

Jochen

Ja genau, teilt

Jochen

das, teilt

Jochen

irgendwie diese SMS halt auf

Jochen

in die Wörter, aus denen sie besteht.

Dominik

Und dann kommt man in alle, also man hat ja

Dominik

Trainingsdaten, wo halt drin steht, dass es Spam ist oder es nicht

Dominik

Spam ist. Und wenn man jetzt sagt, okay,

Dominik

in denen, wo Spam ist, kommt 50

Dominik

mal Penis vor und in denen, wo nicht Spam ist,

Dominik

kommt nur einmal Penis vor, dann hat man so eine bedingte

Dominik

Wahrscheinlichkeit. Aber die Wahrscheinlichkeit,

Dominik

dass Penis vorkommt und es kein Spam ist und die Wahrscheinlichkeit,

Dominik

dass Penis drin vorkommt, ist Spam ist. Und

Dominik

daraus hat man jetzt auch nach Base so eine

Dominik

kombinatorische Möglichkeit, sich das

Dominik

rauszurechnen. Genau,

Jochen

man hat jetzt für jedes einzelne Wort eine

Jochen

Wahrscheinlichkeit dafür, dass

Jochen

dieses Wort irgendwie in dieser

Jochen

Kategorie vorkommt. Das ist einfach

Jochen

die Frequenz von dem Wort in der Kategorie.

Jochen

Also wenn halt

Jochen

man muss das natürlich

Jochen

immer noch eben teilen durch die Anzahl der Worte, die überhaupt

Jochen

irgendwie in der Kategorie vorgekommen sind.

Jochen

Deswegen muss man sich das halt auch noch merken.

Jochen

Man geht halt über alle Dokumente, merkt sich

Jochen

okay, wie viel

Jochen

Wörter habe ich

Jochen

denn jetzt bisher gesehen für die

Jochen

Klasse

Jochen

Spam oder Ham und zählt

Jochen

das dann halt hoch, je nachdem, ob das...

Jochen

Haben wir heute schon mal Penis gesagt?

Jochen

Entschuldige, ich bin mal albern.

Jochen

Oh, wir fliegen bei iTunes raus, Mann.

Dominik

Oh, wir sind auf iTunes? Na gut.

Jochen

Keine Ahnung. Ne, ich glaube nicht, aber...

Jochen

Ne, wie Viagra.

Jochen

Das könnte eine sehr gefährliche Folge

Jochen

werden. Wir lesen keine Spam-Geschichten

Jochen

vor. Na gut.

Jochen

Auch wenn wir damit reich werden können.

Jochen

Reich werden? Ich will einen Spam.

Jochen

Nee, das ist ein altes SMS-Spam.

Dominik

Okay, wir denken euch gerade ab davon.

Jochen

Ja, also, das, was man da eigentlich macht,

Jochen

ist, man geht halt über alle Wörter drüber

Jochen

und merkt sich halt sozusagen für das entsprechende Label,

Jochen

was man gerade gesehen hat, irgendwie,

Jochen

ja, man zählt da halt hoch,

Jochen

wie viele Wörter hat man in dieser Kategorie überhaupt gesehen.

Jochen

Und man zählt jetzt sozusagen noch hoch quasi,

Jochen

welche Worte man wie oft gesehen hat in welcher Kategorie.

Jochen

Und dann kann man hinterher sagen, okay,

Jochen

Wenn ich jetzt eben in der Kategorie Spam 10 Mal Penis gesehen habe und ich habe insgesamt 1000 Wörter gesehen, unterschiedliche Wörter, dann ist die Wahrscheinlichkeit, dass es Spam ist, wenn ich jetzt das Wort Penis sehe, ist es halt, was ist das dann, ein Prozent oder sowas.

Jochen

Ich habe jetzt nicht genau mitgerechnet.

Jochen

Ja, es ist immer blöd, so was, also, genau. Und das macht man jetzt, also, nochmal, ich gehe einfach jetzt, verdammt, das ist gar nicht so einfach. Also die Trainingsfunktion ist einfach nur, ja, man geht über alle Dokumente drüber, zählt für das Label halt hoch, wie viele Dokumente man, ach Quatsch, jetzt habe ich das auch noch falsch erklärt.

Jochen

Ja, da musst du nochmal von vorne anfangen.

Jochen

Ja.

Jochen

Was man eigentlich...

Jochen

Du wusstest, dass du jetzt Pfarrer warst?

Jochen

Ja, ja, natürlich. Landpfarrer.

Jochen

Dazu kann ich was erzählen.

Jochen

Mit der Fibreza

Jochen

war ich ja offenbar keine Ahnung von, aber

Jochen

nee, das ist eine ganz, ganz

Jochen

eine ultra interessante Geschichte.

Jochen

Das

Jochen

in, also

Jochen

in

Jochen

England gab es

Jochen

halt diese Kaste der Landfahrer, die waren reich.

Jochen

Das, wenn man

Jochen

zum Beispiel, na, wie heißt das?

Jochen

Eine Abtei,

Jochen

ein Gutshof.

Jochen

Priorei, wenn es darum geht.

Jochen

Wie hieß

Jochen

dieses Buch nochmal?

Jochen

Pride and Prejudice.

Jochen

Genau.

Jochen

Das spielt ja so ein bisschen

Jochen

Leute Adelig und so.

Jochen

Ja, eigentlich ein gutes Buch, kann ich empfehlen.

Jochen

Und

Jochen

dann kommt da plötzlich dieser Pfarrer,

Jochen

Wie kann das sein? Das gehört doch eigentlich gar nicht dazu.

Jochen

Doch, doch, doch, die spielten da mit.

Jochen

Das war eine Klasse von Leuten, die relativ viel verdient haben

Jochen

für die damaligen Verhältnisse.

Jochen

Und sie mussten praktisch nichts tun dafür.

Jochen

Voll gut.

Jochen

Ab und zu mal vor der Kanzel herunterfliegen.

Jochen

Und es gab sehr viele davon.

Jochen

Und das gab denen Zeit, sich mit allen möglichen abseitigen,

Jochen

in alle möglichen Richtungen ihren Interessen nachzugehen.

Jochen

Das war schon ein bisschen Nachbrudertakt, oder?

Dominik

Ich stelle mir gerade so, dass jemand aussieht wie ich

Dominik

mit so einem großen Fass am Bauch.

Jochen

Nee, das ist deutlich später.

Jochen

Aber es gibt Leute, die tatsächlich ernsthaft behaupten,

Jochen

dass das einer der Gründe dafür ist,

Jochen

warum die Industrialisierung irgendwie so abgehoben hat

Jochen

und warum so viele coole neue Sachen da rausgekommen sind.

Jochen

Weil es gab halt eine Menge Leute, die hatten viel Zeit, viel Geld

Jochen

und echt nichts zu tun.

Jochen

Und dann haben die halt irgendwie sich einfach da so für interessiert,

Jochen

wie baut man eine Dampfmaschine?

Jochen

Ich meine, Darwin war auch so jemand.

Jochen

Also, ähm, ja.

Jochen

Bayes war so jemand,

Jochen

mir fällt das jetzt nicht ein, aber es gab

Jochen

eine ganze Menge, eine ganze Menge der Leute, die jetzt so

Jochen

total bekannt sind, wo man sich ja denkt, so, wow, die haben

Jochen

großartige Sachen gemacht, waren Landfahrer

Jochen

in England. Ja, war gut.

Jochen

Ähm. Ja,

Jochen

rückwärts Induktion. Ja,

Jochen

äh, genau.

Jochen

Also, was ich jetzt gerade blödsinnigerweise

Jochen

falsch erzählt habe, ist, dass man sich nicht

Jochen

merkt, wie viele Worte jetzt in der Kategorie vorkommen,

Jochen

sondern merkt sich halt, wie viele Dokumente

Jochen

kommen jetzt pro Kategorie eigentlich vor.

Jochen

Und genau, also was man sich eigentlich merkt, ist, wie viele Dokumente hat man jetzt pro Kategorie gesehen und dann halt noch für jedes Wort da drin sozusagen, wie oft kam denn dieses Wort in der Kategorie vor.

Dominik

Und dann hat man die Wahrscheinlichkeit, dass ein Wort vorgekommen ist, wie zum Beispiel ein Piep unter der Bedingung, dass es Spam ist oder das Wort Piep unter der Bedingung, dass es kein Spam ist.

Dominik

Und das hat man zwei bedingte Wahrscheinlichkeiten und daraus kann man jetzt mit der allgemeinen Wahrscheinlichkeit für das Vorkommen dieses Wortes rausrechnen, wie hoch die Wahrscheinlichkeit denn sein könnte.

Jochen

Genau, aber das klingt halt alles irgendwie so relativ kompliziert, wenn man es so erklärt, in Code ist das sehr wenig Zeilen.

Jochen

Ja, das ist so ein bisschen Brain hin und her.

Jochen

Also diese Train-Funktion, die hat halt, lass mich nicht lügen, eins, zwei, drei, vier, fünf, sechs, sieben Zeilen. Das ist alles. Und die sind alle relativ kurz. Also keine von diesen Zeilen hat mehr als 30 Characters oder sowas. Also es ist wirklich sehr, sehr einfach.

Jochen

Und ja, man kommt mit den ganz simplen Datenstrukturen, ich habe jetzt an der Stelle DefaultsDict genommen, weil das zum Zählen halt schöner ist, als wenn man das normale Dict nimmt, da muss man so oft get schreiben.

Dominik

Aber was ist DefaultsDict? Ach, das ist eine Bibliothek aus der Standardbibliothek?

Jochen

Nee, ja, es ist in der Standardbibliothek.

Jochen

Genau, und zwar aus dem Collections-Modul.

Jochen

Und was das macht, ist, dass man,

Jochen

also das sollte man vielleicht schon kennen,

Jochen

beim Dict kann man sagen,

Jochen

irgendwie Dict.setDefault,

Jochen

dann gibt man einen Key an,

Jochen

dann halt der, ja, dann den Wert

Jochen

oder halt eine Datenstruktur.

Jochen

Also ganz oft, was man halt macht

Jochen

oder früher gemacht hat,

Jochen

heute nimmt man wahrscheinlich Default-Dict,

Jochen

ist halt irgendwie, du hast halt,

Jochen

irgendeinen Dikt, einen Key

Jochen

und dann eine Liste von Sachen, die da dranhängen

Jochen

und dann sagst du irgendwie

Jochen

dieses Dikt.ZDFault, irgendwie

Jochen

dein Key,

Jochen

Eckeklammer auf, Eckeklammer zu,

Jochen

also Liste, Klammer zu, Punkt, Append,

Jochen

irgendwie da einen Wert rein.

Jochen

Das kann man auch machen, man kann

Jochen

das auch mit

Jochen

ZDFault machen, aber dann ist die Zeile relativ

Jochen

lang und dann wird es so ein bisschen eklig.

Jochen

Ich hoffe, ihr habt mitgeschrieben.

Jochen

Da halt ein Default-Dikt macht,

Jochen

das halt alles sehr viel einfacher und

Jochen

standardisiert das sozusagen. Sagt man halt irgendwie,

Jochen

okay, wenn ich jetzt ein Default-Dict habe

Jochen

von List, dann macht es genau

Jochen

das. Und da muss man nicht SetDefault die ganze Zeit sagen,

Jochen

sondern normalerweise würde ja,

Jochen

wenn ich ein Dict nehme und da

Jochen

einfach irgendwie ein Key reinsetze und dann

Jochen

dem irgendwie, dann sage Append irgendwas

Jochen

oder so, oder dem Wertzuweiser, dann

Jochen

kracht es halt, weil das sagt dann halt KeyError.

Jochen

Die Key gibt es da gar nicht.

Jochen

Und wenn man ein Default-Dict nimmt, dann passiert das nicht.

Dominik

Weil er dann immer die leere Liste drin hat.

Jochen

Wenn es das noch nicht gibt, dann erzeugt er halt

Jochen

in dem Moment halt entsprechend eben eine Liste

Jochen

oder halt ein Integer, wenn man sagt

Jochen

DefaultDict von Int, dann wird halt,

Jochen

kann man halt sagen, irgendwie

Jochen

Dict, Ecke-Klammer auf,

Jochen

Key, Ecke-Klammer zu, plus gleich

Jochen

irgendwas, plus gleich 1

Jochen

zum Beispiel und zählt damit halt hoch,

Jochen

ohne dass es einen Key-Error gibt, auch wenn es den Key

Jochen

darin noch nicht gab, weil

Jochen

wenn es den Key nicht gibt, dann wird das halt

Jochen

erzeugt. Und zwar,

Jochen

ja. Schön, DefaultKey ist

Dominik

direkt mit den Keys mit. Hatte der schon mal, dass er irgendwie

Dominik

auf einen Key zugreifen wollte, in dessen

Dominik

ein Error gab und ein Programm durchgeflogen ist

Dominik

mit Z-Default, wäre das nicht passiert.

Dominik

Genau, also Z-Default

Jochen

hat man dann früher gemacht und heute, denke ich,

Jochen

machen die meisten Leute tatsächlich, oder ich weiß es nicht,

Jochen

es wäre interessant, Default-Dict. Und man kann das

Jochen

dann auch noch ineinander schachteln, also für die Counts der

Jochen

Wörter in den einzelnen Kategorien habe ich jetzt ein...

Dominik

Ah, das ist ja so unheimlich kompliziert, wenn man

Dominik

in Statistik irgendwie die ganzen bedingten Wahrscheinlichkeiten

Dominik

immer gegen sich umdreht. Aber hey, wir können Dicts

Dominik

ineinander schachteln, das ist doch schön.

Dominik

JSON hört sich das an, wie JSON.

Jochen

Ja, Dicts und Jason haben ja auch viel miteinander zu tun.

Jochen

Also das ist ja so was ganz Ähnliches.

Jochen

Könntest Dicts als Jason

Jochen

rausrealisieren. Also na gut,

Jochen

du hast halt Objekte drin, die sich nicht

Jochen

in Jason rausrealisieren lassen, was natürlich auch sein kann.

Jochen

Ja, und was ich total

Dominik

nicht so finde, ist, dass ich glaube, bei Jason, wenn ich das

Dominik

richtig im Kopf habe, dass immer bei den letzten Elementen

Dominik

das Komma nicht dastehen darf.

Jochen

Ach ja, Jason hat so

Jochen

ein paar so hässliche Seiten. Ja, das ist so ein bisschen

Jochen

äh, genau, Jason

Jochen

zu parsen ist so ein bisschen ätzend.

Jochen

Ähm,

Jochen

Aber genau, also das ist wirklich wenig Zeilen und trotzdem hat man damit ein Modell gebaut, das dann ganz ordentlich funktioniert. Die Klassifikation ist jetzt ein bisschen schwieriger.

Dominik

Ja, wir möchten gerne jetzt klassifizieren.

Dominik

Das beschreibe ich jetzt nicht.

Jochen

Das hat schon beim Trainieren, das ist total einfach,

Jochen

hat das nicht gut funktioniert und jetzt beim Klassifizieren.

Jochen

Also kann man sich angucken, wenn einem das interessiert.

Jochen

Im Grunde, was passiert ist eigentlich nur,

Jochen

dass man halt bei einer neuen Nachricht,

Jochen

bei der man nicht weiß, ist das jetzt bei mir oder nicht,

Jochen

zerlegt man auch wieder in Worte

Jochen

und multipliziert dann halt für jede Kategorie

Jochen

halt sozusagen die Kategoriefrequenz dieses Wortes auf.

Dominik

Ja, also um das erstmal nochmal zu simplifizieren zu sagen,

Dominik

ohne dass das technisch vielleicht ganz korrekt ist,

Dominik

Man nimmt einfach die Wahrscheinlichkeit

Dominik

jedes einzelnen Wortes, ob es Spam ist

Dominik

oder nicht Spam ist, also bei Viagra oder

Dominik

ein Piep, ist es vielleicht relativ hoch,

Dominik

dass dann die Mail Spam ist und multipliziert die miteinander

Dominik

und bekommt dann einen Gesamtwert raus,

Dominik

ob es jetzt nur Spam sein könnte

Dominik

oder nicht. Genau.

Dominik

Diese Zahlen sind

Jochen

dann halt sehr niedrig oft, weil

Jochen

entsprechend halt, ja, Worte auch nicht

Jochen

so, meistens gibt es...

Dominik

Hier muss man natürlich noch mit der Anzahl normalisieren oder sowas.

Jochen

Genau, also normalerweise

Jochen

man muss auch ein bisschen aufpassen, man muss ein bisschen tricksen,

Jochen

damit man da nicht irgendwie so in,

Jochen

es wird halt null irgendwie dadurch,

Jochen

dass man zu oft kleine Zahlen miteinander multipliziert hat.

Dominik

Ja, ich glaube, auch wenn du größere Zahlen miteinander multiplizierst,

Dominik

die unter 1 sind, wird es irgendwann null.

Dominik

Naja, eben, genau.

Jochen

Und das ist halt, also muss man halt gucken,

Jochen

wenn die Texte lang werden,

Jochen

jetzt bei SMS auch praktisch sind sie nicht so lang,

Jochen

aber da muss man halt Maßnahmen ergreifen.

Jochen

Ich weiß nicht, ob ich das hier getan habe,

Jochen

dass das nicht null wird.

Jochen

Es ist aber auch im Grunde egal.

Jochen

Es geht ja nicht darum,

Jochen

sozusagen eine exakte Wahrscheinlichkeit auszurechnen,

Jochen

sondern das irgendwie klassifizieren zu können.

Jochen

Du könntest einfach den Logarithmus davon nehmen.

Jochen

Ja, genau, das könnte man zum Beispiel machen.

Jochen

Und

Jochen

was ich jetzt da gemacht habe, ist es einfach

Jochen

so zu normalisieren,

Jochen

dass halt hinterher die Summe der beiden

Jochen

Zahlen, die dabei rauskommen,

Jochen

halt wieder 1 ist, sodass man das halt

Jochen

als Wahrscheinlichkeit interpretieren kann.

Jochen

Ja, und

Jochen

dann wisst ihr halt,

Dominik

ne, das ist tatsächlich so der Quotient

Dominik

ist Spam, ist kein Spam

Dominik

und dann habt ihr tatsächlich daraus

Dominik

logischerweise eure Wahrscheinlichkeit. Genau.

Jochen

Und das funktioniert dann halt jetzt,

Jochen

also bei dem Dataset war das so...

Jochen

Und das ist das Coole an der E-Base,

Jochen

dass es funktioniert mit relativ wenig Daten,

Jochen

wie ihr gerade gehört habt.

Jochen

Genau.

Jochen

Schnell sogar.

Jochen

Es ist sauschnell.

Jochen

Also das ist wahrscheinlich schneller

Jochen

als so ziemlich alles andere.

Jochen

Auch deswegen, weil das halt kaum was macht.

Jochen

Das ist halt irgendwie...

Jochen

Oder ich bin mir ziemlich sicher,

Jochen

dass es wahrscheinlich schneller ist

Jochen

als die meisten anderen Machine Learning Verfahren.

Jochen

Es ist sauschnell.

Jochen

Man braucht keine Spezialbibliotheken

Jochen

wie NumPy oder sowas.

Jochen

Aber ist das schon richtiges Maschinenlösung?

Dominik

Weil im Prinzip berechnest du ja nur die einzelnen Wahrscheinlichkeiten

Dominik

für die einzelnen Kategorien.

Dominik

Ja, aber es ist, ja.

Dominik

Na gut, jetzt wissen wir, warum Statistiker sagen Haha.

Dominik

Ja, ja, natürlich.

Jochen

Also sie haben ja auch so ein bisschen recht, das ist schon so.

Jochen

Aber trotzdem, ich meine, du kannst damit halt Sachen machen,

Jochen

wo Statistik halt Schwierigkeiten mit hätte.

Jochen

Also wenn man das jetzt auf Papier machen wollen würde.

Dominik

Also der Unterschied zwischen Statistik und Maschinenlösung ist,

Dominik

man schreibt es in einen Computer.

Jochen

Ja, ich würde tatsächlich sagen, das ist einer der Hauptunterschiede,

Jochen

dass du es halt mit Computern machst und

Jochen

auch damit rumspielen kannst und

Jochen

während du auf, weil, ja,

Jochen

klassischer Statistik irgendwie

Jochen

die Formeln

Jochen

aufschreiben musst. Genau, dann machst du es

Jochen

auf Papier alles und guckst halt, was da auch

Jochen

oft dann genauer geht, ja, du

Jochen

kannst dann halt dein Modell viel besser

Jochen

irgendwie bauen

Jochen

und so, aber, und du hast halt nur

Jochen

wenige Beispiele oft,

Jochen

während bei Machine Learning

Jochen

ist es so oft, ob das jetzt alles so genau passt

Jochen

oder so, das interessiert dich gar nicht, sondern es muss halt

Jochen

hinterher ein gutes Ergebnis dabei rauskommen, das kannst du evaluieren.

Jochen

Und warum das jetzt nicht funktioniert.

Jochen

Man kann auch mal statistische Fehlerchen machen.

Jochen

Ja, das kann man natürlich auch. Rausargumentiert.

Jochen

Es geht ja nur darum, ob

Dominik

morgen die Wetter, die Sonne scheint oder

Dominik

nicht. Ja, ja.

Jochen

Sagen wir mal so, die Kritik ist teilweise schon

Jochen

prächtig, aber

Dominik

Man muss halt immer mit seinen Daten auch ein bisschen aufpassen.

Dominik

Und das Problem bei solchen Dingen ist halt, ihr habt halt

Dominik

meistens Abhängigkeit zwischen einzelnen

Dominik

Merkmalen irgendwie dann doch.

Dominik

ja, also nur eine Mail in den Müll zu

Dominik

schmeißen, weil jetzt Piep drin vorkommt, ist

Dominik

vielleicht blöd. Vielleicht habt ihr auch eine nette Mail geschrieben

Dominik

von eurer, äh,

Dominik

zukünftigen, eurem zukünftigen

Dominik

Geliebten, der wollte euch irgendwas Nettes schreiben und

Dominik

dann ist er im Spam-Ordner gelandet oder sowas.

Jochen

Ja, genau.

Jochen

Also, wenn man das jetzt evaluiert, also was

Jochen

dabei rauskommt, ist schon ganz gut, irgendwie so

Jochen

ja, Genauigkeit, Genauigkeit ist

Jochen

ein bisschen irreführend, gerade wenn die

Jochen

Klassen nicht so, wenn da nicht so

Jochen

viel, wenn das halt nicht gleich verteilt ist, sondern

Jochen

sehr unterschiedlich, kann einen, gibt's auch

Jochen

immer ein schönes Beispiel bei Spam, wenn

Jochen

halt irgendwie die Wahrscheinlichkeit, und das ist

Jochen

tatsächlich so, irgendwie, ich glaube, mittlerweile,

Jochen

wenn man, es kann sein,

Jochen

dass mehr als 99% aller verschickten

Jochen

Mail irgendwie Spam ist.

Jochen

Und wenn man dann einen Klassifikator

Jochen

macht, der einfach immer sagt, es ist Spam,

Jochen

dann hat er eine Accuracy von 99%.

Jochen

Tja.

Jochen

Sieht gut aus, ist aber nicht wirklich

Jochen

sinnvoll, weil das Problem ist, man kommt

Jochen

keine...

Jochen

Keine tiefere Erkenntnis.

Jochen

Ja, der guten Mails kommt noch durch.

Jochen

Das heißt, man kriegt gar keine Mail mehr, was so ein bisschen

Jochen

vielleicht nicht der Sinn von Mail ist.

Jochen

Ja, wäre kontraproduktiv tatsächlich.

Jochen

Aber sehr halt in dieser

Jochen

Bekommst du viel Spam?

Jochen

Ich weiß es ehrlich gesagt nicht.

Jochen

Es kommt kaum was durch.

Dominik

Ich habe letztens eine gekommen, die kam super durch.

Dominik

Das war sehr spannend.

Dominik

Ich wurde gefragt, ob ich mich nicht sofort für schnellen Sex

Dominik

treffen möchte. Und noch heute.

Dominik

Und ich müsste auch einfach nur hier draufklicken.

Dominik

Wirklich, sowas habe ich noch nie bekommen.

Dominik

Das war das erste Mal seit bestimmt

Dominik

acht Jahren oder sowas, dass sowas in meinem Postfach landete.

Jochen

Okay, ist interessant, wie Sie das geschafft haben,

Jochen

durch die Spamfilter durchzukommen.

Jochen

Werbung, genau. Ich weiß es nicht genau.

Jochen

Ich gucke jetzt hier gerade mal in meinen Spam-Foil.

Jochen

Doch, es kommt jeden Tag.

Jochen

Ich weiß es jetzt nicht.

Jochen

Allein heute sehe ich wahrscheinlich schon so 40, 50 Spam-Mails oder sowas.

Jochen

Wie viele E-Mails bekommst du eigentlich jeden Tag?

Dominik

Ich habe das irgendwann mal komplett raus sortiert.

Dominik

Ich weiß es nicht.

Jochen

Meine Inbox hier hat gerade so 5.600 ungelesene Mails.

Jochen

Von 10.000 reduziert.

Dominik

Ich bekomme relativ schnell voll, aber 100, 200 Stück bleibt da.

Dominik

Ich habe die ganzen E-Mails abonniert, alles rausgekickt,

Dominik

alles gelöscht, wollte ich alles

Dominik

nicht mehr haben, meine Dokus, nö.

Jochen

Ja, also dieses, ja, also

Jochen

ja, Mail ist problematisch.

Dominik

Ich bekomme natürlich jeden Tag immer zehnmal

Dominik

Fanpost von Hörern von diesen

Dominik

wunderschönen Posten.

Jochen

Ja, da geht's gerade noch.

Jochen

Da könnte, das ist okay.

Jochen

Also,

Dominik

wenn ihr möchtet, schreibt uns an hallo.at.

Dominik

Das ist schon okay.

Jochen

Es gibt ja auch keine, das Blöde ist halt irgendwie,

Jochen

es gibt ja auch keine Lösung. Natürlich kann man sagen,

Jochen

man nimmt einfach keine Mail mehr an oder man liest

Jochen

das nicht oder sowas auch. Also ihr könntet

Dominik

mal einen Test machen. Ihr könntet ein Piep in das

Dominik

nächste E-Mail, Fan-E-Mail

Dominik

an uns schreiben. Einmal das Wort und mal

Dominik

gucken, ob es bei uns im Filter landet. Also wir sehen

Dominik

das auch. Also ich gucke zumindest in den Filter, muss man mal rein.

Dominik

Du auch? Also ich schon.

Jochen

Ich verlasse mich drauf, dass das irgendwie funktioniert.

Jochen

Und dass Leute, wenn es

Jochen

irgendwas Wichtiges war, dann halt andere Wege versuchen,

Jochen

mich zu erreichen. Naja, also glaubt

Jochen

doch wirklich an einen Hörer, wenn er uns

Jochen

eine Liebeserklärung

Jochen

sagt. Das funktioniert leider nicht.

Jochen

Ja, ja, ja. Aber

Jochen

genau, also

Jochen

was ich halt an dieser

Jochen

Geschichte schick finde, ist,

Jochen

also man kann halt mit wenigen Zeilen

Jochen

Python, kann man halt einen

Jochen

I-Base-Classifier schreiben, der schnell ist, der

Jochen

relativ genau funktioniert.

Jochen

Man würde das jetzt nicht wirklich

Jochen

verwenden, wenn man tatsächlich in Spam

Dominik

Wie groß war jetzt nochmal der Trainingsdatensatz?

Dominik

5.000, hast du gesagt? 5.500

Dominik

vorkategorisierte

Dominik

Nachrichten. Könnte man noch

Dominik

zusammentragen, wenn man so ein Classifier-Problem

Dominik

selber lösen wollen würde?

Jochen

Ja, ja, nein, also ich meine, man würde das jetzt nicht, wenn man jetzt irgendwie einen Spam-Filter tatsächlich verwendet in einem Mail-Client oder so, da würde man jetzt diesen Ansatz nicht nehmen, aber, also weil das halt nicht so genau ist, ich habe das jetzt mal verglichen, da drunter sind noch so irgendwie zwei andere Dinge, ich habe einmal einfach nur eine lineare Support-Vector-Maschine genommen, die ist halt ein Stückchen besser und auch nicht viel langsamer, die ist auch sehr schnell und dann habe ich auch nochmal Spacey genommen mit so einem 1D-Convolutional-Netz

Jochen

und das ist unfassbar viel langsamer.

Jochen

Alle wieder abgehängt.

Jochen

Ja, also der Witz ist,

Jochen

also eigentlich natürlich nimmt man nicht Naive Base,

Jochen

aber es könnte Situationen geben,

Jochen

in denen das total sinnvoll ist, sowas zu benutzen.

Jochen

Wie zum Beispiel, also ein Szenario wäre,

Jochen

du möchtest Trainingsdaten generieren.

Jochen

Ja.

Jochen

Und du hast jetzt,

Jochen

möchtest das aber im Frontend machen,

Jochen

so dass das halt sich für denjenigen,

Jochen

der das editiert,

Jochen

halt irgendwie schnell

Jochen

und so anfühlt, dass er damit

Jochen

irgendwie gut arbeiten kann. Und jetzt

Jochen

möchtest du halt nicht jedes Mal ein Request

Jochen

machen und uns irgendwie einen Server schicken, wo dann

Jochen

irgendwie irgendwas installiert ist mit NumPy oder so, was

Jochen

dann halt irgendwie ordentlich

Jochen

einen Classifier hat,

Jochen

sondern dir ist wichtiger, dass es schnell ist.

Jochen

Und das letzte Prozent Genauigkeit interessiert

Jochen

dich nicht oder das letzte Prozent F1

Jochen

Wert oder so, weil es einfach

Jochen

nur darum geht, möglichst schnell viele Trainingsdaten

Jochen

zu erzeugen. Und dich interessiert vielleicht noch, ob

Jochen

ein Ding schwer oder leicht zu klassifizieren ist.

Jochen

aber nicht, ob das jetzt ganz genau

Jochen

stimmt oder nicht, weil es guckt ja eh jemand nochmal drauf.

Jochen

Und da

Jochen

kann halt das, dieses

Jochen

Naiv-Based-Ding könntest du auch in JavaScript problemlos

Jochen

implementieren. Das wären ein paar Zahlen mehr,

Jochen

nicht viel mehr Zahlen. Und es wäre auch

Jochen

sauschnell in JavaScript.

Jochen

Und du könntest das halt im Frontend verwenden,

Jochen

um halt basierend, also jemand sagt,

Jochen

das ist Spam, das ist Spam. Okay, jetzt sortiere

Jochen

mir nochmal um, sodass die uneindeutigen

Jochen

Fälle oben sind halt.

Jochen

Und

Jochen

dann sortierst du nochmal, machst nochmal 20 Beispiele

Jochen

für die, 20 Beispiele für die Gruppe, sortierst nochmal um,

Jochen

dann kannst du halt wahrscheinlich tausende von Dingen

Jochen

in relativ wenig Zeit irgendwie

Jochen

labeln

Jochen

und benutzt halt zum Sortieren

Jochen

einen Classifier, der

Jochen

halt im Frontend-Code in JavaScript

Jochen

so läuft. Und für den Fall

Jochen

Aber wir sind doch hier

Jochen

beim Python-Podcast. Ja, natürlich.

Jochen

Also du kannst das halt auch in Python machen.

Jochen

TypeScript ist ja auch relativ nah dran, tatsächlich.

Jochen

Ja, aber

Jochen

also, sagen wir so, das ist halt ein

Jochen

Vorteil, den fast alle diese sogenannten

Jochen

Skriptsprachen halt haben. Also ich finde das immer

Jochen

so ein bisschen... Ja, man könnte das auch

Dominik

direkt wieder rausrennen dann, ne? Und irgendeine Datenbank

Dominik

kleine...

Jochen

Irreführend, wenn die dann halt so abwehren als Skriptsprachen, weil das ist halt

Jochen

eine große Stärke. Also du kannst halt wirklich

Jochen

solche Sachen... Du brauchst im Grunde nur

Jochen

diese drei Grunddatentypen, wie eben

Jochen

ja, Zahlen, Strings,

Jochen

also Variablen, wo halt

Jochen

ein Ding irgendwie drin ist,

Jochen

Listen und Dicts

Jochen

und kannst damit halt schon sehr, sehr viel bauen.

Jochen

Und

Jochen

ja, musst da nicht irgendwie großartig

Jochen

irgendwie Boilerplate schreiben und

Jochen

irgendwie eine Klassenhierarchie aufbauen

Jochen

und irgendwie UML-Diagramme malen,

Jochen

sondern du kannst es halt einfach mal so kurz runterschreiben

Jochen

und kommst damit, wenn du es

Jochen

richtig machst, halt in Performance-Regionen,

Jochen

die sonst schwer zu erreichen

Jochen

sind. Also wenn du das zum Beispiel jetzt in C++ machen

Jochen

wolltest und versuchst, schneller zu sein als diese

Jochen

Python-Implementation, wird das,

Jochen

das wird schwer, weil

Jochen

die Dict-Implementation ist in Python relativ

Jochen

relativ stark optimiert.

Dominik

Da geht dann so viel Zeit rein, um das zu entwickeln.

Dominik

In der Zeit hätte man einen Algorithmus.

Dominik

Es ist wirklich,

Jochen

ich meine, ich habe das ja dann auch schon häufig,

Jochen

also wenn du das dann in C++ machst und dann die

Jochen

Hashmap aus der Standardbibliothek oder so, kann es gut sein,

Jochen

dass du langsamer bist als Python, weil

Jochen

die Implementation nicht so optimiert ist.

Jochen

Und du kannst es mit C++ viel schneller

Jochen

hinkriegen, aber du würdest halt

Jochen

derartig viel mehr

Jochen

Zeit dafür brauchen. Und die Frage ist, brauchst du es halt

Jochen

so genau und so schnell?

Jochen

Bist du bereit dafür, so viel Zeit zu investieren?

Jochen

und die Antwort ist oft nein.

Jochen

Es ist viel besser, weniger Zeit zu brauchen

Jochen

und etwas zu haben,

Jochen

das vielleicht nicht total super optimal ist,

Jochen

aber halt auch schon sehr gut.

Jochen

Und das geht.

Jochen

Und das ist das, was ich eigentlich damit zeigen wollte.

Dominik

Pre-Labeling von Trainingsdaten.

Jochen

Ja, genau.

Jochen

Oder halt auch, um zu verstehen, wie das funktioniert,

Jochen

um wirklich sagen zu können,

Jochen

okay, ich kann mich jetzt darauf verlassen,

Jochen

dass das wirklich klappt,

Jochen

weil das Problem ist ja immer an den Blackbox-neuronalen Netzgeschichten

Jochen

oder so auch.

Jochen

Du kannst da nicht so richtig gut reingucken, natürlich kann man irgendwie das alles evaluieren oder so, aber du verstehst halt auch nicht so wirklich, was das tut und es ist immer gut, so ein paar Sachen da zu haben, bei denen man wirklich auch das insofern verstanden hat, dass man es einfach mal selber implementiert hat, weil man dann beurteilen kann, was da passiert und wenn das halt ganz andere Ergebnisse liefert oder so, dann hat man auch einen interessanten Ansatzpunkt, wo man nachfragen kann, was ist denn da jetzt eigentlich passiert.

Jochen

Und genau, daher finde ich das super sinnvoll, ab und zu mal so ein Verfahren auch selber zu implementieren oder in NaiveBase ist halt auch da super, weil es halt so super einfach ist, genau.

Dominik

Ja, also in dem Notebook hast du dann tatsächlich das nochmal verglichen von der Geschwindigkeit her zu den ganzen anderen Verfahren.

Jochen

Von der Geschwindigkeit her, das sind einfach nur die...

Jochen

Präzisionsgrade, Entschuldigung.

Jochen

Also eigentlich eben Genauigkeit sollte man sich nicht angucken, sondern Precision Recall und ja, da ist halt irgendwie so lineare Support-Weckmaschinen sind halt schon so ein bisschen besser.

Dominik

Was ist Precision Recall?

Dominik

Ja, das ist halt

Jochen

Genauigkeit eben. Argument von eben

Jochen

ist halt, wenn

Jochen

mehr als 99% der Mails, die man

Jochen

so sieht, Spam sind, dann

Jochen

ist Genauigkeit von 99%

Jochen

sagt halt nichts aus.

Dominik

Und dann benutzt man den Recall-Wert?

Jochen

Man benutzt Precision und Recall und

Jochen

Precision ist halt

Jochen

sozusagen

Jochen

die, also man kann, es gibt

Jochen

vier Fälle, die auftreten können, wenn du

Jochen

jetzt irgendwie Spam klassifizierst.

Jochen

Es kann halt sein...

Jochen

Alpha-Fehler, Beta-Fehler, ja und nein.

Jochen

Genau, genau. Oder bei Machine Learning

Jochen

nennt man das oft True-Positive, False-Positive,

Jochen

False-Negative und True-Negative.

Jochen

Also sozusagen es ist...

Dominik

Es ist Spam und du hast es als Spam erkannt. Genau.

Dominik

Es ist Spam und es ist bei deinem Impost-Eingang

Dominik

gelandet. Das wäre

Jochen

False-Negative, ja.

Jochen

Oder es ist kein Spam

Jochen

und du hast es als Spam erkannt und es ist False-Positive.

Jochen

Oder... Es ist kein Spam

Dominik

und du hast es im Post-Eingang, was genau das ist.

Jochen

bei der Geschichte, also

Jochen

True Negatives spielen bei uns jetzt keine Rolle,

Jochen

weil das ist halt das Gleiche, wenn du jetzt nur zwei

Jochen

Klassen hast, also

Jochen

aber wenn du jetzt

Jochen

mehrere Klassen hättest, müsstest du das halt auch nochmal

Jochen

unterscheiden oder bei Multilabel musstest du das unterscheiden,

Jochen

weil es dann ja auch sein kann, dass etwas

Jochen

in keiner Klasse liegt oder so, aber den Fall haben wir ja gar nicht,

Jochen

wir haben ja nur irgendwie Spam oder Ham.

Jochen

Wir binär, genau.

Jochen

Und genau, dann

Jochen

ist Precision einfach

Jochen

Anzahl der Dinge,

Jochen

Anzahl der True Positives geteilt durch

Jochen

TruePositive

Jochen

plus FalsePositive.

Dominik

Also nochmal, TruePositive

Dominik

ist ein Mail, die kein Spam ist

Dominik

und die im Posteingang landet?

Dominik

TruePositive ist

Jochen

es ist kein Spam und

Jochen

es ist im Posteingang gelandet.

Jochen

Habe ich das nicht gesagt? Oder hast du das gesagt?

Jochen

Okay, dann habe ich es nur falsch verstanden.

Jochen

Musst du mal zurückspulen, nochmal neu hören.

Jochen

Genau, also es ist alles richtig gelaufen,

Jochen

das ist TruePositive. FalsePositive wäre

Jochen

halt irgendwie, es wurde als Spam

Jochen

erkannt, es war aber kein Spam.

Jochen

Und jetzt addiert man halt die False Positives auf die True Positives und wenn man jetzt sozusagen die True Positives teilt dadurch, durch die größere Zahl, dann kriegt man die Quote der, wie kann man das sagen, die Quote der, bei denen es richtig gelaufen ist sozusagen.

Jochen

Aber das ist jetzt nicht so

Jochen

wie bei der Genauigkeit, sondern

Jochen

es ist halt, da wäre halt, wenn man

Jochen

jetzt sozusagen

Jochen

einen Classifier hätte, der immer

Jochen

sagt

Jochen

Spam, ja, der hätte halt

Jochen

eine irre hohe Anzahl von False Positives

Jochen

und der hätte dann halt eine Precision

Jochen

von Null, mehr oder weniger.

Jochen

Also, da hätte ich vielleicht recht, aber

Jochen

ja, genau.

Jochen

Okay, Recall. Und Recall ist halt

Jochen

sozusagen das Gleiche, bloß

Jochen

irgendwie mit False

Jochen

Negatives statt True Positives und

Jochen

das beschreibt im Grunde, wie viel von denen, die ich hätte

Jochen

erkennen sollen, habe ich tatsächlich erkannt.

Jochen

Ja, man

Jochen

kann halt einfach auf Precision optimieren,

Jochen

indem man sagt, irgendwie

Jochen

ja, man

Jochen

klassifiziert

Jochen

nur das Ding, wo man sich super sicher ist, als

Jochen

nur eins als super sicher

Jochen

als das, was man

Jochen

wo man es hält, ja, dann hat man

Jochen

wahrscheinlich eine Precision von eins, aber

Jochen

wenn man jetzt nicht alle findet, sondern

Jochen

irgendwie

Jochen

viele Spams

Jochen

halt durchgehen. Es gibt so ein paar

Dominik

Machine Learning Beispiele, für die das vielleicht gar nicht so irrelevant ist.

Dominik

Also wenn man jetzt zum Beispiel entscheidet, ob man jetzt

Dominik

einen Laser auf einen Insekt richtet, um das dann abzuschießen oder nicht,

Dominik

und das ist aus Versehen dann die Katze oder der Hund,

Dominik

das wäre dann vielleicht nicht ganz so gut, wenn man dann

Jochen

so ein paar False Positives... Das sind False Positives, genau.

Jochen

Das wäre auch, das ist auch, aber es ist je nach

Jochen

Problem, ist es halt unterschiedlich

Jochen

schlimm, ob jetzt False Positives oder

Jochen

False Negatives auftreten.

Jochen

Ist aber beides natürlich blöd, das sind halt einfach

Dominik

unterschiedliche Arten von... Also im einen Fall kommt einfach

Dominik

hat die Mücke dann trotzdem rein und sticht dich.

Dominik

Und im anderen Fall ist es vielleicht deine Katze.

Dominik

Genau, in dem Fall würde man wahrscheinlich eher

Jochen

als Positives versuchen wollen zu vermeiden.

Jochen

Aber ja, es hängt halt von dem Problem ab.

Jochen

Und man kann sich sozusagen meistens aussuchen,

Jochen

was man jetzt lieber hätte.

Jochen

Man kann halt darauf optimieren.

Jochen

Das heißt, du definierst quasi die Irrtumswahrscheinlichkeit,

Jochen

die du nicht unterschreiten willst.

Dominik

Und darauf optimierst du dann dein Modell.

Dominik

Genau, genau.

Dominik

Man kann sagen, also ich möchte nicht,

Jochen

dass mir so und so viel echte Mails verloren gehen.

Jochen

Das wäre wahrscheinlich das mit dem Swamp-Klassiker.

Dominik

3 klassische Grenzen, 1%, 2%, 5%

Jochen

oder sowas. Ja, also

Jochen

die aktuellen Geschichten sind wahrscheinlich alle noch

Jochen

deutlich drunter, aber

Jochen

genau, und dann

Jochen

sagt man, okay, dann mit dem anderen Fehler lebt man

Jochen

dann halt, ja, also im Fall von Spam-Classifier

Jochen

würde man halt eher damit leben, dass halt ein bisschen Spam

Jochen

durchkommt. Aber man möchte eigentlich nicht,

Jochen

dass echte Mail irgendwie

Jochen

wegsortiert wird. Ja, das

Jochen

wäre nicht so gut. Aber wie gesagt,

Jochen

je nach Anwendung kann das halt unterschiedlich sein. Es gibt auch Anwendungen,

Jochen

bei denen es andersrum ist. Also

Jochen

medizinische Anwendungen sind oft dann zum Beispiel

Jochen

dann eher darauf optimiert, dass es Recall

Jochen

hoch ist und Fall-Spositives

Jochen

sind egal, man möchte halt nicht, dass man jemanden

Jochen

undiagnostiziert lässt, vielleicht, je nachdem,

Jochen

was es für eine Klarheit ist.

Jochen

Also, ja, kommt.

Dominik

Zu dem Spam-Fall noch ganz interessant, also um jetzt mal auf das

Dominik

echte Beispiel zurückzukommen, würde

Dominik

man dann vielleicht hingehen und

Dominik

bestimmte Ausnahmekriterien noch hinterherfiltern,

Dominik

beispielsweise, wenn du jetzt von mir eine Mail

Dominik

bekommst und ich bin ja wahrscheinlich irgendwie

Dominik

in deinem Adressbuch drin, dass

Dominik

du mich dann trotzdem kriegst, obwohl

Dominik

ich jetzt dir ganz viele Schimpfworte schreibe, oder?

Jochen

Genau, also natürlich, das ist jetzt

Jochen

nicht ein echtes System oder so, sondern das ist

Jochen

einfach nur so ein Beispiel, aber

Jochen

natürlich diese ganzen Signale oder

Jochen

Features oder so, das würde man alles mit rein

Jochen

beziehen eigentlich.

Jochen

Ich weiß schon, was ich jetzt ausprobieren werde.

Jochen

Ja, ja.

Jochen

Und ich glaube also mittlerweile,

Jochen

ich weiß nicht mal, was da

Jochen

verwendet wird. Also

Jochen

bei Google habe ich jetzt noch, also die

Jochen

Verfahren, die heutzutage verwendet werden, sind alle sehr, sehr

Jochen

schlau mittlerweile.

Dominik

Die hätten ja schon genug Trainingsdaten, um das

Dominik

noch ein bisschen mehr zu optimieren.

Jochen

Da gibt es einen globalen Anteil, zum Beispiel bei Google,

Jochen

ich weiß nicht genau, wann ich das letzte Mal

Jochen

ein Paper darüber gelesen habe, was sie machen, aber sie haben dann

Jochen

halt irgendwie, ihr Modell besteht teilweise

Jochen

halt aus so globalen Geschichten,

Jochen

weil sie halt sehr viel

Jochen

Spam und Nicht-Spam haben sozusagen,

Jochen

die sie als Trainingsdaten verwenden können.

Jochen

Und dann ist das Modell auch immer noch teilweise

Jochen

personalisiert

Jochen

auf dich, weil es gibt halt vielleicht auch Leute, die

Jochen

wenn ich jetzt irgendwie, keine Ahnung,

Jochen

ein

Jochen

jemand bin, der sich professionell

Jochen

beschäftigt, Spam von Nicht-Spam zu unterscheiden

Jochen

und dann mir die Leute Spam schicken

Jochen

als Beispiele und ich das nicht kriege,

Jochen

weil das heißt, es muss auch

Jochen

manche Leute, bei manchen Leuten

Jochen

ist das ja vielleicht okay. Oder wenn ich

Jochen

jetzt zum Beispiel ein nigerianischer

Jochen

Prinz bin, der irgendwie ein Bankkonto in der Schweiz hat,

Jochen

dann, ja.

Dominik

Wäre schon doof, wenn die ganzen Leute meine Hilfe versuchen,

Dominik

ich will den Geld schenken und keiner will es haben.

Dominik

Alle denken so, haha, ja.

Dominik

Also,

Jochen

Ja, die bestehen halt aus so einem globalen Teil

Jochen

und halt aus so einem personalisierten Teil.

Jochen

Mir passiert das immer mit meinem Nachnamen.

Dominik

Leute sagen immer, haha, verarsch mich nicht.

Dominik

Ja.

Dominik

Ja, ist so.

Dominik

Vollst positiv, ja.

Dominik

Oder? Was sagst du?

Jochen

Das wäre vollst positiv, ja.

Jochen

Das wäre mal eigentlich was, alles in Ordnung, ja.

Jochen

Genau, und ja.

Jochen

Ich denke halt immer, ich mache mich lustig

Jochen

und finde meinen Humor doof.

Jochen

Ja, also die

Jochen

Dinger funktionieren. Also ich habe

Jochen

weder das Spam durchgekommen ist, noch dass

Jochen

ich, okay, vielleicht kriege ich einfach nicht mit, dass

Jochen

bei mir normale Mail verschwindet, aber

Jochen

also früher war das tatsächlich immer noch so ein Problem

Jochen

und mittlerweile ist das alles so gut.

Jochen

Ich würde einfach sagen, das funktioniert.

Jochen

Genau, ja, ich habe dann halt noch so ein paar Sachen

Jochen

probiert und eben zum Beispiel

Jochen

jetzt hier die, also

Jochen

irgendwie State of the Art

Jochen

irgendwie Textklassifikationsgeschichte

Jochen

ist schon besser als

Jochen

als Naive Bayes, aber

Jochen

nicht so wahnsinnig, also in dem Fall halt gar nicht so

Jochen

wahnsinnig viel. Halt irgendwie

Jochen

bisschen mehr F1

Jochen

irgendwie, ein Prozent oder

Jochen

anderthalb oder sowas, aber viel mehr auch nicht.

Jochen

Also, achso, F1, harmonische

Jochen

Mittel zwischen Precision und Tricor. Wir haben das glaube ich

Jochen

bei der Textklassifikationsfolge auch schon nochmal alles erzählt.

Dominik

Ja, weil wir wollten jetzt auch nicht, dass alle das alles nochmal

Dominik

hören müssen, die auch gerade einschalten oder nur

Dominik

von der F-Base zuhören. Also du musst vielleicht

Dominik

nochmal deswegen kurz erwähnen, was eine Support-Vector-Maschine

Dominik

ist und was Base hier ist.

Dominik

Ja,

Jochen

richtig, also Support-Vector-Maschinen

Jochen

sind

Jochen

auch eine Art von

Jochen

ja, Machine Learning

Jochen

Verfahren, Modellen.

Jochen

So ein bisschen, also manchmal

Jochen

manche Namen sind halt ein bisschen blöd, da würde ich sagen, auch der Name

Jochen

ist ein bisschen, also sagt einem halt nicht, was das macht.

Jochen

Was das eigentlich

Jochen

tut, ist...

Jochen

Orthogonale Vektoren auf irgendwelchen

Jochen

Ebenen erzeugen. Ja, es ist ein diskriminatives

Jochen

Machine Learning Modell, das halt lernt

Jochen

sozusagen

Jochen

zwischen, wenn man jetzt ein paar Spam und Nicht-Spam

Jochen

nimmt, zwischen diesen beiden Klassen. Es interpretiert

Jochen

halt auch, wie eigentlich fast alle Machine Learning

Jochen

Modelle jetzt außerdem,

Jochen

das macht das nicht so, aber

Jochen

interpretiert halt

Jochen

Texte als Vektoren in einem

Jochen

enddimensionalen Vektorraum.

Jochen

Ja, wobei halt, also das wäre auch

Jochen

klassischer Back-of-Words

Jochen

Ansatz, dass halt jedes

Jochen

Wort ist sozusagen eine Dimension

Jochen

und der Text ist halt einfach

Jochen

der Vektor, der dann

Jochen

entsteht, wenn du sozusagen bei allen

Jochen

Wörtern, die du gesehen hast, diese Dimensionen,

Jochen

denen ein Gewicht gibst, also du kannst auch einfach eins setzen,

Jochen

dann wäre es halt binär, aber du kannst,

Jochen

also eins, du hast ein Wort, das Wort gesehen oder null, du hast das Wort

Jochen

halt nicht gesehen.

Dominik

Wie viele Dimensionen kannst du dir so vorstellen

Dominik

vor deinem inneren Auge, wenn du

Dominik

versuchst, sie zu visualisieren?

Jochen

Das ist nicht schlimm, das muss man sich nicht großartig vorstellen.

Jochen

Das muss man sich gar nicht vorstellen.

Jochen

Nee, also was ich mir

Jochen

vorstelle, ist halt irgendwas Dreidimensionales vielleicht.

Jochen

Aber man kann ja sagen, okay, das ist jetzt nicht direkt

Jochen

dreidimensional, sondern halt

Jochen

hunderttausenddimensional oder so.

Jochen

Ist ja...

Jochen

Ja, ich hau gut einen dann halt unter Umständen.

Jochen

Also

Dominik

vier geht vielleicht auch noch, wenn man sich so einen feststehenden Raum

Dominik

im Laufe des Zeitablaufs wieder sich verändert

Dominik

vorstellt. Fünf vielleicht noch, wenn da zwischendurch jemand

Dominik

den Vorhang aufmacht und reinguckt und sagt Hallo

Dominik

und dann da so einen Tunnel durchmacht, aber

Dominik

sechs, sieben, acht, ah.

Dominik

Ja, aber es ist ja...

Jochen

sich vorzustellen, dass, also sich

Jochen

einen Text als Vektor

Jochen

hinzuschreiben, das kann man sich ja angucken, das ist

Jochen

nicht so schlimm. Ja, aber dann macht man das ja flach,

Dominik

dann ist die Betrachtung, macht man den dann irgendwie

Dominik

auf so ein Blatt Papier?

Jochen

Ja, also das, was man dann tatsächlich macht,

Jochen

also wenn man sich das jetzt erzählt, dann klingt das irgendwie

Jochen

kompliziert, aber es ist eigentlich total

Jochen

simpel. Man macht eigentlich nur Spalten auf

Jochen

von einer Zeile. Genau, also

Jochen

wenn man das jetzt geometrisch interpretieren wollte,

Jochen

ist das, wenn ich jetzt zum Beispiel

Jochen

Vektoren,

Jochen

Also einmal habe ich halt da Werte drinstehen,

Jochen

nicht nur Einsen und Nullen.

Jochen

Und diese Werte, diese Gewichte sind halt

Jochen

Term Frequency mal Inverse Document Frequency,

Jochen

sozusagen wie wichtig ist dieses Wort

Jochen

üblicherweise in Texten.

Jochen

Also ist das eher charakteristisch für bestimmte Sachen

Jochen

oder eher nicht so charakteristisch?

Jochen

Wörter wie der, die das wären halt

Jochen

üblicherweise nicht, bekommen kein hohes Gewicht.

Jochen

Ja, kann man entweder rausfiltern

Jochen

oder es ist halt, weil die sind einfach

Jochen

nicht, daraus kann ich jetzt

Jochen

nicht schließen, ob das Spam oder nicht Spam war.

Jochen

Während eben sowas wie Viagra oder das Penis

Jochen

oder was auch immer, das ist wahrscheinlich

Jochen

oder das ist

Jochen

deutlich charakteristischer, die werden bekommen

Jochen

ein höheres Gewicht und

Jochen

man guckt sich halt immer die Winkel zwischen Dingen an

Jochen

in diesen

Jochen

Vektorräumen und die kann man

Jochen

einfach ausrechnen, indem man halt Sachen, das Skalarprodukt

Jochen

bildet zwischen

Jochen

und das auch wieder bei

Jochen

Phasenvektoren super einfach, weil

Jochen

da man muss nur, die sind ja überall null

Jochen

nur an bestimmten Stellen nicht und man muss nur

Jochen

diese Stellen sich angucken, was dann halt auch wieder sehr schnell geht

Jochen

also was man dann letztendlich

Jochen

macht, ist total simpel, aber es klingt

Jochen

irgendwie, oh, Winkel

Jochen

in einem

Jochen

hunderttausenddimensionalen Raum.

Jochen

Krass. Klingt irgendwie voll

Jochen

voll abgefahren. Ist aber eigentlich

Jochen

total einfach. Also, wenn man sich jetzt

Jochen

anguckt, was wirklich passiert.

Jochen

Also, da ist nichts Wildes dabei. Das, was

Jochen

aber jetzt die Sofort-Vektormaschine macht an der Stelle, ist

Jochen

halt, wenn man sich jetzt diese Vektoren anguckt und man

Jochen

hat jetzt sozusagen die Wolken an Punkten

Jochen

irgendwie in diesem Raum.

Jochen

Das eine spammen, das andere nicht spammen und dann versucht

Jochen

die Support-Vector-Maschine eine

Jochen

Ebene so zwischen diese

Jochen

unterteilende, also

Jochen

eine separierende Hyper-Ebene so zwischen

Jochen

diese beiden Klassen

Jochen

zu legen, dass der Abstand

Jochen

maximal wird zu beiden.

Jochen

So ein bisschen wie bei

Jochen

OLS, Optimal

Jochen

Linear Squares.

Jochen

Ja.

Jochen

Du meinst

Jochen

Ordinary Lease Squares?

Jochen

Ordinary ist ein bisschen noch anders, ja.

Jochen

Ist noch ein bisschen, also

Jochen

naja, das ist nicht so ganz das Gleiche.

Jochen

Also es ist tatsächlich das Modell, also

Jochen

die

Jochen

Verlustsummen ist anders

Jochen

und das Modell ist auch anders, aber

Jochen

weil also das Modell, was

Jochen

bei der Support-Factor-Maschine, obwohl

Jochen

naja, es ist auch ein lineares Modell, also insofern ist es

Jochen

ja,

Jochen

also es gibt zwischen all diesen linearen

Jochen

Modellen natürlich irgendwelche Verbindungen, aber

Jochen

ja,

Jochen

also aber dieses Markenmodell

Jochen

diese Margin-Maximierung

Jochen

ist schon charakteristisch für

Jochen

Support-Vector-Maschinen, beziehungsweise die Dinger werden halt auch

Jochen

Maximum-Margin-Classifier genannt.

Jochen

Und es gibt halt einen schönen Beweis, der sagt,

Jochen

ja, Margin-Maximierung

Jochen

ist halt auch, bedeutet

Jochen

Maximierung

Jochen

der Generalisierung

Jochen

beim Lernen. Und das ist natürlich auch

Jochen

eine sehr schöne Geschichte. Man kann es leider

Jochen

aus diversen technischen Gründen nicht so,

Jochen

also funktioniert es dann doch nicht.

Jochen

Das

Dominik

Problem ist vielleicht, dass man sich,

Dominik

wenn man sich an allen Punkten

Dominik

orientiert, so ein bisschen auch an den

Dominik

Extremwerten zu sehr an Langhallen

Dominik

und wenn man sich mehr an dem Durchschnitt der Werte orientieren

Dominik

würde und da die Ebenen bildet, wäre

Dominik

die vielleicht ein bisschen präziser, also vielleicht kann man die

Dominik

Güte erhöhen, indem man so ein bisschen diese Randwerte

Dominik

so außen vor lässt.

Jochen

Ja, man rechnet halt eine

Jochen

Verlustfunktion aus, das kann man ja einfach machen,

Jochen

die sozusagen, und

Jochen

das SVM ist halt

Jochen

sozusagen ein konvexes, also das ist halt

Jochen

ein konvexes Optimierungsproblem im Grunde und

Jochen

das Optimierungsverfahren

Jochen

innerhalb von der

Jochen

SVM löst das.

Jochen

Das ist halt das, was passiert.

Jochen

Und am Schluss kommt halt das

Jochen

Ding raus, was tatsächlich irgendwie

Jochen

diese beiden Teile trennt.

Jochen

Und zwar, dass den größten,

Jochen

die Hyper-Ebene hat den größtmöglichen Abstand

Jochen

zwischen diesen beiden. Ja, ich glaube, da kann man

Dominik

vielleicht noch ein bisschen was dran drehen, indem man so diese Grundgesamtheit

Dominik

so ein bisschen manipuliert. Aber ja.

Dominik

Aber sagen wir so, das

Jochen

funktioniert halt, das funktioniert sehr gut.

Jochen

Es ist halt auch so, irgendwie in diesem

Jochen

hochdimensionalen, da ist viel Platz, geht auch

Jochen

deswegen funktionieren lineare Modelle da so sehr schön,

Jochen

weil man kann die halt da so durchlegen.

Jochen

Wenn das weniger dimensional wird,

Jochen

dann geht das halt linear nicht mehr, dann muss das alles

Jochen

irgendwie gewogen sein, aber das wird alles viel schwieriger.

Dominik

Und es könnte sein, dass wenn man auf einmal ganz viele komische Werte bekommt,

Dominik

dass man irgendwie so ein Klassifizierungsproblem hat, weil man irgendwie

Dominik

vielleicht noch eine Klasse hat, die man übersehen hat oder sowas.

Dominik

Gut, klar.

Jochen

Natürlich, das kann auch immer sein.

Jochen

Genau, aber eigentlich ist das auch, also

Jochen

Support-Effekte-Maschinen, schöne Geschichte, aber

Jochen

das eigentliche Ding, warum ich das jetzt auch hier verwendet

Jochen

habe, ist, dass die halt

Jochen

für eben Textklassifikationen super

Jochen

funktioniert haben. Da gab es halt eben bekannte

Jochen

Arbeit von

Jochen

Thorsten Jochim zu 1997 drüber

Jochen

und seitdem habe ich jedenfalls

Jochen

nicht wirklich substanzielle

Jochen

Fortschritte gesehen. Also

Jochen

gut, doch. Also wenn man sagt,

Jochen

Word-Embeddings sind halt nochmal ein ordentlicher

Jochen

Fortschritt gewesen, aber das ist ja im Grunde nur eine andere

Jochen

Art, irgendwie Texte darzustellen.

Jochen

Das ist halt schon besser als Back of Words, aber

Jochen

wird dann halt auch nochmal

Jochen

irgendwie ein bisschen besser. Aber es ist

Jochen

halt, es wird auch durchgehend über alle

Jochen

Datasets und so besser, aber es ist halt jetzt nicht so,

Jochen

dass man sagt, okay, das ist jetzt eine ganz andere Kategorie

Jochen

von gut, plötzlich.

Jochen

Es ist halt, also

Jochen

wenn man jetzt TF-IDF-Gewichte nimmt, statt

Jochen

binäre, einfach nur 1 zu 0, wird es auch ein bisschen

Jochen

besser. Und der Vorteil von

Jochen

Word-Ambeddings ist vielleicht noch sogar ein bisschen mehr,

Jochen

aber so in der gleichen Größenordnung

Jochen

wie von binären Gewichten zu TF-IDF zu

Dominik

gehen. Du musst ja einmal noch mal sagen, was

Jochen

EDF ist. Ja, genau. Das ist halt eben

Jochen

wie charakteristisch ist ein Wort

Jochen

eigentlich sozusagen. Für die Kategorie.

Jochen

Ja, genau. Kann man sich halt

Jochen

auch ausrechnen. Darf man natürlich noch auf den Trainingsabend machen,

Jochen

aber genau. Und

Jochen

ja,

Jochen

Word-Embeddings sind halt auch nochmal so eine Geschichte.

Jochen

Müsste ich jetzt eigentlich auch nochmal erklären.

Jochen

Ist halt eine andere Art,

Jochen

sozusagen Wörter in einen

Jochen

höherdimensionalen Vektorraum abzubilden.

Jochen

Und da ist es dann halt nicht mehr so, dass es sozusagen

Jochen

pro Wort eine Dimension gibt, sondern es gibt

Jochen

halt einen 300-dimensionalen

Jochen

Vektorraum oder was auch immer, ich weiß nicht,

Jochen

kann man sich aussuchen, wie viele Dimensionen man

Jochen

verwenden möchte und jedes Wort ist dann halt

Jochen

ein Vektor da drin, sodass man halt

Jochen

auch abbilden kann, dass Worte oft nicht

Jochen

nur sozusagen ein Ding

Jochen

beschreiben oder für einen, sondern die haben

Jochen

halt Anteile da und Anteile da und

Jochen

man kann damit dann quasi sozusagen

Jochen

gewisserweise auch die Bedeutung so ein bisschen

Jochen

besser mit abbilden.

Jochen

Hier ist dein Schild.

Jochen

Ja,

Jochen

und das funktioniert

Jochen

sehr gut und das hat halt nochmal irgendwie

Jochen

Arbeit mit Text irgendwie genauer gemacht, aber

Jochen

so ein bisschen,

Jochen

aber dass es wirklich

Jochen

da jetzt substanzielle Verbesserungen gegeben hätte,

Jochen

habe ich jetzt also seit

Jochen

97 schon eine Weile her. Ist schon relativ

Jochen

lange her und ist eigentlich nicht so,

Jochen

oder ich habe irgendwas übersehen, das kann natürlich auch sein, aber

Jochen

ich meine, nee, da ist nicht so wahnsinnig viel passiert.

Jochen

Falls wir was übersehen haben, bitte schicken.

Jochen

Bis vor kurzem und

Jochen

ja,

Jochen

das ist vielleicht auch noch

Jochen

eine ganz interessante, das möchte ich

Jochen

unbedingt mal selber ausprobieren,

Jochen

wir haben ja mit

Jochen

Nico da diese

Jochen

Episode zu Textklassifikation

Jochen

gemacht und der hat

Jochen

jetzt in seinem Podcast

Jochen

Techtiefen auch

Jochen

so eine Miniserie zu

Jochen

Natural Language Processing gemacht

Jochen

und da

Jochen

fand ich einige Sendungen sehr gut,

Jochen

unter anderem

Jochen

die, wo er

Jochen

über diese neuen

Jochen

Modelle spricht

Jochen

irgendwie.

Jochen

Und halt auch

Jochen

die Folge bei Spacey fand ich

Jochen

sehr gut.

Jochen

Spacey ist halt so eine Open-Source-Bibliothek

Jochen

für NLP-Geschichten,

Jochen

aber halt ein bisschen mehr fokussiert

Jochen

auf Produktionssachen als jetzt

Jochen

zum Beispiel NLTK. Ist halt eher so Forschungsgeschichten.

Jochen

Super langsam. Habe ich früher mal versucht zu verwenden.

Jochen

Also gibt

Jochen

sicher Berechtigung, das zu verwenden, aber wenn man

Jochen

jetzt produktiv irgendwas machen möchte, dafür

Jochen

geht es oft nicht gut, weil es halt

Jochen

nicht darauf optimiert ist, das schnell zu sein.

Dominik

Ich habe in NLTK mal ein paar Endgramme über

Dominik

Harry Potter mit ein paar Kindern, die haben das sehr gefreut.

Jochen

Das geht bestimmt alles super, aber wenn

Jochen

jetzt irgendwie, ja, weiß ich nicht, wenn

Jochen

ein Geschäft darin besteht, Sachen zu klassifizieren oder so

Jochen

oder schnell zu sein, dann ist NLTK

Jochen

vielleicht nicht so die Wahl, aber Spacey wäre es.

Jochen

Also da, die Geschichten

Jochen

da sind optimiert, ist es nicht so, dass es

Jochen

einfach ein Toolkit ist mit allen möglichen Dingen, die man halt

Jochen

verwenden kann, sondern

Jochen

die implementieren dann halt

Jochen

die Sachen, die am besten funktionieren, auch in schnell

Jochen

und die kann man dann sozusagen verwenden.

Jochen

Und

Jochen

ja,

Jochen

das ist sowieso interessant, was in dem Bereich alles passiert,

Jochen

aber was jetzt in letzter Zeit

Jochen

tatsächlich

Jochen

da passiert, ist so etwas

Jochen

Ähnliches wie bei ImageNet.

Jochen

Da gab es ja auch

Jochen

irgendwie mit Deep Learning halt so eine

Jochen

ImageNet kennt ihr noch?

Jochen

Ja. Hatten wir auch schon mal vorgestellt.

Jochen

Das heißt, da gibt es ja diese

Jochen

darauf basierende,

Jochen

also auf dem ImageNet-Dataset basiert,

Jochen

so eine Challenge,

Jochen

wie heißt dieser Wettbewerb noch?

Jochen

Very Large Data, bla, irgendwie Image,

Jochen

ich weiß nicht mehr genau,

Jochen

hatten wir auch überwacht, erwähnt.

Jochen

Das Ding läuft irgendwie jedes Jahr

Jochen

und 2011 haben ja Leute da irgendwie angefangen,

Jochen

sich wirklich damit mal zu beschäftigen,

Jochen

so wie man das dann mit Bildklassifikationen kriegt.

Jochen

Und 2013 hat AlexNet irgendwie dann diese Challenge gewonnen

Jochen

und zwar mit großem Abstand,

Jochen

so irgendwie Reduktion des Fehlers

Jochen

um die Hälfte oder sowas und ist in Regionen

Jochen

vorgestoßen, wo man vorher gedacht hatte,

Jochen

da kommt man gar nicht hin und so.

Jochen

Und ja, also da ist etwas passiert,

Jochen

was halt irgendwie, ja, und

Jochen

dann Jahr für Jahr danach ist es

Jochen

immer besser geworden. Und also 2013

Jochen

ist halt

Jochen

substanziell

Jochen

der Fehler irgendwie runtergegangen.

Jochen

Dann 2014 nochmal, 2005 nochmal,

Jochen

nach 2016 irgendwie oder so

Jochen

glaube ich, sind die Modelle irgendwie bei Superhuman

Jochen

Performance, also machen weniger

Jochen

Fehler als Menschen beim Labeln.

Jochen

Mittlerweile, glaube ich, machen

Jochen

die Modelle, die besten Modelle jetzt

Jochen

machen so, die machen einen Fehler,

Jochen

der ist halb so groß, wie der den Menschen machen.

Jochen

Und das bei so Tasks wie,

Jochen

ja, ist da eine Katze

Jochen

auf dem Bild oder so, wo man sich denkt,

Jochen

das ist, also, ja klar, das sollte man ja können.

Jochen

Gut, also, ich meine,

Jochen

da sind auch fiese Bilder dabei, sowas wie unterschiedliche

Jochen

Hunderassen und sowas. Man sieht nur so ein Hinterteil

Dominik

mit so einem Schwanz und weiß dann nicht, ist das eine Katze oder so

Jochen

irgendwas. Ja, aber das ist halt

Jochen

irgendwie, dass man da Modelle hat, die bei

Jochen

so einem Ding, wo man denkt, da ja gut, also

Jochen

da ist ein Mensch schon nicht so

Jochen

schlecht drin,

Jochen

dass die da deutlich besser sind, das ist

Jochen

beeindruckend. Und zwar ist das

Jochen

halt in sehr kurzer Zeit passiert.

Jochen

Das ist ja auch sehr beeindruckend. Also da ist irgendwas passiert, was

Jochen

halt das ganze Feld

Jochen

sozusagen sehr stark in Bewegung gesetzt hat.

Jochen

Und so etwas ähnliches sehen wir jetzt gerade bei NLP-Geschichten

Jochen

halt auch. Das war mir jetzt

Jochen

bis vor eben kurz noch gar nicht so richtig klar,

Jochen

dass das gerade passiert.

Jochen

Deutsch.

Jochen

Ja, Deutsch ist halt immer ein bisschen doof.

Jochen

Das ist eine Sprache, für die sich irgendwie niemand so richtig interessiert.

Jochen

Also, ja, aber da gibt es wohl auch jemanden,

Jochen

es gibt halt diese großen Sprachmodelle,

Jochen

irgendwie BERT, irgendwie XLNET, TPT2.

Jochen

BERT.

Dominik

Ja, wir werden in Sesamstraße, wie war das?

Dominik

In Muppet Show, glaube ich, oder?

Dominik

Muppet Show.

Dominik

Oder Sesamstraße, ich weiß nicht.

Jochen

Und da werden halt so große Transformer-Modelle trainiert.

Jochen

Und der Witz daran ist, ich habe das schon mitgekriegt, dass das passiert.

Jochen

Und ich dachte mir so, warum trainiert man dann so riesige Modelle, was soll denn das?

Jochen

Also man ist auch sehr teuer und auch verbreitet unfassbar viel Energie und Taktzyklen und so.

Jochen

Warum macht man das denn?

Jochen

Jetzt um ein bisschen besser vorherzusagen, was das nächste Wort im Satz ist.

Jochen

Ja gut, das ist schon ein interessantes Problem, aber warum wirft man da so viel Geld drauf und so viele Ressourcen?

Jochen

Und dann ist es aber genau wie bei ImageNet, bei ImageNet ist es ja auch so,

Jochen

dass dadurch, dass es vortrainierte Modelle gibt, die sozusagen ein gutes Verständnis davon haben,

Jochen

wie unsere visuelle Welt halt so aussieht, kann man die auf neue Probleme sehr gut anpassen.

Jochen

Dann nimmt man halt irgendwas, wo man jetzt nur wenige Trainingsbeispiele hat

Jochen

und feintunt diese auf ImageNet trainierten Modelle auf dieses Problem

Jochen

und kriegt damit Sachen hin, die vorher halt völlig unmöglich wären

Jochen

oder wo man halt auch irgendwie

Jochen

hunderttausende Trainingsbeispiele gebraucht hätte oder so

Jochen

und kann dann halt

Jochen

irgendwie in einem konkreten Anwendungsfall halt sehr, sehr

Jochen

gut sein.

Jochen

Und auch da,

Jochen

ich glaube, auch da ist den Leuten noch nicht so richtig bewusst,

Jochen

was das eigentlich bedeutet

Jochen

und Anwendungen gibt es da auch noch nicht so viele, aber da gibt es

Jochen

wahrscheinlich, also da werden wir sehr viele Anwendungen

Jochen

sehen, denke ich, dass halt jetzt, also

Jochen

ja, eben mein Beispiel dafür war

Jochen

halt irgendwie eigentlich, dass irgendwie Flaschen

Jochen

Pfandautomaten da so schlecht sind, das muss eigentlich

Jochen

nicht sein, das könnte alles viel besser gehen und das

Jochen

gilt im Grunde für alle Probleme, wo man

Jochen

irgendwie visuell was erkennen

Jochen

möchte.

Jochen

Das ist theoretisch

Jochen

durch. Jetzt muss man es eigentlich nur noch praktisch umsetzen.

Dominik

Ja, mir graut schon ein bisschen davon. Ja, dieser Mensch

Dominik

darf in die Stadt. Nein, der darf nicht in die Stadt. Ja,

Dominik

dieser Mensch darf da und da hin. Ja, leider könnte es auch sein,

Dominik

dass er jetzt...

Dominik

Ja, es ist...

Dominik

Diese Ampel bleibt für dich rot.

Dominik

Ja.

Dominik

Gibt doch nicht mal die guten Tipps.

Jochen

Ja, es ist nicht ganz unproblematisch, das stimmt auch.

Jochen

Aber eben, also das ist jetzt auch für Sprache halt so ein bisschen passiert,

Jochen

weil man eben, wenn man jetzt so ein Language-Modell trainiert hat

Jochen

auf irgendwie großen, weiß ich nicht, auf einem Website-Crawl oder eben Wikipedia,

Jochen

man braucht eigentlich noch ein bisschen mehr als Wikipedia,

Jochen

dann kann man da unterschiedliche Prediction-Heads draufsetzen

Jochen

für unterschiedliche Probleme.

Jochen

Und man nimmt halt sozusagen irgendwie, aber es sind halt alles Sprachprobleme,

Jochen

also auch so ein Text-Klassifikations-Problem kann man halt nehmen,

Jochen

Jagt das halt, benutzt halt zum Beispiel

Jochen

BERT, um das halt

Jochen

irgendwie

Jochen

sozusagen um diese

Jochen

Ist das ein Prediction Head?

Jochen

Ja, genau. Das ist halt

Jochen

im Grunde die

Jochen

Dinger übersetzen das ja irgendwie in eine interne

Jochen

Repräsentation. Und

Jochen

dann übersetzen sie es wieder zurück

Jochen

in das, was du haben willst. Und du kannst das

Jochen

austauschen. Du kannst halt sagen, okay, ich möchte, dass

Jochen

mein Language-Modell mir zum Beispiel Sätze generiert.

Jochen

Oder ich möchte, dass es halt Textklassifikationen

Jochen

macht. Oder ich möchte, dass es irgendwie

Jochen

Named Entity Recognition macht oder

Jochen

irgendwas, also sozusagen Namen

Jochen

oder Orte findet

Jochen

in Texten oder sowas. Klingelt ja direkt die Kasse.

Jochen

Oder Fragen beantworten

Jochen

kann oder solche Sachen.

Jochen

Und du kannst das gleiche

Jochen

vortrainierte Modell nehmen für all diese unterschiedlichen

Jochen

Tasks.

Jochen

Das heißt, du kannst, und die gibt es

Jochen

halt auch, du kannst halt, ich weiß nicht

Jochen

wie viel Geld Google ausgegeben hat, um BERT zu

Jochen

trainieren oder weiß ich nicht, auf jeden Fall eine ganze Menge.

Jochen

Das konntest du nicht leisten wahrscheinlich.

Jochen

Und du kannst das vortrainierte Modell

Jochen

nehmen, passt es auf deinen Task an, wie zum Beispiel

Jochen

jetzt irgendwie Text klassifizieren von diesem

Jochen

Slam-Zox oder irgendwie

Jochen

und trainierst das halt da drauf

Jochen

und kriegst halt deutlich bessere Ergebnisse.

Jochen

Toll, klasse. Genau.

Jochen

Und das würde ich gerne noch ausprobieren, das habe ich

Jochen

jetzt noch nicht geschafft, aber das mache ich bestimmt demnächst irgendwann.

Jochen

Und dann, aber es gibt

Jochen

schon Papers dazu jetzt. Ist aber auch jetzt im Frühjahr

Jochen

erschienen, glaube ich, eins, das ist auch des Reuters-Dataset,

Jochen

das wir auch in der Text-Klassifikations-

Jochen

Ding

Jochen

Episode hatten,

Jochen

wo jemand das einfach genommen hat,

Jochen

der hat noch zwei andere Text-Klassifikations-Korpus-Datasets benutzt.

Jochen

Also man sollte halt immer mehrere nehmen,

Jochen

weil es kann ja auch Zufall sein,

Jochen

dass mal irgendwas in einem bestimmten Dataset besser funktioniert.

Jochen

Und da waren gegenüber diesen guten Zahlen von 97

Jochen

Verbesserungen von so 5% im F1-Wert oder sowas,

Jochen

was Wahnsinn ist.

Jochen

Also das ist halt richtig, richtig viel.

Jochen

das ist halt so klasse von

Jochen

irgendwie, also

Jochen

in einem Ding, wo man seit 20 Jahren nichts mehr

Jochen

gefunden hat, was es irgendwie besser macht, da passiert

Jochen

plötzlich so ein Fortschritt, dass es halt, da ist

Jochen

irgendwas Fundamentales passiert. Also da

Jochen

scheint es so zu sein, zumindest,

Jochen

dass man tatsächlich

Jochen

mehr Informationen aus der Sprache da rausholen

Jochen

kann, als man das bisher konnte

Jochen

und das ist natürlich ein Hinweis darauf, dass da noch viel

Jochen

und da das jetzt, das sind die ersten Ergebnisse,

Jochen

da kann man ja dann noch optimieren,

Jochen

das heißt, das wird sehr wahrscheinlich

Jochen

noch alles noch viel besser werden und

Jochen

also man hat auf jeden Fall jetzt einen Ansatzpunkt, wo man

Jochen

wieder einen Hebel reinsetzen kann

Jochen

und

Jochen

ja, das heißt, wir kriegen jetzt wahrscheinlich

Jochen

auch, was

Jochen

Probleme angeht, wo man mit Sprache zu tun hat,

Jochen

irgendwie deutlich bessere Ergebnisse und das betrifft

Jochen

dann eben solche Sachen, eben wie Textklassifikation,

Jochen

Spam, nicht Spam, das ist gut, das ist schon gelöst

Jochen

irgendwie, aber es ist halt auch so ein Spezialproblem

Jochen

und man kann das halt auch mit Spezialgeschichten

Jochen

gut anpacken.

Jochen

Mir schwant böse, das ist mir schon böse.

Jochen

Aber man hat

Jochen

diese Probleme ja auch in anderen Bereichen, wo man dann jetzt nicht so viel

Jochen

Energie reinstecken möchte, wie es

Jochen

nicht ist bei der Erkennung,

Jochen

sondern man hat halt ein paar hundert eigene

Jochen

Datenpunkte oder so und kriegt dann plötzlich

Jochen

Ergebnisse hin, die man

Jochen

ansonsten, wo man sonst viel

Jochen

Engineering hätte reinstecken müssen oder viel, viel mehr Daten.

Jochen

Und das

Jochen

ist natürlich schon eine super interessante Geschichte.

Jochen

Ja,

Jochen

genau. Also da kommen, machen wir auch

Jochen

bestimmt noch Sachen zu. Das wird noch cool.

Jochen

Ach, das wird auch cool.

Jochen

Ich bin schon mal gespannt, weil diese Dinge

Jochen

auszuprobieren. Ja, ich hatte da

Dominik

einige Horrorgeschichten vielleicht noch, die man jetzt

Dominik

daran direkt anschließen kann, weil es gibt ja dann

Dominik

die Möglichkeit, ja leider, also auch

Dominik

das war ja Stanford irgendwie, ImageNet

Dominik

und dann, ich weiß jetzt nicht, wovon das Dings

Dominik

Sprachnetz herkam, aber es gibt

Jochen

die Player da momentan

Jochen

sind Google, Facebook,

Jochen

also Facebook ist ExcelNet, Google ist

Jochen

Bird,

Jochen

dann

Jochen

genau, OpenAI hat

Jochen

GPT-2 gemacht,

Jochen

aber ich weiß nicht so, aber die großen

Dominik

habe ich am MIT so eine lustige Sache gesehen,

Dominik

die haben etwas an die Gesichtsmuskeln

Dominik

angeschlossen, dass dann die

Dominik

Bewegung des Gesichtes auf

Dominik

deine innere Stimme

Dominik

metten kann. Und so könnte man tatsächlich

Dominik

dann irgendwie so lesen, was für Sätze diese

Dominik

Menschen denn gerade denken, wenn man sie irgendwie

Dominik

so mitfilmen würde. Und daraus dann

Dominik

solche Sachen zu bauen, ist ein bisschen gruselig.

Dominik

Alter Ego heißt das Projekt, glaube ich.

Jochen

Ja, aber da bin ich mir sehr skriptisch, wenn Leute

Jochen

solche Sachen behaupten. Pettiford-Klinik?

Jochen

Ja, ja, nein, aber ich meine

Jochen

überhaupt, wenn es darum geht, vorher zu sagen, was

Jochen

weil, also da

Jochen

geht sozusagen so der

Jochen

Internet-Bullshit-Alarm los,

Jochen

weil das natürlich etwas ist, was alle super gerne hätten,

Jochen

dass sie halt irgendwie Gedanken lesen können.

Jochen

Auf der anderen Seite aber

Jochen

man, also Menschen nicht gut können.

Jochen

Und Menschen sind ziemlich gut.

Jochen

Also die Quote,

Jochen

zum Beispiel bei erfahrenen Polizisten, die glauben alle,

Jochen

die könnten das, aber wenn du das testest,

Jochen

also die Studien jedenfalls, gut,

Jochen

ich bin ja jetzt auch kein Experte dafür, aber ich habe da

Jochen

auch so Sachen gesehen, wo halt die Quote von

Jochen

guten Polizisten

Jochen

irgendwie Lügner zu erkennen

Jochen

in Verhören ist so knapp über

Jochen

50 Prozent. Also wenn die eigentlich wahrscheinlich

Dominik

gute Polizisten sind. Ich weiß es nicht so genau,

Jochen

aber... Und wenn die das schon nicht können, ja, wie soll

Jochen

das ein Modell hinkriegen? Ja, aber die haben halt so ein Ding

Dominik

auf dem Gesicht, ne? Also das ist sehr interessant, guck dir das mal an.

Dominik

Alter Ego heißt das mit MIT-Projekten.

Jochen

Okay, muss ich mir mal anschauen.

Jochen

Ja. Das ist wirklich spannend.

Jochen

Ja, also ich glaube, wir waren fast am Ende

Dominik

mit den Classify, aber du hast noch eine Sache, hast du noch

Dominik

gebaut, du hast noch eine andere, nach

Dominik

der Vektormaschine, was

Dominik

anderes getestet.

Dominik

Das war Spacey.

Jochen

Das war so ein neuronales Netz.

Jochen

Also es ist tatsächlich

Jochen

ein bisschen besser als NaiveBase. Es ist ein bisschen schlechter

Jochen

als die lineare Support-Vector-Maschine

Jochen

und verbraucht

Jochen

aber wahnsinnig viel mehr

Jochen

Rechenleistung natürlich.

Jochen

Macht ja natürlich auch viel kompliziertere Sachen.

Jochen

Aber das ist halt auch so ein Ding.

Jochen

Wenn die Daten das halt nicht hergeben und an der Stelle tun sie es

Jochen

wahrscheinlich nicht, dann nützt einem das halt nichts.

Jochen

Sondern man braucht halt dann auch entsprechende Trainingsdaten,

Jochen

um halt diese ganzen Parameter,

Jochen

diesen Modell halt auch ordentlich zu fitten oder so.

Jochen

Aber ich könnte mir halt, also was mich jetzt interessieren würde,

Jochen

ist, was ist denn jetzt, wenn ich

Jochen

jetzt so ein vortrainiertes

Jochen

Language-Modell nehme und dann nochmal

Jochen

gucke, vielleicht

Jochen

wird das dann nochmal deutlich besser. Wobei mit dem

Jochen

Dataset, naja.

Jochen

Aber

Jochen

das zeigt halt

Jochen

zum Beispiel auch, finde ich, dass wenn man jetzt,

Jochen

also Spacey gilt so als

Jochen

State-of-the-Art und ich finde, das ist ja auch gut

Jochen

und so. Und wenn man das jetzt aber so

Jochen

naiv benutzt für so ein Problem, wo man jetzt

Jochen

halt irgendwie selber nicht so

Jochen

viele Daten hat,

Jochen

dann, also

Jochen

ich würde sagen, da jetzt einfach so naiv

Jochen

Spacey genommen zu haben, wäre wahrscheinlich nicht unbedingt der richtige Weg

Jochen

gewesen, sondern

Jochen

ja. Lieber naiv Base.

Jochen

Man muss manchmal so Dinge ausprobieren und manchmal

Jochen

und es ist oft, zumindest um eine

Jochen

Baseline zu haben, eine sehr sinnvolle

Jochen

Sache, ein ganz einfaches Verfahren, was man gut versteht,

Jochen

zumindest mal implementiert

Jochen

zu haben und zu sehen, ob man nicht irgendwo fundamental

Jochen

was kaputt macht oder was nicht verstanden hat.

Jochen

Und für sowas

Jochen

ja, das ist eigentlich ganz gut.

Jochen

Cool. Ja, ich glaube, damit sind wir

Jochen

eigentlich schon praktisch mit der Geschichte.

Dominik

Ja, na, E-Space haben wir erklärt. Es fehlt eigentlich noch

Dominik

der Pick der Woche und schöne Wünsche

Dominik

fürs, ja, leider ist es erst Montag,

Dominik

Wochenende, aber

Dominik

vielleicht ist es ja bei euch.

Jochen

Ja, das wird auch noch ein bisschen dauern, bis die Sendung

Dominik

nicht, bis die Sendung raus ist. Aber ja, wir wissen

Dominik

noch nicht genau, wann sie erscheinen.

Dominik

Ja, was ist denn dein Pick der Woche?

Dominik

Du hast dir ja auch was Schönes rausgesucht.

Jochen

Äh, genau. Ist mir letztens irgendwie über den Weg gelaufen.

Jochen

Ice Sword.

Jochen

Und zwar geht es dabei darum, dass halt...

Jochen

Importe sortieren?

Jochen

Ja, man kann ja...

Jochen

Man kann natürlich auch gefahrene Sachen machen,

Jochen

man automatisiert seine Importe.

Jochen

Eine Standardform bringen ja mit Black und so,

Jochen

aber das ändert jetzt zum Beispiel die Reihenfolge von Importen halt nicht.

Jochen

Und wenn man das komisch gemacht hat, dann...

Jochen

Also Black ist ein Autovermetter,

Dominik

den man in seinem Editor zum Beispiel einstellen kann

Dominik

oder mit dem man dann Dateien später so formatiert,

Dominik

dass auch eure Kollegen das lesen können,

Dominik

weil die eure ganzen Gewohnheiten zunichte machen

Dominik

und das so formatieren, wie man es normalerweise tut.

Jochen

Genau, aber wenn man jetzt viele Imports irgendwie hat,

Jochen

dann ist es auch vielleicht nicht

Jochen

schlecht, da eine Struktur drin zu haben und da

Jochen

guckt halt Black höchstens,

Jochen

dass die Zeilen nicht zu lang werden oder

Jochen

so,

Jochen

aber halt nicht, wie die sortiert sind, weil

Jochen

das spielt halt keine Rolle für

Jochen

Blackhands.

Jochen

Aber das ist halt vielleicht, wenn man da auch

Jochen

irgendwelche Regeln zu haben

Jochen

und das, also jedenfalls

Jochen

bringt iSort das halt auch in Standardformat.

Jochen

Ich glaube, wenn man das einfach ohne

Jochen

Config oder so benutzt, dann sortiert es das alphabetisch,

Jochen

dass es vielleicht auch nicht die sinnvollste

Jochen

Geschichte ist, aber man kann dem halt

Jochen

auch sagen, was es priorisieren soll oder

Jochen

sagen, okay,

Jochen

Standard-Modul

Jochen

aus der Standard-Bibliothek nach oben oder so. Man kann das Ding

Jochen

auch relativ umfangreich konfigurieren

Jochen

und ich fand da einfach nett zu sehen, dass es da überhaupt

Jochen

irgendwie eine Möglichkeit gibt, das automatisch zu machen.

Dominik

Ich glaube, es gab sogar so einen Hook in Black oder sowas?

Jochen

Nee, also da genau, das war

Jochen

in Black ist es so, dass

Jochen

irgendwelche Leute haben

Jochen

da ein GitHub aufgemacht

Jochen

und gefragt, ob Black das nicht auch machen könnte.

Jochen

Und dann haben sie gesagt,

Jochen

naja, vielleicht nicht, gibt doch IceHort.

Jochen

Und dann hat man irgendwelche Leute gesagt, oh, IceHort hat

Jochen

aber die und die und die Probleme und gerade in Kombination

Jochen

mit Black macht das manchmal Sachen kaputt.

Jochen

Daraufhin hat der Autor von IceHort

Jochen

da geschrieben, ja, ich sehe das

Jochen

auch alles irgendwie, dass das problematisch ist

Jochen

und ich arbeite gerade an einer

Jochen

Black-IceHort-Implementation,

Jochen

die

Jochen

diese Probleme dann nicht hat.

Dominik

Also falls ihr mittelgroße oder größere Projekte automatisch

Dominik

studieren wollt mit euren Modulen,

Dominik

guckt euch das doch mal an.

Dominik

Mein Pick der Woche war

Dominik

PPtop.

Dominik

Das macht sowas wie

Dominik

Python-Prozesse anzeigbar wie Htop,

Dominik

wenn ihr das irgendwie kennt oder so.

Dominik

Htop oder Top, irgendwie was unter Linux, so ein bisschen

Dominik

die Prozesse und Memory Management

Dominik

der einzelnen laufenden

Dominik

Prozess-IDs und so weiter euch zeigt.

Dominik

Macht das was mit Python-Prozessen, das ist relativ cool.

Dominik

Und ja, kann euch

Dominik

so eine Inspektion geben, was macht der

Dominik

in der Prozess eigentlich gerade. Fand ich

Dominik

ganz interessant, um mal so ein bisschen rumzuspielen, mal ein bisschen

Dominik

zu debuggen, zu gucken, was passiert

Dominik

denn da eigentlich?

Dominik

Klingt gut, muss ich mal ausprobieren.

Dominik

Ja.

Dominik

Ja, so.

Dominik

Haben wir es quasi fast heute wieder geschafft,

Dominik

würde ich sagen. Ja, also falls jemand von

Dominik

euch gezählt hat, wie oft wir Penis gezählt haben,

Dominik

können da sich eine Folge binden.

Dominik

Noch toller wäre es natürlich, wenn ihr einen Algorithmus schreibt,

Dominik

der irgendwie die Sprache analysiert und uns genau zeigt, wo das

Dominik

denn gewesen ist. Wir wollen euch ja mal

Dominik

ein bisschen motivieren, zwei Projekte, wer weiß.

Dominik

Ja, danke, dass ihr wieder zugehört habt.

Dominik

Bleibt uns gewogen, schaltet wieder rein.

Dominik

Ja, und ob immer auch seid.

Dominik

Schönen Tag, schönen Morgen, Abend, Nacht.

Dominik

Bis demnächst.

Dominik

Bis dann.

Dominik

Tschüss.