Archive for the ‘Allgemein’ Category

Zu meiner Ueberraschung gibt’s das Wort tatsaechlich in der dtsch. Sprache und ich meine damit solche Seiten — eine andere Art der hier besprochenen „Abkuerzungen“.

Fuer die Analyse des Linknetzwerkes sind mir diese ein Dorn im Auge. Denn was haben Donald Fraser (der Geologe) und Don Fraser (der Eiskunstlaeufer) gemeinsam? Vermutlich nix, aber auf solchen Seiten werden die (beinahe) direkt miteinander verbunden. Im gesamten Linknetzwerk „treffen“ die beiden sicherlich frueher oder spaeter aufeinander, aber durch diese Seiten passiert das viel zu frueh. Das ist Schummeln und deswegen will ich die weg haben.

Zum Glueck gibt es zwei interne Wikipediaseiten die (fast) alle Dis­am­bi­gu­ie­rungsseiten auflisten. Hier ist die eine und dort ist andere. Also baute ich mir erstmal einen Datenmaehdrescher der mir die relevante Information von den beiden Seiten beschaffte.
Apropos, als Data Scientist ist es total normal fuer mich, spezielle, der Aufgabe angepasste, Werkzeuge zu schreiben um die Analyse ueberhaupt erst durchfuehren zu kønnen. Das war ja bei den Stromdaten damals genauso. Was der Unterschied zu den Data Analysts ist, kønnt ihr, meine lieben Leserinnen und Leser, euch sicher selber denken.

Wieauchimmer, auf diese Art und Weise fand ich mehr als 400,000 Dis­am­bi­gu­ie­rungsseiten.

Das Problem ist nun, dass die beiden Seiten NICHT alle Dis­am­bi­gu­ie­rungsseiten auffuehren. Denn dafuer muss bei der Erstellung einer solchen Seite eine bestimmte Markierung gesetzt werden und das machen Nutzer manchmal nicht.

Ganz im Allgemeinen ist das uebrigens ein zweigeteiltes Elitenproblem! Zum Einen muss man wissen wie man die Wikipedia schreibt. Somit findet Wissen welches die sog. Elite nicht interessiert keinen Eingang. Ein Beispiel waere Folklore in den Favelas. Ich bin ueberzeugt, dass es die gibt, konnte dazu aber auf die Schnelle nix finden. Und was man nicht schnell findet gibt’s nicht — genauso wie die Ergebnisse auf Seite 2 der Suche nicht existieren.
Zum Zweiten werden „kuenstliche“ „Intelligenzen“ mit diesen Daten trainiert! Und die Wikipedia ist vornehmlich Cisgender, maennlich und europid. Aber ich schwiffte ab.

Ich habe dann ein paar Tage einen ursten Aufwand betrieben, um Heuristiken fuer Dis­am­bi­gu­ie­rungsseiten zu finden, die nicht in den beiden erwaehnten Listen zu finden sind. Ich fand so ca. 15,000 … und ich fand auch etliche Seiten die von diesen Heuristiken falsch erkannt wurden. Weil ca. 15,000 verglichen mit 400,000 zum Glueck nicht richtig viel ist, entschied ich mich deswegen die alle drin zu lassen und dem bereits mehrfach erwaehnten Fehler zuzufuehren … *seufz* … lieber lasse ich einen Schuldigen, dessen Schuld nicht eindeutig bewiesen ist gehen, als dass ich einen Unschuldigen aus Versehen einsperre … diese Meinung habe ich uebrigens auch bei anderen Themen.

Unter den Seiten die ich drin lasse, fallen leider auch solche Seiten wie die Alphabetical list of municipalities of Italy (7963 Links) oder die IUCN Red List vulnerable species (Animalia) (5244 Links) oder der Index of Singapore-related articles (welche mit 11,521 bei Weitem die meisten Links hat).
Ebenso fand ich mehr als 286-tausend Artikel die als erstes eine Jahreszahl in sich haben und welche die Events in bestimmten Bereichen fuer jedes Jahr aufzaehlen. Als Beispiele seien 1966 in film (1043 Links), 1985 in music (1477 Links), 2017–18 Isle of Man Football League (47 Links) genannt. Mit 2027 in rail transport (33 Links) laeszt sogar die Zukunft schon von sich høren.

Dann dachte ich (wieder einmal), dass ich alle Listen, Indices und Titel die mit Jahren anfangen rausfiltern kønnte, und verbrachte einige Zeit damit Heuristiken dafuer zu finden. Leider fand ich auch hier wieder heraus, dass es da so viele Ausnahmen gibt, dass das unpraktisch war.
Andererseits, kønnte bei all diesen Seiten durchaus argumentiert werden, dass die eine Berechtigung in der Analyse haben, weil sie thematisch sortiert sind. Anders als das Mr. Fraser Beispiel oben schaffen diese Seiten also keine „Abkuerzungen“ zu thematisch nicht zusammenhaengenden Dingen. Dieser ad hoc Grund reichte mir, denn ich hatte genug davon davon mir Wikipediaseiten anzuschauen und rauszufinden warum die eine Ausnahme sind … *seufz*.

Jut, nun hatte ich also alle Dis­am­bi­gu­ie­rungsseiten gefunden und konnte die (und Links dorthin) løschen. An dieser Stelle habe ich mich dann auch nochmal um die Umleitungen gekuemmert. Die allermeisten hatte ich schon frueh mit den richtigen Links erstattet (bzw. geløscht). Ein paar Sachen waren aber noch offen (bspw. hatte ich Umleitungen ganz am Anfang noch ohne Ersetzung der Spezialbuchstaben betrachtet). Auszerdem habe ich noch ein zweites Mal interne Seiten geløscht (prinzipiell konnten welche auftauchen nach der Erstattung der Umleitungen) und mich auch nochmal um die Korrektur von Nutzerfehler gekuemmert.
Durch all das war aber nicht mehr viel zu holen. Die genauen Zahlen habe ich vergessen, aber mich duenkt die zuletzt beschriebene Aktion verkleinerte die Anzahl der Links um 12 … oder 16 oder so eine andere kleine Zahl. Aber ’s ist natuerlich immer schøn, wenn die Daten eine etwas bessere Qualitaet haben.

