tarent heißt jetzt Qvest Digital AG | mehr erfahren

KI gestützte Bildersuche: Embedded

Sven Schumann
SENIOR SOFTWARE DEVELOPER
Veröffentlicht 21. August 2024

KI gestützte Bildersuche

Der KI-Boom hat meine (IT-)Welt ganz schön auf den Kopf gestellt. Gerade die KI-Bildgenerierung flasht mich noch heute! Stunden um Stunden habe ich damit verbracht, generierte KI-Bilder zu bestaunen! Heute - zwei Jahre später - habe ich eine große Sammlung an generierten Bildern angehäuft. Wenn ich mir ein Bild pro Sekunde anschauen würde, schaffe ich es nichteinmal an einem Tag die Hälfte zu sichten! Eine Lösung musste also her...! Ich habe eine WebApp implementiert, die genau dieses Problem löst. In dieser Blog-Serie möchte ich euch die Kernideen und -konzepte, die in dieser App stecken, vorstellen.

Im ersten Teil der Blog-Serie "KI gestützte Bildersuche" gehen wir auf die Grundlagen der Bildersuche ein. Was kann man denn durchsuchen? Text! Aber woher nehmen?

Prompt

Um ein Bild via KI zu generieren, benötigt man eine Textbeschreibung (Prompt). Dieser Prompt wird - normalerweise - von einem Menschen geschrieben. Er beinhaltet (meistens) die Idee, die der Mensch im Kopf hatte. Ob die KI diese auch in das gewünschte Bild umsetzt, ist eine andere Frage... Der Prompt scheint also ein guter Ansatz zu sein, um Bilder zu durchsuchen.

Allerdings kann man auch schon mit einem recht kurzen Prompt ein schönes Bild generieren:

Eine süße Katze

Was der Prompt aussagt:

  • - Wie die Katze aussieht
  • - Was die Katze macht
  • - Was sonst noch auf dem Bild zu sehen ist


Beschreiben

Mittlerweile können auch KI-Modelle Bilder beschreiben. Wie beispielsweise GPT-4 von OpenAI. Wir könnten also die ganzen Bilder der KI zum Frass vorwerfen, in der Hoffnung, dass sie die Bilder mit möglichst genauen und vielen Details beschreibt. Aus der "süßen Katze" würde hier beispielsweise folgendes:

A domestic setting with a focus on a ginger tabby cat. The cat, with its distinctive orange and white striped fur, is sitting upright on a wooden table, looking to the left. Its ears are perked up, and its eyes are alert, giving it an attentive expression. The background is filled with shelves lined with an array of colorful books and bottles. The books are arranged vertically, showcasing a variety of spine colors including red, blue, and green, with gold and white lettering. The bottles, positioned below the books, have dark glass with labels featuring intricate designs and text. The overall ambiance is warm and cozy, with the wooden shelves and table adding a rustic touch to the scene.

Viel Text, und nun?

Durch den Prompt und die Beschreibung haben wir schon eine Menge an Text pro Bild, welchen wir durchsuchen könnten. Ein super simpler Algorithmus könnte also wie folgt aussehen:

Suchtext = "Katze"
Wiederhole für jedes Bild:
   Wenn der Suchtext im Prompt oder Beschreibung vorkommt:
      Dann füge das Bild zur Ergebnisliste hinzu

Jetzt gibt es allerdings folgendes Problem: Katze kommt nicht in der KI generierten Bild-Beschreibung vor! In diesem konkreten Beispiel ist es nicht schlimm, da das Wort Katze im Prompt vorkommt und so das Bild dennoch gefunden wird.

Aber wenn wir nun nach Buch suchen würden, würde das Bild nicht gefunden werden, da das Wort Buch weder im Prompt noch in der Beschreibung vorkommt. Book hingegen schon. Das bedeutet, dass wir alle möglichen Synonyme/Übersetzungen für Buch kennen müssen, um alle Bilder zu finden, die ein Buch zeigen.

Ähnlichkeitssuche

