Archiv

Kategorien

Mehr als 0 und 1

Letzte Postings

für gesamten Blog
You are here: Beats Weblog

Spass mit Graphen

19 July 2024 - Version 2 - BeatDoebeli

Diesen Sommer nehme ich mir wieder mal etwas Zeit, um an der Funktionalität des Biblionetzes herumzubasteln (etwas, wozu ich im normalen Arbeitsalltag bereits seit längerem nicht mehr komme).

Fokus der Sommeraktion sind die Graphen im Biblionetz, d.h. die Grafiken, die versuchen Zusammenhänge von Begriffen oder Publikationen oder Personen zu visualisieren. Seit vielen Jahren benutze ich dazu die Bibliothek GraphViz (Biblionetz:w01582). Früher habe ich damit serverseitig PNG-Bilder generieren lassen, seit einigen Jahren sind es SVG-Grafiken. Diese Grafiken werden einerseits eingebettet in einzelne Biblionetzseiten angezeigt, andererseits gibt es die Möglichkeit, die Grafik auch bildschirmfüllend anzuzeigen.

So weit, so gut. Die Interaktionsmöglichkeiten mit SVG-Grafiken sind im Biblionetz aber etwas beschränkt. So lassen sie sich zoomen und auf einzelne verlinkte Objekte klicken, mehr ist da aber nicht. Für mehr Interaktivität bei Graphen habe ich bereits vor einigen Jahren die Bibliothek vis.js ins Biblionetz integriert und z.B. bei Begriffsnetzwerken verwendet. Bisherige Vorteile gegenüber SVG-Grafiken: Einzelne Knoten liessen sich verschieben und die Graphen waberten lustig auf der Seite umher (mehr visuelles Gimmick als aktueller Nutzen),.

Zitationsgraphen

In den vergangenen Tagen habe ich nun die Nutzung von vis.js im Biblionetz massiv ausgebaut. So sind nun auch Zitationsgraphen neu auch mit vis.js implementiert. In einem einfachen Fall (Biblionetz:b07160) sieht das so aus (über die Darstellungsdetails lässt sich streiten):

graphspass01.png
Zitationsgraph als SVG
graphspass02.png
Zitationsgraph als vis.js-Objekt
(Hier nur Screenshot)

Interessanter wird es bei grösseren Zitationsgraphen, denn hier zeigen sich Unterschiede bei den verfügbaren Layout-Algorithmen der beiden Bibliotheken als auch interaktive Funktionen, die ich derzeit nur bei vis.js habe. Hier ein etwas grösserer Graph als SVG-Grafik (Screenshot):


Zitationsgraph von Biblionetz:b07000 als SVG

Der gleiche Graph gerendert von vis.js (Auch wieder nur ein Screenshot):


Zitationsgraph von Biblionetz:b07000 als vis.js-Objekt

Ich finde es schon nur spannend, wie unterschiedlich die beiden Bibliotheken den identischen Graphen rendern (mehr dazu später). Der Mehrwert von vis.js zeigt sich jedoch, dass man nun beim Hovern mit der Maus über einzelne Objekte dessen Verbindungen besser sehen kann:


Zitationsgraph von Biblionetz:b07000 als vis.js-Objekt mit einem fokussierten Objekt

Leider scheint der vis.js-Layout-Algorithmus (oder meine Parameter) noch Probleme zu haben bei gewissen Graphen. So wird z.B. ein Buch mit vielen Verweisen so dargestellt (der Algorithmus hat viele leere Y-Ebenen eingebaut und die Objekte praktisch an zwei Polen gruppiert) :


Zitationsgraph von Biblionetz:b00710 als vis.js-Objekt mit extrem unbrauchbarem Layout

Auch bei Graphen, bei denen es nicht so extrem ist, liefert Graphviz meist kompaktere Ergebnisse als visjs, da Graphviz explizit eine Funktion bietet, um Objekte in Graphen näher zusammenrücken zu lassen. Eine Variante wäre, die Positionen der Objekte mit Graphviz errechnen zu lassen, aber dann als visjs-Objekt darzustellen. Machbar, aber benötigt Zeit zur Implementation…

Begriffsnetze und Tagclouds

Begriffsnetze und Tagclouds werden im Biblionetz schon seit längerem als vis.js-Objekte dargestellt. Nun habe ich die Funktionalität dieser Objekte erweitert.


Begriffsnetz des BEgriffs work-life-balance (Biblionetz:w03440) als vis.js-Objekt