Nach dieser Saeuberung der Daten blieben noch 5,801,114 Seiten zurueck (von ehemals 6,212,282) in denen insgesamt 181,064,753 Links erscheinen (von ehedem 188,777,960).
Die Grøsze der strukturierten Daten konnte von 4.9 GB geringfuegig auf 4.5 GB verringert werden. Aber gerade hier zaehlt jedes bisschen :)

Somit war ich beinahe am Ende der Vorbetrachtungen der Rohdaten angekommen. Es verblieben nur noch zwei Sachen. Links die keiner Wikipediaseite zugeordnet werden kønnen und Seiten die keine Links haben und auch nicht zitiert werden. Beides kommt vor und keines davon muss ich mitschleppen. Erstere nicht, weil es da nix zu untersuchen gibt. Letztere nicht, weil deren Linknetzwerk genau null Verbindungen hat. Aber mehr dazu beim naechsten Mal.

Urspruenglich dachte ich mir, dass ich bei meinen Betrachtungen einfach alles klein schreibe. Der Grund ist, dass Menschen dazu tendieren, Grosz- und Kleinschreibung wild durcheinander zu wuerfeln und auf diese Art und Weise wollte ich diese Fehlerquelle vermeiden.

Die Suchfunktion in Wikipedia kuemmert das nicht. Aber bei meiner Analyse ist das wichtig in Betracht zu ziehen, damit ein verlinkter Link richtig einem Titel zugeordnet werden kann.

Doch dann stolperte ich ueber JoAn Wood der ueberhaupt nichts mit Joan Wood zu tun hat … Oder war es der Unterschied zwischen UMBEL und Umbel? … Ach nein, mich duenkt es war Testing the waters vs. Testing the Waters … *seufz*.
Davon gibt es nicht viele Faelle, weniger als 2200. Aber schon einer haette gereicht um meine obige Annahme als nicht brauchbar hinzustellen. Somit musste ich also doch das (ungleich schwerere) Problem der Nutzerschludrigkeiten løsen.

Meine erste Idee war, dass ich mir den Hamming-Abstand zunutze machen kønnte. Dieser misst …

[…] the minimum number of substitutions required to change one string into the other […].

Die oben erwaehnten ca. 2200 Beispiele wo das-Gleiche-blosz-anders richtig ist, sind mir bekannt. Die kann ich also einfach auslassen bei der Berechnung des Hamming Abstands (damit da nix falsch gemacht wird).
Ich programmierte das dann fix und zunaechst schien das auch zu funktionieren. Bspw. erkannte der Algorithmus, dass „Takashi Fujiwara“ vermutlich eigentlich „Takeshi Fujiwara“ sein soll. Doch dann stolperte ich ueber Voss IL, welches zu Moss IL werden sollte. Ich bemerkte das natuerlich nur, weil ich „lokales Wissen“ habe, denn ich wohne in Norwegen. Voss und Moss sind Ortsnamen und „IL“ bedeutet „idrettslag“ — Sportverein. Zwar hat nur Moss IL eine Seite in Wikipedia, aber Voss IL wird hier zumindest erwaehnt.
Ein anderes (lustiges) Beispiel warum der Hamming-Abstand fuer meine Zwecke nicht brauchbar ist, ist die Umwandlung von „Macon, Ohio“. Dies kønnte entweder „Mason, Ohio“ werden oder „Bacon, Ohio„. Welches ist richtig?
Satz mit ‚X‘: das war wohl nix … *seufz*.

Der Grund warum mir das so am Herzen liegt ist folgender. Ganz am Ende werde ich alle Links die keiner echten Wikipediaseite entsprechen rausschmeiszen. Und die hier beschriebenen Faelle wuerden alle faelschlicherweise als „gibt’s nicht“ erkannt und damit zu Unrecht ausgespart werden.

Ich machte mich nun also (wieder einmal) daran (semi-)manuell zu schauen, was Nutzer denn falsch schreiben kønnten und Heuristiken zu finden die dies verallgemeinern.
Den ganz oben beschriebenen Fall der falschen Grosz- und Kleinschreibung konnte ich mit genau der Methode (Vergleich mit Wikipediatiteln wenn alles klein geschrieben ist) auch løsen.
Ein weiterer Fall war, dass anstelle eines Leerzeichens ein Untersrich < _ > verwendet wurde. Und ein letzter Fall war, dass Leerzeichen vor oder nach dem eigentlichen Link folgten.
All diese Faelle (insb. Letzterer) werden vom menschlichen Gehirn sofort und (meist) ohne Weiteres erkannt und dem eigentlichen Fall zugeordnet. Aber wenn man einer Maschine das nicht sagt, dann ist fuer diese < FooBar > etwas ganz anderes als < Foo Bar >, < foobar > oder < foo_bar >.
Das ist ein schøn einfaches Beispiel, welches einen wichtigen Teil meiner Arbeit beschriebt. Dieser Teil besteht darin, dass ich die parallelen Prozesse im Gehirn in ihre fundamentalen Einzelteile „zerpfluecke“. Diese werden dann linearisiert, damit der Gesamtprozess von einer Maschine ausgefuehrt werden kann. Und das ist genau das was ich als Physiker gelernt habe: Modellbildung.

Dies ist eine gute Gelegenheit, mal wieder ueber den Unterschied zwischen Data Scientists und (vielen) Data Analysts herzuziehen. Ich als Data Scientist sehe es als integralen Bestandteil meiner Arbeit an immer und immer wieder durch die Rohdaten durchzugehen um diese zu verstehen. Letzteres hilft mir Muster zu erkennen um dann verallgemeinerte Modelle zu erstellen, die besagte Rohdaten beschreiben (und nicht vom Quatsch der Nutzer verwirrt werden). Diese Modelle muessen dann in langer (semi-)manueller Arbeit getestet, erweitert und verfeinert werden. Und all dies bevor ueberhaupt eine einzige Analyse stattgefunden hat. Analyse in dem Sinne, wie es der Auftraggeber (vulgo: die Chefin) versteht. All dies erfordert natuerlich meist selbstgeschriebene Programme.
Data Analysts hingegen bekommen die Rohdaten und wenden dann die bekannten Modelle darauf an. Letztere wurden bspw. im Studium erlernt oder sind in der benutzten Software eingebaut.
Der Unterschied ist also, dass ich nicht weisz was ich habe und das erstmal beschreiben muss. Data Analysts hingegen haben bereits eine (mindestens ungefaehre) Vorstellung davon was die Rohdaten beschreiben und finden dann halt „nur“ die Parameter der beschreibenden Modelle die am besten zu den Rohdaten passen.
Bitte nicht missverstehen, das kann auch super komplex sein. Ist aber eine fundamental andere Herangehensweise an Problemstellungen, die sich fuer normale Menschen erstmal voll gleich anhøren.

