Das Archiv, auf dem diese App gebaut wurde, umfasst 314.391 Dateien: etwa 223.000 Fotos und 91.000 Videos, auf einer externen 6-TB-Festplatte. Es ist die gesamte visuelle Aufzeichnung einer Familie, und wie viele Familien durchliefen sie zwei sehr unterschiedliche Epochen, sie aufzubewahren.
Von 2004 bis 2016 bekam jedes Ereignis seinen eigenen Ordner, von Hand benannt, am Tag danach: 2012-04 — der Frühlingsausflug, so etwas. Etwa 600 davon. Dann, irgendwann um 2016, hörten die Ordner auf. Was sie ersetzte, war der moderne Standard: riesige, flache Handy-Backup-Dumps, Tausende Dateien namens IMG_4471.HEIC, gruppiert nach nichts außer dem Datumsbereich, in dem gerade ein Backup lief. (Wenn deine jüngeren Jahre noch auf dem Handy selbst gefangen sind, deckt die iPhone-Anleitung zum Auslagern ab, wie du sie auf die Festplatte bekommst.)
Der naheliegende Plan für ein Tool wie dieses ist, Ereignisse automatisch zu erkennen und für das gesamte Archiv automatisch Namen zu erzeugen, für die benannte Ära genauso wie für die Dump-Ära. Was ich vorher nicht erwartet hatte, war, dass die benannte Ära nicht nur schöner anzusehen war — sie war ein beschrifteter Datensatz, der zwölf Jahre tief kostenlos herumlag.
Ground Truth, keine Vermutung
Sechshundert von Menschen gezogene Grenzen dessen, was als „ein Ereignis" zählt, sind genau die Art von Sache, für die man normalerweise bezahlen würde. Diese Familie hatte schon die Arbeit erledigt, zu entscheiden, Ereignis für Ereignis, wo ein Moment endet und der nächste beginnt. Also habe ich, statt einen Ereignis-Clustering-Ansatz von der Stange zu wählen und zu hoffen, dass er sich richtig anfühlt, die benannten Ordner als Ground Truth dafür behandelt, wie genau diese Familie Zeit in Ereignisse aufteilt, und direkt an ihnen kalibriert.
Der Clustering-Ansatz selbst ist bewusst einfach: ein Zeitlücken-Durchlauf, der Fotos ins selbe Ereignis gruppiert, solange die Lücke zwischen aufeinanderfolgenden Zeitstempeln unter einer Schwelle bleibt. Der einzige echte Regler ist, wo man diese Lücke setzt. Ich habe es auf die langweilige, korrekte Art gemessen — paarweise Co-Mitgliedschafts-Übereinstimmung. Für jedes Fotopaar in der benannten Ära prüfen, ob die menschliche Ordnertrennung mit der Trennung des Algorithmus übereinstimmt (beide zusammen oder beide getrennt), und den übereinstimmenden Anteil bewerten. Die Schwelle durchfahren, die Kurve plotten, das Maximum nehmen.
Das Maximum lag bei einer 24-Stunden-Lücke, mit einem F1 von 0,93 gegenüber den benannten Ordnern. Das ist keine Kennzahl aus einer Fachveröffentlichung — es ist eine Zahl, kalibriert an zwölf Jahren eigener Entscheidungen einer Familie darüber, wo ihre Ereignisse beginnen und enden. Was genau der Punkt ist: Die „richtige" Clustering-Schwelle ist nicht universell, sie ist eine Eigenschaft davon, wie eine bestimmte Familie lebt. Diese Familie teilt einen zweitägigen Ausflug offenbar nicht in zwei Ereignisse, nur weil sie zwischendurch irgendwo geschlafen hat. Eine 24-Stunden-Lücke erfasst das. Die benannten Ordner einer anderen Familie könnten ihr Maximum ganz woanders haben, und die App ist so gebaut, dass sie pro Archiv neu misst, statt einen Standardwert anzunehmen.
Sobald Ereignisse so clustern, wie die Familie sie schon selbst clustert, ist die Benennung das nächste Problem, und derselbe Trick greift wieder: Die 600 benannten Ordner sind nicht nur Grenzen, sie sind ein Stilleitfaden. 2012-04 — der Frühlingsausflug sagt dir, dass die Konvention der Familie Datumspräfix, Gedankenstrich, Kleinschreibung, kurz und konkret statt allgemein ist ("der Frühlingsausflug", nicht "Familienausflug"). Die automatische Benennung für das unbenannte Jahrzehnt lernt diese Stimme, statt eine generische aufzuzwingen.
Die Fallstricke, die alles leise verfälscht hätten
Drei Dinge sind beim Bauen daran aufgetaucht, die es wert sind, aufgeschrieben zu werden, weil keine davon sichtbar ist, bis man gezielt danach sucht, und alle drei die Zeitleiste still degradiert hätten, wenn ich der naheliegenden Wahrheitsquelle vertraut hätte.
Kamera-Uhren lügen, Ordnernamen nicht. In der benannten Ära lagen Kamera-Uhren manchmal ein Jahr daneben — nicht wild daneben, nur so falsch, wie eine Kamera-Uhr falsch geht, wenn niemand sie nach einem Batteriewechsel oder einer Reise über eine Datumsgrenze zurücksetzt. Die Lösung war, EXIF nicht mehr standardmäßig als Wahrheit für die Datierung zu vertrauen und statt dessen das von Menschenhand eingetippte Datumspräfix im Ordnernamen gewinnen zu lassen, wann immer die beiden nicht übereinstimmen. Die Person, die 2012-04 in einen Ordnernamen eintippte, in der Woche, in der es passierte, ist ein besserer Zeuge als die interne Uhr einer Kamera, die seit Jahren nicht überprüft wurde.
Digitalisierte Medien tragen das falsche Datum zweimal. Alte Camcorder-Kassetten, später digitalisiert, sind schlimmer: Der eigene Zeitstempel der Datei spiegelt wider, wann die Digitalisierung stattfand, nicht wann das Material aufgenommen wurde. Für diese Dateiklasse ist EXIF nicht nur gelegentlich falsch, es ist auf eine bestimmte, strukturelle Art falsch. Die Lösung hat dieselbe Form wie die Kamera-Uhren-Lösung, eine Ebene höher: Für gescannte und digitalisierte Medien überschreibt der Jahresordner, unter dem die Familie es eingeordnet hat, den eigenen Zeitstempel der Datei, weil der Ordner die Erinnerung beschreibt und der Zeitstempel die Scan-Sitzung.
Ausflüge brauchen eine Definition von „Zuhause", die sich nicht von Begeisterung täuschen lässt. Um einen Ausflug als Ausflug zu erkennen — eine Abweichung vom normalen Leben —, muss die App wissen, wo „normales Leben" war, und das verschiebt sich über 22 Jahre, während eine Familie umzieht. Der naive Ansatz, Fotos pro Ort zu zählen, scheitert auf eine offensichtliche Art, sobald man darüber nachdenkt: Ein fünftägiger Urlaub erzeugt weit mehr Fotos als fünf gewöhnliche Tage zu Hause, sodass ein Ort, den eine Familie einmal für eine Woche besucht hat, leicht das Haus überstimmen könnte, in dem sie tatsächlich sechs Monate lang gelebt hat. Die Lösung ist ein Zuhause-Modell, das pro Halbjahr abstimmt, anhand unterschiedlicher an einem Ort verbrachter Tage, nicht anhand von Fotoanzahlen. Ein Ort zählt nur dann als „Zuhause", wenn an vielen verschiedenen Tagen dort gelebt wurde, nicht wenn er an wenigen davon viel fotografiert wurde. Genau dieser eine Tausch — Tage statt Fotos — ist es, der es einem Ausflug erlaubt, korrekt als Abweichung von zu Hause erkannt zu werden, statt still umzuschreiben, wo Zuhause war.
Nichts davon verallgemeinert sich zu „hier ist der korrekte Schwellenwert, verschick ihn." Was sich verallgemeinert, ist die Methode: Wenn ein Teil eines Archivs von den Menschen, die es erlebt haben, von Hand beschriftet wurde, ist dieser Teil nicht nur schöner, er ist Ground Truth, und es lohnt sich, den zusätzlichen Schritt zu gehen, daran zu messen, statt anzunehmen, ein Standardwert sei nah genug. Die anderen zwanzigtausend Dateien in einem typischen Familienarchiv würden nie die sorgfältige Aufmerksamkeit eines Betreuers bekommen. Aber zwölf Jahre von einer Person meistens schon.