Neu kann man nun auf in der Grossansicht des Graphen auf einen Begriff lange drauf klicken und das Biblionetz fügt danach das Begriffsnetzwerk dieses Begriffs zur ursprünglichen Grafik hinzu. Derzeit allerdings noch suboptimal: Der ganze Graph wird neu gelayoutet, statt dass die neuen Knoten zum bisherige Layout hinzugefügt werden und die neuen Knoten unterscheiden sich vom Aussehen nicht von den bisherigen. Alles implementierbar, nur: Woher die Zeit dafür nehmen…


Begriffsnetz des BEgriffs work-life-balance (Biblionetz:w03440) nachdem der Begriff Arbeitslosigkeit expandiert worden ist

Was ebenfalls noch fehlt: Ein Hinweis darauf, dass eine Grafik grad aufbereitet wird - grössere Graphen brauchen mit vis.js recht lange, bis sie dargestellt werden.

Technisches Detail

Bei dieser Erweiterung habe ich das mir bisher unbekanntes SQL-Konstrukt =IN= entdeckt. Bisher waren meine Graphen in der Grösse u.a. deshalb beschränkt, weil meine Datenbank bei zu vielen OR-Klauseln bei der Extraktion der Verbindungen zwischen Objekten reklamiert hat. Durch Verwendung des IN-Operators können nun meine Graphen massiv grösser werden… (was die Anzeige einer Fortschrittsanzeige beim Darstellen noch dringlicher macht) wink

Hier noch interessante Websites, die mir bei dieser Tätigkeit in den letzten Tagen begegnet sind:

 
Zum Kommentieren ist eine Registration notwendig.

Warum GMLS und nicht einfach LLM?

18 July 2024 - Version 2 - BeatDoebeli

Vor einiger Zeit habe ich beschlossen, möglichst auf den Begriff "künstliche Intelligenz" (Biblionetz:w00039) zu verzichten und stattdessen andere Begriffe zu verwenden (für eine Begründung siehe warum wir den Begriff KI vermeiden sollten oder auch Biblionetz:a01540).

Aktuell sieht mein Begriffsverständnis folgendermassen aus:



(Erklärung der Grafik als Video)

Weshalb habe ich den neuen Begriff Generative Machine-Learning-Systeme (Biblionetz:w02833) erfunden, statt einfach den bestehenden Begriff der Large Language Models zu verwenden? Hier meine Überlegungen:

  • LLM sind nicht gleich GMLS: Der Begriff "Large Language Model" bezeichnet streng genommen nur ein Modell und nicht ein Gesamtsystem. Somit ist z.B. GPT-4 ein LLM, ChatGPT aber nicht (ChatGPT nutzt ein LLM als Bestandteil).

  • Nutzung statt Funktionsweise: LLM bezeichnet eine Methode, wie etwas erreicht wird. GMLS beschreibt den Output eines Systems (es generiert etwas). Es ist gut möglich, dass künftig auch generierende Systeme entwickelt werden, die unter der Haube anders funktionieren (kein LLM verwenden). Für den Bildungskontext ist mir die Anwendung solcher Systeme wichtiger als die Funktionsweise.

  • Unerwünschte Assoziationen: Mit dem Begriff "Large Language Model" verbindet sich oft die falsche Annahme, dass es nur um Texte geht, weil "Language" im Alltagsverständnis meist etwas mit Text zu tun hat. Der Begriff GMLS vermeidet diese Assoziation zur reinen Textproduktion.

  • Betonung des Algorithmischen: Das "Generieren" im Begriff GMLS betont, dass Computer Medien sind, bei denen nicht einfach das wiedergegeben wird, was im Medium gespeichert wurde (anders als bei Büchern, Videos etc.). Der Begriff "Modell" kann auch als "Abbild" verstanden werden. Mir ist wichtig aufzuzeigen, dass GMLS mehr machen als "Abbilden".

  • Verortung: Mit dem Begriff "generative Machine-Learning-Systeme" wird bereits im Begriff deutlich:
    • a) Es handelt sich um eine Anwendung von machine learning
    • b) Es gibt noch andere Anwendungen von machine learning

  • Im Bildungskontext will ich aufzeigen, dass "Generieren" nur eine Anwendung von machine learning ist und wir uns ebenfalls auf das "Analysieren" und "Voraussagen" konzentrieren müssen.

 
Zum Kommentieren ist eine Registration notwendig.

Die Informationsflut-Pegelstandanzeige

04 January 2024 - Version 1 - BeatDoebeli

Kürzlich habe ich mir meine persönliche Informationsflut-Pegelstandsanzeige gebaut. Einerseits als technische Spielerei, damit ich mich wieder einmal mit Webechnologien wie REST-APIs etc. auseinandersetze und andererseits weil ich erleben wollte, wie sich diese Facette von quantified self (Biblionetz:w02356) anfühlt.

pegelstand01.png
Veralteter Screenshot meiner Informationsflut-Pegelstandsanzeige