Aber genug dazu … ach so, beinhae haette ich vergessen es zu sagen. Die letzten beiden Faelle wurden dann auch noch fuer den alles-ist-klein-geschrieben Fall untersucht.

Ein Problem verblieb: Sonderzeichen … (die schon wieder *seufz*). Ihr, meine lieben Leserinnen und Leser, møget bei Wikipedia doch mal nach „Zaprezyn“ suchen. Dort werdet ihr dann direkt auf die Seite von „Zaprężyn“ umgeleitet (man beachte den Haken unter dem „e“ und dem Punkt ueber dem „z“). Umleitungen hatte ich vor einer Weile behandelt, es ist also alles richtig und dieses spezifische Beispiel ist auch kein Problem. Das Problem besteht fuer solche Falle wo die Falschschreibung keine Umleitung hat. Denn „Kringel unter dem e“ kønnte ich zwar fuer diesen speziellen Fall programmieren, aber nicht fuer alle møglichen Sonderzeichen.
Nun ja, wieder einmal musste ich auf das alte Statstikmantra zurueckfallen: wenn-das-haeufig-vorkommen-wuerde-dann-waere-ich-viel-øfter-drueber-gestolpert-aber-so-kann-ich-diese-Faelle-einfach-nicht-beachten-und-in-den-Fehler-druecken. … Bin ich froh, dass es dieses Mantra gibt ;) .

Zum Abschluss seien die konkreten Zahlen genannt. Insgesamt hatte ich anfangs 189,887,300 Links. Davon wurden ca. 71% erkannt (134,489,097 um genau zu sein). Die waren also richtig geschrieben. Mit den oben beschriebenen Methoden konnten weitere 16,909,568 Links richtig zugeordnet werden. Damit fallen die dann am Ende nicht weg. Toll wa! Mal wieder kann ich sagen: Science to the Rescue :)

Aber Moment … da fehlen doch noch 38,488,635 um auf die erwaehnte Gesamtzahl der Links zu kommen. Ein Grund fuer die Diskrepanz ist, dass nach der Korrektur 1,109,340 weniger Links vorhanden waren. Es war zu erwarten, dass es ab und zu vorkommt, dass ein Link von einer Seite einmal richtig und ein anderes Mal „falsch“ geschrieben ist. Vor der Korrektur wird das als zwei unterschiedliche Links angesehen und danach ist das ein und dasselbe und wird somit nur einmal gezaehlt. Fuer den Rest … Nun ja, diese Miniserie ist ja auch noch nicht beendet :P

Ach ja, als Letztes sei gesagt, dass dadurch die Grøsze der (strukturierten) Rohdaten ein kleines bisschen auf 4.9 GB reduziert wurde. Das ist doch auch was :)

Und als Allerletztes sei gesagt: alle „Takashi / Takeshi“ Faelle konnte ich damit natuerlich nicht finden und musste sie dem alle Reste verschlingenden Fehler uebergeben.

In kurz geht das Argument so:

[Computers] can only match the patterns they have learned, and they have limited capacity to learn more than just a few patterns. Humans are optimized for learning unlimited patterns, and then selecting the patterns we need to apply to deal with whatever situation we find ourselves in.

Der verlinkte Artikel fasst ziemlich gut einige der grøszeren bestehenden Herausforderungen diesbezueglich zusammen. Dort werden auch zwei Artikel von bzw. bzgl. Douglas Hofstadter verlinkt. Im ersten schreibt, dieser ueber die „Flachheit“ von google translate. Der zweite geht ueber seine jahrzehntelange Arbeit an sich. Beide lohnen sich zu lesen.

Aber dann ist da auch AlphaGo Zero.

The neural network initially knew nothing about Go beyond the rules. […] [it] only perceived the board’s stones, rather than having some rare human-programmed edge cases to help recognize unusual Go board positions. The AI […] [played] against itself until it could anticipate its own moves and how those moves would affect the game’s outcome.

Das was oben steht ist (mindestens heutzutage), im Allgemeinen richtig. Aber AlphaGo Zero hat von alleine Strategien erlernt wie man Go gewinnt. Und zwar nicht nur gegen einen anderen „dummen“ Computer, sondern gegen menschliche Meisterspieler. Und bereits die Vorgaengerversion hat Strategien gefunden, die in tausenden von Jahren, wer weisz wie viele Spieler und Meisterspieler die Go in-und-auswendig konnten und kannten und im Detail analysiert hatten, nicht gefunden haben!

Und Strategien sind nichts anderes als abstrakte Konzepte.
Sicherlich! Dieses Beispiel ist domaenenspezfisch, aber wenn man Erfahrung in genug Domaenen zusammen nimmt, hat man etwas, was mehr und mehr dem menschlichen Gehirn gleicht, aber dennoch ganz anders ist.
Voll spannend! Und der Mangel an Fantasie sollte uns nicht verfuehren zu glauben, dass das niemals passieren wird.

In den letzten Eintraegen in dieser Reihe legte ich dar, was ich alles tat im herauszufinden, ob das Projekt prinzipiell durchzufuehren ist. Dabei habe ich so einiges ueber die Struktur der Daten (an denen ich interessiert war) in der Wikipedia gelernt. Mit dem neuen Wissen machte ich mich nun daran noch mehr Sachen zu finden den ich „wegschmeiszen“ konnte.