Mit reiner "Inhaltssuche" kommen wir also nicht weit. Wir brauchen etwas, was die Ähnlichkeit zwischen zwei Texten ermitteln kann. Doch wie können wir entscheiden, ob ein Wort ähnlich zu einem anderen Wort ist? Hier kommen Embeddings ins Spiel!

Embeddings

Doch was ist das genau? Ein Erklärungsversuch: Stellen wir uns mal ein einfaches Diagram vor. Auf der y-Achse haben wir die Farbe, auf der x-Achse die Tierart (von ganz normales Tier, bis hin zu coolen Fabelwesen)

Nehmen wir an, dass die Farbe Orange den Wert 2,835 auf der y-Achse hat. Und eine Katze den Tier-Wert 0,657 auf der x-Achse hat. Würde man nun ein "orangen Drachen" einordnen, würde man denselben y-Wert für Orange und einen größeren x-Wert für Drache nehmen. Denn ein Drache ist schon mehr Fabelwesen als ein normales Tier! Einen "blauen Drachen" hingegen würde ich wieder mit demselben x-Wert wie den "orangenen Drachen" einordnen. Da die Farbe ja nicht die Tierart beeinflusst. Der Farbwert wäre allerdings ein anderer: in diesem Fall 1,095.

Wir haben also hiermit ein Wort in einem 2-dimensionalen Raum abgebildet. Das ist ein Embedding! Eine "orangene Katze" kann man als Vektor darstellen: [2,835, 0,657]. Ein "blauer Drache" als [1,095, 0,657]. Ob ein Wort ähnlich zu einem anderen Wort ist, kann man ermitteln, indem man die Distanz zwischen den beiden Vektoren berechnet. Je kleiner die Distanz, desto ähnlicher sind sich die Wörter!

Wie man jetzt aus den Wörtern Vektoren macht, ist eine andere Geschichte. Sagen wir einfach: KI-Magie (ich weiß doch auch nicht ...)! Wichtig zu wissen ist, dass es mehrere KI-Modelle gibt, die Wörter in Vektoren umwandeln können. Und dass man nur Vektoren miteinander vergleichen kann (sollte), die von demselben Modell erstellt wurden. Logisch, denn jedes Modell "ordnet" die Wörter anders an.

Wie geht es weiter?

Jetzt da wir wissen, dass wir Wörter in Vektoren umwandeln können, können wir die Ähnlichkeit zwischen zwei Texten ermitteln. Wir könnten also den Suchtext in Vektoren umwandeln und dann die Ähnlichkeit zu jedem Bildtext berechnen. Die Bilder, die am ähnlichsten sind (deren Vektoren-Entfernung gering genug ist), könnten wir dann anzeigen. Der angepasste Algorithmus sieht also wie folgt aus:

ErzeugeVektor(Text):
   KI-Magie ...

BerechneDistanz(Vektor1, Vektor2):
   Mathe-Magie ...

Wiederhole für jedes Bild:
   ErzeugeVektor(Bild-Prompt und Bild-Beschreibung)

Suchtext = "Katze"
Suchvektor = ErzeugeVektor(Suchtext)

Wiederhole für jeden Bild-Vektor:
   Distanz = BerechneDistanz(Suchvektor, Bild-Vektor)
   Wenn Distanz kleiner als der Schwellwert ist
      Dann füge das Bild zur Ergebnisliste hinzu

Die Generierung der Bild-Beschreibung-Vektoren muss dabei nur einmal gemacht werden! Die Vektoren können dann beispielsweise in einer Datenbank gespeichert werden. Nur die Suchanfrage muss jedes Mal - sofern sie sie nicht ändert - in einen Vektor umgewandelt werden.

Für die Generierung der Embeddings gibt es bereits vorgefertigte KI-Modelle. Auch OpenAI bietet solche Modelle an: Embedding-Models

Was lernen wir daraus?

  1. Bilder können von KI-Modellen beschrieben werden
  2. Texte können mittels Embeddings in Vektoren umgewandelt werden
  3. Die Ähnlichkeit zwischen zwei Texten kann durch die Distanz zwischen den Vektoren ermittelt werden