Technische Aspekte

Umgesetzt habe ich diese Pegelstandsanzeige als zwei Sensoren in meinem Smarthome-System (Home Assistant), das bei mir zu Hause auf einem Raspberry Pi läuft.

Mailcounter

Da meine berufliche Mail über die Microsoft-Cloud läuft, habe ich via Power Automate von Microsoft einen Mechanismus zusammengestellt, der alle 5 Minuten per Rest-API-Aufruf meinem Raspberry Pi mitteilt, wie viele Mails sich derzeit in meiner Inbox befinden.

pegelstand02.png
Veralteter Screenshot meiner Informationsflut-Pegelstandsanzeige

Der bei Microsoft Flow genannte Ablauf wird alle 5 Minuten ausgelöst und holt sich über einen https-Aufruf beim MS-Graph ein json-Object, das die Anzahl Mails in meiner Inbox enthält:

https://graph.microsoft.com/v1.0/me/mailFolders/inbox/totalItemCount

Im nächsten Schritt wird die benötigte Zahl aus dem json-Objekt extrahiert und im letzten Schritt als REST-API-Aufruf meinem Home-Assistant-Instanz weitergereicht:

https://meine-geheime-homeassistant-adresse.org:port/api/states/input_number.mailcounter

Den Rest der graphischen Aufbereitung sowie der Speicherung einer History übernimmt alles Home Assistant.

Tabcounter

Den Tabcounter habe ich als selbst zusammengestiefelte kleine Chrome-Extension umgesetzt. (Viel musste ich nicht selbst programmieren, ich konnte die bestehende Chrome-Extension HA-Cinema-Time anpassen, indem ich einfach an der passenden Stelle chrome.tabs.query() einsetzen und den Code an passender Stelle auf meinem Computer deponieren musste.

Nun meldet mein Chrome-Browser bei jedem Öffnen und Schliessen eines Tabs die aktuelle Zahl meiner offenen Chrome-Tabs an meine Home-Assistant-Instanz.

Technisch war das Gebastel für mich lehrreich und hat mir wieder einmal gezeigt, wie standardisierte Schnittstellen zur Mächtigkeit der Digitalisierung beitragen, indem neue Systeme mit vergleichsweise geringem Aufwand als Puzzles aus bestehenden Bestandteilen zusammengesetzt werden können (sprich: Das Rad muss nicht dauernd neu erfunden werden).

Inhaltliche Aspekte

Ich finde die Pegelstandanzeige für mich persönlich interessant und hilfreich. Sie ergänzt mein Bauchgefühl, ob ich grad von Informationen geflutet oder ob ich ihr einigermassen Herr werde. Von zeit zu Zeit reserviere ich mir explizit Zeit, um die beiden Pegel zu senken, da dienen die Anzeigen als simple, aber erfolgreiche Motivationshilfe.

Da Arbeitskolleg:innen manchmal wissen möchten, wie stark ich grad belastet bin, habe ich mir schon überlegt, ob ich diese Pegelstandanzeigen auch automatisiert meiner Wochenplan-Mail beilegen sollte. Das ist aber vermutlich aus verschiedenen Gründen keine gute Idee:
  • Die Zahl meiner Mails in der Inbox und offener Browser-Tabs sagt sehr wenig über meine echte Arbeitslast aus und lässt sich vor allem nicht mit den Zahlen anderer Menschen vergleichen:
    • Inboxen können leicht durch alle möglichen Notifications und Newsletter verstopft werden, wenn man diese nicht konsequent abmeldet.
    • Auch ohne Newsletter etc. benötigt nicht jede Mail und jedes Browser-Tab den gleichen Verarbeitungsaufwand. Die reine Zahl an Mails und Tabs sagt somit sehr wenig über den effektiven Arbeitsberg aus.
  • Relevant ist eigentlich nicht die absolute Zahl, sondern die Veränderung in jüngerer Vergangenheit: Es ist nicht wichtig, wie viele Mails oder Tabs insgesamt noch auf mich warten, sondern ob mehr Informationsobjekte reinkommen als ich verarbeiten kann. Somit müsste ich eigentlich keine Pegelstandanzeigen versenden sondern Steigungsindikatoren.
  • Und als letztes lässt sich aus den Zahlen auch nicht ablesen, ob ich Mails und Tabs aus Faulheit oder Überlastung nicht verarbeitet habe.

Fazit: Ich werde die Pegelstandanzeigen weiterhin nutzen, aber nur für mich privat.

 
Zum Kommentieren ist eine Registration notwendig.
Page 1 of 552 Next >

Kontakt

  • Beat Döbeli Honegger
  • Plattenstrasse 80
  • CH-8032 Zürich
  • E-mail: beat@doebe.li