Weil die Løschung der internen Wikipediaseiten so ein Erfolg war, dachte ich, dass da vielleicht noch sehr viel mehr zu holen ist. Ich schrieb Programme die mir halfen potentielle interne Seiten zu finden und diese danach zu bewerten ob es auch tatsaechliche interne Seiten sind. Trotz des (semi) automatisierten Prozesses verbrachte ich einige Tage viele Male damit durch die Daten zu gehen und (hunderte tausende) Wikipediaseiten anzuschauen. Dies natuerlich um sicher zu gehen, dass ich auch alles alles Interne finde bzw. dass ich nicht aus Versehen Seiten wegschmeisze, die wie interne Seiten aussehen, aber eigentlich keine sind. Letzteres ist wichtig, weil sich interne Seiten durch einen Doppelpunkt auszeichnen. Leider reicht das nicht aus, denn es gibt auch legitime Wikipediatitel die einen Doppelpunkt enthalten. Wissenschaftlich gesprochen wollte ich also Typ I und Typ II Fehler so weit wie møglich reduzieren.

Und au wacker! Ich fand so viele verschiedene „Kategorien“ von internen Seiten (oder solchen die dazu aehnlich sind). Beim letzten Mal verlinkte ich zu zwei der grøszten Kategorien, aber ich fand insgesamt 74 Schluesselwørter die interne Seiten auszeichnen. Wobei da auch ein paar externe Seiten dabei sind; bspw. zum Internet Archive oder zur IMDB und andere solche etablierten Quellen fuer Information im Netz. Hinzu kamen Links zu fremdsprachigen Wikipedias. Das waren zusaetzliche 336 (!) Schluesselwørter.

Das Resultat all der Arbeit war dann sehr enttaeuschend, denn ich konnte die Anzahl der erfassten Wikipediaseiten nur um drei (in Zahl(en): 3) und die darin erfassten Links nur um 380,231 auf 190,909,589 reduzieren. Wenn man nur das betrachtet, haette ich mir das auch sparen kønnen. Andererseits macht mich das auch ein bisschen stolz zu sehen, dass meine „Instinkte“ als Data Scientist so gut sind, dass ich schon fruehzeitig, ohne detaillierte Analyse, ein Gefuehl dafuer habe was wirklich relevant ist. Andererseits war es auch ein zu erwarten, dass die Reduzierung eher minimal ausfallen muss, denn ansonsten waere ich da viel eher drueber gestolpert (und es waere gar nicht bis zu diesem Schritt mitgeschleppt worden).

Eine weitere Sache auf die ich durch die „ist-das-Projekt-ueberhaupt-durchzufuehren“ Betrachtungen aufmerksam wurde ist, dass es ja Sonderzeichen gibt. Diese kønnen ganz normal geschrieben sein oder in HTML kodiert … *seufz*. Ein Beispiel waere das Ampersand welches manchmal so aussieht: < & > … und andere Male so: < &amp; >. Insgesamt erkannte ich 171 solcher Zeichen als relevant an. Gesehen habe _deutlich_ mehr. Am Ende hat mich das _sehr_ frustriert und um nicht noch verrueckter zu werder habe ich dann entschieden, dass alles was nicht unter diese 171 faellt wenig relevant sein muss und ich die in den 2%-10%-Fehler-oder-so packe wenn es das eine Mal normal und das andere Mal als HTML geschrieben ist.
An den obigen Zahlen veraenderte sich dadurch natuerlich ueberhaupt nichts. Aber die Qualitaet Rohdaten konnte ich damit steigern.

Desweiteren lernte ich dass Links direkt zu (den relevanten) Abschnitten eines Artikels gehen kønnen. Dies ist durch ein Octothorpe (lohnt sich zu lesen, ist kurz) auf diese Weise gekennzeichnet: Seite#Abschnitt … und hier ist ein Beispiel. Nun bin ich aber nur daran interessiert, wie die Seiten an sich untereinander verlinkt sind. Also ersetzte ich alle „Abschnittslinks“ mit den relevanten „Hauptseitenlinks“. Wenn dann auf einer Seite Letztere mehrfach auftreten (bspw. weil zu mehreren Abschnitten ein und derselben Wikipediaseite verlinkt wurde), dann habe ich das nur einmal in den Links fuer besagte Seite belassen.

Die Anzahl der insgesamt zu untersuchenden Wikipediaseiten veraenderte sich wiederum nicht und verblieb bei 6,212,282. Aber die Anzahl der insgesamt darin verlinkten Links konnte ein bisschen reduziert werden auf 189,887,300.

Wie gezeigt, hatten all die hier beschriebenen Aktionen nur relativ kleine Auswirkungen. Die Grøsze der Rohdaten (mit Struktur) konnte nur geringfuegig reduziert werden. So geringfuegig, dass sich dies auf der GB-Grøszenskale nicht bemerkbar machte und die Zahl bei 5.2 GB verblieb.

Beim letzten Mal erwaehnte ich interne Wikipediaseiten und dass ich die nicht in die Analyse mit einbeziehen will. Aber was ist das ueberhaupt? Zum Glueck ist das allgemeine Konzept erstmal ganz einfach zu erklaeren. Das sind bspw. Seiten wie diese hier, die Artikel zu spezifischen Kategorien auflisten. Das sind Entwuerfe von (nocht nicht publizierten) Artikeln oder Vorlagen zu bestimmten nuetzlichen Konzepten oder immer wiederkehrenden Dingen auf Wikipedia; diese Seite ist ein Beispiel fuer Letzteres. Das kønnen auch „Metawiki“-Seiten wie diese sein, die oft interne Diskussionen enthalten. Andere interne Links gehen bspw. zu Nutzern, zu Dateien, zum Mediawiki und sehr vielen anderen … øhm … Dingen.

