Ja, hallo liebe Hörerinnen und Hörer. Willkommen zum Python-Podcast in der heute 18. Episode.
Heute geht es um die Suche. Hier ist der Dominik und neben mir ist der Jochen.
Ja, hallihallo.
Wir sind wieder auf der Raumschiffbrücke heute.
Genau.
Erneut. Schön hier.
Ja, genau, Volltextsuche, um es genau zu sagen.
Ja, ah oh, Volltextsuche, ja.
Ja, aber wollen wir das eigentlich, oder ich meine, wir können einfach ganz normal starten.
mit News und Dings.
Ja, genau. Ich würde auch sagen, wir machen jetzt wie immer
unsere kleine Einleitung.
Vielen Dank an unsere zahlreichen Hörer.
Wir haben tatsächlich mittlerweile einige Blumen und dann die schönen Fragen,
die uns immer erreichen. Wir beantworten die immer gerne und versuchen
immer, euch so schön
wie möglich das zu erklären, was ihr gerne hören möchtet.
Also wenn ihr Fragen habt, Lob, Anregungen,
Kommentare, hallo at pythonpodcast.de
Schickt uns einfach eine Mail
oder kommentiert fleißig auf unserer Seite.
Ja, News aus der Szene.
Heute ist der Erscheinungstag von Python
3.8.2.
Es ist aber noch nicht da.
Wir haben gerade abends, es ist dunkel.
Genau.
Heute ist Rosenmontag übrigens auch.
Ja, und das
wird hier wahrscheinlich auch noch eine sehr
Jacke-Veranstaltung.
Wir sind unbeschadet heimgekommen, ja.
Ich war heute einer der wenigen Leute, die
irgendwie im Pro saßen und so.
Es war sehr angenehm, wir haben ein bisschen was geschafft gekriegt.
Ja, und wenn du auf die Straße gehst
und aussiehst, wärst du schon verkleidet, ist das auch gar nicht groß aufgefallen.
Ja, ja, ja.
Horror-Clown.
Ich empfehle ihn.
Sehr gut.
Ja, wir machen heute Volltext-Suche.
Und ja, Nuss aus der Szene, ist dir noch was eingefallen?
Hatten wir noch was Schönes?
Tatsächlich glaube ich eigentlich nicht.
War gar nicht so viel los, ne?
Eurofice ist noch im Moment drin.
Gehst du hin zur Eurofice?
Ja, ja, ja.
Ach schön, cool.
Wir müssen uns nur noch irgendwie mit Kindergarten und so beklären.
Die machen ja auch irgendwie Betriebsferien und so,
aber eigentlich schon, ja.
Ja, sonst musst du alleine. Ich habe mir schon
eine Wohnung
organisiert.
Also falls noch jemand eine WG sucht oder sowas,
sagt mir Bescheid.
Was gab es noch? Es gab so einen tollen Tweet, hast du gesagt, von
Armin Runacher. Das ist der
Haupt-Dev, der Entwickler von
Flask. Ja, aber das wollte ich eigentlich später erst picken.
Ach, das wolltest du picken? Ja.
Ach, das ist ein Modul.
Ich dachte, wir picken Module, Jochen.
Heute nicht.
Oh Gott, jetzt ist alles durcheinander.
Ja, okay, dann picken wir keine Module, dann machen wir das am Ende.
Ja, aber
was wir tun könnten wäre, wir könnten ja heute mal
mit dieser Tradition, die wir jetzt schon
seit einigen Episoden starten wollten, tatsächlich
vielleicht mal anfangen und ein Modul aus der
Standardbibliothek uns
vornehmen. Ja, gute Idee.
Und das nennen wir Parslip.
Parslip, ja, genau.
Das
immer wieder, wenn ich halt irgendwie
in Code herumnavigiere
und sehe dann irgendwo so Import
ja, OS und dann halt
OS-Path und so und dann
machen Leute da Dinge, dann denke ich mir jetzt,
ach, es geht zu viel schöner mit Pathslip.
Also vielleicht nochmal kurz, was Pathslip ist.
Pathslip ist ein Wrapper
oder ist das eine komplett neue Implementierung?
Das ist ein Modul aus der Standardbibliothek,
ich weiß jetzt gar nicht, ne, das ist kein Wrapper
um OS-Path, ne, ne,
das ist halt auch so ein bisschen, manchmal
ist so ein bisschen unübersichtlich, es gibt einige
Module in der Standardbibliothek,
die halt so ein bisschen das Gleiche machen
unter anderem halt eben
US Path und dann
Shell Utils, also SH Util
macht auch so ein bisschen das gleiche,
aber so ein bisschen eine andere
Geschmacksrichtung. Pathlip macht jetzt auch
nochmal das gleiche, aber auch wieder ein bisschen anders.
Ach ja, aber
im Grunde denke ich, wenn man jetzt mit
Pfaden irgendwie Dinge macht, dann ist Pathlip das,
was man eigentlich haben will.
Und das ist auch so richtig, ich glaube, das ist auch erst seit
Python 3,
4 oder so drin.
Und auch, aber auch
erst seit 3.6 so richtig schön.
Oder 3.7 sind auch nochmal
interessante Dinge dazugekommen. Glaube ich ist
Mounts dazugekommen in 3.7.
Also nur
in aktuelleren 3.3
Versionen. Also man kann halt relativ
schick irgendwelche Strings zu
Verzeichnisnamen oder Dateinamen parsen
und dann da Pfade, Pfadobjekte
daraus erstellen und dann
einfach mit einem Slash dahinter dann
Unterverzeichnisse wechseln oder iterieren
über so Pfade und die ganzen schönen
Listen anzeigen oder Content anzeigen,
gucken, ist es ein Verzeichnis, ist es kein
Verzeichnis, ist es eine Datei.
Ja genau, das Hauptfeature finde ich, dass man
damit halt relativ einfach
Pfade so hinschreiben kann, ohne
jetzt irgendwie viel
Boilerplate-Code
außenrum schreiben zu müssen, wenn man jetzt
Join und dann die Liste, das ist halt immer so ein bisschen
und jetzt kann man halt einfach, man schreibt halt
ein Slash und dann macht dieser Operator
sozusagen eine
Verkettung der Namen, die man da
Ja, das wollen wir aus dem Dateisystem eigentlich auch kennen.
Genau, und dann sieht das halt
im Code fast genauso aus, als würde man
es auf die Shell schreiben. Und das ist natürlich schon
deutlich kompakter und
sieht einfach, ja, man sieht,
was passiert.
Das ist ein tolles Ding, aber halt auch solche Sachen wie
so Convenience-Funktionen für Sachen, die man halt dauernd
braucht, also sowas wie
ich brauche jetzt ja irgendwie mal
den Versionen des Dateinamens
ohne Endung, also ohne
irgendwie MP4 hinten dran oder
MP3. Oder auch mit, das geht auch. Oder mit, oder nur
das Suffix oder so. Solche
Dinge braucht man ja dauernd.
Und dafür gibt es halt dann eben
schon eingebaute
Attribute, die man einfach
so verwenden kann.
Das ist halt total nett.
Ich muss gestehen, als ich mit Python
angefangen habe, gab es das schon. Und deswegen habe ich
OS-Parse nur ab und zu mal
angesehen und gesagt, ist das hässlich, dann gesehen.
Ach ja, okay, das ist jetzt Parselip.
Ja, ja, ja.
Ich stolper fast täglich über Code,
wo halt noch OS-Path verwendet wird
und nicht die Path-Slip insofern.
Auch ganz oft in Django ist das auch ganz oft drin,
in den Settings oder sowas.
Ich bin erst einmal irgendwo drüber gestolpert,
wo es nicht mir gelang, das zu entfernen.
Ich bin mir nicht sicher, ob das an meinen Fähigkeiten lag
oder an der Implementierung.
Die brach dann einfach durch,
weil ich Path-Slip-Objekte genommen habe.
Und wenn man das halt irgendwie anders gewohnt ist,
dann gibt es unten, wenn man die Dokumentation
sich anguckt, nochmal eine Liste von
also, wie man das früher
mit OS-Path gemacht hat und jetzt, wie man es mit Path-Slip
machen kann, Tabelle
und da findet man dann meistens schon die Funktion, die man sucht.
Stellen wir euch nicht schon los.
Ja, genau. Also, genau, damit haben wir
das tatsächlich mal gemacht, was wir
immer, wo wir noch von geredet haben.
Ja, also wir wollen jetzt tatsächlich das einfüllen, schreibt uns, ob es euch gefallen hat.
Und wenn ihr irgendwie von unserem Podcast die Struktur
irgendwie blöd findet, wann wir was erzählen, dann
könnt ihr auch dazu gerne mal Feedback geben, wenn wir es irgendwie
neu umsortieren wollen, wenn ihr immer zuerst die Pics
haben wollt oder erstmal direkt das Thema, bevor wir
irgendwas über News erzählen.
Ja, aber trotzdem, dann machen wir Volltextsuche
weiter und ich werde dich löchern damit.
Oder wollen wir noch ganz kurz
ein Meta-Ding
kurz, also ich überlege gerade,
weil mich hatte diese, da gab es
eine Mail,
wo
dran, ja,
wo wir
parken wollen, ob wir nicht
mehr Dinge erklären könnten.
Ach so, stimmt. Und ja, ich kann
das durchaus verstehen, also es ist halt
viele Sachen, die man einfach so
vor sich hin redet und nicht drüber
nachdenkt, die zu erklären, dann ist das
Das ist halt schnell unverständlich.
Aber auf der anderen Seite ist es halt, glaube ich, schwierig.
Ja, es ist so ein Trade-off.
Einige Menschen, die kennen das halt schon alles.
Und wenn man dann jeden Schnipsel erzählt,
ist es vielleicht uninteressanter.
Dann wird es für die uninteressanter.
Und die Frage, an wen wendet man sich da eigentlich?
Wie Einsteiger wollen wir das Ganze machen?
Ja, das ist gar nicht so einfach.
Ich glaube, bestimmte Sachen muss man vielleicht selber nachgucken.
Und man kann uns immer fragen, wenn man irgendwas nicht versteht.
Wir erklären das immer gerne nochmal
und nehmen das auch in einer der Folgen.
Ich glaube, das ist vielleicht eine gute Idee.
Und ja, tatsächlich, wenn uns irgendwas auffällt, versuchen wir es so tief wie möglich zu erklären.
Ja, aber das würde mich eben auch nochmal interessieren, wie das andere Leute sehen oder auch wie du das siehst, das weiß ich auch gar nicht.
Weil ich würde sagen, das ist ja eigentlich das Tolle an, ich komme drauf, weil letzte, ich höre ja auch noch viele andere Podcasts,
ich höre zum Beispiel Philosophische Radio auf WDR 5 oder die Radio Bissen, ich weiß jetzt gar nicht, auf welchem Sender, ich höre es ja nur als Podcast.
Ich höre einen tollen Hobby-Podcast, Short-Handed News, falls jemand Eishockey mag.
Genau, und die sind der Meinung, dass sie da auch irgendwie Podcasts machen und sagen, das ist kein Podcast, sondern das hat halt irgendwie eine feste Zeitbegrenzung. Und dann am Schluss fangen die auch immer an so, das müssen wir jetzt noch schnell senden oder jetzt sind wir ja schon fast am Ende mit der Zeit oder so, wo man sich denkt, ja, warum eigentlich? Ihr könnt ja auch einfach weitererzählen.
Also da ist halt ein großer Unterschied und dann ist auch ein Unterschied, dass die machen das nämlich so, die versuchen das immer irgendwie, ja sozusagen möglichst einfach zu erklären und sie versuchen auch immer die Zuhörer mit einzubeziehen, was sich auch manchmal nicht so richtig super gelungen findet.
Wir können den nächsten irgendwie
veröffentlichen auf
der Seite, wann wir die nächste Podcast-Folge aufnehmen
und dann sind Anrufer zugelassen.
Genau, das
macht natürlich... Live-Schaltung, ja.
Ich verstehe natürlich, dass es bei der Live-Sendung
den Reiz enorm erhöht, ja, oder wenn man halt
irgendwie auf Twitter nebenher
drüber lästern kann, was die gerade wieder von uns erzählen,
das erhöht
den Spaßfaktor deutlich, aber
ich weiß nicht, ich glaube, das ist
was anderes, als das ist dann halt eher so Radio
oder Fernsehen oder eben nicht Podcast,
weil für mich Podcast ist eher so, das, was ich daran mag,
ist halt etwas, was man eben in diesen Massenmedien-Kontexten
halt nicht kriegt.
Nämlich zum Beispiel, was mich eben bei so einem Thema
wie jetzt Philosophie oder so eigentlich interessieren würde,
wäre genau das, was wir versuchen,
jetzt im Bereich Python zu machen.
Nämlich Leute, die sich sowieso damit beschäftigen,
die sich einfach mal so ein bisschen drüber unterhalten,
was sie da so tun.
Und das gibt es halt für sowas wie Philosophie nicht.
Sondern da hast du halt immer einen Moderator
und dann halt vielleicht einen Studierest oder so.
Es gibt ja so einen philosophischen Zirkel in der Stadt.
Ja, vielleicht müssen wir
da hingehen, keine Ahnung.
Und dann wird das
irgendwie aufbereitet und dann ist da irgendwie
so ein Konzept hin und dann will man bestimmte Punkte abarbeiten.
Aber ich finde das halt eigentlich
überhaupt nicht interessant. Und gerade dann immer, wenn
irgendwie so Zuhörergeschichten da mit reinkommen,
denke ich mir immer so, jetzt war es gerade spannend,
aber jetzt können sie da halt nicht weitermachen, weil entweder ist die Zeit vorbei
oder irgendwie
müssen sie nochmal auf ein anderes
Ding eingehen.
sie geben sich halt auch mal sehr viel
Mühe, das dann irgendwie so zu verpacken,
dass es halt möglichst viele Leute erreichen
kann, was ja auch nichts Schlechtes sein muss, aber
ich meine, im Grunde, wenn man in einem
Massenmedium ist, dann ist das natürlich
das Ziel, irgendwie
möglichst viele Leute zu erreichen, sonst müsste ich
da nicht das irgendwie über
Radiowellen irgendwie nach draußen senden,
aber ist das eigentlich
immer das, was man haben will? Da bin ich mir nämlich gar
nicht so sicher, weil... Also wir haben jetzt einen kleinen Exkurs,
Jochen redet mit mir über Podcast.
Sorry, ist ja gerade nur so, weil ich meine, man kann ja auch auf andere Dinge optimieren.
Mal so zum Beispiel, wie nützlich ist das für die Leute, die das zuhören?
Es können ja weniger Leute hören, aber für die kann das ja nützlicher sein.
Aber das geht jetzt eben bei einer Radiosendung nicht.
Wenn ich jetzt eine Radiosendung mache und sende das halt irgendwie über einen Sendemast übers Land,
dann, und das ist für 100 Leute sehr, sehr relevant und für alle anderen, die das halt trotzdem abkriegen, super langweilig.
Ja, also wir machen ja Podcasts und ich hoffe, dass alle unsere Hörer auch tatsächlich wegen Python und hier sind
und vielleicht auch, weil sie Lust drauf haben oder warum auch immer.
Also keine Ahnung, kann auch sein, dass ihr unsere Stimme so schön findet.
Aber zum Einschlafen.
Ja, das ist eigentlich gar nicht so schlechte Idee.
Nur nicht beim Autofahren und Einschlafen kombiniert.
Aber naja.
Aber ja, also ich meine, das ist halt etwas, oder überhaupt bei Internetgeschichten finde ich das immer super, dass man das ja eigentlich tun kann mal.
Man kann ja jetzt einfach sagen, okay, ist mir egal, ist nicht für jeden relevant, sondern für nur ein paar Leute.
Ja, aber ich glaube, weil wir eigentlich mit der Frage eingestiegen sind, wie viel wir tief erklären.
Also erklärt uns doch mal gerne mit, wie viel ihr denn erklärt haben wollt, ob ich das zu viel Erklärung ist, zu wenig Erklärung ist und ja, ich glaube, wenn ihr Begriffsfragen habt, wissen wollt, was CSS ist, Cascading Style Sheets im Übrigen, da war eine Frage, dann erklären wir euch das gerne nochmal oder ihr schaut das dann kurz nach, also wie man dann das Internet betrachtbar macht.
Ja, Jochen, aber jetzt hast du so viel über Meta geredet, dass unsere Absprungquote wahrscheinlich wieder in Höhen geschnallt ist. Wir fangen jetzt an mit Volltextsuche.
Ja, Volltextsuche, voll gut.
Was ist das überhaupt, Volltextsuche?
Also wir wollen ja ganz Basis anfangen und erklären.
Was macht eine Volltextsuche?
Warum heißt es Volltext und was ist daran Suche?
Also habe ich einen Text und ich gebe
eine Suchmaske einen Begriff ein und der
spuckt mir aus dem gesamten
Text alle Treffer aus oder was ist das?
Ja, nee, also...
Nein, okay.
Also ich meine, das ist auch ein Suchproblem,
wenn man versucht, in einem Text irgendwas zu finden.
Aber...
Volltextsucher will das über viele Texte finden.
Ja, also der entscheidende
Unterschied ist eigentlich, dass man halt Dokumente hat
bei einer Volltextsuchmaschine.
Indizierbare Dokumente, also deren Inhalt du kennst
und dann möchtest du durch eine Masse von Dokumenten
bestimmte Stichworte
suchen.
Ja, also man hat
eine Anfrage oder
eine Query und da möchte man halt die Sachen
finden, die da relevant
sind. Das Paper, das du benutzt, damit du
deine Hausarbeit nicht zweimal schreiben musst
oder einfach die nehmen kannst, die du findest.
Ja, ich habe auch
überlegt, wie man das am besten, ich weiß
nicht, ob die Analogie oder wie weit die trägt, aber
wie man sich das vorstellen kann, ist halt
wie bei einem Index in einem Buch.
Denke ich.
Ein Glossar.
Nicht Glossar, erklärt ja die Begriffe, aber
ein Index tatsächlich, gibt es oft in Büchern.
Ja, okay, da geht es dann noch zu welchem Hit,
welche Seile.
Einfach so eine Liste der Wörter und dann auf welchen Seiten
die Wörter vorkommen, also das ist immer das Wort.
Ich habe das sogar einmal in Kombination gesehen, glaube ich,
ein Glossar kombiniert mit der Erklärung und dann
die Hinweise, wo es auftaucht. Sehr schöne Sache.
Kann man wahrscheinlich auch machen, aber
genau, dann hast du halt eine kommaseparierte Liste
der Seiten, auf denen das vorkommt.
Wenn das jetzt auf den
Volltext-Suche-Dings
Anwendungsfall übertragen wäre, wäre das halt so, dass
die Seiten in dem Buch wären halt die Dokumente,
die indiziert werden und der Index
in dem Buch ist tatsächlich dann halt so
wie ein Volltext-Suchindex,
der man auch, ist sehr ähnlich zu dem,
was man dann tatsächlich auch verwendet.
Und was hat das jetzt mit Python zu tun, Jochen?
Ja, also, oh, das ist eine gute Frage.
Jetzt habe ich ihn erwischt.
Doch, hat es aber.
Weil man oft ja auch Suchmaschinen irgendwie verwendet von Python aus
oder halt ab und zu auch mal Suchmaschinen in Python implementiert.
Meiner Ansicht nach implementiert man viel zu wenig Suchmaschinen,
es sind viel zu wenig Volltext-Suchmaschinen in Python implementiert.
Schniff, aber so ist es halt.
Aber zumindest, dass man die irgendwie ansprechen muss
und dann irgendwas mit den Ergebnissen macht,
das hat man ja relativ oft. Welche, was sind denn
Suchmaschinen? Musst du erstmal Beispiele geben von Volltextus-Maschinen,
die vielleicht man kennt oder auch nicht, oder?
Also, da gibt's
halt unterschiedliche, ja, es gibt natürlich
die große, das große Google,
die allwissende Müllhalde, die wir alle
kennen, vielleicht
mit den entsprechenden Vorgängern, so weiß ich
nicht, Excite, Alta Vista, Hotbot.
Ach, Alta Vista, das waren noch Zeiten.
Ja.
Und
das sind halt schon relativ fortgeschrittene
Dinger, also gerade Google ist halt, oder
auch die anderen modernen, die es halt gibt, Bing oder
was gibt es da noch?
Gibt es eigentlich?
Du hast ein Microsoft-Foto erwähnt, erneut.
Die haben aber
immer noch keinen Contract leider bekommen.
Oder
A9 von Amazon,
wo auch einer
der Experten,
Udi Member,
hat da lange...
Also ja, also die Dinger sind halt
relativ fortgeschritten und haben halt,
sind halt relativ einfach gestartet.
Es gibt das Ganze jetzt auch als Open-Source-Software, die man verwenden kann. Oder es gibt kommerzielle Software, die das macht. Wobei ich denke, dass heutzutage wahrscheinlich die allermeisten irgendwas Open-Source-mäßiges verwenden werden, wenn sie das denn jetzt selber haben wollen für ihre Webseite zum Beispiel.
Also das ist, denke ich, ein ganz häufiger Anwendungsfall, dass du halt eine Webseite hast und möchtest halt eine Suchfunktionalität anbieten. Und ja, dann muss das halt irgendwie irgendwo passieren.
Und das, was da sozusagen der Platzhirsch ist, ist eine Java-Bibliothek namens Lucene.
Das ist von Doug Cutting geschrieben worden.
Der hat damit angefangen 1997 oder so.
Der hat irgendwie mal gearbeitet bei Excite, meine ich.
Und hat dann irgendwann, da habe ich irgendwo mal einen Talk gehört, hat er so, ja, das war so 97, da hat er so das Gefühl, die Dotcom-Bubble, die platzt jetzt demnächst.
Hat noch ein bisschen gedauert, aber war gar nicht so schlecht. Und man hat sich dann sozusagen einen Teil der Woche, ich weiß nicht, ein oder zwei Tage Homeoffice setzen lassen und dann an eben der neuen Suchmaschine gebastelt.
Und als dann Exide tatsächlich irgendwie so ein bisschen die Ohren angelegt hat, hat er das halt dann Open-Source, eine Open-Source-Geschichte überführt, auch da ohne groß drüber nachzudenken, was man da jetzt macht.
Er hatte, glaube ich, die erste Version sogar irgendwie unter der GPL, weil er dachte, naja gut, wenn man Open-Source macht, macht man halt GPL veröffentlicht. Das war aber dann nicht so cool. Leute haben sich beschwert, dass sie das dann nicht so richtig verwenden können und so.
Und darauf ist auch, dass die Apache Software Foundation
hat gerade angefangen, irgendwie dann so unter ihrem Schirm
Projekte aufzunehmen und denen so ein bisschen Struktur zu geben.
Und weil man das ja noch nie gemacht hat,
weiß man ja nicht genau, was man da alles machen muss.
Mailing-Listen und wie organisiert man diese ganze Entwicklungsgeschichte überhaupt.
Und er ist dann irgendwie mit dem Lucene-Projekt
dann da unter diesen Apache-Schirm der Apache Software Foundation gekommen,
hat dann auch die Apache-License übernommen
und er meinte, seitdem hat sich nie wieder
jemand über die Lizenz beschwert und es funktioniert.
Also es ist halt eine sehr liberale Lizenz, so
PSD-artig, MIT-artig.
Lizenz müssen wir auch nochmal neu entdecken.
Aber im Grunde heißt,
kann man mehr oder weniger machen, was man
will und
ja, halt auch im kommerziellen
Kontext verwenden oder in
Software, die man halt irgendwo hinschippt. Das ging jetzt mit
der GPL zum Beispiel eher nicht.
Ja.
Und dann ist
diese Bibliothek relativ erfolgreich.
geworden und heute ist das halt
das Ding, was alle verwenden und
eigentlich das Ding, was unter
allen bekannten
Suchmaschinen,
Open-Source-Suchmaschinen-Implementationen irgendwie darunter
liegt. Also die beiden größten Dinge,
die man heute so kennt, sind halt
Solar und Elasticsearch.
Ja, und das Spice-Lucin.
Man kann das auch
aus Python heraus direkt verwenden,
mit PyLucin,
aber das ist so ein bisschen eklig. Also das ist
halt, das macht
halt direkt eine Anbindung an
Java und
Hört sich komisch an. Ja, also
geht schon, aber will man vielleicht auch nicht verwenden.
Eher ist wahrscheinlich die
richtige Art, wo man das dann
trennt, irgendwie eine API oder so.
Und das machen Solr und Elasticsearch auch so.
Also meistens hast du dann
Elasticsearch oder Solr, vielleicht
Solr Cloud auf irgendeinem Cluster laufen oder weiß nicht
und auf deinem Hadoop-Cluster
am besten. Und dann connectest du
dahin und stellst
da deine Suchquerys
an Fragen.
Ja, genau, so sieht es halt
momentan aus, aber
das ist natürlich, also okay,
es ist das Verbreitetste, das, was irgendwie alle, die meisten
Leute verwenden, ist aber nicht das Einzige. Es gibt noch
eine Menge andere Dinge und andere
Software, die das halt auch kann.
Andere
Open-Source-Soupmaschinen
wären sowas wie, es gibt noch
Xapien, obwohl ich weiß nicht, ob es das tatsächlich noch gibt,
Das war irgendwas in C++, glaube ich, nicht mehr relevant.
Sphinx gibt es noch.
Das ist insofern ganz halbwegs relevant noch,
weil es halt eine enge Verbindung zu MySQL hat.
Und da gibt es halt irgendwie eine...
Heißt das MariaDB?
Oder genau, wenn man heute MySQL sagt,
dann meint man eigentlich immer MariaDB.
Und da gibt es halt irgendwie relativ ausgefuchste Mechanismen,
wie man das halt ineinander integriert.
Und halt, wenn man die eingebaute Volltextsuche von MySQL
nicht mehr verwenden will oder wenn man da rausgewachsen ist,
dann kann man da irgendwie relativ leicht zwingend dran bauen.
Ja, ähm...
Ja, da musst du gleich noch ein bisschen mehr zu sagen.
Also diese Architektur, also wenn du sagst, man hackt das jetzt einfach
so mal eben kurz in einen Hadoop,
ich sag mal, auf was bitte ist denn das,
und was das dann überhaupt macht, wo die
Dokumente liegen und wie das dann überhaupt
so richtig funktioniert und so, das...
Ja, äh, genau,
genau, genau.
Ich überlege gerade, ach genau, es gibt eine
in Python implementierte
Volltext-Suchmaschine
namens Woosh.
Woosh.
Die sich auch
sehr stark an Lucene irgendwie so von der
Struktur intern anlehnt, aber
ist halt in Python geschrieben, ist nicht so schnell,
alles ein bisschen langsam, aber
kann man auch mal benutzen, ist irgendwie ganz nett
und dann, also lass mal überlegen, gibt es noch
irgendwas, was Volltext-Suche kann, was ich jetzt,
also was das irgendwie offiziell
hauptsächlich
tut und was ich noch nicht genannt habe.
Ja, also wenn jemandem noch was
einfällt.
Und dann gibt's
halt noch Volltext-Such
Features in den meisten Datenbanken.
Und das ist natürlich auch nett, weil
meistens hat man ja
eh die Daten, in denen man
irgendwas sucht, sowieso schon in der Datenbank
liegen. Und eben wenn man
sowas wie Elasticsearch-Tooler oder so
verwenden, dann muss man halt irgendwie die Daten
aus der Datenbank da reinkriegen. Und
wenn man jetzt
ein Suchergebnis bekommt von denen, dann muss man irgendwie wieder
zur Datenbank und dann nochmal wieder andere Informationen
nachher ausholen. Das ist so ein bisschen
umständlich. Das ist ja eigentlich schön, wenn das direkt
in der Datenbank drin wäre. Und ja, die meisten
Datenbanken bieten da halt auch
Geschichten, wobei
das halt unterschiedlich
fertig oder unterschiedlich
komplett
Feature-Set ist.
Postgres hat relativ viel
Volltext-Fähigkeiten.
SQLite hat relativ
viel. Das ist auch sehr, sehr interessant.
MySQL hat nicht so
ganz so viele.
Aber so ein bisschen was geht auf jeden Fall
auch.
Ja, und
das ist auch,
also ehrlich gesagt,
was ich präferieren würde momentan,
gerade wenn man anfängt, dann lässt man das eher
die Daten machen.
Dann fängt man nicht
damit an, direkt irgendwie ein Elasticsearch
daneben zu stellen.
Ab wann macht man das? Ab welcher Größe oder welches Suchvolumen geht es da?
Das kann man so schwer beantworten.
Also, aber...
Weil meine Postcards jetzt auf 0,x mehr
die Antwort auf meine Frage geben können.
Genau, dann ist es...
Das heißt, ich bräuchte schon ein Dokumentenarchiv,
was ich irgendwo hinlege mit
mehreren hunderttausend Dokumenten,
durch die ich jetzt durchiterieren
müsste bei der Suche,
um zu finden, was es da so gibt.
Und da muss dann ein
Lusin
drauf springen, damit es
da noch einigermaßen performant
die Ergebnisse rausbekommt.
Ne, das ist auch, also
ich würde eher
sowas sagen, es hängt halt von der Maschine auch ab.
Also wenn, sobald
was halt in Postgres relativ schnell
relativ groß wird, sind halt die Indizes.
Also super optimal
sind die halt nicht. Also
da ist schon einiges optimiert, aber
die werden halt relativ schnell relativ groß und wenn die
zum Beispiel so groß sind, dass sie nicht mehr in den Hauptspeicher passen, dann
haben wir ein Problem.
Und das geht wahrscheinlich
dann mit Leasiden oder beziehungsweise halt
Solar Cloud oder Elasticsearch
oder so dann besser, aber da ist man schon bei
wirklich vielen, vielen Dokumenten wahrscheinlich.
Wie viele Hauptspeicher hat man denn dann, die man braucht,
für welche Dokumentengröße hast du da so Werte?
Ne, weiß ich nicht, aber
keine Ahnung, kann sein,
also kommt halt auch drauf an, wie groß die Dokumente
sind, aber
ich meine, heutige Datenbanken haben viele Hauptspeicher
Und bis man da irgendwie, also ich weiß nicht, wie oft ich einen Volltext-Index gesehen habe, der größer als ein paar Gigabyte war, das kommt jetzt gar nicht so oft vor, selbst wenn du Millionen Dokumente hast. Also es ist, glaube ich, nicht so oft, dass einem das sofort auf den Fuß fällt, sondern wenn man das Problem bekommt, dann…
Das heißt, mit den neuen Maschinen, wenn man
dann eine größere Maschine hinstellt, sollte das auch
mit dem Indexieren von Postgres dann
mit 64 GB über mehrere Millionen Dokumente
auch ein Problem sein.
Auf jeden Fall.
Und ja.
Genau, es gibt dann noch einen interessanten,
es gibt noch ein Ding, SomboDB oder so
ist das, glaube ich.
Ich habe es noch nicht verwendet. Da kann man dann auch
das direkt in die Datenbank integrieren, sodass man
halt nur die Anfrage an die Datenbank
stellt und die dann halt
weil man ja kann auch Plugins
für Postgres und so schreiben, die macht dann halt
eine Anfrage auf irgendwie ein Elasticsearch-Cluster
oder so,
sodass man halt von der Applikationsseite
aus gar nicht merkt, dass man
inzwischen die Suchfunktionalität halt
irgendwie woanders hin ausgelagert hat, was natürlich
auch ganz praktisch wäre. Also es
gibt ja eine ganze Menge Dinge, die man tun kann, aber
ich sag mal, für den Hausgebrauch und für die allermeisten
Webseiten da draußen dürfte
das, was in den Datenbanken
eingebaut ist, schon eher
reichen und ich denke auch
nicht, dass das wirklich das ist, wo die meisten
Probleme kriegen. Die meisten Leute kriegen nicht
sofort Probleme mit der Skalierung,
sondern eher bei so
grundsätzlichen Fragestellungen
und das ist auch...
Was sind grundsätzliche Fragestellungen?
Ja, also zum Beispiel
wie macht man das
jetzt eigentlich, wenn man eine Suchmaske
auf einer Webseite hat?
Wie geht das mit der Relevanz?
Wie kriege ich das eigentlich raus, ob da
gute Ergebnisse kommen?
Wie mache ich das? Und da ist
auch leider die Antwort,
es hängt davon ab und das ist je nach
Anwendungsfall sehr unterschiedlich.
Okay, jetzt wird es interessant.
Also ich möchte suchen, auch ranken,
das heißt die Trefferquote
erhöhen, die Wahrscheinlichkeit, dass das
Dokument dem entspricht, was ich gerade
haben möchte. Genau, wenn Leute
da irgendwas eingeben, irgendeine Query eingeben,
dann möchtest du, dass sie halt normalerweise oder dass sie
halt in möglichst vielen Fällen halt irgendwie relevante
Ergebnisse haben.
Ja, okay. Und wie das funktioniert,
Das ist natürlich jetzt sehr spannend.
Ja, also
wie, ich weiß nicht,
also wie so ein Index funktioniert,
das halt im Grunde, wenn ich mir vorstelle,
das wäre jetzt eine,
ich hätte jetzt eben
dieses Buch mit dem Index hinten drin und ich würde
jetzt wissen wollen, okay,
wo kommt denn das Wort,
was könnte ich denn für ein Wort nehmen?
Keyword.
Keyword und Python.
Und Python, ja, wo kommt denn das überall vor?
und ich hätte gerne alle Seiten, auf denen das vorkommt,
dann gehe ich einfach in den Index,
suche halt das Wort Keyword,
nehme die Seiten, die Nummern,
packe das in ein Set
und nehme das gleiche Set der Seiten von Python.
Und jetzt kann ich da halt zwei Dinge machen.
Ich könnte es entweder schneiden,
ich könnte sagen, ich hätte gerne alle Seiten,
in denen beides vorkommt,
also die Schnittmenge der beiden Mengen.
oder ich könnte sagen, ich nehme die Vereinigung,
also entweder das,
wo Python drin vorkommt oder wo Keyword
drin vorkommt, die Seiten hätte ich gerne und kriege dann einfach
alle. Und das ist ja auch das, was
man sozusagen in, ich glaube, Google hat da
eine Syntax für, das ist übrigens auch bei Postgres,
kann man
die Syntax, die Google verwendet,
TS2,
wie heißt das, 2Query,
irgendwas, 2WebQuery, ach, ich weiß nicht mehr, wie die
Postgres-Funktion heißt, die übergibt man einfach
diesen Query-String, den man bekommen hat und dann
macht die daraus eine Anfrage
nach der gleichen
Logik, sodass man halt auch und oder
oder verwenden kann.
Ja, und
genau, das ist
eigentlich im Grunde das, was halt so eine Suchmaschine macht.
Das Problem ist jetzt natürlich,
die Seiten, wie auch immer man die jetzt
bekommen hat, ob man die Mengen
vereinigt oder geschnitten hat,
man hat jetzt noch keine Reihenfolge
der Seiten irgendwie.
Und die Frage wäre halt, wie rechnet man
die aus? Und das, was halt so
von immer gemacht wird.
Zählen, absolute Zahl,
sortieren.
Kann man und könnte man auch machen.
Aber das, was halt schon
was normalerweise
immer so für Scoring
Ranking verwendet wird, ist halt
TF-IDF. Das hatten wir, glaube ich, auch schon ein paar Mal.
Das ist halt einfach
die Query wird halt in
ein
TF-IDF-Vektor verwandelt
und sozusagen
die
Also außer Leute, die davon schon
Ahnung haben, hat das jetzt niemand verstanden, deswegen musst
du noch mal kurz erklären, was das denn überhaupt ist.
TF-IDF ist Term Frequency
mal Inverse Document Frequency
und das legt sozusagen
Gewichte fest für die
Tokens,
also die Wörter aus deiner Quelle für
Keyword und für Python jetzt in unserem Beispielfall.
Ja. Und
ja, das ist
halt, ich weiß nicht genau, ob man genau
erklären muss, wie das ausgerechnet wird.
Also
Termfrequenz wäre halt sozusagen
auf dieses
Seitenbeispiel übertragen,
wie ist die Frequenz von dem Wort
Python zum Beispiel auf dieser Seite? Das heißt,
ich zähle, wie oft Python
auf der Seite vorkommt und teile das durch die
Anzahl aller Worte auf der
Seite. Dann weiß ich halt, wie viel Prozent der Worte auf dieser
Seite sind halt Python. Das ist die Termfrequenz.
Und multipliziere das mit der Inverse Document Frequency.
Das ist halt sozusagen, in wie vielen Seiten kommt denn dieses Wort überhaupt vor?
Ein Maß dafür.
Und je weniger das vorkommt, desto höher ist die Inverse Document Frequency.
Und desto charakteristischer ist das Wort im Grunde.
Für das, was da gerade steht.
Ja, genau.
Das heißt, du weißt ziemlich genau, wenn das hoch ist auf diesem Abschnitt, geht es tatsächlich jetzt um Preisen und es wird nicht irgendwie nur als Seitenkommentar mal kurz erwähnt oder als...
Genau, also Artikel sind halt so ein Beispiel für Sachen, also der, die das, das kommt halt auf jeder Seite vor.
Ja, okay, Stopwatch.
Daher ist es halt einfach nicht so relevant, weil Adverse Document Frequency davon wäre halt sehr, sehr niedrig, weil, naja, es kommt halt überall vor.
Das heißt, jetzt multipliziere ich diese beiden Teile.
Also einmal, wie oft kommt das Wort auf der Seite vor?
Wie wichtig ist das üblicherweise oder wie charakteristisch ist das?
Und das Ergebnis ist halt sozusagen ein Maß dafür,
dass also Worte, die wenig vorkommen oder sehr charakteristisch sind,
aber sehr oft vorkommen, sind halt viel wichtiger als Worte,
die überhaupt nicht charakteristisch sind, weil sie überall vorkommen.
Also der Didast ist halt, die kriegen halt sehr niedrige Gewichte
und Worte, die halt sehr spezifisch sind,
die kriegen halt sehr hohe Gewichte.
Und das macht man jetzt auch mit der Query und macht das auch
nochmal mit allen Seiten sozusagen
und dann multipliziert man das
miteinander. Also die
Kursindustanz. Das heißt, man muss halt tatsächlich genau
diese Dinge bilden oder bauen
für jeden einzelnen Text
Baustein, den man untersuchen möchte.
Ja, man muss da gar nicht so viel
machen. Tatsächlich, also das
Bauen der Listen, in welchen Dokumenten
welches Wort vorkommt, ist halt eigentlich das, was man
hauptsächlich tut, wenn man
einen Index baut. Diese ganzen
Geschichten, wie oft kommt das Wort jetzt wo vor und
das speichert man auch in dem Index,
aber das ist eigentlich nicht so schlimm.
Das geht eigentlich relativ einfach.
Am Schluss hat man diese ganzen Informationen, auch die Texte
nicht mehr, sondern man kann halt sozusagen
aus dem, was man im Index stehen hat, plus
der Query halt diese ganzen Sachen ausrechnen.
Okay. Du hast irgendwas über den
Cousinus-Distanz. Ja, genau. Wenn ich jetzt
zwei Vektoren habe, dann ist die Cousinus-Distanz
dazwischen einfach nur
der Winkel, also der Cousinus des Winkels
zwischen den beiden Vektoren. Also jetzt
noch mal kurz, also der Vektor ist tatsächlich dann
die Informationen darüber, auf
welchen Seiten wie viel Information über
das gesuchte Wort Python oder Keyword steht.
Ja, also
die Gewichte sind jetzt sozusagen die Werte
in dem Vektor und
können halt niedriger oder höher sein.
Das wird immer normiert
auf, die Vektoren werden immer normiert auf
1, auf eine Länge 1,
sozusagen.
Und der Anteil von einem Wort, das halt
wichtig ist, ist halt dann einfach höher als von Worten,
die nicht so wichtig sind.
Man normiert auch deswegen damit halt längere
Vektoren nicht einen Vorteil haben.
Wenn du das nicht normieren würdest,
dann würden Seiten, auf denen viele
Worte stehen oder Dokumente, die halt sehr, sehr lang
sind, würden halt viel relevanter bei
vielen Sucherabfragen sein, einfach weil die halt
auch viel mehr Sachen matchen.
Daher normiert man
das halt auf eine Einheitslänge, sodass
dann, wenn ein Dokument sehr lang ist,
kriegen die einzelnen Worte halt weniger
Gewicht.
Und ja,
dann wird das halt vergleichbar.
Und
Und ja, also im Grunde ist das eben relativ einfach.
Also diese TFE-DF-Distanz ist halt nichts weiter als der Cosinus
zwischen dem Winkel der beiden Vektoren.
Und das klingt jetzt auch irgendwie kompliziert.
Tatsächlich ist es so, es ist halt super einfach auszurechnen,
weil das ist einfach nur das Skalarprodukt der Vektoren.
Und das wiederum ist super einfach auszurechnen.
Also dieser Vektorraum, in dem diese Operationen stattfinden,
wenn man jetzt sozusagen jedem Wort eine Dimension zuordnet,
Texte, also
wenn man jetzt ein Dokument-Korpus nimmt, ganz viele Dokumente,
dann kann es sein, dass da so ein paar
10.000 Wörter drin vorkommen oder
vielleicht, wenn man jetzt, also vielleicht auch ein paar 100.000,
also, und man
hat jetzt sozusagen für jedes Wort eine Dimension,
dann
klingt das irgendwie alles ganz
schrecklich. Man sagt, ein 100.000-dimensionaler Vektorraum
ist ja irgendwie schwer vorzustellen und dann
daran irgendwie Winkel, uh, was soll denn das
sein? Aber eigentlich
ist es halt total blöd,
einfach, weil das Schöne daran ist,
oder das ist der Grund, warum man das macht, ist,
ein Skalarprodukt an der Stelle ist halt, wenn das
so sparsam ist, also die meisten Worte kommen ja in den meisten
Texten gar nicht vor. Das heißt, wenn ich
einen Dokumentfaktor habe, dann
ist der an den allermeisten Stellen null.
Und alle Dinge, die null sind,
die muss ich mir beim Skalarprodukt gar nicht angucken.
Wenn irgendwas multipliziert wird,
wo eine Null drin ist, dann ist es ja sofort auch wieder null.
Könnt ihr das nochmal nachrechnen, bitte?
Ja, das heißt, die Rechneroperation
ist halt, ich gehe durch jedes
Ding in der Query
ja, also nur durch die, die gesetzt sind, das sind ja
meist nur zwei, drei Worte und guckt
dann, existiert im Index
dafür
Seiten, auf denen das vorkommt
und das war es, mehr muss ich nicht machen
und damit habe ich ja schon sozusagen
alle, wo ich überhaupt ein Skalarprodukt ausrechnen kann
gefunden
und
jetzt muss ich nur noch ein paar
andere statistische Werte haben, um das halt wirklich
ausrechnen zu können und das ist halt
eine total einfache
Operation, also das ist halt
weißt du, welche anderen statistischen
Werte du jetzt noch haben möchtest zum
eigentlichen Ranken?
Naja,
tatsächlich müsste man wahrscheinlich noch
an jedem,
also die Dinger im Index heißt dann
Postinglisten, dann müsste man wahrscheinlich noch irgendwie den
TF-EDF-Wert tatsächlich, also ich
weiß es ehrlich gesagt nicht, Lucine macht
das, weiß gar nicht, was Lucine da alles speichert,
sie speichert noch ein paar andere Sachen.
Ich würde sagen,
einen TF-EDF-Wert braucht man vielleicht,
also eigentlich, ich glaube,
die machen das so, dass sie das auch erst ausrechnen,
wenn die Query kommt.
Aber was das genau ist, weiß ich jetzt auch nicht mehr.
Also man kann das Ganze auch leicht
und naiv implementieren
in Python. Man kann einfach für diese
Posting-Listen, das sind sozusagen die
Listen der Seiten, auf denen irgendwas
vorkommt oder die IDs der Dokumente,
die packt man einfach in ein Set
und indizieren
bedeutet einfach nur,
die Dokumente zu tokenisieren
Und dann für jedes Token sozusagen einen Eintrag mit der ID des Dokuments in die Posting-Liste zu tun. Posting-Liste, so heißt es im Allgemeinen, aber in unserem Fall wäre das jetzt, wenn man jetzt sozusagen als Datenstruktur dafür Sets nehmen würde, Sets und dann kannst du halt hinterher, wenn eine Query kommt, irgendwie genau das machen, kannst halt irgendwie Schnittmenge und Vereinigungsmenge bilden, je nachdem, ob du deine Query mit AND oder OR verknüpfen willst.
Ja, kriegst damit schon mal was raus und kannst halt auch, wenn du jetzt die TF-IDF-Werte noch mitgespeichert hast, kannst du auch einfach die Cuisinassistenz ausrechnen und hast dann schon im Grunde das implementiert, was eine Suchmaschine so tut. Das geht wahrscheinlich in 30 Zeilen Python oder sowas.
Ja, wir lieben keinen.
Also das geht relativ einfach, denke ich mal.
Und ich habe es mit Sets auch schon mal ausprobiert,
das ist auch ziemlich schnell.
Das, was an Sets ein bisschen doof ist,
deswegen macht man das auch dann tatsächlich,
wenn man jetzt eine Suchmaschine implementiert, nicht so,
ist, dass die halt sehr, sehr viel Hauptspeicher verbrauchen.
Und überhaupt, man muss natürlich alles,
wenn man so ein Python-Set hat, muss man es im Hauptspeicher halten,
Weil, naja, es ist halt eben keine Datenstruktur, die irgendwie auf der Platte liegen kann. Während jetzt ein Lucid-Index ist ein Ding, das eigentlich auf der Platte liegt. Und das kann halt auch größer als Hauptspeicher werden, das ist gar kein Problem. Und das ist so gebaut, dass das maximal performant ist, wenn Sachen von der Platte auch gelesen werden und so.
und das sind schon einige schöne Tricks dabei.
Aber tatsächlich, wenn man das jetzt einfach so implementieren möchte,
kann man das mit Sets durchaus mal machen.
Was dann die großen Suchmaschinen machen
und weswegen das Ding auch Postinglist heißt,
ist, dass man das eben nicht in einem Set hält,
sondern in einer Liste, die sortiert ist,
sozusagen, wo eben die Dokument-IDs
oder jetzt im Beispiel
Seitenzahlen, die werden halt einfach sortiert
und dann speichert man nicht die Seitenzahlen
selber oder die IDs selber,
sondern man speichert nur die Differenz
dazwischen, weil die Differenzen
zwischen den IDs sind halt viel kleiner.
Und dann macht man etwas
ganz Fieses, das nennt sich Variable-Wide-Encoding.
Aha, schon wieder so ein Zauberwort, ja.
Und das
bedeutet halt, dass du
diese
Nummer, also jetzt in C oder so,
wenn du da jetzt
ein Array hast,
dann müssen ja alle Werte
in dem Array den gleichen Typ haben.
Und
das macht man
halt nicht so, um Platz zu sparen,
sondern man nimmt
einfach üblicherweise
dann Characters, also Byte-mäßige
Dinge. Ich weiß gar nicht, also in C weiß ich jetzt,
es geht. Ich habe aber mal sowas
letztlich mal selber implementiert.
Ja, ja.
Fast Suchmaschine
geschrieben aus Versehen. Aber
ich weiß gar nicht, wie man das in Java oder so macht.
Keine Ahnung.
Geht bestimmt auch irgendwie und
definiert sich die Datenstruktur selber.
Also es ist nicht so, dass man sagt, okay, das sind jetzt
alles Integer-Werte oder so, sondern man sagt,
okay, das ist einfach nur ein Array von Charaktern.
Und wie viel
Bytes ich sozusagen
pro oder wie viel Bit
ich pro
Eintrag in der Posting-Liste
verwende,
das verwalte ich
selber, weil wenn die
Abstände klein sind, dann kann ich viel weniger
Bits nehmen, als wenn die Abstände groß sind, dann muss ich halt
mehr Bits nehmen und
deswegen heißt das Ding auch Variable Byte Encoding,
weil ein Eintrag
in der Posting-Liste halt unterschiedlich viele Bytes
haben kann, je nachdem, wie groß der ist.
Weil wieder Abstand ist zwischen
der vorherigen und der nächsten ID.
Und wenn ich jetzt sortierte Listen habe,
dann kann ich die sehr, sehr gut, da gibt es halt diverse
Algorithmen für, kann ich sehr gut schneiden
zum Beispiel. Solche Operationen wie
Schnittmenge davon bilden, das geht halt toll.
Geht mit Sets auch, aber Sets
können ja noch viel mehr und so.
Aber da brauche ich ja eigentlich nur
diese Schnittoperation, Vereinigung ist auch
total simpel. Und das geht halt
super, wenn ich so sortierte Listen habe.
Ja, und
genau,
das ist halt auch, das ist relativ
schnell, das ist vor allen Dingen auch deswegen schnell,
also die Kompression an der
Stelle, die ich dadurch kriege, also ich
kriege das auf ein Drittel des ursprünglichen, also wenn ich das einfach nur
als Integer speichern würde,
dann brauche ich, ja,
sagen wir mal, ich brauche einen Speicher 1,
und wenn ich das irgendwie variable
mit Variable Byte Encoding kodiere,
dann brauche ich halt nur noch Speicher 0,3,
also das reduziert das halt auf ein Drittel
und es ist auch noch viel
schneller. Und der Grund, warum es viel schneller ist, ist halt
einfach, dass das Bottleneck
ist halt irgendwie,
dass durch die CPU, also die
Speicherbandbreite ist das Problem. Du musst es halt irgendwie,
diese Listen von Arrays musst du halt irgendwie
durch die CPU kriegen und irgendwie durch den Hauptspeicher
und wenn die kleiner sind, dann geht das schneller durch den
Hauptspeicher oder durch den Bus,
weil, ja, und das
in der CPU dann auszupacken und
miteinander, das ist alles kein Problem mehr.
Aber
ja, das halt aus dem Hauptspeicher
durch die CPU zu quetschen, das ist halt das Problem.
und wenn das kleiner ist, dann geht das halt schneller,
weil du hast halt nur so und so viel
100 oder so und so viel
Gigabyte pro Sekunde, die du da durchkriegst.
Und
ja,
genau, deswegen macht man das so,
das macht das Ganze so ein bisschen kompliziert,
aber
ja,
und auch selbst so
von dem Volltextindex von
Postgres weiß ich, dass er das auch so macht, im Prinzip.
Also solche Sachen werden da auch schon gemacht,
also kann man sich schon vorstellen, es ist schon relativ
ist halt nicht so eine
total naive Implementation. Das ist auch ganz schön
optimiert schon.
Ja.
Jetzt haben wir eine schnelle Suchanfrage
schon, aber ich habe immer noch nicht genau verstanden,
warum
die Ergebnisse jetzt besonders toll sein
sollen. Es gibt bestimmt noch ganz viele andere.
Die FS oder der Standard,
das hat man ganz lange gemacht, jetzt heutzutage
auch nicht mehr, sondern heutzutage
nimmt man eher sowas wie,
Also es gibt halt zum Beispiel Track-Konferenzen.
Track, das hört sich nach einer Raumschiff-Serie an.
Ja, wird eher mit C geschrieben und nicht mit K.
Da haben sich Leute halt Gedanken darüber gemacht,
wie evaluiert man eigentlich Suchergebnis-Performance
von Suchmaschinen.
Da gibt es dann diverse Standard-Corpora mit Dokumenten drin,
wo man dann halt auch Standard-Querys halt immer drauf abfeuert
und guckt halt, wie sind die Ergebnisse und so.
Und da hat sich irgendwann, ich weiß gar nicht, wann das, also TF-IDF hat man lange benutzt, aber dann hat man festgestellt, so kleine Multiplikationen, also die Formeln, es sieht immer so ein bisschen ähnlich aus, aber manchmal passt man die so ein bisschen an.
Manchmal kommen so konstante Faktoren dazu oder so, die man irgendwo reinbaut und dann werden die Ergebnisse ein bisschen besser.
Und das, was momentan, also man hat
ganz viele unterschiedliche gegeneinander getestet,
das, was in den meisten Fällen
gut funktioniert und das, was jetzt auch alle so als
Standard, glaube ich, verwenden,
nennt sich BM25.
BM25? Ja.
Oder OKAPI.
BM steht für Best Match.
Ja.
OKAPI. Ja.
Ja. Das ist, glaube ich,
ein Tier. Ja, genau.
Daher kommt das auch.
Entschuldigung.
das ist nicht
großartig anders als TF-EDF
sozusagen Standard-Mercedes, so ein paar
Dinge sind halt noch dran,
eigentlich sind da nur so ein paar magische Konstanten
und Faktoren drin
und
ja, das ist halt so ein bisschen
Fummelei und ist auch nicht
offensichtlich, warum das jetzt genau dieser Art
besser funktioniert als die anderen, deswegen heißt es
und genau deswegen ist es auch BM25
also man hat halt ganz viele Dinge ausprobiert
und das, was dann halt über ganz viele
Datasets hinweg
und Query-Sets am besten funktioniert hat,
ist halt dieses Ding. Nämlich nicht
BestMatch 13 oder 47,
sondern BestMatch 25 hat sich
herausgestellt. Also das funktioniert in den meisten Fällen
irgendwie ganz gut. Das ist doch eine tolle Zahl übrigens.
Also man konnte
das vorher gar nicht sagen, was das jetzt, welches
von denen dann wirklich gut funktionieren würde und
dieses Ding ist halt das. Und seitdem das
in dieser Konferenz
halt dann auf das Ergebnis
rausgefallen ist. Guckst du eigentlich PK?
die Serie. Ja, ist das eine neue Star Trek Serie?
Ja, tatsächlich habe ich jetzt auch mit
angefangen, weil ich dachte, so gut. Ich habe auch schon
zwei Folgen geschafft. Ja, es gibt
jetzt fünf, glaube ich. Kann sein.
Ich habe keine Ahnung. Ja,
jetzt war jetzt ein verregneter Sonntag.
Da haben wir, glaube ich, tatsächlich alle
geschafft. Cool. Ja, läuft gerade auf Prime.
Sehr schön. Ja, Entschuldigung, ich wollte dich nicht von der
Trek-Konferenz abhalten. Ja, ja.
Also ansonsten bin ich ehrlich gesagt
gar nicht so ein Star Trek-Fan. Aber
ja, da hat mich der Spektakelfaktor
doch irgendwie mitgezogen.
Die flogen
in Flossbach.
Ja, jedenfalls
genau,
also das ist halt dabei rausgefallen, deswegen
implementieren das alle.
Das ist auch schon
über zehn Jahre her oder so, da dachte ich dann so,
da habe ich davon gelesen, BestMatch25,
voll gut, bringt auf jeden Fall noch ein bisschen
was gegenüber TFDF und so.
Dazu kann man das nicht in Lusine einbauen.
Und dann habe ich da so ein bisschen reingeguckt und dachte mir so,
oh nein, das geht nicht.
Ich muss so viele Klassen anfassen,
das kann man einfach völlig vergessen.
Und war relativ enttäuscht
und habe mir damals schon gedacht,
Lysin, Dreck.
So ein Unsinn.
Aber mittlerweile haben das andere Leute,
haben das implementiert.
Die hatten mehr Lust da drauf.
Mehr Ausdauer und jetzt ist es halt drin
und es funktioniert und das ist auch das,
was man, glaube ich, automatisch irgendwie kriegt als Default.
Wie M420.
Was war denn damals bei den ersten Suchmaschinen?
Also Alta Vista zum Beispiel war ja so
mit, wann war das die erste? TFEDF.
Ja, oder leichte Abwandlung davon, aber
im Wesentlichen das.
Das ist auch das, was irgendwie so ein bisschen
diese ersten SEO
Geschichten getrieben
hat.
Wo Leute dann so angefangen haben,
alle möglichen Worte mit in ihre
Seiten zu packen,
für die sie gefunden werden wollen.
Weil das zielt natürlich genau darauf ab,
halt irgendwie den TFEDF,
den TF-IDF-Wert hoch zu...
Und das funktioniert ja auch. Also wenn du es ganz naiv machst,
kannst du damit tatsächlich irgendwie
dann für alles Mögliche gut ranken.
Das lässt sich halt sehr leicht
gamen. Aber
ja,
funktioniert heute natürlich alles nicht mehr so richtig toll.
Und dann wird du gestraft.
Ja, ja, ja.
Ja, das ist auch noch so ein
Thema.
Aber
genau, also diese... Aber daran sieht man
schon, dass es mit der Relevanz irgendwie nicht so einfach ist,
dass die ganzen Suchmaschinen haben das
auch nicht so richtig
hingekriegt. Und die erste, die das halt so ein bisschen
was fundamental Besseres gemacht hat an der Stelle,
die hat halt alle anderen dann
wie sagt man das,
aus dem Wasser geblasen.
Ja,
hinter sich gelassen und ist jetzt halt
irgendwie die Größte.
Ich musste mir gerade so ein großes Nie-Pferd vorstellen,
das einmal in die Badewanne hüpft.
Ja, genau.
Ja, weil eben
so ein einzelner Wert
ist halt problematisch.
Leute fangen an, dann drauf zu optimieren
und dann ist auch die Frage,
was für Leute oder was für Fragen
stellen die Leute eigentlich und kann man das
eigentlich damit abbilden? Ist der Wert,
so ein TF-EDF-Kursinus-Distanzwert,
ist der für alle Arten von Suchanfragen
und Dokumenten immer das Richtige? Und da ist
auch die Antwort relativ klar, nein.
Ist nicht so. Also, und das
ist halt etwas, was Leute, glaube ich, oft
nicht so wirklich auf dem Schirm
haben, dass
ihr Problem oft
nicht ist, irgendwie
eine etwas bessere
TF-IDF-Formel zu finden oder
irgendwie was Magisches,
was irgendwie anders die Relevanz gut macht,
dann plötzlich magisch, sondern dass
eigentlich die Zeit besser investiert
wäre, sich zu überlegen, okay, was
habe ich eigentlich für Dokumente, was habe ich eigentlich für Suchanfragen
da drauf und was kann ich tun,
um das irgendwie zu verbessern und da gibt es auch
viele Dinge, die man machen kann, aber das sind
je nachdem, was man für ein Problem hat, sehr unterschiedliche
Sachen. Zum Beispiel,
aber ich meine,
vielleicht kann ich einfach ein paar Beispiele dafür nennen, warum das
halt,
also TF-IDF, wenn ich jetzt
zum Beispiel Location-Informationen dabei
habe, hilft mir halt nicht so richtig viel. Also ich suche nach
einem Restaurantnamen irgendwie
bei Google Maps
oder so. Dann hilft
es mir nichts, wenn ich jetzt TF-IDF
die nächsten Namen
irgendwie kriege von allen
Restaurants in Deutschland oder weltweit
sortiert, dann wird wahrscheinlich irgendwo
ein Restaurant in Kuala Lumpur
vielleicht irgendwie am ähnlichsten sein oder den besten
Score haben, aber das hilft mir ja nichts, weil
ich komme da ja gar nicht hin. Das heißt,
da muss irgendwie die Information, wo ich bin
und wie nah das an mir dran
ist, ja auch irgendwie mit rein.
Sonst geht das
bestimmt nicht so toll.
Oder halt, wenn ich
jetzt
eine E-Commerce
Seite habe oder
eine Hotelbuchungsgeschichte oder was auch immer, etwas, wo
halt hinterher Leute dann was
kaufen oder was buchen oder so,
dann kriege ich ja eine ganze Menge
implizite Informationen darüber, was die Leute
relevant gefunden haben zu einer Query.
Also wenn jetzt jemand nach irgendwie, keine Ahnung,
samtbezogene
Sessel Amsterdam
gesucht hat oder sowas
und dann hinterher irgendein Hotelsversuch hat,
dann weiß ich halt,
das ist wahrscheinlich relevant gewesen für diese
Suchanfrage und diese Information kann
ich natürlich auch wieder irgendwie
mitverwenden, um das
beim nächsten Mal, wenn jemand anders so eine Anfrage
stellt, das zu verbessern.
Aber auch da hilft mir halt TF-IDF gar nicht.
Cookies.
Cookie hilft mir auch nicht. Stehen die Informationen, kann man
die dann nicht in sowas reinschreiben und die dann irgendwie beim nächsten Mal
wiederverhelfen? Oder geht es tatsächlich darum, dass die
Informationen über diesen einen Menschen für
alle anderen Menschen zu manipulieren?
Ja, also
genau, es geht nicht um die
einzelne Geschichte, aber
ich erfahre sozusagen
über das Verhalten von Leuten
etwas darüber, welche Sachen für
welche Dokumente,
also welches Hotelzimmer, wenn ich jetzt
so eine Hotelbuchungsengine habe oder
welches Produkt irgendwie, wenn ich
einen E-Commerce-Leiter habe, relevant
war für eine bestimmte Suchanfrage, weil wenn jemand das
sucht und dann kauft, dann war es wahrscheinlich relevant.
Es gibt
natürlich auch Ausnahmen, es kann natürlich auch sein, dass
keine Ahnung,
ich nach,
weiß ich nicht, Dörrautomatsuche, ja,
und dann aber so geflasht bin von
dem, was hast du hier,
einem Luftbefeuchter,
den ich irgendwie
sehe im Ergebnis, obwohl er völlig irrelevant
ist und dann darauf klicke und ihn sofort kaufe.
Direkt neben dem goldenen Schieberrad, vielleicht waren die auch zusammen
in einem. Aber so
im Durchschnitt ist es wahrscheinlich so,
wenn Leute was suchen und dann auf irgendwas drauf
klicken, das kaufen, dann war das wahrscheinlich
relevant. Und
die Informationen sozusagen,
wie viele der Leute
oder, das werde
ich jetzt eine neue Suche, jetzt stellt jemand nochmal
die gleiche Query
und jetzt kann ich ja an das Suchergebnis mit ranpappen,
okay, Leute,
die diese Suchanfrage auch gestellt haben,
oder so und so viele haben das gekauft, so und so viele
haben drauf geklickt. Leute, die das gekauft haben,
kauften auch.
Ja, ist nicht so ganz das gleiche,
aber das kann ich auch zum Ranken
benutzen, muss ich ja nicht,
kann ich auch, nur mit TF-IDF hat das
nichts zu tun. Ich muss mir halt
überlegen, wie ich das so kombiniert kriege, dass es da halt
irgendwie auch zum Ranken mitverwendet wird und
Tatsächlich ist es halt meistens so, dass man irgendwie andere Dinge, eben Location, irgendwie kaufen Leute das überhaupt.
Ist das irgendwie interessant?
Gehört das irgendwie zu den Dingen, die momentan irgendwie auf meiner Seite sowieso angefragt werden?
Oder ist das halt irgendwas uraltes oder so?
Diese ganze Information muss ich irgendwie zusammenpacken und das muss irgendwie in die Relevanz mit reinfließen.
und
ja, das macht das Ganze natürlich so ein bisschen
komplizierter, aber wenn man das macht, dann kann man
halt auch durchaus deutlich bessere Ergebnisse
erzielen, vor allen Dingen auch zum Beispiel gegenüber Google
oder so, weil Google kann halt all das
im Grunde nicht machen, weil die wissen halt nicht
genau, was die Leute da eigentlich suchen
es ist halt ein viel breiteres
Ding, es ist halt
sozusagen, im gesamten Web kann ich irgendwas
finden, also Google macht ein
viel schwereres Problem, das heißt
ich kann, wenn ich das richtig mache, in einem
engeren Rahmen halt viel bessere Ergebnisse
unter Umständen erzielen, als
Google das jemals könnte.
Und das kann natürlich sehr interessant sein, unter Umständen.
Aber
ich muss dann halt solche Sachen mir
schon angucken. Es reicht nicht, wenn ich da
irgendeine Elasticsearch nehme, das in der
Default-Konfiguration laufen lasse und dann hoffe,
dass das irgendwie gut wird. So einfach
ist es leider nicht.
Oder was auch total interessant ist, was
Leute oft nicht machen, aber was halt so eine total einfache
Geschichte ist, sich anzugucken,
was für Queries
geben die Leute eigentlich ein
und was sind denn die Queries, wo
kein Ergebnis kommt.
Ich finde das ja sowieso immer total
unverständlich, wenn ich jetzt irgendwie auf
oft
habe ich den Fall, tatsächlich
ich suche
keine Zeit zu kochen, keine Lust oder so,
okay, dann lass uns doch mal irgendwo was
zu essen bestellen
und abholen oder so, okay,
das war ganz gut, gehen wir auf die
auf die Webseite, um zu gucken, hat der Laden
den jetzt auf oder nicht.
Ganz viele Läden kriegen das irgendwie nicht hin,
die Öffnungszeiten drauf zu schreiben.
Und haben aber
vielleicht ein Suchfeld und wenn die Leute da immer Öffnungszeiten
reinschreiben und die nicht finden,
die Öffnungszeiten sind irgendwo versteckt, irgendwo tiefe
Struktur und dann kann man ja auf die Idee kommen, man sucht danach.
Und wenn ich jetzt so eine Seite habe und die Leute
immer Öffnungszeiten reinschreiben
und nie irgendwas finden, dann weiß ich, okay,
hier kann ich vielleicht was verbessern.
Und das ist etwas,
womit relativ leicht man
irgendwie wahrscheinlich viele
Benutzer
besser zufriedenstellen kann
und das wird irgendwie überraschend selten
werden solche Sachen gemacht und man kann natürlich
auch noch dann schummeln und dann sagen,
okay, wenn Öffnungszeiten eingegeben werden, zeig
immer als erstes die Öffnungszeiten an und nicht die Ergebnisse,
die die Suche zurückkommt. Genau.
Also das ist halt so ein bisschen wie
wenn man sich vorstellt, man hat eine Firma
und die hat irgendwie so eine Support
oder ein Helpdesk oder irgendwie eine
Support-Hotline oder so,
dann hat man ja bestimmt auch irgendwie, keine Ahnung,
wenn man einen neuen Mitarbeiter da einarbeitet,
dann setzt man den da hin und sagt dem hier so,
hier ist eine Liste mit den 50 häufigsten Fragen oder Problemen,
mit denen die Leute zu dir kommen werden
und da sind die Antworten da drauf.
Das kann man ja einfach verwenden sozusagen.
Man wird ja nie auf die Idee kommen,
ja, die Leute rufen jetzt an und dann sieh halt mal zu irgendwie.
Dann nimmst du TF-IDF oder dann gehst du an den Aktenschrank hinter dir
und guckst mal, was dabei rauskommt.
Das wird halt nicht gut funktionieren.
Insofern, also die, oft ist es,
man hat immer so Power-Law-Verteilung.
Eine was? Eine Power-Law?
Ja, Power-Law, also
Potenzmengen-Verteilung, ich weiß gar nicht, wie das
deutsche Wort dafür ist.
Dass du, das hat man bei ganz
vielen Sachen, dass halt 20%
der
sozusagen
Such-, also 20% der,
also bei Suchmaschinen wäre das wahrscheinlich,
ich hoffe mal, ich sehe keinen allzu
offensichtlichen Unsinn,
Aber das ist halt, 20% der Queries
machen halt 80% der Suchanfragen aus oder sowas.
Kommt natürlich auch drauf an. Es gibt wahrscheinlich auch so Maschinen,
die sehen ganz viele Queries nur einmal
und dann nie wieder.
Manchmal ist der Tail halt länger
und manchmal ist der Tail auch dicker.
Aber oft ist es so,
dass eine kleine Anzahl von Queries
macht halt schon einen großen Teil der Anfragen, die überhaupt
gestellt werden, aus. Und wenn das halt 100 Stück
sind, dann kann man die sich halt alle mal angucken
und sich überlegen, okay, was könnte man den
Usern, die dauernd diese Anfragen stellen,
dann vielleicht mal zeigen, was sie interessieren könnte.
Und das
hat dann gar nichts mehr mit
was macht eigentlich die
Volltext, was macht eigentlich diese
Software, die Volltextsuche
macht, sondern wie gehe ich mit diesem Problem
irgendwie um auf der Seite. Und natürlich
muss ich dann halt irgendwie eine Art haben, wie ich
sicherstelle, dass wenn ich jetzt
irgendwelche Änderungen mache, dass es nicht kaputt geht beim
nächsten Release und
ich muss es testen und all diese
ätzenden Softwareentwicklungs-
Best Practices und so,
die man halt einhalten sollte, wenn man
irgendwie Dinge programmiert. Aber
wenn man das macht, kriegt man damit auch Ergebnisse, die ganz
gut sind. Also du würdest dann vielleicht
ein Django bauen oder so und dann
einfach an die Suche dann bestimmte
Dinge, Bedingungen knüpfen, wenn das und das
steht, dann machst du irgendeine Liste von
Fragen, denen dann eine Antwort zugeordnet ist und wenn
das kommt, dann wird die direkt ausgespuckt und ansonsten wird
dann die Suchmaschine bedient oder sowas.
Ja, und dann halt nur dann, wenn das
nicht. Und dann geht es halt
sozusagen in eine Suchanfrage und dann wird halt
gerankt nach all den anderen
Dingen, die man halt auch so da hat.
Vielleicht ist sogar ein Modell, das irgendwas rankt.
Aber gut, habe ich jetzt auch noch ein...
Aber halt irgendwas, wo man sich
relativ sicher sein kann, dass
das sinnvoll
ist. Und erst wenn das alles
nicht klappt, dann fällt es
zurück auf sowas wie TF-IDF.
Aber mit TF-IDF anzufangen,
das ist eigentlich
ein...
ja.
Ja, okay, keine gute Idee.
Also du hast gesagt, okay, TFD, das ist das Standard,
was zum Beispiel ein Elasticsearch oder
ein Zola als Standard machen, weil das
ziehen drunter ist, was das irgendwie auch kann, obwohl das
dieses BM25
macht. BM25 ist eigentlich sozusagen das, was dann
wahrscheinlich verwendet wird meistens.
Aber die Unterschiede sind nicht so
groß. Also natürlich macht das in gewisser Weise einen großen
Unterschied. Wenn man jetzt viele Suchanfragen hat
und eine Seite, wo viel Umsatz ist und dann
die Ergebnisse ein Prozent besser werden,
dann ist das ja schon mal super.
Nur dadurch, dass man das halt ausgetauscht hat,
ist das ja
unter Umständen viel Geld, was dann zusätzlich
reinkommt und so.
Aber die Änderungen
an diesen Details, das bringt nicht so
wahnsinnig viel, ein bisschen was.
Änderungen an, man
bezieht jetzt zum Beispiel implizites User
Feedback mit ein, wie zum Beispiel Klicks
oder halt irgendwie
welche Price Range jemand angegeben hat
oder solche Dinge, das bringt halt viel, viel
mehr. Ja, da kann man ganz, ganz viele
tolle Informationen eigentlich sammeln und verwenden.
Da kann man eine richtige Wissenschaft draus machen.
Ich glaube, da sind auch ziemlich viele Marketeers,
die sich mit sowas auseinandersetzen irgendwie.
Die dann irgendwie Interesse dann haben,
wie man das in besser bastelt.
Interessant, ja.
Ja, ja.
Das ist ja auch so ein Thema,
wenn man jetzt selber sozusagen
nicht in der Rolle von einer Suchmaschine ist,
die Leuten irgendwie Sachen finden möchte,
sondern umgekehrt der Rolle des Dokuments,
das gefunden werden möchte, sozusagen.
Also wenn man eine Webseite hat,
die halt über Google zum Beispiel gefunden werden will oder so
und dann hat man dieses SEO-Problem.
Da gibt es ja auch ganz unterschiedliche
Aspekte.
Und auch da ist es halt so, dass
üblicherweise
wird dann halt zu sehr auf die
technischen Aspekte
fokussiert. Und dann wird halt
irgendein Quatsch gemacht, weil der
gerade halt irgendwie Mode ist oder hip oder
wo das Gerücht geht, das kann man jetzt machen
und das ist voll toll. Und dann wird man sofort
bei Google super gerankt.
Und das funktioniert zwei Monate und dann kommt der nächste Patch
und dann ist man down. Und dann werden alle gelöscht.
Alle Ergebnisse, die man vorhat, das ist super.
Also ich habe gehört, Content ist King.
Ja, also Google versucht, also zumindest das Team versucht,
immer auf den besten Content zu optimieren.
Schmeißen alle Sachen raus, die jetzt so Leute ausdenken.
Das heißt, langfristige Strategie wäre tatsächlich,
qualitativen Content aufzustellen, der dann auch gut suchbar ist,
der mit solchen TF-IDF-Sachen vielleicht dann auch irgendwie klarkommt,
aber der dann durch die, also vielleicht haben die einen Qualitäts-Ranker,
der sich irgendwie durch irgendwelche Daten ergibt und den sie dann da mitbauen.
Ja, aber was sie halt machen.
Also Internetsuche ist ja sowieso nochmal was anderes als Volltextsuche, weil man ja da noch andere Dinge mit einbezieht, also die Linkstruktur. Früher war es ja vielleicht immer so, dass man ganz viele Backlinks haben wollte oder sowas, dass man ganz viel gelenkt wurde, weil man auf irgendwelchen Seiten stand und wenn man dann irgendwie dieser zentralste Knoten in diesem Netz war, war man irgendwie der Relevanteste oder so. Und das ist jetzt vielleicht auch noch ein bisschen anders.
Ja, aber das zeigt ja genau, dass halt die reine TF-IDF-Geschichte ist halt nicht unbedingt, das führt halt nicht zu total super Ergebnissen, sondern Google waren halt die Ersten, die mehr Informationen reingenommen haben und ich würde sagen, natürlich, das ist absolut ganz stinknormal, Volltextsuche eigentlich alles, aber Google waren halt die Ersten, die jetzt nicht nur TF-IDF oder irgendwas, eine Variation davon verwendet haben.
Google hat den PageRank eingeführt.
Sondern sie haben einen PageRank, genau.
Was ist denn der PageRank? Das hat gar nichts mit Seiten zu tun.
Ja, genau, genau. Deshalb könnte man
denken, dass es das mit
dem, so wurde es wahrscheinlich auch oft
interpretiert, mit dem Rank der Pages
zu tun hat, die man halt so hat.
Dann gab es auch so irgendwie Browser-Plugins, die einem
den eigenen Page-Rank auf der Seite angezeigt haben
und so. Aber nein, das
Wort kommt tatsächlich von Larry Page,
also einem der beiden Gründer von Google,
der das halt in seiner Doktorarbeit
irgendwie einen neuen
Algorithmus irgendwie vorgestellt hat für
das Ding
auszurechnen in
großen Matrizen halt Eigenwerte
auszurechnen. Also ich glaube, das ist irgendwie Power Iteration
oder so.
Du hast gerade noch zwei Sachen gesagt. Einmal dieses Power-Dings,
das habe ich jetzt schon wieder vergessen, wie es hieß,
und gerade Eigenwerte berechnen aus
Matrizen mit PageRank. Vielleicht erzählen
wir das nochmal als einzelne kleine
Subkapitel.
Ich weiß gar nicht, ob es so relevant ist.
Ich glaube, man kann das auch, wenn man das in Detail
irgendwie, dann wird das
relativ trocken und langweilig. Also ich meine, im Grunde
ist, was es tut, ist
relativ einfach erklärt.
Es hat was zu tun mit, also man kann
den Link grafen,
das Web, also das Web ist im Grunde
ein Graph. Eine verknüpfte
Knotenpunkte, die durch Linien
wieder verknüpft sind, das sind die Linien,
die Links, die aufeinander steigen.
Die Definitionen sind länger aus Knoten und Kanten und
es gibt Gerichtete, wo das Web
ist ein gerichteter Graph. Also ich kann halt
auf eine Seite linken und die linken nicht auf mich zurück.
ja, es gibt
jetzt, das Ding hat bestimmte
Eigenschaften, die es halt besonders machen, also
zum Beispiel der Linkgraf des Web ist halt super spars,
das ist halt die meisten
Seiten haben nur Verbindungen zu ganz
wenigen anderen, ja, aber
es gibt ja auch Graphen, wo alle miteinander irgendwie
verbunden sind, das ist beim Web nicht so, die
zu den allermeisten Seiten habe ich eben keine Links
und ich kann
den als Matrix darstellen, indem ich sage, okay, alle
Webseiten oder Knoten
sind halt irgendwie die Zeilen und Spalten
der großen Matrix und
ja, wenn ich einen Link
habe, dann trage ich da jetzt zum Beispiel eine 1
ein in der entsprechenden
Zeile und Spalte. Also wenn ich halt
von X nach Y... Also in der Zeit kommt deine 1, wenn ich
von meiner Seite auf deine Seite link höre,
dann steht da 1. Genau.
Ja, und das kann ich für das gesamte Web
machen und das in eine Matrix packen.
Was natürlich ein bisschen schwierig ist.
Auch da kann ich halt nutzen, dass das Ding spars
ist und dass die allermeisten Werte 0 sind. Und die, die 0
sind, die schreibe ich halt einfach nur irgendwo in Höhe.
Und dann kann ich mir die ganz
sparen, die irgendwo, muss ich die nicht speichern.
Das heißt, ich muss ja tatsächlich sozusagen nur da, wo
Links sind, irgendwas speichern.
Und ja, dann kann ich zum Beispiel im PageRank ausrechnen,
ist einfach nur sozusagen ein Maß für die Wahrscheinlichkeit,
wenn ich einen Random Walk über diesen Graphen mache,
auf dem Ding vorbeizukommen.
Also wenn ich zufällig irgendwo durchs Internet zirpe,
mit irgendeiner zufälligen URL, mit der ich angefangen habe,
komme ich dann dahin, wo ich hin will?
Ja.
Oder gibt es einen Startpunkt?
Ja, laufe ich da drüber.
Ja, genau.
Laufe ich mir diese Seite, ja, genau.
Also gibt es einen Startpunkt?
Nö, das fängt halt irgendwo an.
Fängt sich einfach irgendwo durch.
Ja, random, ja.
Ja, okay, Wikipedia, Artikel 1, 2, 3, 4, 5,
querverweist auf irgendeine Quelle,
die ich dann auf irgendeinem Nachrichtenportal,
das sind auch irgendeine, ja.
Und was das Ding im Grunde sozusagen abbildet,
ist, wie wichtig, wie zentral ist eigentlich eine Seite.
Also wie tief in diesem Knoten,
wenn man sich das Web jetzt doch wieder als Knoten vorstellt
oder sowas. Und dann der zentralste
Knoten, welche Seite ist das? Ist das wahrscheinlich mittlerweile Google?
Ich weiß es nicht. Gibt es da, weißt du das?
Gibt es das? Keine Ahnung.
Im größten Page-Track müsste dann ja eigentlich
Google selber sein.
Wikipedia ist immer weiter oben, aber Google,
nee, glaube ich gar nicht mal.
Google, die
Links, die
Google ausgibt, sind auch
nicht, genau, die gehen da nicht mit in den Graphen rein.
Ja, okay. Also,
ich weiß es nicht.
Aber ist auch eigentlich egal.
Ja, aber wenn man das jetzt kombiniert mit eben TF-IDF geschickt, dann ist das halt viel besser, als wenn ich das nur, wenn ich nur TF-IDF nehme, weil es halt in gewisser Weise ein Maß dafür, ja sozusagen, wie wichtig ist diese Seite eigentlich insgesamt.
und dann kombiniere ich halt eine lokale Geschichte
ETF-EDF mit irgendwie einer eher globalen
Geschichte
und das funktioniert dann schon ganz gut und das
führt halt dazu, dass ich eben solche
simplen, ich
schreibe jetzt fünfmal irgendein Keyword auf eine
Seite, spiele rein, halt dann nicht mehr funktionieren.
Weil dadurch werde ich halt nicht zentral
in dem Graph, dass ich das tue.
Aber auf der anderen Seite ist das halt das, was dann
die Leute mit den Backlinks immer meinen, also wenn du halt
ganz viele Links hast, die auf dich zeigen,
dann wirst du natürlich zentraler.
Aber jetzt kannst du die Links natürlich auch wieder
Gewächten und es ist ein Katz-und-Maus-Spiel
und keine Ahnung. Aber
Google verwendet jetzt auch nicht
nur PageRank und irgendwie sowas
IDF-artiges oder so, sondern die
verwenden halt ganz, ganz viele. Ich hab's gerade mal aufgemacht, der PageRank
gibt's jetzt irgendwie 9
und 10, also das werden jetzt irgendwie nummerlich
gestellt und PageRank 10, das hat tatsächlich Google
kommen. Und
Government of India, India GovN.
CNN.
Und ja,
noch das W3-Konzert. Und dann gibt's
PageRank 9, ist auch Python
dabei, also Python.org.
Also wenn du einen Link von Python.org
kriegst,
dann
voll gut.
Das zählt was.
Naja, also
tatsächlich, heutzutage ist es so,
es wird ganz, ganz viel, also nicht nur diese
beiden Werte, also nehmen wir an,
würdest du jetzt nur TF-EDF und den Patchrank haben,
dann hättest du zwei, oder die sind im
Suchmaschinenbereich, nennt man das mal Signale,
im Machine Learning-Bereich würde man das Features nennen,
sondern Google sammelt eher so 100, sagen sie so,
aber tatsächlich sind es wahrscheinlich noch ein paar mehr.
Und das Ranking ergibt sich daraus, dass jetzt diese Signale,
von denen ein paar aus der Query kommen
und möglicherweise auch aus dem User, der die Query gestellt hat,
ein paar kommen aus dem Dokument,
eben wie sowas wie PageRank
oder kommt die Query irgendwie in der Domain vor oder sowas,
Ein paar kommen aus einer Kombination von Query
und Dokument. TF-IDF wäre
so ein Fall, da multipliziert man das ja miteinander.
Und jetzt hat man
halt sozusagen für jedes Suchergebnis
so einen
Vektor mit irgendwie vielleicht 100
Einträgen oder 200 oder 500
oder wie auch immer. Und dann hat man halt
üblicherweise ein Modell, ist auch völlig
egal, ob das jetzt ein Machine Learning trainiertes Modell
ist oder ob das ein Modell ist, das Leute von Hand
getunt haben, es kommt aufs Gleiche
raus letztlich,
dass diese Vektoren halt in Reihenfolge
bringt und irgendwie halt
einen
endgültigen Score halt ausgerechnet.
Im simpelsten
Fall könnte das einfach eine gewichtete Summe sein,
zum Beispiel.
Du sagst halt, wie wichtig ist mir jedes
einzelne Feature, dann machst du halt die Summe
drüber und
normierst es vielleicht noch
irgendwie oder so und
dann sortierst du halt nach der
Summe.
könnte man machen. Oder man kann halt dieses Modell
auch irgendwie trainieren
und kriegst dann halt
irgendwie am Schluss eine Sortierreihenfolge
und
das ist halt eher so das, was heute gemacht wird.
Das ist lustigerweise
aber in den ganzen, also zumindest
ich weiß nicht, ob es kommerzielle Suchmaschinen gibt,
die sowas ähnliches machen.
Die ganzen
Open-Source-Suchmaschinen können das
nicht. Also
so ein bisschen. Also man kann so ein bisschen was machen,
aber so ein bisschen
Woosh, aber so richtig. Aber so richtig toll
können die das, also so cool wie
irgendwie die Großen dazu machen, machen die das eigentlich
nicht. Das ist auch so etwas. Also mich
ärgert ja so ein bisschen oder mich wundert, dass
es da so wenig, also es ist viele Dinge, die halt so
im Bereich Websuche
oder so halt irgendwie
schon lange gemacht werden
oder da,
das kommt halt nie so richtig an.
Also was mich zum Beispiel wundert
ist, was Google seit 2004 glaube
ich macht oder so, die halten ihre NTCs alle
nur noch im Hauptspeicher. Die gehen gar nicht
Ja, auf die Platte, weil Platte ist immer so ein bisschen blöd,
weil du kriegst halt
Latenzen, werden halt unvorhersehbar.
Plötzlich liegen halt
deine Sektoren ungünstig, du musst
warten, bis das da vorbeikommt und
du musst aber viele Sachen miteinander
mergen und jetzt
liegen die Kombinationen
von, die Sektoren
sind halt ungünstig korreliert und plötzlich musst du halt auf
eine Query sehr lange warten.
Das ist eigentlich totaler Mist. Du willst eigentlich
relativ sicher sein können, dass das halt nach so und so viel
Millisekunden
oder so halt durch ist und das kannst du eigentlich nur
dann garantieren, wenn das ganze Zeug immer im Hauptspeicher liegt
und wenn du noch ein paar andere Sachen irgendwie berücksichtigt
hast und Google, ich glaube auch, das ist der
Grund, warum Google das so macht, die möchten
halt wissen, okay, wenn jemand eine Suchmanfrage
eingegeben hat und wir dann das an
diese tausend Server, die halt jeweils
nur einen Teil vom Index haben, schicken
und dann kommt ein Ergebnis zurück, dann wissen wir halt, nach 20 Millisekunden
ist das halt durch.
Wenn da Platten im Spiel wären, könnte man das überhaupt nicht mehr
garantieren, weil
hast du halt Pech und irgendwo musst du halt auf eine
Platte warten und die
Seek-Time da ist halt bei Platten auch
sind halt mal 10 Millisekunden oder noch mehr
und dann wird das Gesamtergebnis
halt langsam dadurch, das ist halt irgendwie kacke, aber
jetzt, wenn man sowas wie Lucene hat oder
Elasticsearch oder Sola, da kann einem das
durchaus passieren, also wenn man Pech hat, dann ist
eine Query halt langsam und zwar auch nicht
deterministisch, irgendwie bestimmte Queries, sondern halt
irgendeine, was halt
naja, aber
das ist halt so designt, also es kann
auch sein, dass man mittlerweile sagen kann, okay, nur
dieser Index soll
in Memory liegen oder so, aber ich weiß es nicht
mich wundert, dass das halt, weil
bei den Hauptspeichergrößen heutzutage sollte das
überhaupt kein Problem sein, dass man halt
den Index halt im Hauptspeicher hält
und wenn das nicht reicht, dann vielleicht mal mehr Maschinen
dazu, ist auch, warum
warum muss das auf
wie liegt man das auf die Platte
optimiert sein, das macht doch heutzutage
eigentlich keinen großen Sinn mehr, oh, da hab ich
noch was vergessen, bei den
es gibt ein Ding, Redis
das hatten wir jetzt auch schon ein paar Mal, das kann
auch Volltext-Suche mittlerweile
ganz gut.
Adrede ist das ein Cache
für bestimmte Dinge,
die als Key-Value
kombinieren. Key-Value ist aber
nicht nur das, das kann auch ein paar andere Datenstrukturen
und das
liegt tatsächlich nur im Hauptspeicher und das kann auch
Volltext-Suche und das wollte ich mir auch schon immer mal angucken,
aber habe ich es in letzter Zeit
nicht geschafft. Es kann sein, dass das
mittlerweile vielleicht ein bisschen sogar das erfüllt, was
ich irgendwie gerne hätte.
Ja,
aber Luciden ist halt
tatsächlich eher so drauf optimiert, dass es
auf der Platte gut aussieht.
Und ja,
also da hängt das
irgendwie so ein bisschen hinterher und es hängt halt auch
hinterher bei solchen Sachen wie,
also im Machine Learning Bereich läuft dieses ganze Thema immer
unter dem Namen Learning
to Rank, also sozusagen,
dass du halt, du hast halt Features
und du hast halt jetzt
die Training, deine Trainingsdaten sehen immer so aus, dass du
Mengen hast von
Queries und dann
ergebnislisten wo halt leute also redaktionell notiert ist wie gut was
waren, wie relevant sind die Ergebnisse, also
wo Leute meistens auf einer Skala von 0 bis
4 oder 0 bis 3
0 ist überhaupt nicht relevant
zu 3 oder 4 oder das höchste ist halt
super relevant für diese Anfrage
Ergebnislisten annotiert haben
und du dann halt hinterher
sozusagen testen kannst, wenn du jetzt
was an deiner Suchmaschine geändert hast
und fütterst sie halt mit den
Queries und guckst dir die Result-Listen an
dann kannst du halt einen Score ausrechnen
da gibt es dann unterschiedliche
die Master, die man benutzen kann.
Ja,
Average Precision, Normalized,
Cumulative Discounted Gain,
Expected Reciprocal
Rank oder was auch immer.
Ich wundere mich jetzt dabei, mal kurz die alle drei
jetzt erklären. Aber im Grunde sind das alles Master
dafür, wie gut
ist jetzt sozusagen
dieses
Ergebnis
für die Anfrage.
Und
wenn ich halt über viele
schaffe, besser zu sein als ein anderes
Verfahren, dann rank ich halt
besser. Dann habe ich halt ein besseres
Ergebnis und das ist ja etwas, was sich dann
auch direkt bemerkbar macht in User-Zufriedenheit
oder Geld oder was auch immer man halt
aufnehmen möchte.
Und
naja,
genau,
normalerweise, wenn ich jetzt
so ein, also Maschinen-Logging-Modelle funktionieren da wirklich
besser. Also es gibt da schon
lange auch Wettbewerbe.
Ich glaube, ich habe mal in einer Learning for Ranked Challenge mitgemacht.
Das war 2009 oder so.
Und wenn man das vergleicht,
also was... Das ist schon über 10 Jahre her, das ist schon
klar. Ja, das ist krass, ne?
Und es ist immer... Aber was ich dann... Ich dachte eigentlich,
wenn man mich damals gefragt hätte,
ähm, was glaubst
du, wann können Suchmaschinen...
Ist das so ein Standard-Feature von Volltext-Suchmaschinen?
Hätte ich gedacht, ja, so in 2 Jahren oder so,
können die das alle.
Die machen das aber immer noch nicht.
Also das ist jetzt...
Also das ist so ein bisschen
naja, aber
wahrscheinlich braucht man ja
da doch irgendwie auch einen Markt dafür.
Und wenn es
einfach keinen interessiert, dann passiert
das halt auch nicht. Und wenn es keinen Grund gibt, das zu implementieren
und den gibt es halt nur bei den großen Suchmaschinen
und die machen das wahrscheinlich, aber die
geben ihren Kram halt nicht raus.
Ach ja.
Aber im Grunde, so könnte man
halt, man kann halt,
also wenn man jetzt zum Beispiel
Also daher weiß ich das auch noch, ich war im TF-EDF-Vergleich mit einem einfachen Machine Learning Modell, wo man halt ein paar Signale nimmt und die kombiniert und das halt dann optimiert hat. Das ist halt schon wirklich deutlich besser. Und das heißt, man kann ja relativ viel rausholen, was die Qualität von Suchergebnissen angeht. Und das wäre eigentlich alles gar nicht so schlimm.
Ja, also falls ihr eine neue Suchmaschine braucht, dann sagt ihr einfach mal Bescheid.
Ja, ist ja dummerweise auch irgendwie
nicht so ganz so super leicht zu implementieren.
Das kann man auch nicht so am Wochenende machen.
Naja, aber
also ich glaube, wenn man jetzt
beispielsweise
Postgres nimmt oder so und
halt irgendwie
Django und dann
Volltextsuche drauf macht und dann
halt kann man natürlich auch die eingebaute Rank-Funktion
nehmen, die halt auch was TF-EDF-mäßiges
macht. Und Redis dazu.
Ja, Redis
oder man kann auch mal Redis ausprobieren.
Muss ich mal testen.
Dann ist man da schon,
wenn man das nochmal selber sortiert,
schon relativ weit vorne, wenn man das dann richtig macht.
Genau.
Du hast eine Sache,
eben war es nur mit dem Pau,
irgendwas gesagt, da wolltest du doch kurz drauf eingehen.
Ich weiß jetzt nicht, ob das noch wichtig ist,
ob das jeder schon vergessen hat.
Irgendeine Methode
zum Ranken.
Weiß ich schon.
Das Exponentiale.
Du meinst die Potenzmenge?
Du meinst...
Ja.
Ich glaube, das hat...
Ja, also kommt drauf an.
Es ist halt unterschiedlich für jede
Seite oder für jede Suchmaschine.
Hängt halt ab, welche Anfragen stellen.
Aber was man oft sieht, ist halt, dass eine kleine Anzahl von Anfragen,
kleine Menge von Anfragen,
Großteil...
Eine kleine Anzahl unterschiedlicher Anfragen macht einen Großteil...
Entschuldigung, das hattest du doch tatsächlich schon einigermaßen erwähnt.
Genau, genau, das Problem hat man auch.
Ja, ansonsten, ich weiß nicht,
oder genau, wir hatten ja so SEO schon so ein bisschen,
aber da würde ich auch noch gerne,
also was man halt da,
du sagst Content,
das was sich Leute oft nicht klar machen,
ist halt, was das heißt.
Würdest du sagen,
es geht darum,
den optimalen Text zu schreiben für irgendeine,
Oder wie würdest du sagen, was ist das, was Content gut macht?
Also ich würde sagen, Content macht gut, dass man, zumindest wenn man Google fragt,
dass man Absätze hat, die tatsächlich mit Inhalten gefüllt sind,
die halt eine Wortdiversität beinhalten, die zu dem Thema einigermaßen passt.
Dass die Worte da irgendwie schon einen Kontextbezug zu haben,
dass sie vielleicht auch bestimmte Dinge beschreiben,
dass man halt nicht immer irgendwelche Keywords benutzt,
sondern dass man halt tatsächlich versucht, einen Text darzustellen.
Und Google hat es irgendwie geschafft, so ein Maß dafür zu finden,
ob so ein Text tatsächlich gut ist, ja, in dem Sinne oder nicht.
Und wenn man da halt, ich weiß nicht,
mehrere Seiten vielleicht zu hat zu seinem Post,
dann wird das als guter Content irgendwie bewertet.
Ich kenne tatsächlich jetzt auch nicht im Detail
so die Bewertung für was ist jetzt guter Content.
Und das bewegt sich vielleicht noch ein bisschen.
Und ob man das jetzt alles schön mit Bildern machen muss,
mit Alltexten und so,
dass man halt dann das qualitativ hochwertig implementiert hat.
Also die Implementierung ist, glaube ich, auch nicht ganz unwichtig.
Wenn man das aber, glaube ich, wenigstens so tut,
als hätte man das qualitativ hochwertig implementiert,
indem man einigermaßen taktisch sinnvolle Sätze
zu einem Thema hinschreibt,
die dann auch so aussehen,
als gehören die zum Thema,
weil die halt da mit dem TF-RDF-Werte
irgendwie dann zu dem Thema gut passen,
irgendwie gibt es dann irgendwie einen Index,
dann glaube ich,
ist das schon einigermaßen ansprechender Content,
zumindest für Google.
Und wenn man das dann halt schafft,
da so eine Content-Pyramide,
wie man das schon sagt, aufzubauen,
das heißt, zu einem Oberthema
viele verschiedene Bereiche,
die eigentlich diesem Oberthema gehören,
also vielleicht machen wir das ja
mit unserem Podcast zum Beispiel,
dass wir halt tatsächlich verschiedene Themen
zu Python haben, das aber alles Python ist und das hat
irgendwie alles einen Bezug zu Python, dann
kommen wir tatsächlich in dieser Content-Pyramide
Python immer wieder ein Stück
weiter oben, nach oben. Natürlich haben wir jetzt keine Texte,
die man so analysieren kann per Volltext-Suche
und nach denen man ranken kann. Wir haben halt nur irgendwelche
Snippets oder Shownotes, mit denen man das tun kann.
Aber ich glaube so,
also das funktioniert so ein bisschen, was halt
Content bedeutet.
Ja, aber das ist jetzt auch, würde ich
eher sagen, auf einer sehr technischen
Ebene.
Ja, und man kann glaube ich aber auch, also ich würde sagen, okay, also der technische Teil ist, macht auch einen nicht unerheblichen Teil aus, also man kann halt auch furchtbare Fehler machen, aber ein großer anderer Teil ist halt auch ein inhaltlicher und der ist halt eben zum Beispiel, also was dann eben, ich bin überrascht, man kann zum Beispiel auch unterschiedliche Seiten haben für unterschiedliche Anfragen und für unterschiedliche User.
Man muss halt erstmal überhaupt rauskriegen, was sind das für Leute, die auf meine Seite kommen und möglicherweise gibt es da unterschiedliche Leute, möglicherweise stellen die unterschiedliche Suchanfragen und dann kann es zum Beispiel gut sein, das ist auch etwas, das kennen bestimmt viele Leute, wenn man sucht nach irgendwas, dann landet man auf einer Seite von irgendeiner Firma, die irgendwas anbietet oder so und scrollt da die ganze Zeit rum und denkt sich so, was wollen die mir eigentlich erzählen?
Wir haben fünf Stockfotos
und dann irgendwie die gleichen
Passwort-Bingo-Dinger, die auf allen Seiten
sind und ich scrolle da
eine Viertelstunde drauf rum und ich verstehe
nicht, was das eigentlich ist.
Das hat man
oft.
Aber die Frage ist, warum müssen die eigentlich
allen die gleiche Landingpage zeigen? Das müssen die doch
gar nicht. Aber das kommt dabei raus,
wenn du sagst, okay, ich mache eine Landingpage
für alle die gleiche,
dann kriegst du halt sowas.
aber das müsste eigentlich gar nicht sein,
sondern das, was sie sich überlegen müssten, ist halt,
okay, wenn jetzt jemand nach bestimmten technischen
Geschichten
sucht, dann
geben wir dem doch
vielleicht eine Seite,
wo tatsächlich
steht, was wir machen und wenn jetzt
irgendwie, keine Ahnung, eher ein businessorientierter
User halt nach den üblichen
Buzzwords sucht oder so, den gut, den kannst du ja dann
vielleicht irgendwie, vielleicht kriegst du den irgendwie
mit Stockfotos glücklich gemacht.
Das führt überhaupt dazu, dass wir
diese Datenkrake brauchen, wenn wir damit
Geld verdienen wollen. Das ist der Grund dafür, warum
man so sehr interessiert ist an dem Typen von
Nutzer, den man jetzt da vor der Kiste hat, weil
es geht ja eigentlich darum, dass man den irgendwie
emotionalisiert und nicht nur, dass man dem den
tollen Content zeigt, sondern dass man den dann,
also wenn wir jetzt von der ganzen Geldmaschine ausgehen,
den dazu bringt, dass der irgendwas kaufen soll.
Wenn der schöne Kapitalismus halt so ist, der möchte
dich emotionalisieren und dir das zeigen, was du willst.
Ja, weiß ich gar nicht.
Aber ich meine jetzt nur rein aus dem Suchmaschinen-Kontext.
Was man jetzt damit macht, ist ja nochmal eine andere Frage.
Klar, will ich eventuell Leute hinterher,
die konvertieren zu was auch immer, Umsatz.
Die konvertieren zu, das ist total schön,
wenn man von Leuten redet, wir möchten die gerne konvertieren.
Wir möchten unsere Hörer übrigens konvertieren
zu besseren Pythonister.
Genau, man muss sich halt überlegen,
was man für Ziele eigentlich erreichen will.
Aber damit das überhaupt funktionieren kann,
damit ich überhaupt die Chance kriege,
muss ich ja irgendwie
vielleicht, oder macht es vielleicht Sinn, den Leuten
halt etwas zu zeigen, was sie dann halt
auch verwenden können, was sie verstehen können, was relevant
für sie ist. Und das passiert oft nicht.
Sondern ganz oft ist es
halt so, alle kriegen das Gleiche, egal
wonach sie gesucht haben. Dabei
das weiß ich doch, wonach sie gesucht haben. Ich muss
ja jetzt nicht irgendwie wissen, wer das ist. Das interessiert
mich gar nicht. Ich weiß doch, wonach die gesucht
haben. Warum zeige ich denen alle das Gleiche?
Das macht überhaupt keinen Sinn. Aber
es gibt die Vorstellung, dass das halt so sein muss,
woher auch immer die kommt.
Und dass es halt dann so ein technisches Ding ist,
welche Farbe nehme ich da oder welche Fotos,
wie ist der Anteil von Fotos zu Text,
dass das dann irgendwie gut macht.
Aber wenn da nicht steht, was mich interessiert,
dann kriege ich das nicht wieder gut gemacht durch irgendeine Farbe.
Das ist einfach, da hast du mich schon verloren im Grunde.
Also das, was du gerade gesagt hast,
ist, dass der Content King eigentlich bedeuten sollte,
ich kriege genau das, was ich möchte,
weil es so prä-invalidisiert und gefiltert ist,
dass deine eigene Blase so gut zu dir passt,
dass du da genau das findest, was du machst.
Nein, es müsste sich jemand Gedanken drüber gemacht haben.
Das ist halt das Entscheidende.
Jemand muss sich zum Beispiel angeguckt haben.
Also bessere Kuratierung durch den Suchalgorithmus.
Nee.
Jemand sollte sich überlegt haben,
zum Beispiel, wir sind das Dokument nicht,
wir sind die Suchmaschine.
Was Google macht, ist nochmal ein anderes Ding, aber
es müsste sich jemand überlegt haben,
okay, wonach suchen die Leute?
Wenn die Leute auf der Seite landen, wonach haben die gesucht?
Ist das wirklich das, was sie suchen?
Wenn sie danach gesucht haben,
kriegen die Seite, wäre es nicht sinnvoll,
eine andere Seite zu zeigen.
Ja, solche Sachen.
Das ist überhaupt so etwas,
was ich glaube, was tatsächlich sehr sinnvoll wäre
unter Umständen, dass halt Unternehmen
halt für unterschiedliche Zielgruppen, unterschiedliche Leute,
unterschiedliche Suchanfragen, unterschiedliche
Seiten haben. Das gibt es praktisch nicht, weil
irgendwie die Vorstellung ist,
das ist wie in einer physikalischen Welt.
Du hast halt ein Schaufenster und das ist halt für alle gleich.
Aber das muss man ja gar nicht so machen
unter Umständen. Aber das ist halt
sehr schwer zu vermitteln. Aber wenn du jetzt zum
SEO gehst, der so die Content-Strategie
macht oder so, dann sagt er dir vielleicht einfach,
boah, kann das auch anders machen.
Aber wenn du jetzt zu einer
technischen SEO-Agentur gehst, die dir sagt,
okay, ich verkaufe dir so und so viele Backlinks, dann
hilft dir das. Also
sagen wir mal so, es gibt halt nicht nur den technischen Teil,
sondern halt auch den inhaltlichen Teil
und der wird halt, der inhaltliche Teil
wird, soweit ich hinweist,
üblicherweise mitbekomme, immer sehr
vernachlässigt. Und die Leute kümmern sich immer
um technische Details und dann oft auch um Sachen,
die eigentlich eher fragwürdig sind
und
lassen dann eine ganze Menge gute Gelegenheiten
einfach so liegen.
Es klingt halt, als wäre es aufwendig,
das zu implementieren. Ja, ist es tatsächlich.
Das ist vielleicht auch der Grund,
warum das keiner macht. Ja, genau. Und was die Leute,
die das halt implementieren, die Content
machen, vielleicht auch dann nicht auf dieser technischen Seite sind,
beziehungsweise das dann, ich sage einfach mal,
relativ teuer wird und mal das zu implementieren
nicht so einfach ist
für die Zielgruppe, die dann gerne ihren kleinen
Straßenlädchen
optimieren möchte, das vielleicht auch so cool ist.
Ja, aber die großen Kunden, hast du das schon mal
gesehen, also dass so wirklich diese Pages wirklich dann
sich ändern, je nach Suchanfrage?
Ja.
Wo? Nein, du packst einfach, das ist
überhaupt nicht schwer. Nein, ich sage nur, hast du
ein Beispiel, wo du sagst, die Gnässe
machen? Nicht, nicht, nicht, es ändert sich nach Suchanfrage, sondern du hast halt
unterschiedliche Pages im
Google-Index und bei unterschiedlichen Anfragen
werden unterschiedliche Seiten gefunden. Ja, okay, okay.
Das kannst du machen, das ist
gar kein Problem. Ja, das habe ich, ja, okay, das ist natürlich,
ja.
Ja.
Also man hittet quasi für jedes
schöne Keyword-Kombination seine eigene Landepage
raus. Ja, oder, du musst nicht
für jede kombinieren, aber du musst halt gucken, also
man würde damit anfangen zu gucken, was suchen die
Leute eigentlich, mit welchen
Anfragen landen sie oder auch,
wenn ich jetzt mich dafür interessiere, was würde
ich denn suchen und wie schaffe ich es dann,
dass ich dann auch dann da gerankt werde.
Und dieser Schritt ist ja
das Allersimpelste, dass man halt
anfängt, sich zu überlegen, okay, wie kommen
Leute eigentlich hin? Das machen die meistens schon nicht.
Sondern die gehen halt umgekehrt
von der Seite aus, die sie halt bauen
und sagen dann, okay, ich habe jetzt
diese Seite, völlig
unabhängig davon, ob das irgendjemand interessiert
oder nicht, wie kriege ich die denn jetzt hochgerankt?
Und dann packen sie da irgendwie
komische Warte rein oder kaufen Links
oder machen irgendwie seltsame Dinge,
ändern die Farben, verstecken
weißen Text auf weißem Hintergrund.
Ja, oder kaufen Hellhits bei Google.
Und wundern sich dann, dass die Leute irgendwie, wenn sie halt
quasi da landen, dann irgendwie enttäuscht
sind.
Ja, aber diese ganzen Tricks, also mit den
Sachen verstecken, hinter weißem Hintergrund und mit den
extra Keywords und mit den zu vielen Links, das hat, glaube ich,
Google mit den ganzen neuen Pässen alle rausgenommen.
Ja, die sind da sehr gut. Also das wird alles nicht so richtig
funktionieren. Ja, es wird sogar bestraft. Also du wirst tatsächlich
abgerankt, wenn du sowas machst noch. Also wenn die
solche Methoden finden, die können die identifizieren, dann schmeißen
die viel raus. Das wird bestraft.
Würde ich jetzt, finde ich,
wüsste ich jetzt nicht genau,
warum man das machen sollte, weil im Grunde ist es ja,
wenn ich Google wäre, würde ich das ignorieren.
Nö, also ich habe gehört, dass das tatsächlich drinsteht.
Ich weiß nicht, was das ist. Google Dolphin oder was?
Wie ist das denn für Google? Ja, das ist halt nur noch
Sachen gerankt, wenn die halt diesen Content-Qualitätsding
besser machen können. Das heißt, weil die halt
auf diese Qualitätssachen denken. Und Leute, die halt
dann versuchen, mit Keywords das
einzubinden, die legen nicht so viel Wert
auf guten, qualitativ hochwertigen Content.
Ja, aber dann würdest
du sagen, du kannst eine Regel aufstellen,
die funktioniert. Du sagst, Leute, die
irgendwie so shady Geschichten machen oder die halt
die falsche, sich halt
von der falschen SEO-Agentur
übers Ohr haben hauen lassen,
die sind halt prinzipiell
nicht gut. Genau.
Da weiß ich nicht, ob diese Regel wirklich stimmt. Ich würde
tatsächlich das eher
dann aus Trainingsdaten lernen lassen,
ob das so ist oder nicht, weil
diese Annahme muss ja nicht richtig sein. Es kann ja sein,
tatsächlich, dass irgendwie der Hotdog-Stand
um die Ecke, der eigentlich total super Hotdogs macht,
hat aber jetzt nicht so die perfekte
SEO-Auswahlkompetenz und
greift da halt ins Klo.
Da würde ich den gar nicht dafür bestrafen wollen,
unbedingt dafür, dass halt seine SEO-Agentur
kacke ist, sondern ich würde das ignorieren.
Aber ich weiß es nicht.
Aber ich glaube, also Google hat das tatsächlich gemacht,
das steht irgendwie in den Rules da drin, aber
ja, sollte man
vielleicht nochmal drüber nachdenken.
Ja gut, aber
ich hoffe jetzt, also so Ressourcungsbewertung
aber das haben wir glaube ich heute nicht mehr
die Zeit für und das ist auch nicht unser Thema.
Warum, wieso, weshalb, dann welche Sternchen
vergeben werden sollen, sollten, sollten, nicht sollten
oder? Ja, aber
genau, zum Beispiel
haben wir noch irgendwie ein großes
Thema oder sowas da drin ist, was
wir noch gar nicht angeschnitten haben
oder was irgendwie
Ich glaube die großen Sachen
haben wir einigermaßen durch. Wir haben so ein bisschen erklärt, wie es funktioniert
was für Algorithmen dahinter stecken. Wir sind jetzt nicht
ganz so detailliert eingegangen auf diese ganze
mathematische Komponente
von den Wertberechnungen, aber das ist vielleicht
auch einfach hier an der Stelle too much
Wir haben vielleicht noch wieder mal
leider ein bisschen weniger Zeit, wie man das
Python macht, also aus dem, was wir gesagt haben, dass es irgendwie so
Pylusin und Woosh gibt, habe ich jetzt
natürlich Postgres und damit das man
in Django implementieren kann.
Genau, vielleicht wenn man, also
ich finde auch gerade Python ist super
geeignet dafür, weil dann kann man diese beiden Dinge
halt total gut miteinander kombinieren. Man kann halt zum Beispiel
irgendwie diese
ganzen
Ranking-Geschichten
halt wahrscheinlich, also ich denke mal,
es müsste eigentlich, so Python ist wahrscheinlich die Sprache,
mit der das am besten geht.
wenn man halt eben diese ganze NumPy,
SciPy, Machine Learning
Geschichte mit dranhängen hat.
Das heißt, selbst wenn man jetzt nicht unbedingt
ein Machine Learning Modell verwendet, aber halt diese
Listen, oder sagen wir mal so
Vektoren von
Features halt irgendwie
auch mit Handgedenken Listen
schnell zu lenken, das geht mit Python
wahrscheinlich sehr, sehr gut.
Und bei anderen Sprachen hätte man da wahrscheinlich so ein bisschen
Naja, aber
man hört sich an, das braucht man auf jeden Fall erstmal Content,
bevor man wirklich eine vernünftige Suche implementiert.
Ja, tatsächlich, das ist wahrscheinlich auch nicht so
schlecht. Weil sonst kann man ja selber aussuchen, was dann da rauskommt.
Ja, und genau, und das ist halt
ich weiß jetzt gar nicht, ob es ein
großartiges anderes
also ist das alles Web
heutzutage? Ja, ne?
Gibt es irgendwie noch eine? Da gibt es bestimmt noch irgendwelche
Studierenden-Datenbanken, wo man dann nach
wissenschaftlichen Texten suchen kann oder
Juristen sind sehr gerne dabei mit irgendwelchen
Volltext-Sachen, irgendwelchen Gesetzestexten
und Urteilsverkündungsgeschichten.
Aber das wird auch alles eher mehr oder weniger
webbasiert laufen.
Ja.
Es gibt bestimmt noch mehr, wenn ich noch genug nachdenke.
Ja, aber es ist glaube ich
heutzutage eigentlich das meiste
Web, was man da so macht.
Ja, oder selbst wenn es irgendwie auf Mobilgeräten
ist oder so, dann wird man wahrscheinlich eine API-Anfrage
machen und also letztlich wird es auch wieder Web sein.
Ja.
Genau.
Ja, ich wollte eigentlich auch schon immer mal, das mache ich
vielleicht mal irgendwie einfach irgendwo ein Repository
anlegen und dann mal Dinge miteinander
vergleichen, zum Beispiel einfach
einen Standard-Korpus von irgendwie oder mehr
irgendwelchen Dokumenten
halt in Postgres
reinhauen, in Redis reinhauen,
in Elasticsearch reinhauen und mal gucken, was
sind so die Unterschiede und was macht irgendwie
großartig Schmerzen und was halt nicht so
was ist angenehm. Gut, dass du das jetzt
bei einer Stunde dreißig gesagt hast, wo vielleicht
einige Hörer schon eingeschlafen sind.
Aber das Versprechen
ist aufgeschrieben.
Ja, vielleicht, genau.
sag ich nochmal Bescheid, also ich meine,
es ist auch teilweise nicht so einfach, bei Django ist es so,
dass es halt, wenn man da einfach nur das macht, was
in der Dokumentation steht, funktioniert es auch nicht so richtig.
Das ist schon so ein bisschen
hakliger, ja.
Aber das
muss ich mir nochmal,
muss ich mir auch nochmal genau angucken.
Ja, da ist ja Fragen, das verabschiede ich dir gerne mit der E-Mail,
hallo at pythonpodcast.de. Ich würde sagen,
wir sind aber jetzt mit der Suche so quasi
durch und wollten jetzt noch
ein bisschen Woche machen und so.
Oder hast du noch was, was du zur Suche sagen willst?
Ja.
Gut.
Ja, ich nehme jetzt deinen Blick weg.
Den musst du später machen.
Armin Ronacher von Flask, der Mensch, der Creator,
hat etwas Schönes vorgestellt
und hat da einen kleinen Patch eingebaut.
Das heißt, er nimmt einfach die Build-Ins
und packt da Drachen dran.
Und zwar True, False und Null, jeweils in klein geschrieben.
setzt sie auf True, False und Null.
Und dann kann man einfach
JSON lesen.
Ja, beziehungsweise halt reinpasten.
Ja, genau, also basen und das ist direkt ein Dictionary-Objekt.
Das ist schon relativ interessant.
Das ist schon eine gute Idee.
Ich wusste gar nicht, dass man das so machen kann und
war so, das geht, aber
cool. Der erste Kommentar über
diesen Twitter-Feed, von dem du das gefunden hast,
ist übrigens, I strongly recommend not doing this,
it opens up a huge security hole.
Ja, ja.
Das ist völlig überbewertet.
Aber ja, es ist sehr interessant und
lustige Sachen sind da möglich, wenn man
was wie die Build-ins einfach überschreibt.
Also ich habe
diesmal tatsächlich kein Modul
zum Picken, aber ich habe ein wunderschönes GitHub-Repository
entdeckt, was The Algorithms
heißt und da gibt es einen
Folder mit Python. Da gibt es quasi
alle Algorithmen, die man so
irgendwie mal für Python gebaut hat. Die sind jetzt alle
nicht perfekt implementiert oder
besonders schnell, aber man sieht
so ein bisschen, wie das Prinzip dahinter steckt.
Also, ob ihr jetzt Suchalgorithmen habt,
Suchalgorithmen, ja, oder Sortieralgorithmen,
oder für Webpringing, oder Matrizen,
oder mathematische Sachen, und Machine Learning,
oder Algebra, oder wie man mit Images was macht,
wie man Hashes errechnet, oder so,
welche gut sein sollen.
So, das steht alles drin.
Zahl, Verschlüsselung, Kompression.
Könnt ihr euch alles mal angucken, ist eine tolle Bibliothek.
Einfach so, Algorithms, Python und GitHub.
Sehr interessant.
Ach so, und was ich noch fast ganz vergessen habe,
wir haben ja letztes Mal über Environments gesprochen.
Und ich habe es tatsächlich geschafft, nach ein bisschen Struggle
meine Environment, ich habe ja eine große
Windows-Entwicklungs-Environment,
umzustellen auf PyInfo und Poetry
und habe das auch auf GitHub
mal dokumentiert, wie das denn eigentlich geht.
Falls ihr das irgendwie vorhabt, ich empfehle,
wenn ihr das mit Poetry machen wollt, schmeißt alles Python,
was ihr schon drauf habt, einmal weg,
weil es sonst Hakeligkeiten mit eurem Pfad
geben kann. Dann müsst ihr vielleicht auch einmal komplett aufräumen
und putzen, weil
die Dementierung
PyInfo,
das so ein bisschen komisch löst, die wird eure
ja, Windows-Libraries
mit einem grafischen Installer
dann installieren, also die Python-Version,
dass das ein bisschen anstrengend, aber dann passiert das alles automatisch
und ihr habt diesen ganzen Struggle nicht
und dann könnt ihr Portree und PyEnv
wunderbar kombinieren, auch mit
ja, eurer PowerShell.
Es geht aber leider nicht so gut mit Toko, also nehmt nicht
die Toko-Version, sondern versucht das, aber das GitHub-Repository
zu ziehen, kann ich empfehlen. Ich hab da auch ein paar
Skripte geschrieben, die das automatischer machen können.
Wollte ich noch mal so kurz
für die Menschen, die tatsächlich noch
mit Windows arbeiten. Ich habe
in NixOS reingeschaut, das gefällt mir
richtig gut. Ja, das ist auch eine sehr coole Idee.
Ja, dann bin ich
aber noch dabei, meine Price Implementierung zu bauen. Mal gucken,
ob ich das so
weiterführe.
Ja, aber das hat relativ wenig mit Suchmaschinen zu tun. Aber das war
so für den Pick der Woche. Haben wir irgendwas vergessen?
Ja,
mir ist jetzt doch eingefallen,
in dem Moment, wo ich gesagt habe, so haben wir nicht noch irgendwas vergessen.
Ich hatte schon das Gefühl, wir haben irgendwas vergessen.
Ja, haben wir auch. Aber egal.
Und zwar gibt es halt noch ein ganz
nicht unerheblich großen Teil
Volltext
suche, wo es nicht um Dinge
geht, die jetzt
ja so
traditionellerweise da so, also
dass man Queries hat, die man so gut in Tokens zerlegen kann
oder wo man halt Tokens
sucht,
sondern
solche Sachen wie
Autocomplete in der Suchbox
oder wo man
halt einfach nur ein paar Buchstaben hat und möchte das
halt finden.
oder man möchte halt irgendwie
einen Teil von einem Wort finden, irgendwo drin.
Und das ist halt nochmal so
ein bisschen anderes Problem und braucht halt ein bisschen
andere Datenstrukturen dafür.
Und
ja, das
vielleicht machen wir das auch einfach mal in anderen
Szenen.
Machen wir dieses Fass nicht nochmal auf.
Aber das hätte eigentlich eventuell auch noch dazu
gehört, weil das ist auch ein nicht unerheblich großer Teil,
der halt auch im Grunde
Es ist ja auch Volltext-Suche,
das ist nur ein bisschen anders.
Ja, okay.
Naja.
Ja, dann das nächste Mal.
Also wenn ihr Fragen dazu habt,
dann gerne wieder an
highlightpricepodcast.de,
das haben wir schon vorhin gesagt.
Mögt uns und folgt uns auf allen Dingen,
die wir so posten.
Schreibt uns, freut uns auf euch.
Bleibt uns gewogen,
hört uns immer morgens, mittags, nachts, abends.
Und ja, bis zum nächsten Mal.
Jo, alles klar.
Jo, tschüss.