Und alle diese Dinge will ich nicht mit dabei haben. Kein einziges davon faellt unter die Kategorie „Weltwissen und wie dieses verknuepft ist“. Blosz weil ich meine LaTeX Vorlagen toll finde, heiszt das noch lange nicht, dass das Weltwissen ist. Nicht mal dann, wenn andere die nuetzliche finden wuerden. Das Gleiche gilt fuer Dokumente die neue Angestellten einer Firma lesen muessen, um sich mit den Interna vertraut zu machen. Und all so’n Kram sind diese internen Seiten.
Manche Sachen sind nicht ganz so eindeutig (bspw. interne Links zum wiktionary) aber man kann auch da diskutieren, warum das allerhøchstens mittelbar mit dem Weltwissen verknuepft ist. Deswegen habe ich micht entschieden auch solche Grenzfaelle wegzulassen … … … aber ach, im Eifer eile ich zu weit voraus … denn eine genaue und (ziemlich) vollstaendige Untersuchung was denn nun wirklich alles zu internen Seiten gehørt geschah erst zu einem spaeteren Zeitpunkt.

Im wesentlichen war ich immer noch dabei zu schauen, ob die Analyse ueberhaupt durchgefuehrt werden kann. Deswegen entschied ich mich nur jene Links zu internen Seiten auszuschlieszen, ueber deren Schluesselwørter (bsw. Category, Template, User, Help etc.) ich bisher gestolpert bin. Der Hintergrund ist, dass wenn ich bereits in den „Voruntersuchungen“ ueber diese stolperte, denn muessen die sehr oft vorkommen.

Gluecklicherweise haben alle Links zu internen Seiten ein Erkennungszeichen, dass ihnen gemein ist: einen Doppelpunkt im Titel und davor das bereits erwaehnte Schluesselwort. Die waren also einigermaszen leicht auszumachen.

Zu meiner groszen Ueberraschung gibt es in der Wikipedia sehr viel intern zu besprechen, denn ich konnte die Anzahl der zu untersuchenden Seiten von 11,435,116 auf nur 6,212,285 reduzieren. AHA! Jetzt kommen wir in die Regionen, die als offizielle Anzahl aller Wikipediaseiten angegeben ist. Die Zahl der Links in diesen Seiten konnte betraechtlich reduziert werden auf 191,289,820 (von vorher 267,204,162).
Der grosze Sprung nach unten fuer Letzteres ist natuerlich dadurch zu erklaeren, dass Links doppelt wegfallen. Zum einen „fehlen pløtzlich“ alle Links auf den internen Seiten selbst (da Letztere komplett nicht weiter in Betracht gezogen werden). Zum anderen „fehlen“ dann damit die Links zu internen Seiten in normalen Wikipediaartikeln. Andererseits ist der Sprung auch nicht soooo grosz. Besagt die Verminderung um ca. 75 Millionen Links doch nur, dass jede interne Wikipediaseite im Durchschnitt 14 Links enthielt. Und Letzteres kann ich mir durchaus vorstellen.

Zum Abschluss noch die Zahlen wie sich die Grøsze der Daten mit dieser „Løschaktion“ entwickelt haben.

In Textform betrug die Grøsze vormals 5.6 GB und das konnte auf 3.5 GB reduziert werden. Die Grøsze der strukturierten Daten wurde verringert von ehemaligen 8.2 GB auf 5.2 GB.
WOHOO!!! Durch die Entfernung internen Krams konnte endlich die Anzahl der zu untersuchenden Seiten soweit reduziert werden, dass eine Analyse in einem schaffbaren Zeitrahmen stattfinden kann. Auszerdem wurde die Menge der zu untersuchenden Daten so klein, dass ich das endlich alles in den Arbeitsspeicher bekomme.

Damit endeten meine Voruntersuchungen und ich wusste, dass das Projekt prinzipiell durchfuehrbar ist. Jetzt machte ich mich an die Details, um sicherzustellen, dass die Rohdaten tatsaechlich nur das enthalten, was sie im Sinne der Problemstellung (die Vernetzung des Weltwissens) enthalten sollen.
Aber genug fuer heute, mehr dazu beim naechsten Mal.

Die letzten Beitraege in dieser Reihe und die folgenden waren/werden relativ technisch und gingen/gehen sehr ins Detail. Normalerweise wuerde ich nicht so sehr ins Detail gehen, wie ich die Daten fuer eine Analyse aufbereite und hantiere. Dieses Mal ist das anders, weil daran die Durchfuehrbarkeit des kompletten Projekts haengt. Hinzu kommt, dass dies insgesamt ein schønes Beispiel ist, wie aus einer komplexen „das geht ueberhaupt nicht“-Problemstellung  eine „das kønnte tatsaechlich was werden“-Løsung wird.
Aber der Reihe nach.

Aus den Rohdaten ziehe ich (ohne Bearbeitung) ca. 21 Millionen Titel in denen ca. 328 Millionen Links vorkommen. Man kann sich das also leicht vorstellen, dass selbst ein moderner Computer ein bisschen Zeit braucht um fuer nur _eine_ Wikipediaseite das komplette Netzwerk zu erforschen.
Fuer die Ueberlegungen wieviel Zeit das braucht, kann man leider nicht wirklich die Taktfrequenz des Prozessors nehmen. Denn die sagt nur aus, wie schnell der ein Bit „bearbeitet“ (im uebertragenen Sinne). Eine menschliche Anweisung sind aber viele interne Anweisungen und benøtigen viele Prozessorzyklen. Bspw. 1 + 1 = 2 ist im Prozessor: lies Inhalt an Speicherplatz A, lies Inhalt an Speicherplatz B, addiere die Werte, schreibe zu Speicherplatz C das Resultat, gib das ganze auf dem Schirm aus. Und DAS ist auch wieder nur eine vereinfachte Darstellung und besteht an und fuer sich wieder aus mehreren internen Schritten.

Eine Ueberschlagsrechnung was zu erwarten ist, kann man dennoch durchfuehren und das ist mglw. deutlich anschaulicher als abstrakte Instruktionen im Prozessor.
Die Rohdaten beinhalten ca 1,2 Milliarden Zeilen mit Text. Die Verarbeitung einer Zeile beinhaltet (ganz grob) das Lesen der Zeile, die Verarbeitung der Information und Entscheidungen ob da Zeug drin ist was ich haben will oder nicht. Ein Durchgang durch die kompletten Rohdaten benøtigt ca. 6000 Sekunden. Das bedeutet, dass das Pythonprogram ca. 200,000 Zeilen pro Sekunde verarbeiten kann.
Auch wenn die Erforschung des Linknetzwerks eine ganz andere Aufgabe ist, so ist der „Rechenaufwand“ sicherlich aehnlich und der folgende Vergleich ist durchaus aussagekraeftig.
Ich nehme also an, dass ich 200,000 Links pro Sekunde „verfolgen“ kann. Mit den oben erwaehnten 328 Millionen Links bedeutet dies, dass die Erforschung des Linknetzwerks nur EINER Seite ca. 1600 Sekunden dauert. Bei 21 Millionen Wikipediaseiten sind das dann fast 1100 Jahren die die komplette Analyse braucht.

Nun gebe ich zu, dass der Vergleich nicht ganz ok ist. Denn Input/Output (vulgo: lesen und schreiben auf die Festplatte/den Bildschirm) gehøren zu den Sachen die am laengsten bei der Datenverarbeitung dauern. Dies illustriert im Uebrigen auch sehr schøn, warum ich so darauf rumhacke, dass ich alles in den Arbeitsspeicher bekomme. Eben damit ich genau diesen „Flaschenhals“ vermeiden kann.
Nehmen wir also an, dass alles im Arbeitsspeicher ist und damit die Rechenzeit nur 1/100 betraegt (was schon in der richtigen Grøszenordnung liegt). Dann dauert die gesamte Analyse immer noch fast elf Jahre. Diese elf Jahre muss der Rechner durchgehend laufen.
Nehmen wir nun weiter an, dass nur ein Viertel der Webseiten analysiert werden muss (ca. 6 Millionen) und insgesamt nur 200 Millionen Links darin verlinkt sind. Dann braucht die Analyse des Linknetzwerks einer Webseite nur 10 Sekunden (wenn alles im Arbeitsspeicher ist) und alles kann in zwei Jahren fertig sein.

Zwei Jahre? DAS ist ein realistischer Zeitrahmen! Und wenn ich den Code optimiere und das auf mehreren Rechnern laufen lasse, dann brauche ich noch weniger Zeit.

So, nun wisst ihr, meine lieben Leserinnen und Leser beide Hauptgruende warum mir so sehr am Verstaendnis der Daten liegt. Die Menge der zu verarbeitenden Daten entscheidet darueber ob das Projekt durchfuehrbar ist oder nicht. Und den ganzen irrelevanten Kram muss ich auch deswegen rausbekommen, damit mir das nicht die Ergebnisse verfaelscht (das erwaehnte ich beim letzten Mal).

Die Erwaehnung irrelevanten Krams bringt mich nun endlich zu dem worueber ich eigentlich Schreiben wollte: Umleitungen … oder auf englisch: redirects.

Umleitungen sind (beinahe) unsichtbar. Nehmen wir als Beispiel wieder Sprevane vom letzten Mal. Das kann man in der Wikipediasuche auch mit einem „w“ anstelle eines „v“ schreiben. Man landet dennoch direkt bei der Seite die ich verlinkt habe. Wenn man auf diese Art und Weise dort hingelangt, dann sieht man zusaetzlich:

Drueckt man dort dann auf den Link, landet man hier

… und erfaehrt, warum man nicht dort sondern bei der Seite mit der anderen Schreibweise gelandet ist. Dies passiert alles intern und der Nutzer bekommt davon (fast) nix mit. Umleitungen sind somit nicht Teil des Weltwissens, wenn dieses denn (auf der Wikipedia) besprochen wird. Im Quellcode existieren diese natuerlich trotzdem, denn auch wenn das intern geschieht, so muss das ja doch irgendwo stehen, damit die Maschine weisz, was sie intern machen muss.

Das ist aber gut, denn es bedeutet, dass ich alle Titel die eine Umleitung sind entfernen kann. Damit fallen dann auch alle Links weg die auf diesen Umleitungsseiten stehen.
Es ist aber natuerlich zu beachten, dass ich bei den verbleibenden Links dann auch alle Umleitungsseiten mit den richtigen „Zielen“ ersetzen muss.

Umleitungen sind im Quellcode auch leicht zu erkennen, denn diese haben eine spezielle Markierung. Gut wa! Da kann ich also die Umleitungen unabhaengig von den anderen Sachen einsammeln.

Normalerweise gibt es auf der Umleitungsseite nur einen Link; den zur richtigen Seite. Manchmal steht da aber auch mehr. Nehmen wir als Beispiel Abdul Alhazred. Dort gibt es (verstaendlicherweise) diese beim letzten Mal erwaehnten Abschnitte nicht, welche als Markierung dienen um das Einsammeln von Daten am Ende einer Seite zu unterbinden.
Deswegen sammle ich die Links in der Box …

… auch mit ein. Das war unerwartet aber gut, denn es machte mich auf eine andere Sache aufmerksam die ich nicht brauche: Categories … oder allgemeiner: interne Wikipediaseiten. Dazu aber mehr beim naechsten Mal.

Insgesamt gibt es 9,385,391 Seiten in der Wikipedia die Umleitungen sind … o.O … das ist jetzt _deutlich_ mehr als ich erwartet habe. Das ist aber voll toll, denn dadurch reduziert sich die Anzahl der zu untersuchenden Wikipediaseiten auf 11,435,116 welche 267,204,162 Links beinhalten. Supergut!
Ach ja, verfolgt man meine genauen Zahlenangaben, dann sieht man, dass ich 23 Seiten zu viel habe (unter der Annahme, dass ich alle Umleitungen løsche). Das ist jetzt zwar doof, aber der Fehler ist so klein, dass ich das nicht weiter verfolgt habe. Die Wikipedia ist von Menschen gemacht und da erwarte ich (Schreib)Fehler.

Die Grøsze der Daten in Textform reduziert sich von 6.0 GB auf nur 5.6 GB und die Grøsze der strukturierten Daten geht runter auf 8.2 GB (von vormals 8.9 GB).

Waehrend ich mich darum kuemmerte, stolperte ich darueber, dass es im Quellcode Kommentare gibt und dass diese auch Links beinhalten kønnen … *seufz* menschengemachte Daten *doppelseufz* …
Kommentare haben zum Glueck auch eine Markierung im Quelltext und somit ist es relativ einfach die herauszufiltern. Mit nur 1363 Links die deswegen wegfallen handelt es sich dabei aber (unerwarteterweise) um kein groszes Problem. Die Anzahl der Titel veraendert sich dadurch natuerlich nicht und bei nur so ein paar weniger Links aendert sich auch die Grøsze der Daten nicht wirklich.

Aber genug fuer heute. Beim naechsten Mal mehr :) .

[…] understanding the surrounding scenes is not merely a task of image classification or object recognition. To perform actual tasks, it is critical for the robot to have a functional understanding of the visual scene.

Dieses Zitat ist aus dem Artikel „What can i do around here? Deep functional scene understanding for cognitive robots“ (*hust*) von Ye, C. et al. in 2017 IEEE International Conference on Robotics and Automation (ICRA), Singapore, 2017, pp. 4604–4611.

Diese beiden Aussagen druecken das aus, was die meisten Menschen vom Potential der Roboter halten. Mich duenkt insbesondere diejenigen, die von sich denken, dass sie informiert waeren.
Oder anders: „Jaja, Bilderkennung geht ja mittlerweile doch schon manchmal, aber das ist nicht relevant … und schon gar nicht fuer mich persønlich (!) … denn wenn das Bild nur ein bisschen anders ist, dann wird das Buttermesser als Elefant kategorisiert und mit ’nem Elefanten kann man kein Brot schmieren.“
Und das stimmt. Das ist ein ganz groszes Problem, wenn immer mehr Aufgaben von Robotern uebernommen werden. Ein Butterbrot illustriert die Schwere dieses Problems nicht, aber Geschichten davon, dass man bspw. keinen Kredit bekommt, weil man im falschen Stadtteil wohnt, oder dass man als potentieller Krimineller eingestuft wird, blosz weil man die falsche Hautfarbe hat, sind ja bekannt. Auch DIES ist nicht falsch zu verstehen, denn solche Sachen passierten lange bevor es Computer gab und passieren auch heute noch, selbst wenn keine Computer in den Entscheidungen involviert sind.
Worauf ich hinaus will, ich gebe den Kritikern durchaus recht. Gleichzeitig meine ich aber auch, dass dies eine Kopf-in-den-Sand-Methode ist. Die Menschheit arbeitet an diesem harten Problem und im oben zitierten Artikel sind die Autoren schon ein gutes Stueck voran gekommen.

Dort werden Kuechen als komplexe und interaktive Szenen genommen. Ein Beispiel fuer funktionelles Verstehen ist

[…] a round knoblike object indicates that an action of spherical grasping and perhaps turning could be applied to it […].

Und als Menschen erkennen wir …

[…] such functional areas in our daily environments with vision, so we can perform different actions and tasks.

Da muss man erstmal drauf kommen. Hørt sich leicht an, aber wir machen das ueberhaupt nicht bewusst. Wo ist der Unterschied zwischen einer Schuessel und einer Bratpfanne? Ist das Øffnen der Mikrowelle in der selben Aktionskategorie wie das Øffnen des Besteckfachs? Warum ist mein Gehirn ueberhaupt nicht damit beschaeftigt das auseinander zu klamuesern sondern macht das einfach? Nun ja, streng genommen klamuesert mein Gehirn das auseinander, aber das geschieht eben automatisch und unterbewusst nachdem wir das gelernt haben.

Und die Autoren des Artikels haben sich daran gemacht und versucht einem Computer beizubringen unterschiedliche Objekte in einer Kueche funktional zu erkennen.

Ihr bestes Modell hat Zeug zwar in nur ca. 32 % aller Faelle den richtigen Kategorien zuordnen kønnen, aber bei der Vielzahl von verschiedenen Aktionskategorien in einer Kueche, finde ich das schon bemerkenswert. So bemerkenswert, dass ich besagte Kopf-in-den-Sand-Strategie fuer all zu gefaehrlich halte. Natuerlich sind Resultate wie …

[…] a bulb […] is recognized as a “spherical grasp to open” functional area […]

… eine Bestaetigung genau dessen was ich oben schrieb. Aber wenn man bedenkt, dass …

[…] the bulb [was] not labeled with any specific functionality in the training data

… dann ist das kein Fehlschlag, sondern ein Erfolg! Genauso wie Kinder die Sandkuchen essen kein Fehlschlag sind, sondern nur eine von der Evolution als (meistens) erfolgreich erkannte und erprobte Strategie anwenden um zu lernen. Und trotz des Fehlschlags (Sand ist schlieszlich objektiv nicht essbar) erlauben wir den jungen Menschen nach ein paar Jahren Kuechenchef zu werden, Auto zu fahren oder neuen jungen Menschen Dinge beizubringen.

Und auf der Stufe sind (trainierte) Computer — Kleinkinder … und die werden auch mal grosz und kønnen dann alles was auch wir kønnen. Toll wa!

Beim letzten Mal bin ich einen groszen Teil der fuer die Bearbeitung der Problemstellung irrelevanten Information losgeworden. Anstatt die kompletten Texte der Wikipedia in die Betrachtungen einzubeziehen habe ich nur alle Titel und die dazugehørigen Links aus den Daten herausgezogen. Es stellte sich dann heraus, dass das immer noch eine zu grosze Datenmenge war um die zu bearbeiten. Auszerdem stimmte die Anzahl der Wikipediatitel mit fast 21 Millionen nicht ueberein mit den offiziellen ca. 6 Millionen.

Letzteres machte mich stutzig und ich schaute mir die verbliebenen Daten mal genauer an. Als allererstes vielen mir zwei Dinge auf. Vor dem eigentlichen Titel gibt es im Code jeder Wikipedia noch mehr „Steuerelemente“. Dort kønnen prinzipiell auch Links auftauchen. Ebenso muss nach dem Titel nicht direkt der Text der eigentlichen Seite anfangen. Und in diesem Teil kønnen prinzipiell auch Links auftauchen.
Dieses Problem war einfach zu løsen denn das eigentliche Textfeld beginnt immer mit diesem Steuerelement:

<text bytes=

Da konnte ich also einfach sagen, dass Links erst dann aufgenommen werden sollen, wenn diese Markierung passiert ist.

Die zweite Sache die mir auffiel war … mhm … schwerwiegender und weniger einfach zu løsen. Als Beispiel soll der Artikel ueber die Sprevane dienen. Ganz am Ende, nach dem eigentlichen Artikel findet sich diese weiterfuehrende Infobox:

Solche Infoboxen gibt es auf vielen Seiten und zu vielen Themen. Das ist zwar gut und soll da auch stehen, aber fuer die Problemstellung ist das eher irrefuehrend. Ich wollte wissen, wie man aus den eigentlichen Texten von einer Wikipediaseiten zu jeder anderen kommt. Solche Infoboxen fuehlen sich da an wie „schummeln“, weil man damit ja gleich ganz total woanders „hinspringen“ kann.
Lange Rede kurzer Sinn, die wollte ich also nicht dabei haben. Dummerweise haben die keine Markierung im Quellcode.

Zur Hilfe kam mir eine andere Sache, die ich auch nicht dabei haben wollte (und zwar von Anfang an nicht). Im obigen Beispiel ist es der mit „See also“ bezeichnete Abschnitt. Das ist thematisch zwar auch immer passend, aber ebenso eine „unerlaubte Abkuerzung“.
Nun haben aber nicht alle Artikel solche einen Abschnitt. Anstatt dessen gibt es andere, aehnliche Paragraphen, die in die selbe Kategorie fallen. Diese sind „References“, „Further reading“, „‚External links“ und „Sources“. In den allerallermeisten Faellen ist eins davon immer dabei. Und diese Abschnitte stehen (zumindest bei den vielen hunderten Stichproben die ich gemacht habe im Laufe des Projekts) auch immer ganz am Ende (vor møglichen Infoboxen). Wenn doch ein paar ein paar ganz wenige „durchgehen“, entweder weil so ein Abschnitt doch nicht auftaucht, oder weil der nicht ganz am Ende steht, dann ist das auch nicht soo schlimm. Ist halt so bei Daten aus der echten Welt … das geht dann in den immer angenommenen 10-Prozent-Fehler. Ist ja schlieszlich keine Bruecke die ich hier baue.
Und welche Blueten das treiben kann, kann man an diesem Beispiel, welches alle fuenf „Endabschnitte“ und gar sekundaere und tertiaere Quellenangaben hat o.O .

Somit hatte ich also meine Markierung; ich hørte einfach auf Links mit dazuzunehmen, wenn einer von den obigen fuenf Abschnitten erreicht war.

Die Anzahl der Titel blieb mit 20,820,530 natuerlich die Selbe, aber die Anzahl aller in Betracht gezogenen Links reduzierte sich um ueber 15 % von urspruenglich 327,784,045 auf 277,321,420.

Ich mache dies alles so im Detail, weil ich genau wissen møchte, was meine Daten die ich letztlich analysieren werde eigentlich beinhalten. Denn das wird die Resultate beeinflussen!

Ach ja, die Grøsze der Daten in Textform reduziert sich durch diesen Schritt nochmals betraechtlich von 7.5 GB auf nur 6.0 GB. Die (relevante) Grøsze der strukturierten Daten geht runter auf 8.9 GB (von ehemals 10.8 GB). Toll wa! Bald bin ich in Bereichen, wo ich alles gleichzeitig im Arbeitsspeicher halten kann :) .

Vor einiger Zeit kaufte ich mir eine Playstation 4. Am Anfang ist die noch ganz jungfraeulich. Trotz lanjaehrigen Zockens (das muesste ich auch mal aktualisieren) auf der Playstation 3 wurde ich (verstaendlicherweise) so begrueszt:

Und als ich mir meine Pokale anschauen wollte wurde mir gesagt:

Gut zu wissen.

Zum Glueck (???) sind meine Pokale „auf dem Server“ gespeichert. Die Information konnte also schwuppdiwupps runtergeladen werden und dann war mein System auf dem aktuellen Stand.
Ich fand das ein bisschen witzig, denn „0 Trophies“ sehe ich nicht so oft.

Høhø! Voll lustig so’n Markow-Ketten-Generator. Sieht man doch wohl voll, dass das totaler Murks wird, wenn das naechste Wort nach einer Wahrscheinlichkeit berechnet wird.
Diese Domaene ist den Menschen vorbehalten, denn laengere, zusammenhaengende Texte zu schreiben erfordert ein ordentliches Textverstaendnis.

Nun ja, der heisze Scheisz ist seit ein paar Monaten GPT-3.

Hier sind etliche Beispiele fuer Dialoge, Horoskope, Gedichte, Kritiken etc. pp. zu finden.

Ganz toll ist auch, dass man GPT-3 sagen kann, dass es die Antwort in einem bestimmten Stil schreiben soll. Und dann kann man sich von Marie Curie Strahlung erklaeren lassen, H.G. Well zur Inspiration fuer seine Buecher befragen, oder Leibniz‘ Meinung bzgl. des wahren Entdeckers der Infinitesimalrechnung in Erfahrung bringen. Letzteres lohnt sich wirklich zu lesen. Aber Achtung, er hat da eine sehr spezifische Meinung und laeszt sich nicht die Butter vom Brot nehmen. Und wem das nicht reicht, der kann den Hulk fragen, warum er denn immer alles zerschmettern will.

Zur Zeit ist es noch so, dass eine Zusammenarbeit zwischen GPT-3 und einem Menschen (als Redakteur) die besten Ergebnisse liefert. Hier kann man eine Kurzgeschichte als Produkt einer solchen Kollaboration lesen.

Bei den Beispielen kønnte man ja jetzt sagen: „Ach das ist ja nur Quatsch, da ist das nicht so schlimm; richtige Informationen die auch in der Zeitung stehen sind auszer Reichweite von Maschinen“.
Ja, kønnte man sagen … aber dann empfehle ich diesen kurzen Artikel im Guardian dazu … lohnt sich zu lesen. Nicht des Inhalts, sondern der Implikationen wegen!