<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[ML-Forschung - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[ML-Forschung - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/de/search-labs/blog/category/ml-research</link>
    </image>
    <link>https://www.elastic.co/de/search-labs/blog/category/ml-research</link>
    <atom:link href="https://www.elastic.co/de/search-labs/rss/category/ml-research.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[de]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 03:05:02 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Automatisierung des Log-Parsing in Streams mit ML]]></title>
    <description><![CDATA[Erfahren Sie, wie ein hybrider ML-Ansatz durch Automatisierungsexperimente mit Log-Format-Fingerprinting in Streams eine Genauigkeit von 94 % beim Log-Parsing und 91 % bei der Log-Partitionierung erreicht hat.]]></description>
    <content:encoded><![CDATA[<p>In modernen Beobachtbarkeits-Stacks bleibt es eine Herausforderung, unstrukturierte Logs von verschiedenen Datenanbietern in Plattformen wie Elasticsearch zu Ingestieren. Die Abhängigkeit von manuell erstellten Parsing-Regeln führt zu fehleranfälligen Daten-Pipelines, bei denen selbst geringfügige Aktualisierungen des vorgelagerten Codes zu Parsing-Fehlern und nicht indizierten Daten führen. Diese Fragilität wird durch die Herausforderung der Skalierbarkeit noch verstärkt: In dynamischen Microservices-Umgebungen macht die kontinuierliche Hinzufügung neuer Services die manuelle Regelwartung zu einem operativen Albtraum.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte8f5bd0e4986b04c/6a170e6acdacbf612e7d2a9e/9108ec303339dd091faa3c363c7cf5c228155f49-3840x2160.png" alt="" /><p>Unser Ziel war es, zu einem automatisierten, adaptiven Ansatz überzugehen, der sowohl Log-Parsing (Feldextraktion) als auch Log-Partitionierung (Quellenidentifikation) bewältigen kann. Wir vermuteten, dass Large Language Models (LLMs) mit ihrem inhärenten Verständnis von Codesyntax und semantischen Mustern diese Aufgaben mit minimalem menschlichem Eingreifen automatisieren könnten.</p><p>Wir freuen uns, Ihnen mitteilen zu können, dass dieses Feature bereits in <a href="http://elastic.co/elasticsearch/streams"><u>Streams</u></a> verfügbar ist!</p><h2>Beschreibung des Datensatzes</h2><p>Wir haben für PoC-Zwecke eine <a href="https://github.com/logpai/loghub"><strong>Loghub-Sammlung</strong></a>von Logs gewählt. Für unsere Untersuchung wählten wir repräsentative Stichproben aus den folgenden Schlüsselbereichen aus:</p><ul><li><p>Verteilte Systeme: Wir verwendeten die HDFS- (Hadoop Distributed File System) und Spark-Datensätze. Diese enthalten eine Mischung aus Info-, Fehlerbehebungs- und Fehlermeldungen, die für Big Data-Plattformen typisch sind.</p></li><li><p>Server- und Webanwendungen: Logs von Apache-Webservern und OpenSSH boten eine wertvolle Quelle für Zugriffs-, Fehler- und sicherheitsrelevante Ereignisse. Diese sind entscheidend für die Überwachung des Webverkehrs und die Erkennung potenzieller Bedrohungen.</p></li><li><p>Betriebssysteme: Wir haben Protokolle von Linux und Windows aufgenommen. Diese Datensätze repräsentieren die üblichen, semistrukturierten Ereignisse auf Systemebene, denen Betriebsteams täglich begegnen.</p></li><li><p>Mobile Systeme: Um sicherzustellen, dass unser Modell auch Logs aus mobilen Umgebungen verarbeiten kann, haben wir den Android-Datensatz mit einbezogen. Diese Logs sind oft ausführlich und erfassen eine Vielzahl von Aktivitäten auf Anwendungs- und Systemebene auf Mobilgeräten.</p></li><li><p>Supercomputer: Um die Leistung in Hochleistungs-Computing-Umgebungen (HPC) zu testen, haben wir den BGL-Datensatz (Blue Gene/L) integriert, der hochstrukturierte Logs mit spezifischer Domänenterminologie enthält.</p></li></ul><p>Ein entscheidender Vorteil der Loghub-Sammlung ist, dass die Logs größtenteils unsaniert und unbeschriftet sind, was eine geräuschvolle Live-Produktionsumgebung mit Microservice-Architektur widerspiegelt.</p><p>Log-Beispiele:</p>[Sun Dec 04 20:34:21 2005] [notice] jk2_init() Found child 2008 in scoreboard slot 6
[Sun Dec 04 20:34:25 2005] [notice] workerEnv.init() ok /etc/httpd/conf/workers2.properties
[Mon Dec 05 11:06:51 2005] [notice] workerEnv.init() ok /etc/httpd/conf/workers2.properties
17/06/09 20:10:58 INFO output.FileOutputCommitter: Saved output of task 'attempt_201706092018_0024_m_000083_1138' to hdfs://10.10.34.11:9000/pjhe/test/1/_temporary/0/task_201706092018_0024_m_000083
17/06/09 20:10:58 INFO mapred.SparkHadoopMapRedUtil: attempt_201706092018_0024_m_000083_1138: Committed<p>Zusätzlich haben wir einen Kubernetes-Cluster mit einer typischen Webanwendung und Datenbank erstellt, die zusätzliche Logs in der gängigsten Domäne sammelt.</p><p>Beispiel für gängige Logfelder: Zeitstempel, Log-Ebene (INFO, WARN, FEHLER), Quelle, Nachricht.</p><h2>Few-Shot-Log-Parsing mit einem LLM</h2><p>Unsere erste Reihe von Experimenten konzentrierte sich auf eine grundlegende Frage: <strong>Kann ein LLM zuverlässig Schlüsselfelder identifizieren und konsistente Parsing-Regeln erzeugen, um sie zu extrahieren?</strong></p><p>Wir haben ein Modell gebeten, rohe Log-Stichproben zu analysieren und Log-Parsing-Regeln im regulären Ausdruck (Regex) und im <a href="https://www.elastic.co/docs/explore-analyze/scripting/grok">Grok-Format</a> zu generieren. Unsere Ergebnisse zeigten, dass dieser Ansatz großes Potenzial hat, aber auch erhebliche Herausforderungen bei der Implementierung.</p><h3>Hohe Zuverlässigkeit und Kontextbewusstsein</h3><p>Die ersten Ergebnisse waren vielversprechend. Das LLM zeigte eine starke Fähigkeit, Parsing-Regeln zu generieren, die mit hoher Wahrscheinlichkeit zu den bereitgestellten Beispielen passten. Neben der einfachen Mustererkennung zeigte das Modell die Fähigkeit zum Log-Verständnis – es konnte die Log-Quelle (z. B. Gesundheits-Tracking-App, Nginx-Web-App, Mongo-Datenbank) korrekt identifizieren und benennen.</p><h3>Das „Goldlöckchen“-Dilemma der Eingabestichproben</h3><p>Unsere Experimente zeigten schnell einen erheblichen Mangel an Robustheit aufgrund der extremen<strong> Empfindlichkeit gegenüber der Eingabestichprobe.</strong> Die Leistung des Modells schwankt stark in Abhängigkeit von den spezifischen Log-Beispielen, die im Prompt enthalten sind. Wir haben ein Log-Ähnlichkeitsproblem beobachtet, bei dem die Log-Stichprobe <em>gerade ausreichend unterschiedliche </em>Logs enthalten muss:</p><ul><li><p>Zu homogen (Overfitting)<strong>:</strong> Wenn die Eingabe-Logs zu ähnlich sind, neigt das LLM dazu, zu <strong>überspezifizieren</strong>. Es behandelt variable Daten – wie spezifische Java-Klassennamen in einem Stack-Trace – als statische Teile der Vorlage. Das Ergebnis sind spröde Regeln, die nur einen winzigen Teil der Logs abdecken und unbrauchbare Felder extrahieren.</p></li><li><p>Zu heterogen (Verwirrung): Umgekehrt, wenn die Stichprobe erhebliche Formatierungsunterschiede enthält – oder schlimmer noch, „Müll-Logs“ wie Fortschrittsbalken, Speichertabellen oder ASCII-Art – kämpft das Modell damit, einen gemeinsamen Nenner zu finden. Oftmals greift man dabei auf die Generierung komplexer, fehlerhafter regulärer Ausdrücke zurück oder verallgemeinert die gesamte Zeile vorschnell zu einem einzigen Nachrichten-Feld.</p></li></ul><h3>Die Einschränkung des Kontextfensters</h3><p>Wir sind außerdem auf einen Engpass im Kontextfenster gestoßen. Wenn die Eingabe-Logs lang, heterogen oder reich an extrahierbaren Feldern waren, verschlechterte sich oft die Ausgabe des Modells und wurde „unübersichtlich“ oder zu lang, um in das Ausgabekontextfenster zu passen. Natürlich hilft Chunking in diesem Fall. Durch das Aufteilen von Protokollen mithilfe zeichenbasierter und entitätsbasierter Trennzeichen könnten wir dem Modell helfen, sich auf das Extrahieren der Hauptfelder zu konzentrieren, ohne von Rauschen überwältigt zu werden.</p><h3>Die Konsistenz- und Standardisierungslücke</h3><p>Selbst wenn das Modell erfolgreich Regeln generierte, stellten wir leichte Inkonsistenzen fest:</p><ul><li><p>Namensvariationen für Dienste: Das Modell schlägt unterschiedliche Namen für dieselbe Entität vor (z. B. wird die Quelle in verschiedenen Ausführungen als „Spark“, „Apache Spark“ und „Spark log Analytics“ bezeichnet).</p></li><li><p>Variationen bei der Feldbenennung: Es fehlte an Standardisierung bei den Feldnamen (z. B. <code>id</code> vs. <code>service.id</code> vs. <code>device.id</code>). Wir haben Namen mithilfe einer standardisierten <a href="https://www.elastic.co/docs/reference/ecs/ecs-field-reference">Elastic-Feldbenennung</a> normalisiert.</p></li><li><p>Auflösungsvarianz: Die Auflösung der Feldextraktion variierte je nachdem, wie ähnlich die Eingabe-Logs einander waren.</p></li></ul><h2>Log-Format-Fingerprint</h2><p>Um die Herausforderung der Log-Ähnlichkeit anzugehen, führen wir eine leistungsstarke Heuristik ein: <strong>Log-Format-Fingerprint (LFF)</strong>.</p><p>Anstatt rohe, verrauschte Logs direkt in ein LLM einzuspeisen, wenden wir zunächst eine deterministische Transformation an, um die zugrundeliegende Struktur jeder Nachricht zu enthüllen. Dieser Vorverarbeitungsschritt abstrahiert variable Daten und generiert einen vereinfachten „Fingerabdruck“, der es uns ermöglicht, verwandte Logs zu gruppieren.</p><p>Die Mapping-Logik ist einfach, um Geschwindigkeit und Konsistenz zu gewährleisten:</p><ol><li><p>Ziffernabstraktion: Jede Ziffernfolge (0–9) wird durch eine einzelne „0“ ersetzt.</p></li><li><p>Textabstraktion: Jede Folge von alphabetischen Zeichen mit Leerzeichen wird durch ein einzelnes „a“ ersetzt.</p></li><li><p>Normalisierung von Leerzeichen: Alle Sequenzen von Leerzeichen (Leerzeichen, Tabulatoren, Zeilenumbrüche) werden zu einem einzigen Leerzeichen zusammengefasst.</p></li><li><p>Symbolerhaltung: Zeichensetzung und Sonderzeichen (z. B. :, [, ], /) werden beibehalten, da sie oft die stärksten Indikatoren für die Log-Struktur sind.</p></li></ol><p>Wir stellen den Log-Mapping-Ansatz vor. Die grundlegenden Mapping-Muster umfassen Folgendes:</p><ul><li><p>Ziffern 0–9 von beliebiger Länge -&gt; auf „0“.</p></li><li><p>Text (alphabetische Zeichen mit Leerzeichen) von beliebiger Länge -&gt; auf „a“.</p></li><li><p>Leerzeichen, Tabulatoren und neue Zeilen -&gt; auf ein einzelnes Leerzeichen.</p></li></ul><p>Schauen wir uns ein Beispiel an, wie uns dieses Mapping die Transformation der Logs ermöglicht.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf91eebab0ad79ccd/6a170e6c67045ba94f45c29c/78fa2887486eb9417804354ee3bf2a4fdb0f6383-846x252.png" alt="" /><p>Dadurch erhalten wir folgende Log-Masken:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt438d74dcb921578b/6a170e6d1949f74aa0e7aae3/ec439a3d3a25002498b97defcff733ea5ebc6b55-826x94.png" alt="" /><p>Beachten Sie die Fingerabdrücke der ersten beiden Logs. Trotz unterschiedlicher Zeitstempel, Quellklassen und Nachrichteninhalte sind ihre Präfixe (<code>0/0/0 0:0:0 a a.a:</code>) identisch. Durch diese strukturelle Ausrichtung können wir diese Logs automatisch in denselben Cluster einordnen.</p><p>Das dritte Log erzeugt jedoch einen völlig abweichenden Fingerabdruck (<code>0-0-0...</code>). Dies ermöglicht es uns, es algorithmisch von der ersten Gruppe zu trennen, <em>bevor</em> wir überhaupt ein LLM aufrufen.</p><h2>Bonus: Sofortige Implementierung mit ES|QL</h2><p>Es ist so einfach wie das Übergeben dieser Abfrage in Discover.</p><p><strong>Abfrage-Aufschlüsselung:</strong></p><p><strong>FROM</strong> LogHub: Zielt auf unseren Index mit den Rohprotokolldaten ab.</p><p><strong>EVAL</strong> Muster = …: Die Kern-Mapping-Logik. Wir verketten REPLACE-Funktionen, um die Abstraktion durchzuführen (z. B. Ziffern zu '0', Text zu 'a' usw.) und speichern das Ergebnis in einem „Muster“-Feld.</p><p><strong>STATS </strong>[column1 =] expression1, …<strong> BY </strong>SUBSTRING(pattern, 0, 15):</p><p>Dies ist ein Clustering-Schritt. Wir gruppieren Protokolle, die die ersten 15 Zeichen ihres Musters gemeinsam haben, und erstellen aggregierte Felder wie die Gesamtzahl der Protokolle pro Gruppe, eine Liste der Protokoll-Datenquellen, das Musterpräfix und 3 Protokollbeispiele.</p><p><strong>SORT</strong> total_count DESC | <strong>LIMIT</strong> 100 : Zeigt die 100 häufigsten Log-Muster an</p><p>Die Abfrageergebnisse auf LogHub werden unten angezeigt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfa3960cf94ccf331/6a170e6fdc55decfa3e00e7c/b119498f124376c41d242a099bf9081fd6536be8-1600x394.png" alt="Log-Parsing-Abfrageergebnisse auf LogHub." /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2dbcde2a22e06367/6a170e71961e693a18c4cfb6/4dcfc0a5b7fa753497cc5def5ea3cd54449c0481-1600x719.png" alt="" /><p>Wie in der Visualisierung gezeigt, partitioniert dieser „LLM-freie“ Ansatz Protokolle mit hoher Genauigkeit. Es gelang ihm, 10 von 16 Datenquellen (basierend auf LogHub-Labels) vollständig zu clustern (&gt;90 %), und er erreichte ein Mehrheits-Clustering in 13 von 16 Quellen (&gt;60 %) – alles ohne zusätzliche Reinigung, Vorverarbeitung oder Feinabstimmung.</p><p>Log-Format-Fingerprinting bietet eine pragmatische, wirkungsvolle Alternative und Ergänzung zu ausgefeilten ML-Lösungen wie der <a href="https://www.elastic.co/docs/reference/aggregations/search-aggregations-bucket-categorize-text-aggregation">Log-Pattern-Analyse.</a> Es bietet sofortige Einblicke in die Zusammenhänge der Logs und verwaltet große Log-Cluster effektiv.</p><ul><li><p>Vielseitigkeit als Grundform </p></li></ul><p>Dank <a href="https://www.elastic.co/blog/getting-started-elasticsearch-query-language">ES|QL-Implementierung</a> dient LFF sowohl als eigenständiges Werkzeug für schnelle Datendiagnostik/-visualisierungen als auch als Baustein in Loganalyse-Pipelines für Anwendungsfälle mit hohem Volumen. </p><ul><li><p>Flexibilität</p></li></ul><p>LFF lässt sich leicht anpassen und erweitern, um spezifische Muster zu erfassen, z. B. hexadezimale Zahlen und IP-Adressen.</p><ul><li><p>Deterministische Stabilität</p></li></ul><p>Im Gegensatz zu ML-basierten Clustering-Algorithmen ist die LFF-Logik geradlinig und deterministisch. Neue eingehende Logs wirken sich nicht rückwirkend auf bestehende Log-Cluster aus.</p><ul><li><p>Leistung und mMemory</p></li></ul><p>Es benötigt nur minimalen Speicher, kein Training und keine GPU und ist daher ideal für Echtzeit-Umgebungen mit hohem Durchsatz geeignet.</p><h2>Kombination des Log-Format-Fingerprints mit einem LLM</h2><p>Zur Validierung der vorgeschlagenen hybriden Architektur enthielt jedes Experiment eine zufällige 20%ige Teilmenge der Logs aus jeder Datenquelle. Diese Einschränkung simuliert eine reale Produktionsumgebung, in der Logs in Batches und nicht als monolithischer historischer Dump verarbeitet werden.</p><p>Das Ziel war zu demonstrieren, dass LFF als effektive Kompressionsschicht fungiert. Wir wollten beweisen, dass Parsing-Regeln mit hoher Abdeckung aus kleinen, kuratierten Stichproben generiert und erfolgreich auf den gesamten Datensatz verallgemeinert werden können.</p><h2>Ausführungspipeline</h2><p>Wir haben eine mehrstufige Pipeline implementiert, die die Daten filtert, gruppiert und stratifizierte Stichproben auf sie anwendet, bevor sie das LLM erreichen.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt26635762891b3a41/6a170e73509168eea4e1bb91/b3f46ea471760b406a32fc7d4bc74cc03faaced2-3840x1660.png" alt="" /><p>1. Zweistufiges hierarchisches Clustering</p><ul><li><p>Unterklassen (exakte Übereinstimmung): Logs werden anhand identischer Fingerabdrücke aggregiert. Alle Logs einer Unterklasse haben exakt die gleiche Formatstruktur.</p></li><li><p>Ausreißerbereinigung. Wir verwerfen alle Unterklassen, die weniger als 5 % des gesamten Logvolumens ausmachen. Dadurch wird sichergestellt, dass sich das LLM auf das dominante Signal konzentriert und nicht durch Rauschen oder fehlerhafte Logs abgelenkt wird.</p></li><li><p>Metaklassen (Präfixübereinstimmung): Verbleibende Unterklassen werden in Metaklassen nach den ersten N Zeichen der Format-Fingerabdruckübereinstimmung gruppiert. Wir haben N=5 für das Log-Parsing und N=15 für die Log-Partitionierung gewählt, wenn die Datenquellen unbekannt sind.</p></li></ul><p>2. Stratifiziertes Sampling. Sobald der hierarchische Baum erstellt ist, erstellen wir die Log-Stichprobe für das LLM. Das strategische Ziel ist es, die Varianzabdeckung zu maximieren und gleichzeitig die Verwendung von Token zu minimieren.</p><ul><li><p>Wir wählen repräsentative Logs aus <em>jeder</em> gültigen Unterklasse innerhalb der breiteren Metaklasse aus.</p></li><li><p>Um einen Randfall mit zu vielen Unterklassen zu managen, wenden wir zufälliges Downsampling an, um die Zielfenstergröße anzupassen.</p></li></ul><p>3. Regelgenerierung. Abschließend fordern wir das LLM auf, eine Regex-Parsing-Regel zu generieren, die auf alle Logs in der bereitgestellten Stichprobe für jede Metaklasse zutrifft. Für unseren PoC haben wir das Modell GPT-4o Mini verwendet.</p><h2>Experimentelle Ergebnisse und Beobachtungen</h2><p>Wir haben auf dem Loghub-Datensätze eine Parsing-Genauigkeit von 94 % und eine Partitionierungs-Genauigkeit von 91 % erreicht.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1b896b41b3b70e7e/6a170e757d8d67601a70e7d9/49b2b6a1401dd1f33951da68e5a3fac37d0b5aaa-1600x1506.png" alt="94 % Genauigkeit beim Parsen und 91 % Genauigkeit bei der Partitionierung des Loghub-Datensatzes." /><p>Die obige Konfusionsmatrix veranschaulicht die Ergebnisse der Log-Partitionierung. Die vertikale Achse stellt die tatsächlichen Datenquellen dar, die horizontale Achse die vorhergesagten Datenquellen. Die Intensität der Heatmap entspricht dem Log-Volumen, wobei leichtere Kacheln auf eine höhere Anzahl hinweisen. Die diagonale Ausrichtung zeigt die hohe Genauigkeit des Modells bei der Quellenzuweisung mit minimaler Streuung.</p><h2>Einblicke aus unseren Leistungsvergleichsanalysen:</h2><ul><li><p><strong>Optimale Ausgangsbasis:</strong> Ein Kontextfenster von <strong>30 bis 40 Log-Stichproben</strong> pro Kategorie erwies sich als der „Sweet Spot“, der sowohl mit Regex- als auch mit Grok-Mustern durchweg ein robustes Parsing ermöglichte.</p></li><li><p><strong>Eingabeminimierung:</strong> Wir haben die Eingabegröße für Regex-Muster auf 10 Logs pro Kategorie erhöht und nur einen 2%igen Rückgang der Parsing-Leistung festgestellt, was bestätigt, dass diversitätsbasierte Stichproben kritischer sind als das rohe Volumen.</p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/log-parsing-partitioning-automation-experiments-streams</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/log-parsing-partitioning-automation-experiments-streams</guid>
    <category><![CDATA[ML-Forschung]]></category>
    <category><![CDATA[KI]]></category>
    <dc:creator><![CDATA[Nastia Havriushenko]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc1df5a7cae463d59/6a170e76a6c2b907d7e797ab/965c58f19742361160593c38fcaa8b2f4b0d6cc5-3838x2159.png" length="0" type="image/png"/>
    <pubDate>Fri, 02 Jan 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Generierung von Filtern und Facetten mithilfe von maschinellem Lernen]]></title>
    <description><![CDATA[Untersuchung der Vor- und Nachteile der Automatisierung der Erstellung von Filtern und Facetten in einer Suchanwendung mithilfe von ML-Modellen im Vergleich zum klassischen, fest codierten Ansatz.]]></description>
    <content:encoded><![CDATA[<p>Filter und Facetten sind Mechanismen, die dazu dienen, Suchergebnisse zu verfeinern und Nutzern zu helfen, relevante Inhalte oder Produkte schneller zu finden. Beim klassischen Ansatz werden die Regeln manuell definiert. In einem Filmkatalog sind beispielsweise Attribute wie das Genre vordefiniert und können in Filtern und Facetten verwendet werden. Andererseits können mit KI-Modellen automatisch neue Attribute aus den Eigenschaften von Filmen extrahiert werden, wodurch der Prozess dynamischer und personalisierter wird. In diesem Blog untersuchen wir die Vor- und Nachteile jeder Methode und beleuchten deren Anwendungsbereiche und Herausforderungen.</p><h2>Filter und Facetten im Vergleich</h2><p>Bevor wir beginnen, definieren wir zunächst, was Filter und Facetten sind. <strong>Filter</strong> sind vordefinierte Attribute, die verwendet werden, um eine Reihe von Ergebnissen einzuschränken. Auf einem Marktplatz stehen beispielsweise Filter schon vor der eigentlichen Suche zur Verfügung. Der Benutzer kann vor der Suche nach <strong>„PS5“</strong> eine Kategorie auswählen, zum Beispiel <strong>„Videospiele“</strong>, und so die Suche auf eine spezifischere Teilmenge anstatt der gesamten Datenbank eingrenzen. Dadurch erhöhen sich die Chancen auf relevantere Ergebnisse erheblich.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0a77b38aae238938/6a170b821949f72a52e7aa51/5ed8868fa5017d034e1273e35c884a5430afdf3c-1600x937.png" alt="Filter" /><p><strong>Facetten</strong> funktionieren ähnlich wie Filter, sind aber erst nach der Durchführung der Suche verfügbar. Mit anderen Worten: Die Suche liefert Ergebnisse, und auf deren Grundlage wird eine neue Liste von Verfeinerungsoptionen generiert. Bei der Suche nach einer PS5-Konsole werden beispielsweise Aspekte wie <strong>Speicherkapazität</strong>, <strong>Versandkosten</strong> und <strong>Farbe</strong> angezeigt, um den Nutzern bei der Auswahl des idealen Produkts zu helfen.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt166e356b80d423ef/6a170b840e2e494ca341a10f/c5633fcc5b6fbb916110faf32144d8d43572e33a-1600x937.png" alt="Facetten " /><p>Nachdem wir nun Filter und Facetten definiert haben, wollen wir die Auswirkungen der klassischen und der auf maschinellem Lernen (ML) basierenden Ansätze auf ihre Implementierung und Verwendung erörtern. Jede Methode hat Vor- und Nachteile, die die Effizienz der Suche beeinflussen.</p><h2>Klassischer Ansatz für Filter und Facetten</h2><p>Bei diesem Ansatz werden Filter und Facetten manuell anhand vordefinierter Regeln definiert. Dies bedeutet, dass die zur Verfeinerung der Suche verfügbaren Attribute festgelegt und im Voraus geplant sind, wobei die Katalogstruktur und die Bedürfnisse der Nutzer berücksichtigt werden.</p><p>Auf einem Marktplatz können beispielsweise Kategorien wie „Elektronik“ oder „Mode“ über spezifische Filter wie Marke, Format und Preisspanne verfügen. Diese Regeln werden statisch erstellt, um eine einheitliche Sucherfahrung zu gewährleisten, erfordern jedoch manuelle Anpassungen, sobald neue Produkte oder Kategorien auftauchen.</p><p>Obwohl dieser Ansatz Vorhersagbarkeit und Kontrolle über die angezeigten Filter und Facetten bietet, kann er an seine Grenzen stoßen, wenn neue Trends entstehen, die eine dynamische Anpassung erfordern.</p><p><strong>Vorteile:</strong></p><ul><li><p><strong>Vorhersagbarkeit und Kontrolle:</strong> Da Filter und Facetten manuell definiert werden, wird die Verwaltung einfacher.</p></li><li><p><strong>Geringe Komplexität:</strong> Es müssen keine Modelle trainiert werden.</p></li><li><p><strong>Wartungsfreundlichkeit:</strong> Da die Regeln vordefiniert sind, können Anpassungen und Korrekturen schnell vorgenommen werden.</p></li></ul><p><strong>Nachteile</strong>:</p><ul><li><p><strong>Neuindizierung für neue Filter erforderlich:</strong> Wenn ein neues Attribut als Filter verwendet werden soll, muss der gesamte Datensatz neu indiziert werden, um sicherzustellen, dass die Dokumente diese Information enthalten.</p></li><li><p><strong>Fehlende dynamische Anpassung:</strong> Filter sind statisch und passen sich nicht automatisch an Änderungen im Nutzerverhalten an.</p></li></ul><h3>Implementierung von Filtern/Facetten – Klassischer Ansatz</h3><p>In <strong>Dev Tools, Kibana</strong>, werden wir eine Demonstration von Filtern/Facetten mit dem <strong>klassischen Ansatz</strong> erstellen.</p><p>Zuerst definieren wir die Zuordnung zur Strukturierung des Index:</p>PUT videogames
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "brand": { "type": "keyword" },
      "storage": { "type": "keyword" },
      "price": { "type": "float" },
      "description": { "type": "text" }
    }
  }
}<p>Die Felder <strong>„Marke“</strong> und <strong>„Speicherort</strong> “ sind als <strong>Schlüsselwort</strong> festgelegt, sodass sie direkt in Aggregationen (<strong>Facetten</strong>) verwendet werden können. Das <strong>Preisfeld</strong> ist vom Typ <strong>Float</strong>, wodurch die Erstellung von <strong>Preisspannen</strong> ermöglicht wird.</p><p>Im nächsten Schritt werden die Produktdaten indexiert:</p>POST videogames/_bulk
{ "index": { "_id": 1 } }
{ "name": "Play Station 5", "brand": "Sony", "storage": "1TB", "price": 499.99, "description": "Stunning Gaming: Marvel at stunning graphics and experience the features of the new PS5. Breathtaking Immersion: Discover a deeper gaming experience with support for haptic feedback, adaptive triggers, and 3D Audio technology. Slim Design: With the PS5 Digital Edition, gamers get powerful gaming technology in a sleek, compact design. 1TB of Storage: Have your favorite games ready and waiting for you to play with 1TB of built-in SSD storage. Backward Compatibility and Game Boost: The PS5 console can play over 4,000 PS4 games. With Game Boost, you can even enjoy faster, smoother frame rates in some of the best PS4 console games." }
{ "index": { "_id": 2 } }
{ "name": "Xbox Series X", "brand": "Microsoft", "storage": "1TB", "price": 499.99, "description": "Fastest, most powerful Xbox console ever. Play thousands of titles: Every game looks and plays better on Xbox Series X. At the heart of Series X is the Xbox Velocity. Architecture, which combines a custom SSD and built-in software to significantly reduce load times in and out of game. Switch between multiple games in an instant with Quick Resume. Explore new worlds and experience the action like never before with an unparalleled 12 teraflops of graphics processing power. Enjoy 4K gaming at up to 120 frames per second, premium advanced 3D sound, and more. 4K at 120 FPS: requires compatible content and display X version - with disc drive" }
{ "index": { "_id": 3 } }
{ "name": "Nintendo Switch", "brand": "Nintendo", "storage": "512GB", "price": 299.99, "description": "SHARPER, VIBRANT VISUALS. The new 7-inch screen on the Nintendo Switch OLED takes your gaming to the next level: vibrant colors with sharp contrasts for every moment. INTEGRATED GAMEPLAY. Enjoy the console's many multiplayer modes and connect with other players. Online or locally, the fun on the Nintendo Switch is guaranteed. ENJOY IMMERSION FOR LONGER. In addition to delivering an unparalleled experience, thanks to its improved audio, the Nintendo Switch has a rechargeable battery while you play. From 4.5 hours to 9 hours of battery life. INCLUDES SUPER MARIO BROS. WONDER. Transform your world with the phenomenal flowers in this new Mario game, full of amazing adventures, power-ups and new abilities. NINTENDO SWITCH ONLINE SUBSCRIPTION. Access online games, play with friends and enjoy the exclusive benefits of the Nintendo Switch Online subscription." }
{ "index": { "_id": 4 } }
{ "name": "Steam Deck", "brand": "Valve", "storage": "512GB", "price": 399.99, "description": "You can save games, apps, photos and videos without worrying about space. High-Level Performance: The 4-core processor and graphics ensure a dynamic experience and fast responses. High-Definition Images: Smooth transitions and sharp images provide complete immersion in the game. Wireless Connectivity: Wi-Fi technology allows you to play wherever you want, without wires or cables limiting your fun" }
{ "index": { "_id": 5 } }
{ "name": "Nintendo Switch Lite", "brand": "Nintendo", "storage": "512GB", "price": 299.99, "description": "MADE TO BE PORTABLE. Nintendo Switch Lite is designed specifically for portable gaming. The console lets you jump into your favorite games wherever you are. COMPACT AND LIGHTWEIGHT. With its sleek, lightweight design, this console is ready to hit the road wherever you are. COMPATIBLE GAMES. The Nintendo Switch Lite system plays the library of Nintendo Switch games that work in handheld mode. A WORLD OF COLOR TO CHOOSE FROM. Available in a variety of vibrant and unique colors, Nintendo Switch Lite lets you bring even more personality wherever you go." }<p>Nun wollen wir klassische Aspekte herausfiltern, indem wir die Ergebnisse nach Marke, Speicherort und Preisspanne gruppieren. In der Abfrage wurde Größe:0 definiert. In diesem Szenario besteht das Ziel darin, nur die Aggregationsergebnisse abzurufen, ohne die Dokumente einzubeziehen, die der Abfrage entsprechen.</p>POST videogames/_search
{
  "size": 0,
  "aggs": {
    "brands": {
      "terms": { "field": "brand" }
    },
    "storage_sizes": {
      "terms": { "field": "storage" }
    },
    "price_ranges": {
      "range": {
        "field": "price",
        "ranges": [
          { "to": 300 },   
          { "from": 300, "to": 500 },  
          { "from": 500 }  
        ]
      }
    }
  }
}<p>Die Antwort wird Zählungen für <strong>Marke</strong>, <strong>Lager</strong> und <strong>Preis</strong> enthalten und so zur Erstellung von Filtern und Facetten beitragen.</p>"aggregations": {
   "brands": {
     "doc_count_error_upper_bound": 0,
     "sum_other_doc_count": 0,
     "buckets": [
       {
         "key": "Microsoft",
         "doc_count": 1
       },
       {
         "key": "Nintendo",
         "doc_count": 1
       },
       {
         "key": "Sony",
         "doc_count": 1
       },
       {
         "key": "Valve",
         "doc_count": 1
       }
     ]
   },
   "storage_sizes": {
     "doc_count_error_upper_bound": 0,
     "sum_other_doc_count": 0,
     "buckets": [
       {
         "key": "1TB",
         "doc_count": 2
       },
       {
         "key": "512GB",
         "doc_count": 2
       }
     ]
   },
   "price_ranges": {
     "buckets": [
       {
         "key": "*-300.0",
         "to": 300,
         "doc_count": 1
       },
       {
         "key": "300.0-500.0",
         "from": 300,
         "to": 500,
         "doc_count": 3
       },
       {
         "key": "500.0-*",
         "from": 500,
         "doc_count": 0
       }
     ]
   }
 }<h2>Ansatz, der auf Machine Learning/KI basiert, für Filter und Facetten</h2><p>Bei diesem Ansatz analysieren Modelle des maschinellen Lernens (ML), einschließlich Techniken der künstlichen Intelligenz (KI), Datenattribute, um relevante Filter und Facetten zu generieren. Anstatt sich auf vordefinierte Regeln zu stützen, nutzt ML/KI die Merkmale indexierter Daten. Dies ermöglicht die dynamische Entdeckung neuer Facetten und Filter.</p><p><strong>Vorteile</strong>:</p><ul><li><p><strong>Automatische Aktualisierungen:</strong> Neue Filter und Facetten werden automatisch generiert, ohne dass manuelle Anpassungen erforderlich sind.</p></li><li><p><strong>Entdeckung neuer Attribute:</strong> Es kann <strong>bisher unberücksichtigte </strong>Datenmerkmale als Filter identifizieren und so das Sucherlebnis bereichern.</p></li><li><p><strong>Reduzierter manueller Aufwand:</strong> Das Team muss keine Filterregeln mehr ständig definieren und aktualisieren, da die KI aus den verfügbaren Daten lernt.</p></li></ul><p><strong>Nachteile:</strong></p><ul><li><p><strong>Wartungsaufwand:</strong> Die Verwendung von Modellen kann eine Vorvalidierung erfordern, um die Konsistenz der generierten Filter sicherzustellen.</p></li><li><p><strong>Erfordert Expertise in den Bereichen Maschinelles Lernen und Künstliche Intelligenz:</strong> Die Lösung erfordert qualifizierte Fachkräfte, die die Modellleistung feinabstimmen und überwachen.</p></li><li><p><strong>Risiko irrelevanter Filter:</strong> Wenn das Modell nicht gut kalibriert ist, kann es Facetten generieren, die für die Benutzer nicht nützlich sind.</p></li><li><p><strong>Kosten:</strong> Der Einsatz von ML und KI kann die Inanspruchnahme von Dienstleistungen Dritter erfordern, was die Betriebskosten erhöht.</p></li></ul><p>Es ist wichtig zu beachten, dass selbst bei einem gut kalibrierten Modell und einer gut formulierten Eingabeaufforderung die generierten Facetten noch einen Überprüfungsschritt durchlaufen sollten. Diese Validierung kann manuell oder auf der Grundlage von Moderationsregeln erfolgen, um sicherzustellen, dass die Inhalte angemessen und sicher sind. Dies ist zwar nicht unbedingt ein Nachteil, aber dennoch ein wichtiger Aspekt, um die Qualität und Eignung der Facetten sicherzustellen, bevor sie den Nutzern zur Verfügung gestellt werden.</p><h3>Implementierung von Filtern/Facetten – KI-Ansatz</h3><p>In dieser Demonstration verwenden wir ein KI-Modell, um Produkteigenschaften automatisch zu analysieren und relevante Attribute vorzuschlagen. Mithilfe einer gut strukturierten Eingabeaufforderung extrahieren wir Informationen aus dem Katalog und wandeln diese in Filter und Facetten um. Im Folgenden stellen wir jeden einzelnen Schritt des Prozesses vor.</p><p>Zunächst werden wir die <strong>Inference API</strong> verwenden, um einen Endpunkt für die Integration mit einem ML-Dienst zu registrieren. Nachfolgend ein Beispiel für die Integration mit <strong>dem Dienst von OpenAI</strong>.</p>PUT _inference/completion/generate_filter_ia
{
   "service": "openai",
   "service_settings": {
       "api_key": "your-key",
       "model_id": "gpt-4o-mini"
   }
}<p>Nun definieren wir die Pipeline, um die Eingabeaufforderung auszuführen und die vom Modell generierten neuen Filter zu erhalten.</p>PUT /_ingest/pipeline/generate_filter_ai
{
   "processors": [
     {
       "script": {
         "source": """ctx.prompt = "You are an expert in data organization for search and product categorization. Your task is to analyze the following product and identify the best dynamic facets that can be used in an e-commerce search experience. Product: " + ctx.name + "description: " + ctx.description + "Instructions: - Analyze the product name and description. - Extract only the dynamic facets (technological features or product characteristics that can be inferred from the description, try to create max 3 facets by characteristics found). Put the values into an array. Using key and value, e.g. dynamic_facets: [{ \"name\": \"Gaming Experience\", \"value\": \"Haptic Feedback\" },{ \"name\": \"Gaming Experience\", \"value\": \"Adaptive Triggers\" } - Return only a JSON."
         """
       }
     },
     {
       "inference": {
         "model_id": "generate_filter_ia",
         "input_output": {
           "input_field": "prompt",
           "output_field": "result"
         }
       }
     },
     {
       "gsub": {
         "field": "result",
         "pattern": "```json",
         "replacement": ""
       }
     },
     {
       "json" : {
         "field" : "result",
         "strict_json_parsing": false,
         "add_to_root" : true
       }
     },
     {
       "remove": {
         "field": "result"
       }
     },
     {
       "remove": {
         "field": "prompt"
       }
     }
   ]
}<p>Eine Simulation dieser Pipeline für das Produkt „PlayStation 5“ wird mit folgender Beschreibung durchgeführt:</p><p><em>Atemberaubendes Spielerlebnis: Bestaunen Sie die beeindruckende Grafik und erleben Sie die Funktionen der neuen PS5.</em></p><p><em>Atemberaubendes Eintauchen: Entdecken Sie ein intensiveres Spielerlebnis mit Unterstützung für haptisches Feedback, adaptive Trigger und 3D-Audiotechnologie.</em></p><p><em>Schlankes Design: Mit der PS5 Digital Edition erhalten Gamer leistungsstarke Gaming-Technologie in einem schlanken, kompakten Design.</em></p><p><em>1 TB Speicherplatz: Dank 1 TB integriertem SSD-Speicher sind Ihre Lieblingsspiele immer griffbereit und warten nur darauf, von Ihnen gespielt zu werden.</em></p><p><em>Abwärtskompatibilität und Game Boost: Die PS5-Konsole kann über 4.000 PS4-Spiele abspielen. Mit Game Boost können Sie sogar in einigen der besten PS4-Konsolenspiele schnellere und flüssigere Bildwiederholraten genießen.</em></p><p>Betrachten wir nun die von dieser Simulation generierte Prompt-Ausgabe.</p>{
 "docs": [
   {
     "doc": {
       "_index": "index",
       "_version": "-3",
       "_id": "1",
       "_source": {
         "name": "Play Station 5",
         "result": """```json
{
 "dynamic_facets": [
   { "name": "Storage Capacity", "value": "1TB SSD" },
   { "name": "Graphics Technology", "value": "Stunning Graphics" },
   { "name": "Audio Technology", "value": "3D Audio" }
 ]
}
```""",
         "description": "Stunning Gaming: Marvel at stunning graphics and experience the features of the new PS5. Breathtaking Immersion: Discover a deeper gaming experience with support for haptic feedback, adaptive triggers, and 3D Audio technology. Slim Design: With the PS5 Digital Edition, gamers get powerful gaming technology in a sleek, compact design. 1TB of Storage: Have your favorite games ready and waiting for you to play with 1TB of built-in SSD storage. Backward Compatibility and Game Boost: The PS5 console can play over 4,000 PS4 games. With Game Boost, you can even enjoy faster, smoother frame rates in some of the best PS4 console games.",
         "model_id": "generate_filter_ia",
         "prompt": """You are an expert in data organization for search and product categorization. Your task is to analyze the following product and identify the best dynamic facets that can be used in an e-commerce search experience. Product: Play Station 5description: Stunning Gaming: Marvel at stunning graphics and experience the features of the new PS5. Breathtaking Immersion: Discover a deeper gaming experience with support for haptic feedback, adaptive triggers, and 3D Audio technology. Slim Design: With the PS5 Digital Edition, gamers get powerful gaming technology in a sleek, compact design. 1TB of Storage: Have your favorite games ready and waiting for you to play with 1TB of built-in SSD storage. Backward Compatibility and Game Boost: The PS5 console can play over 4,000 PS4 games. With Game Boost, you can even enjoy faster, smoother frame rates in some of the best PS4 console games.Instructions: - Analyze the product name and description. - Extract only the dynamic facets (technological features or product characteristics that can be inferred from the description, try create max 3 facets by characteristics found). Put the values like arrays. Using key and value, e.g. dynamic_facets: [{ "name": "Gaming Experience", "value": "Haptic Feedback" },{ "name": "Gaming Experience", "value": "Adaptive Triggers" } - Return only a JSON."""
       },
       "_ingest": {
         "timestamp": "2025-03-19T22:14:32.0161803Z"
       }
     }
   }
 ]
}<p>Nun wird dem neuen Index ein neues Feld, <strong>dynamic_facets</strong>, hinzugefügt, um die von der KI generierten Facetten zu speichern.</p>PUT videogames_1
{
 "mappings": {
   "properties": {
     "name": { "type": "text" },
     "brand": { "type": "keyword" },
     "storage": { "type": "keyword" },
     "price": { "type": "float" },
     "description": { "type": "text" },
     "dynamic_facets": { "type": "nested",
     "properties": { "name": { "type": "keyword" },
                     "value": { "type": "keyword" } } }
   }
 }
}<p>Mithilfe der <strong>Reindex API</strong> werden wir den <strong>Videospiele-</strong> Index auf <strong>videogames_1</strong> neu indizieren und dabei die <strong>generate_filter_ai-</strong> Pipeline anwenden. Diese Pipeline generiert während der Indizierung automatisch dynamische Facetten.</p>POST _reindex?wait_for_completion=false
{
 "source": {
   "index": "videogames"
 },
 "dest": {
   "index": "videogames_1",
   "pipeline": "generate_filter_ai"
 }
}<p>Nun führen wir eine Suche durch und rufen die neuen Filter ab:</p>GET videogames_1/_search
{
 "size": 0,
 "query": {
   "match": {
     "name": "nintendo"
   }
 },
 "aggs": {
   "dynamic_facets": {
     "nested": {
       "path": "dynamic_facets"
     },
     "aggs": {
       "facets": {
         "terms": {
           "field": "dynamic_facets.name"
         },
         "aggs": {
           "facets": {
             "terms": {
               "field": "dynamic_facets.value"
             }
           }
         }
       }
     }
   }
 }
}<p>Ergebnisse:</p>"aggregations": {
   "dynamic_facets": {
     "doc_count": 3,
     "facets": {
       "doc_count_error_upper_bound": 0,
       "sum_other_doc_count": 0,
       "buckets": [
         {
           "key": "Frame Rate",
           "doc_count": 1,
           "facets": {
             "doc_count_error_upper_bound": 0,
             "sum_other_doc_count": 0,
             "buckets": [
               {
                 "key": "120 FPS",
                 "doc_count": 1
               }
             ]
           }
         },
         {
           "key": "Gaming Resolution",
           "doc_count": 1,
           "facets": {
             "doc_count_error_upper_bound": 0,
             "sum_other_doc_count": 0,
             "buckets": [
               {
                 "key": "4K",
                 "doc_count": 1
               }
             ]
           }
         },
         {
           "key": "Graphics Processing Power",
           "doc_count": 1,
           "facets": {
             "doc_count_error_upper_bound": 0,
             "sum_other_doc_count": 0,
             "buckets": [
               {
                 "key": "12 Teraflops",
                 "doc_count": 1
               }
             ]
           }
         }
       ]
     }
   }
 }<p>Zur Veranschaulichung der Umsetzung der einzelnen Aspekte folgt unten ein einfaches Frontend:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb0d6aa40caf7a91a/6a170b86ab7f0839afdb9eb6/12b6d9d4f4d0985848d92841545fd22b7253ae6d-1600x1288.png" alt="Umsetzung der Aspekte" /><p>Der hier dargestellte UI-Code befindet sich <a href="https://gist.github.com/andreluiz1987/06d9ec1b381e942e9def0e969bd811a0">hier</a>.</p><h2>Fazit</h2><p>Beide Ansätze zur Erstellung von Filtern und Facetten haben ihre Vor- und Nachteile. Der klassische Ansatz, der auf manuellen Regeln basiert, bietet Kontrolle und niedrigere Kosten, erfordert jedoch ständige Aktualisierungen und passt sich nicht dynamisch an neue Produkte oder Funktionen an.</p><p>Andererseits automatisiert der auf KI und maschinellem Lernen basierende Ansatz die Facettenextraktion, wodurch die Suche flexibler wird und die Entdeckung neuer Attribute ohne manuelles Eingreifen ermöglicht wird. Allerdings kann dieser Ansatz in der Umsetzung und Aufrechterhaltung komplexer sein und erfordert eine Kalibrierung, um konsistente Ergebnisse zu gewährleisten.</p><p>Die Wahl zwischen klassischen und KI-basierten Ansätzen hängt von den Bedürfnissen und der Komplexität des Unternehmens ab. Bei einfacheren Szenarien, in denen die Datenattribute stabil und vorhersehbar sind, kann der klassische Ansatz effizienter und einfacher zu warten sein, wodurch unnötige Kosten für Infrastruktur und KI-Modelle vermieden werden. Andererseits kann der Einsatz von ML/KI zur Extraktion von Facetten einen erheblichen Mehrwert bieten, das Sucherlebnis verbessern und die Filterung intelligenter gestalten.</p><p>Wichtig ist es zu beurteilen, ob die Automatisierung die Investition rechtfertigt oder ob eine traditionellere Lösung die Geschäftsanforderungen bereits effektiv erfüllt.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/filters-facets-using-ml</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/filters-facets-using-ml</guid>
    <category><![CDATA[Relevanz]]></category>
    <category><![CDATA[ML-Forschung]]></category>
    <dc:creator><![CDATA[Andre Luiz]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4084864dcdaa25d3/6a170b880c485781f901aaa9/6f196643d573614fe5124705c7e4db9bfce004b0-1200x628.png" length="0" type="image/png"/>
    <pubDate>Thu, 03 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Bewertung der Suchrelevanz Teil 1 – Der BEIR-Benchmark]]></title>
    <description><![CDATA[Lernen Sie, Ihr Suchsystem im Zusammenhang mit einem besseren Verständnis des BEIR-Benchmarks zu bewerten, mit Tipps und Techniken zur Verbesserung Ihrer Suchbewertungsprozesse.]]></description>
    <content:encoded><![CDATA[<p>Dies ist der erste Beitrag einer Reihe von Blogbeiträgen, in denen wir uns damit befassen, wie Sie Ihre eigenen Suchsysteme im Zusammenhang mit einem besseren Verständnis des BEIR-Benchmarks bewerten können. Wir stellen Ihnen spezielle Tipps und Techniken vor, mit denen Sie Ihre Suchbewertungsprozesse im Zusammenhang mit dem besseren Verständnis von BEIR verbessern können. Wir stellen Ihnen auch die häufigsten Fallstricke vor, die eine Bewertung weniger zuverlässig machen. Abschließend möchten wir darauf hinweisen, dass LLMs ein leistungsstarkes neues Tool für Suchingenieure darstellen. Anhand eines Beispiels zeigen wir, wie Sie diese zur Bewertung der Suche einsetzen können.</p><h2>Den BEIR-Benchmark bei der Bewertung der Suchrelevanz verstehen</h2><p>Für die Verbesserung eines Systems müssen Sie messen können, wie gut es funktioniert. Im Zusammenhang mit der Suche <a href="https://arxiv.org/abs/2104.08663">BEIR</a> (oder gleichwertig der Abschnitt „Retrieval” der Bestenliste <a href="https://huggingface.co/spaces/mteb/leaderboard">MTEB</a>) gilt als der „heilige Gral” für die Informationsabruf-Community, was nicht weiter verwunderlich ist. Es handelt sich um einen sehr gut strukturierten Benchmark mit vielfältigen Datensätzen für unterschiedliche Aufgaben. Genauer gesagt werden folgende Bereiche abgedeckt:</p><ul><li><p>Abrufen von Argumenten (ArguAna, Touche2020)</p></li><li><p>Open-Domain-QA (HotpotQA, Natural Questions, FiQA)</p></li><li><p>Passagenabruf (MSMARCO)</p></li><li><p>Abrufen doppelter Fragen (Quora, CQADupstack)</p></li><li><p>Faktenprüfung (FEVER, Climate-FEVER, Scifact)</p></li><li><p>Biomedizinische Informationsabfrage (TREC-COVID, NFCorpus, BioASQ)</p></li><li><p>Abrufen von Entitäten (DBPedia)</p></li><li><p>Zitationsvorhersage (SCIDOCS)</p></li></ul><p>Es liefert eine einzige Statistik, nDCG@10, die angibt, wie gut ein System die relevantesten Dokumente für jedes Aufgabenbeispiel in den von ihm zurückgegebenen besten Ergebnissen abgleicht. Für ein Suchsystem, mit dem ein Mensch interagiert, ist die Relevanz der betsen Ergebnisse entscheidend. Allerdings gibt es bei der Bewertung von Suchvorgängen viele Nuancen, die durch eine einzelne zusammenfassende Statistik nicht erfasst werden.</p><h2>Struktur eines BEIR-Datensatzes</h2><p>Jeder Benchmark hat drei Artefakte:</p><ul><li><p>der Korpus oder die Dokumente, die abgerufen werden sollen</p></li><li><p>Die Abfragen</p></li><li><p>die Relevanzbewertungen für die Abfragen (auch bekannt als <code>qrels</code>).</p></li></ul><p>Relevanzbewertungen werden als Wert zwischen null und größer angegeben. Werte ungleich Null zeigen an, dass das Dokument in gewisser Weise mit der Abfrage in Zusammenhang steht.</p><p>Datensatz</p><p>Korpusgröße</p><p>#Abfragen im Testset</p><p>#qrels positiv gekennzeichnet</p><p>#qrels gleich Null</p><p>#duplicates im Korpus</p><p>Arguana</p><p>8.674</p><p>1.406</p><p>1.406</p><p>0</p><p>96</p><p>Climate-FEVER</p><p>5.416.593</p><p>1.535</p><p>4.681</p><p>0</p><p>0</p><p>DBPedia</p><p>4.635.922</p><p>400</p><p>15.286</p><p>28.229</p><p>0</p><p>FEVER</p><p>5.416.568</p><p>6.666</p><p>7.937</p><p>0</p><p>0</p><p>FiQA-2018</p><p>57.638</p><p>648</p><p>1.706</p><p>0</p><p>0</p><p>HotpotQA</p><p>5.233.329</p><p>7.405</p><p>14.810</p><p>0</p><p>0</p><p>Natürliche Fragen</p><p>2.681.468</p><p>3.452</p><p>4.021</p><p>0</p><p>16.781</p><p>NFCorpus</p><p>3.633</p><p>323</p><p>12.334</p><p>0</p><p>80</p><p>Quora</p><p>522.931</p><p>10.000</p><p>15.675</p><p>0</p><p>1.092</p><p>SCIDOCS</p><p>25.657</p><p>1.000</p><p>4.928</p><p>25.000</p><p>2</p><p>Scifact</p><p>5.183</p><p>300</p><p>339</p><p>0</p><p>0</p><p>Touche2020</p><p>382.545</p><p>49</p><p>932</p><p>1.982</p><p>5.357</p><p>TREC-COVID</p><p>171.332</p><p>50</p><p>24.763</p><p>41.663</p><p>0</p><p>MSMARCO</p><p>8.841.823</p><p>6.980</p><p>7.437</p><p>0</p><p>324</p><p>CQADupstack (Summe)</p><p>457.199</p><p>13.145</p><p>23.703</p><p>0</p><p>0</p><p><strong>Tabelle 1</strong>: Datensatzstatistiken. Die Zahlen wurden auf dem Testabschnitt der Datensätze berechnet (<code>dev</code> für <code>MSMARCO</code>).</p><p><strong>Tabelle 1</strong> enthält einige Statistiken zu den Datensätzen, aus denen der <code>BEIR</code>-Benchmark besteht, wie zum Beispiel die Anzahl der Dokumente im Korpus, die Anzahl der Abfragen im Testdatensatz und die Anzahl der positiven/negativen Paare (Abfrage, Dokument) in der <code>qrels</code>-Datei. Ein kurzer Blick auf die Daten lässt uns sofort Folgendes ableiten:</p><ul><li><p>Die meisten Datensätze enthalten keine negativen Beziehungen in der <code>qrels</code>-Datei, d. h. null Werte, was Dokumente ausdrücklich als irrelevant für die jeweilige Abfrage kennzeichnen würde.</p></li><li><p>Die durchschnittliche Anzahl von Dokumentbeziehungen pro Abfrage (<code>#qrels</code> / <code>#queries</code>) variiert von 1,0 im Ticket von <code>ArguAna</code> bis 493,5 (<code>TREC-COVID</code>), jedoch mit einem Wert von <code>&lt;</code>5 für die Mehrheit der Tickets.</p></li><li><p>Bei einigen Datensätzen gibt es doppelte Dokumente im Korpus, was in einigen Fällen zu einer falschen Auswertung führen kann, z. B. wenn ein Dokument als relevant für eine Abfrage angesehen wird, sein Duplikat jedoch nicht. Zum Beispiel haben wir in <code>ArguAna</code> 96 Tickets von doppelten Dokumentpaaren identifiziert, wobei pro Paar nur ein Dokument als relevant für eine Abfrage markiert wurde. Durch die „Erweiterung“ der ursprünglichen Qrels-Liste um die Duplikate haben wir einen relativen Anstieg des <code>nDCG@10</code>-Wertes um durchschnittlich ~1 % festgestellt.</p></li></ul>{
  "_id": "test-economy-epiasghbf-pro02b",
  "title": "economic policy international africa society gender house believes feminisation",
  "text": "Again employment needs to be contextualised with …",
  "metadata": {}
}
{
  "_id": "test-society-epiasghbf-pro02b",
  "title": "economic policy international africa society gender house believes feminisation",
  "text": "Again employment needs to be contextualised with …",
  "metadata": {}
}
<p><strong>Beispiel für duplizierte Paare in ArguAna. In der qrels-Datei scheint nur der erste Eintrag (als Gegenargument) für die Abfrage („test-economy-epiasghbf-pro02a“) relevant zu sein.</strong></p><p>Beim Vergleich von Modellen in der MTEB-Rangliste ist es naheliegend, sich auf die durchschnittliche Retrieval-Qualität zu konzentrieren. Dies ist ein guter Indikator für die Gesamtqualität des Modells, sagt jedoch nicht unbedingt etwas darüber aus, wie es für Sie funktionieren wird. Da die Ergebnisse pro Datensatz gemeldet werden, ist es sinnvoll zu verstehen, wie eng die verschiedenen Datensätze mit Ihrer Suchaufgabe zusammenhängen, und die Modelle nur anhand der relevantesten Datensätze neu zu bewerten. Wenn Sie noch tiefer eintauchen möchten, können Sie zusätzlich überprüfen, ob es Überschneidungen zwischen den Themen der verschiedenen Datensätze gibt. Die Stratifizierung von Qualitätsmaßen nach Themen ermöglicht eine viel differenziertere Bewertung ihrer spezifischen Stärken und Schwächen.</p><p>Wichtig ist hierbei, dass ein Dokument, das nicht in der <code>qrels</code>-Datei markiert ist, standardmäßig als für die Abfrage irrelevant angesehen wird. Wir befassen uns etwas eingehender mit diesem Bereich und sammeln einige Nachweise, um mehr Licht in die folgende Frage zu bringen: „Wie oft werden einem Evaluator Paare (Abfrage, Dokument) vorgelegt, für die es keine Ground-Truth-Informationen gibt?“. Der Grund dafür ist, dass bei nur verfügbaren oberflächlichen Markups (sodass nicht jedes relevante Dokument als solches gekennzeichnet ist) ein Informationsabrufsystem schlechter bewertet werden kann als ein anderes, nur weil es sich dafür „entscheidet“, andere relevante (aber nicht markierte) Dokumente anzuzeigen. Das ist ein häufiger Fehler bei der Erstellung qualitativ hochwertiger Evaluierungsdatensätze, insbesondere bei großen Datensätzen. Aus praktischen Gründen konzentriert sich die manuelle Kennzeichnung in der Regel auf die besten Ergebnisse, die vom aktuellen System zurückgegeben werden, sodass relevante Dokumente in den blinden Flecken möglicherweise übersehen werden. Daher ist es in der Regel vorzuziehen, mehr Ressourcen auf ein umfassenderes Markup weniger Abfragen als auf ein breites, oberflächliches Markup zu konzentrieren.</p><h2>Nutzung des BEIR-Benchmarks zur Bewertung der Suchrelevanz</h2><p>Um unsere Analyse zu beginnen, implementieren wir das folgende Szenario (siehe <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/evaluating-search-relevance-part-1/retrieve-and-rerank.ipynb">Notizbuch</a>):</p><ol><li><p>Zuerst laden wir den Korpus jedes Datensatzes in einen Elasticsearch-Index.</p></li><li><p>Für jede Abfrage im Testsatz rufen wir die 100 besten Dokumente mit BM25 ab.</p></li><li><p>Wir ordnen die abgerufenen Dokumente mithilfe verschiedener SOTA-Reranking-Modelle neu an.</p></li><li><p>Abschließend geben wir die „Bewertungsrate“ für die 10 besten Dokumente aus Schritt 2 (nach dem Abrufen) und Schritt 3 (nach dem Reranking) an. Mit anderen Worten: Wir berechnen den durchschnittlichen Prozentsatz der 10 besten Dokumente mit einer Bewertung in der <code>qrels</code>-Datei.</p></li></ol><p>Die Liste der von uns verwendeten Reranking-Modelle lautet wie folgt:</p><ul><li><p><a href="https://docs.cohere.com/reference/rerank">Coheres</a> <code>rerank-english-v2.0</code> und <code>rerank-english-v3.0</code></p></li><li><p><a href="https://huggingface.co/BAAI/bge-reranker-base">BGE-base</a></p></li><li><p><a href="https://huggingface.co/mixedbread-ai/mxbai-rerank-xsmall-v1">mxbai-rerank-xsmall-v1</a></p></li><li><p><a href="https://huggingface.co/cross-encoder/ms-marco-MiniLM-L-6-v2">MiniLM-L-6-v2</a></p></li></ul><p></p><p>Abruf</p><p>Reranking</p><p></p><p></p><p></p><p></p><p>Datensatz</p><p>BM25 (%)</p><p>Cohere Rerank v2 (%)</p><p>Cohere Rerank v3 (%)</p><p>BGE-base (%)</p><p>mxbai-rerank-xsmall-v1 (%)</p><p>MiniLM-L-6-v2 (%)</p><p>Arguana</p><p>7,54</p><p>4,87</p><p>7,87</p><p>4,52</p><p>4,53</p><p>6,84</p><p>Climate-FEVER</p><p>5,75</p><p>6,24</p><p>8,15</p><p>9,36</p><p>7,79</p><p>7,58</p><p>DBPedia</p><p>61,18</p><p>60,78</p><p>64,15</p><p>63,9</p><p>63,5</p><p>67,62</p><p>FEVER</p><p>8,89</p><p>9,97</p><p>10,08</p><p>10,19</p><p>9,88</p><p>9,88</p><p>FiQa-2018</p><p>7,02</p><p>11,02</p><p>10,77</p><p>8,43</p><p>9,1</p><p>9,44</p><p>HotpotQA</p><p>12,59</p><p>14,5</p><p>14,76</p><p>15,1</p><p>14,02</p><p>14,42</p><p>Natürliche Fragen</p><p>5,94</p><p>8.84</p><p>8,71</p><p>8,37</p><p>8,14</p><p>8,34</p><p>NFCorpus</p><p>31,67</p><p>32,9</p><p>33,91</p><p>30,63</p><p>32,77</p><p>32,45</p><p>Quora</p><p>12,2</p><p>10,46</p><p>13,04</p><p>11,26</p><p>12,58</p><p>12,78</p><p>SCIDOCS</p><p>8,62</p><p>9,41</p><p>9,71</p><p>8,04</p><p>8,79</p><p>8,52</p><p>Scifact</p><p>9,07</p><p>9,57</p><p>9,77</p><p>9,3</p><p>9,1</p><p>9,17</p><p>Touche2020</p><p>38,78</p><p>30,41</p><p>32,24</p><p>33,06</p><p>37,96</p><p>33,67</p><p>TREC-COVID</p><p>92,4</p><p>98,4</p><p>98,2</p><p>93,8</p><p>99,6</p><p>97,4</p><p>MSMARCO</p><p>3,97</p><p>6,00</p><p>6,03</p><p>6,07</p><p>5,47</p><p>6,11</p><p>CQADupstack (Durchschnitt)</p><p>5,47</p><p>6,32</p><p>6,87</p><p>5.89</p><p>6,22</p><p>6,16</p><p><strong>Tabelle 2</strong>: Bewertungsrate pro Paare (Datensatz, Reranker), berechnet anhand der 10 am häufigsten abgerufenen/neu geordneten Dokumente</p><p><strong>Aus Tabelle 2</strong> sehen wir, mit Ausnahme von <code>TREC-COVID</code> (&gt;90 % Abdeckung), <code>DBPedia</code> (~65 %), <code>Touche2020</code> und <code>nfcorpus</code> (~35 %), dass die Mehrheit der Datensätze eine Labeling-Rate zwischen 5 % und etwas mehr als 10 % nach dem Abrufen oder Reranking aufweist. Das heißt nicht, dass alle diese unmarkierten Dokumente relevant sind, aber es könnte ein Teilbereich davon geben, insbesondere diejenigen, die an oberster Stelle stehen, die positiv sein könnten.</p><p>Mit dem Aufkommen von auf allgemeine Anweisungen abgestimmten Sprachmodellen haben wir ein neues leistungsfähiges Tool, das die Beurteilung der Relevanz potenziell automatisieren kann. Diese Methoden sind in der Regel viel zu rechenaufwändig, um online für die Suche verwendet zu werden, aber hier geht es uns um die Offline-Auswertung. Im Folgenden verwenden wir sie, um die Hinweise darauf zu untersuchen, dass einige der BEIR-Datensätze unter oberflächlichen Markups leiden.</p><p>Zur weiteren Untersuchung dieser Hypothese haben wir uns entschlossen, uns auf MSMARCO zu konzentrieren und einen Teilbereich von 100 Abfragen zusammen mit den fünf (mit Cohere v2) höchsten Reranking-Dokumenten auszuwählen, die derzeit nicht als relevant markiert sind. Wir haben zwei verschiedene Bewertungsansätze verfolgt: Zunächst haben wir einen sorgfältig abgestimmten Prompt (mehr dazu in einem späteren Beitrag) verwendet, um das kürzlich veröffentlichte <a href="https://huggingface.co/microsoft/Phi-3-mini-4k-instruct">Phi-3-mini-4k-Modell</a> darauf vorzubereiten, die Relevanz (oder Nicht-Relevanz) eines Dokuments für die Abfrage vorherzusagen. Parallel dazu wurden diese Tickets auch manuell gekennzeichnet, um auch die Übereinstimmungsrate zwischen dem LLM-Ausgang und der menschlichen Bewertung zu ermitteln. Insgesamt können wir die folgenden beiden Schlüsse ziehen:</p><ul><li><p>Die Übereinstimmungsrate zwischen den LLM-Reaktionen und den menschlichen Beurteilungen lag bei knapp 80 %, was als Ausgangspunkt in diese Richtung durchaus gut erscheint.</p></li><li><p>In 57,6 % der Fälle (nach menschlicher Beurteilung) erwiesen sich die zurückgegebenen Dokumente tatsächlich als relevant für die Abfrage. Anders ausgedrückt: Bei 100 Abfragen werden 107 Dokumente als relevant eingestuft, aber es gibt mindestens 0,576 x 5 x 100 = 288 zusätzliche Dokumente, die tatsächlich relevant sind!</p></li></ul><p>Hier einige Beispiele aus dem Datensatz <code>MSMARCO</code>/<code>dev</code>, die die Abfrage, das annotierte positive Dokument (aus <code>qrels</code>) und ein falsch negatives Dokument aufgrund unvollständiger Auszeichnung enthalten:</p><p>Beispiel 1:</p>{
  "query":
    {
        "_id": 155234,
        "text": "do bigger tires affect gas mileage"
    },
  "positive_doc":
    {
        "_id": 502713,
        "text": "Tire Width versus Gas Mileage. Tire width is one of the only tire size factors that can influence gas mileage in a positive way. For example, a narrow tire will have less wind resistance, rolling resistance, and weight; thus increasing gas mileage.",
    },
    "negative_doc":
    {
        "_id": 7073658,
        "text": "Tire Size and Width Influences Gas Mileage. There are two things to consider when thinking about tires and their effect on gas mileage; one is wind resistance, and the other is rolling resistance. When a car is driving at higher speeds, it experiences higher wind resistance; this means lower fuel economy."
    }
}
<p>Beispiel 2:</p>{
  "query":
    {
        "_id": 300674,
        "text": "how many years did william bradford serve as governor of plymouth colony?"
    },
  "positive_doc":
    {
        "_id": 7067032,
        "text": "http://en.wikipedia.org/wiki/William_Bradford_(Plymouth_Colony_governor) William Bradford (c.1590 \u00e2\u0080\u0093 1657) was an English Separatist leader in Leiden, Holland and in Plymouth Colony was a signatory to the Mayflower Compact. He served as Plymouth Colony Governor five times covering about thirty years between 1621 and 1657."
    },
    "negative_doc":
    {
        "_id": 2495763,
        "text": "William Bradford was the governor of Plymouth Colony for 30 years. The colony was founded by people called Puritans. They were some of the first people from England to settle in what is now the United States. Bradford helped make Plymouth the first lasting colony in New England."
    }
}
<p>Die manuelle Auswertung solcher spezifischer Abfragen ist eine allgemein nützliche Methode, um die Suchqualität zu verstehen und quantitative Messgrößen wie nDCG@10 zu ergänzen. Bei einem repräsentativen Abfrageset, das Sie immer ausführen, wenn Sie Änderungen an der Suche vornehmen, erhalten Sie wichtige qualitative Informationen darüber, wie sich die Leistung verändert, die in den Statistiken nicht sichtbar sind. Beispielsweise erhalten Sie viel mehr Einblick in die falschen Ergebnisse Ihrer Suche: Sie erkennen offensichtliche Fehler in den Suchergebnissen, Kategorien verwandter Fehler, wie z. B. die Fehlinterpretation fachspezifischer Terminologie und so weiter.</p><p>Unser Ergebnis stimmt mit einschlägigen Studien zur <code>MSMARCO</code> Bewertung der Suchrelevanz überein. Zum Beispiel folgen <a href="https://arxiv.org/pdf/2109.00062">Arabzadeh et al.</a> einem ähnlichen Verfahren, bei dem sie Crowdsourcing-Mitarbeiter für Präferenzurteile einsetzen: Sie zeigen unter anderem, dass in vielen Fällen die von den Reranking-Modulen zurückgegebenen Dokumente im Vergleich zu den Dokumenten in der MSMARCO- <code>qrels</code>-Datei bevorzugt werden. Ein weiterer Nachweis stammt von den Autoren des <a href="https://arxiv.org/pdf/2010.08191">RocketQA</a>-Rerankers, die berichten, dass mehr als 70 % der Reranking-Dokumente nach einer manuellen Überprüfung als relevant eingestuft wurden.</p><p> Aktualisierung – 9. September: Nach einer genauen Neubewertung des Datensatzes haben wir 15 weitere Fälle relevanter Dokumente identifiziert, wodurch sich die Gesamtzahl von 273 auf 288 erhöht hat</p><h2>Wichtigste Erkenntnisse und nächste Schritte</h2><ul><li><p>Das Streben nach besseren Referenzwerten ist ein nie endender Prozess, da diese für Benchmarking und Modellvergleiche von entscheidender Bedeutung sind. LLMs können in einigen Bewertungsbereichen helfen, wenn sie mit Vorsicht angewendet und mit den richtigen Anweisungen abgestimmt werden.</p></li><li><p>Allgemeiner gesagt: Da Benchmarks niemals perfekt sein werden, könnte es vorteilhaft sein, von einem reinen Wertevergleich zu robusteren Methoden überzugehen, die statistisch signifikante Unterschiede erfassen. Die Arbeit von <a href="https://arxiv.org/pdf/2109.00062">Arabzadeh et al.</a> liefert hierfür ein gutes Beispiel, da auf Grundlage der Ergebnisse 95-prozentige Konfidenzintervalle erstellt wurden, die signifikante (oder nicht signifikante) Unterschiede zwischen den verschiedenen Durchläufen aufzeigen Im beigefügten <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/evaluating-search-relevance-part-1/retrieve-and-rerank.ipynb">Notizbuch</a> stellen wir eine Implementierung von Konfidenzintervallen unter Verwendung von <a href="https://en.wikipedia.org/wiki/Bootstrapping_(statistics)">Bootstrapping</a> zur Verfügung.</p></li><li><p>Aus der Perspektive des Endnutzers ist es sinnvoll, bei der Betrachtung von Benchmark-Ergebnissen über die Aufgabenausrichtung nachzudenken. Für einen KI-Ingenieur, der beispielsweise eine RAG-Pipeline entwickelt und weiß, dass der typische Anwendungsfall das Zusammenführen mehrerer Informationen aus verschiedenen Quellen beinhaltet, wäre es sinnvoller, die Leistung seines Retrieval-Modells anhand von Multi-Hop-QA-Datensätzen wie HotpotQA zu bewerten, anstatt den globalen Durchschnitt des gesamten BEIR-Benchmarks zu verwenden.</p></li></ul><p>Im <a href="https://www.elastic.co/search-labs/blog/evaluating-search-relevance-part-2">nächsten Blogbeitrag</a> werden wir uns eingehender mit der Verwendung von Phi-3 als LLM-as-a-Judge und der Optimierung zur Vorhersage der Relevanz befassen.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/evaluating-search-relevance-part-1</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/evaluating-search-relevance-part-1</guid>
    <category><![CDATA[ML-Forschung]]></category>
    <category><![CDATA[Python]]></category>
    <dc:creator><![CDATA[Thanos Papaoikonomou,Thomas Veasey]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9d9912c8d4187096/6a1704f5b0367d30e672bc17/54a6e5197f5721b36fc65f27387d29803ed35589-721x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Tue, 16 Jul 2024 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Skalarquantisierung in Lucene verstehen]]></title>
    <description><![CDATA[Erfahren Sie, wie Elastic die Skalarquantisierung in Lucene eingeführt hat, einschließlich automatischer Byte-Quantisierung, Quantisierung pro Segment und Einblicken in die Leistung.]]></description>
    <content:encoded><![CDATA[<h2>Automatische Byte-Quantisierung in Lucene</h2><p>HNSW ist zwar eine leistungsstarke und flexible Methode zum Speichern und Durchsuchen von Vektoren, benötigt aber eine beträchtliche Menge an Speicherplatz, um schnell ausgeführt werden zu können. Beispielsweise benötigt die Abfrage von 1 Million float32-Vektoren mit 768 Dimensionen ungefähr  RAM. Sobald man eine beträchtliche Anzahl von Vektoren durchsucht, wird dies teuer. Eine Möglichkeit, den Speicherverbrauch um etwa  zu reduzieren, besteht in der Byte-Quantisierung. Lucene und folglich auch Elasticsearch unterstützen die Indizierung  -Vektoren schon seit einiger Zeit, die Erstellung dieser Vektoren lag jedoch bisher in der Verantwortung des Benutzers. Das wird sich bald ändern, da wir in Lucene die Skalarquantisierung  eingeführt haben.</p><h2>Skalarquantisierung 101</h2><p>Alle Quantisierungstechniken werden als verlustbehaftete Transformationen der Rohdaten betrachtet. Das bedeutet, dass aus Platzgründen einige Informationen verloren gehen. Eine ausführliche Erklärung der Skalarquantisierung finden Sie unter: <a href="https://www.elastic.co/search-labs/scalar-quantization-101">Skalarquantisierung 101</a>. Im Prinzip ist die Skalarquantisierung eine verlustbehaftete Kompressionstechnik. Durch einfache Berechnungen lassen sich erhebliche Speicherplatzeinsparungen erzielen, ohne dass die Speicherkapazität nennenswert beeinträchtigt wird.</p><h2>Die Architektur erkunden</h2><p>Wer bereits Erfahrung mit Elasticsearch hat, kennt diese Konzepte möglicherweise schon, aber hier ist ein kurzer Überblick über die Verteilung der Dokumente für die Suche.</p><p>Jeder Elasticsearch-Index besteht aus <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html#size-your-shards">mehreren Shards</a>. Obwohl jeder Shard nur einem einzigen Knoten zugewiesen werden kann, ermöglicht die Verwendung mehrerer Shards pro Index eine parallele Berechnung über mehrere Knoten hinweg.</p><p>Jeder Shard besteht aus einem einzelnen <a href="https://lucene.apache.org/core/9_8_0/core/org/apache/lucene/index/package-summary.html">Lucene-Index</a>. Ein Lucene-Index besteht aus mehreren schreibgeschützten Segmenten. Während der Indizierung werden Dokumente zwischengespeichert und regelmäßig in ein schreibgeschütztes Segment geschrieben. Wenn bestimmte Bedingungen erfüllt sind, können diese Segmente im Hintergrund zu einem größeren Segment zusammengeführt werden. Das alles ist konfigurierbar und birgt seine eigenen Komplexitäten. Wenn wir aber von Segmenten und deren Zusammenführung sprechen, meinen wir schreibgeschützte Lucene-Segmente und die automatische, periodische Zusammenführung dieser Segmente. <a href="https://www.elastic.co/search-labs/vector-search-elasticsearch-rationale">Hier folgt ein detaillierterer Einblick</a> in die Segmentzusammenführung und die damit verbundenen Designentscheidungen.</p><h2>Quantisierung pro Segment in Lucene</h2><p>Jedes Segment in Lucene speichert Folgendes: die einzelnen Vektoren, die HNSW-Graphindizes, die quantisierten Vektoren und die berechneten Quantile. Aus Gründen der Kürze konzentrieren wir uns darauf, wie Lucene quantisierte und rohe Vektoren speichert. Für jedes Segment erfassen wir die Rohvektoren in der  Datei, die quantisierten Vektoren und einen einzelnen Korrekturmultiplikator (Gleitkommazahl) in  sowie die Metadaten rund um die Quantisierung in der  Datei.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1861d0af970fd096/6a17d9887f6f15a45dc099c0/507a4d578f8a5d2225b11d16ac1fc0b7dd39eaa1-1207x228.png" alt="Die .vec-Datei Datei" /><p>Abbildung 1: Vereinfachtes Layout der Rohvektorspeicherdatei. Benötigt Speicherplatz in  da  4 Byte groß sind. Da wir quantisieren, werden diese Daten während der HNSW-Suche nicht geladen. Sie werden nur auf ausdrücklichen Wunsch verwendet (z. B. Brute-Force-Sekundärverfahren mittels <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/filter-search-results.html#query-rescorer">Rescore</a>), oder zur erneuten Quantisierung während der Segmentzusammenführung.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8c52b51939357280/6a17d9897b54f9130f8b3761/ffc6e8bffefc5cd36f14aae315184c89e04a6587-1440x207.png" alt="Die .veq-Datei" /><p>Abbildung 2: Vereinfachtes Layout der  Datei. Benötigt  Speicherplatz und wird während der Suche in den Speicher geladen. Die  Bytes dienen der Berücksichtigung des Korrekturmultiplikators, der zur Anpassung der Bewertung für eine bessere Genauigkeit und Trefferquote verwendet wird.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt28e007988f81e5c0/6a17d98b25daabe23208a0d9/555cc92d7d179d8c9711cefbaaac3e0b815d2e42-1440x182.png" alt="Die .vemq-Datei" /><p>Abbildung 3: Vereinfachter Aufbau der Metadatendatei. Hier erfassen wir die Quantisierung und Vektorkonfiguration sowie die berechneten Quantile für dieses Segment.</p><p>Für jedes Segment speichern wir also nicht nur die quantisierten Vektoren, sondern auch die Quantile, die zur Erstellung dieser quantisierten Vektoren verwendet wurden, sowie die ursprünglichen Rohvektoren. Aber warum bewahren wir die Rohvektoren überhaupt auf?</p><h2>Quantisierung, die mit Ihnen wächst</h2><p>Da Lucene periodisch in schreibgeschützte Segmente schreibt, hat jedes Segment nur einen Teil Ihrer Daten zur Verfügung. Das bedeutet, dass die berechneten Quantile nur für diese Stichprobe Ihrer gesamten Daten direkt gelten. Das ist kein großes Problem, wenn Ihre Stichprobe Ihr gesamtes Korpus angemessen repräsentiert. Lucene ermöglicht es Ihnen jedoch, Ihren Index auf verschiedene Arten zu sortieren. Es könnte also vorkommen, dass die Daten so indiziert werden, dass sie so sortiert sind, dass dies zu Verzerrungen bei der Berechnung der Quantile pro Segment führt. Außerdem können Sie die Daten jederzeit löschen! Ihr Stichprobensatz kann winzig sein, sogar nur ein einziger Vektor. Ein weiterer Haken ist, dass Sie die Kontrolle darüber haben, wann Zusammenführungen erfolgen. Elasticsearch verfügt zwar über voreingestellte Standardwerte und eine regelmäßige Zusammenführung, Sie können aber jederzeit über <a href="https://www.elastic.co/guide/en/elasticsearch/reference/8.10/indices-forcemerge.html">die _force_merge</a> -API eine Zusammenführung anfordern. Wie können wir also all diese Flexibilität ermöglichen und gleichzeitig eine gute Quantisierung mit guter Recall-Qualität gewährleisten?</p><p>Die Vektorquantisierung von Lucene passt sich im Laufe der Zeit automatisch an. Da Lucene mit einer Architektur für schreibgeschützte Segmente konzipiert ist, haben wir die Garantie, dass sich die Daten in jedem Segment nicht verändert haben, und klare Abgrenzungen im Code, wann Aktualisierungen möglich sind. Das bedeutet, dass wir während der Segmentzusammenführung die Quantile nach Bedarf anpassen und gegebenenfalls Vektoren neu quantisieren können.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0d9a2390958c3e82/6a17d98cbe6086e4fd0045d5/646baa8279719d06c05c1a4fdb80a0c060e0dd94-1440x446.png" alt="Mehrere Segmentquantile" /><p>Abbildung 4: Drei Beispielsegmente mit unterschiedlichen Quantilen.</p><p>Aber ist eine erneute Quantifizierung nicht teuer? Es verursacht zwar einen gewissen Mehraufwand, aber Lucene geht intelligent mit Quantilen um und führt nur dann eine vollständige Neuquantisierung durch, wenn dies erforderlich ist. Nehmen wir die Segmente in Abbildung 4 als Beispiel. Wir geben den Segmenten  und  jeweils  Dokumente und Segment  nur  Dokumente. Lucene berechnet einen gewichteten Durchschnitt der Quantile. Wenn das resultierende zusammengeführte Quantil nahe genug an den ursprünglichen Quantilen des Segments liegt, muss das Segment nicht erneut quantisiert werden, sondern es werden die neu zusammengeführten Quantile verwendet.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte2596c10ee616cf3/6a17d98eec0f8903b85a6497/58fa20d60dc337ca7108eb01e84a07c330e87ee6-1440x447.png" alt="Zusammengeführte Quantile" /><p>Abbildung 5: Beispiel für zusammengeführte Quantile, wobei die Segmente  und   Dokumente enthalten und  nur  enthält.</p><p>In der in Abbildung 5 dargestellten Situation ist zu erkennen, dass die resultierenden zusammengeführten Quantile den ursprünglichen Quantilen in  und  sehr ähnlich sind. Daher rechtfertigen sie keine Quantisierung der Vektoren. Segment  weicht anscheinend zu stark ab. Folglich würden die Vektoren in  mit den neu zusammengeführten Quantilwerten erneut quantisiert.</p><p>Es gibt tatsächlich extreme Fälle, in denen die zusammengeführten Quantile dramatisch von allen ursprünglichen Quantilen abweichen. In diesem Fall werden wir aus jedem Segment eine Stichprobe entnehmen und die Quantile vollständig neu berechnen.</p><h2>Quantisierungsleistung und Zahlen</h2><p>Ist es also schnell und bietet es trotzdem noch eine gute Speicherkapazität? Die folgenden Zahlen wurden bei der Durchführung des Experiments auf einer <code>c3-standard-8</code> GCP-Instanz ermittelt. Um einen fairen Vergleich mit  zu gewährleisten, verwendeten wir eine ausreichend große Instanz, um Rohvektoren im Speicher zu halten. Wir haben  <a href="https://huggingface.co/datasets/Cohere/wikipedia-22-12-simple-embeddings">Cohere Wiki-</a> Vektoren mithilfe des Maximum-Skalarprodukts indiziert.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfa48e3724ad97fed/6a17d98f445de96aca4cff88/81958f99b8a1397f669db48de00f264cacc6b49f-576x455.png" alt="Quantisierungsrückruf" /><p>Abbildung 6: Recall@10 für quantisierte Vektoren im Vergleich zu Rohvektoren. Die Suchleistung von quantisierten Vektoren ist deutlich schneller als die von Rohvektoren, und der Recall kann schnell wiederhergestellt werden, indem nur 5 weitere Vektoren gesammelt werden; sichtbar durch .</p><p>Abbildung 6 veranschaulicht die Geschichte. Es gibt zwar einen Unterschied in der Erinnerungsleistung, wie zu erwarten war, dieser ist jedoch nicht signifikant. Und der Unterschied in der Trefferquote verschwindet bereits durch das Sammeln von nur 5 weiteren Vektoren. All dies bei  schnellen Segmentzusammenführungen und nur einem Viertel des Speicherbedarfs von  Vektoren.</p><h2>Fazit</h2><p>Lucene bietet eine einzigartige Lösung für ein schwieriges Problem. Für die Quantisierung ist kein „Trainings“- oder „Optimierungs“-Schritt erforderlich. In Lucene funktioniert es einfach. Sie müssen sich keine Sorgen machen, Ihren Vektorindex „neu trainieren“ zu müssen, falls sich Ihre Daten ändern. Lucene erkennt signifikante Änderungen und kümmert sich während der gesamten Lebensdauer Ihrer Daten automatisch darum. Wir freuen uns darauf, wenn wir diese Funktion in Elasticsearch integrieren!</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/scalar-quantization-in-lucene</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/scalar-quantization-in-lucene</guid>
    <category><![CDATA[Lucene]]></category>
    <category><![CDATA[ML-Forschung]]></category>
    <dc:creator><![CDATA[Benjamin Trent]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb382d99ffac9992c/6a17d991b1e113640179f12c/dc07f16d347a68476bded5df9adb831452f61278-1024x1024.jpg" length="0" type="image/jpeg"/>
    <pubDate>Sat, 11 Nov 2023 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Open-Source-Projekt sysgrok – Ein KI-Assistent zur Analyse, zum Verständnis und zur Optimierung von Systemen]]></title>
    <description><![CDATA[Sysgrok ist ein experimenteller Machbarkeitsnachweis, der demonstrieren soll, wie LLMs eingesetzt werden können, um Softwareentwicklern und Software-Research-Experten zu helfen, Systeme zu verstehen, Probleme zu beheben und die Leistung zu optimieren.]]></description>
    <content:encoded><![CDATA[<p>In diesem Beitrag stelle ich sysgrok vor, einen Forschungsprototyp, mit dem wir untersuchen, wie große Sprachmodelle (LLMs), wie die GPT-Modelle von OpenAI, auf Probleme in den Bereichen Leistungsoptimierung, Ursachenanalyse und Systementwicklung angewendet werden können. Du findest es auf <a href="https://github.com/elastic/perf-copilot">GitHub</a>.</p><h2>Was macht sysgrok?</h2><p>sysgrok kann beispielsweise Folgendes:</p><ul><li><p>Nehmen Sie die vom Profiler ermittelten, kostenintensivsten Funktionen und Prozesse, erläutern Sie deren jeweilige Funktionalität und schlagen Sie Optimierungen vor.</p></li><li><p>Nimmt einen Host und eine Beschreibung des Problems, das auf diesem Host auftritt, und debuggt das Problem automatisch. Anschließend werden Lösungsansätze und weitere Maßnahmen vorgeschlagen.</p></li><li><p>Nehmen Sie Quellcode, der von einem Profiler annotiert wurde, erläutern Sie die kritischen Pfade und schlagen Sie Möglichkeiten zur Verbesserung der Code-Performance vor.</p></li></ul><p>Die Funktionalität von sysgrok zielt auf drei große Lösungskategorien ab:</p><ol><li><p><strong>Als Analysetool für Leistungs-, Zuverlässigkeits- und andere systembezogene Daten.</strong> In diesem Modus wird dem LLM die Ausgabe eines anderen vom Ingenieur verwendeten Tools zugeführt (z. B. eines Linux-Befehlszeilentools, eines Profilers oder einer Observability-Plattform). Ziel von sysgrok ist es, mithilfe eines LLM den Zustand des Systems zu interpretieren, zusammenzufassen und Hypothesen darüber aufzustellen. Anschließend können auch Optimierungen oder Abhilfemaßnahmen vorgeschlagen werden.</p></li><li><p><strong>Als fokussierte, automatisierte Lösung für spezifische Aufgaben im Bereich Leistung und Zuverlässigkeit.</strong> Es gibt einige Aufgaben, die im Bereich Performance Engineering und SRE immer wieder anfallen. Hierfür können wir zielgerichtete, automatisierte Assistenten entwickeln, die entweder direkt vom Ingenieur oder von sysgrok selbst zur Lösung anderer Probleme eingesetzt werden können. Beispielsweise ist es im Bereich Performance Engineering üblich, die Frage zu beantworten: „Gibt es eine schnellere Version dieser Bibliothek mit gleichwertiger Funktionalität?“ sysgrok unterstützt dies direkt.</p></li><li><p><strong>Als automatisiertes Werkzeug zur Ursachenanalyse von Leistungs- und Zuverlässigkeitsproblemen.</strong> Bei den ersten beiden Lösungskategorien handelt es sich um eine Mischung aus Datenanalyse, Interpretation, Suche und Zusammenfassung. Entscheidend ist, dass sie gezielt auf Daten angewendet werden, die der Ingenieur selbst erhoben hat. Im Projekt sysgrok untersuchen wir außerdem einen dritten Ansatz zur Problemlösung mit LLMs, bei dem das LLM mit anderen Werkzeugen kombiniert wird, um autonom eine Ursachenanalyse und Lösung eines gegebenen Problems durchzuführen. Bei diesem Ansatz erhält der LLM eine Problembeschreibung (z. B. „Der Webserver weist eine hohe Latenz auf“) und erfährt, welche Fähigkeiten ihm zur Verfügung stehen (z. B. „SSH-Verbindung zu einem Host herstellen“, „Beliebige Linux-Befehlszeilentools ausführen“). Anschließend wird das LLM gebeten, die ihm zur Verfügung stehenden Maßnahmen zur Priorisierung des Problems zu ergreifen. Diese Aktionen werden von sysgrok ausgeführt, und der LLM wird gebeten, die Ergebnisse zu analysieren, das Problem zu priorisieren, Abhilfemaßnahmen vorzuschlagen und die nächsten Schritte zu empfehlen.</p></li></ol><p>sysgrok befindet sich noch in der Anfangsphase, aber wir veröffentlichen es, da es bereits für eine Vielzahl von Aufgaben nützlich ist – wir hoffen, dass es eine bequeme Basis für andere sein wird, um ähnliche Experimente durchzuführen. Schickt uns gerne Pull Requests oder öffnet Issues <a href="https://github.com/elastic/sysgrok">auf GitHub,</a> wenn ihr Ideen habt!</p><h2>Analyse von Leistungsproblemen mit LLMs</h2><p>LLMs, wie beispielsweise die GPT-Modelle von OpenAI, haben in den letzten Monaten einen enormen Popularitätsschub erlebt und bieten eine natürliche Sprachschnittstelle sowie den Kern von allen möglichen Produkten, von Chatbots für den Kundenservice über Assistenten zur Datenmanipulation bis hin zu Programmierassistenten. Ein interessanter Aspekt dieses Trends ist, dass im Wesentlichen alle diese Anwendungen auf vorgefertigte, generische Modelle zurückgreifen, die nicht speziell für die jeweilige Aufgabe trainiert oder feinabgestimmt wurden. Stattdessen wurden sie mit großen Teilen des Internets als Ganzes trainiert und sind daher für eine breite Palette von Aufgaben anwendbar.</p><p>Können wir diese Modelle also zur Unterstützung von Leistungsanalyse, Fehlersuche und Optimierung nutzen? Es gibt eine <a href="https://www.brendangregg.com/methodology.html">Vielzahl</a> von Methoden, um Leistungsprobleme zu untersuchen, die Ursachen zu ermitteln und Optimierungen zu entwickeln. Im Kern geht es bei jeder Leistungsanalyse jedoch darum, die Ausgabe verschiedener Tools zu betrachten, beispielsweise von Linux-Befehlszeilentools oder einer Observability-Plattform, und diese Ausgabe zu interpretieren, um eine Hypothese über den Zustand des Systems aufzustellen. Zu den Materialien, mit denen die GPT-Modelle trainiert wurden, gehören Quellen, die Softwareentwicklung, Debugging, Infrastrukturanalyse, Betriebssysteminterna, Kubernetes, Linux-Befehle und deren Verwendung sowie Methoden zur Leistungsanalyse abdecken. Die Modelle können daher genutzt werden, um die Daten und Probleme, mit denen Leistungsingenieure tagtäglich konfrontiert werden, zusammenzufassen, zu interpretieren und Hypothesen darüber aufzustellen. Dies kann das Tempo beschleunigen, mit dem ein Ingenieur seine Analyse durchführt.</p><p>Wir können aber noch einen Schritt weiter gehen und über die reine Nutzung des LLM für Datenanalyse und Fragebeantwortung im Kontext des eigenen Untersuchungsprozesses des Ingenieurs hinausgehen. Wie wir später in diesem Beitrag zeigen werden, kann das LLM in bestimmten Szenarien selbst den Prozess steuern, indem es entscheidet, welche Befehle ausgeführt werden sollen oder welche Datenquellen zur Fehlerbehebung herangezogen werden sollen.</p><h2>Demos</h2><p>Eine vollständige Übersicht über die von sysgrok unterstützten Funktionen finden Sie im GitHub- <a href="https://github.com/elastic/sysgrok">Repository</a>. Im Großen und Ganzen unterstützt es drei Ansätze zur Problemlösung:</p><h3>Ansatz 1: Als Analysetool für Leistungs-, Zuverlässigkeits- und andere systembezogene Daten</h3><p>In diesem Modus wird dem LLM die Ausgabe eines anderen vom Ingenieur verwendeten Tools zugeführt, beispielsweise eines Linux-Befehlszeilentools, eines Profilers oder einer Observability-Plattform. Das Ziel von sysgrok ist es, Daten zu interpretieren, zusammenzufassen und Abhilfemaßnahmen vorzuschlagen.</p><p>Beispielsweise nimmt der Unterbefehl <em>topn</em> die vom Profiler gemeldeten, teuersten Funktionen, erläutert die Ausgabe und schlägt dann Möglichkeiten zur Optimierung des Systems vor.</p><p>Dieses Video zeigt auch die Chat-Funktionalität von sysgrok. Bei Angabe des Arguments „–chat“ startet sysgrok nach jeder Antwort des LLM eine Chat-Sitzung.</p><p>Diese Funktionalität lässt sich auch allgemein auf die Ausgabe von Linux-Befehlszeilentools anwenden. In dem Artikel <a href="https://www.brendangregg.com/Articles/Netflix_Linux_Perf_Analysis_60s.pdf">„Linux Performance Analysis in 60 seconds</a>“ beschreibt Brendan Gregg beispielsweise 10 Befehle, die ein SRE ausführen sollte, wenn er sich zum ersten Mal mit einem Host verbindet, bei dem ein Leistungs- oder Stabilitätsproblem auftritt. Der Unterbefehl <em>analyzecmd</em> nimmt als Eingabe einen Host, zu dem eine Verbindung hergestellt werden soll, und einen auszuführenden Befehl entgegen und analysiert und fasst dann die Ausgabe des Befehls für den Benutzer zusammen. Wir können dies nutzen, um den von Gregg beschriebenen Prozess zu automatisieren und dem Benutzer eine einzeilige Zusammenfassung aller von den 10 Befehlen generierten Daten zu geben, wodurch ihm die Mühe erspart wird, die Ausgabe jedes Befehls einzeln durchzugehen.</p><h3>Ansatz 2: Als fokussierte, automatisierte Lösung für spezifische Aufgaben im Zusammenhang mit Leistung und Zuverlässigkeit</h3><p>Es gibt einige Aufgaben, die im Bereich Performance Engineering und SRE immer wieder anfallen. Hierfür können wir zielgerichtete, automatisierte Assistenten entwickeln, die entweder direkt vom Ingenieur oder von sysgrok selbst zur Lösung anderer Probleme eingesetzt werden können.</p><p>Beispielsweise nimmt der Unterbefehl <em>findfaster</em> als Eingabe den Namen einer Bibliothek oder eines Programms und verwendet den LLM, um einen schnelleren, gleichwertigen Ersatz dafür zu finden. Dies ist eine sehr häufige Aufgabe im Bereich Performance Engineering.</p><p>Ein weiteres Beispiel für diesen Ansatz in sysgrok ist der Unterbefehl <em>explainfunction</em> . Dieser Unterbefehl benötigt den Namen einer Bibliothek und einer Funktion innerhalb dieser Bibliothek. Es erklärt, was die Bibliothek leistet und welche typischen Anwendungsfälle sie hat, und anschließend wird die Funktion erläutert. Schließlich werden mögliche Optimierungen vorgeschlagen, falls die Bibliothek und die Funktion einen erheblichen Teil der CPU-Ressourcen beanspruchen.</p><h3>Ansatz 3: Als automatisiertes Werkzeug zur Ursachenanalyse von Leistungs- und Zuverlässigkeitsproblemen</h3><p>Der Einsatz von LLMs beschränkt sich nicht nur auf die Beantwortung fokussierter Fragen, das Zusammenfassen von Texten und ähnliche Aufgaben. Es beschränkt sich auch nicht auf einmalige Anwendungen, bei denen ihnen eine einzige, isolierte Frage gestellt wird. Der Unterbefehl sysgrok <em>debughost</em> demonstriert, wie ein LLM als "Gehirn" in einem Agenten mit dem Ziel der automatisierten Problemlösung eingesetzt werden kann. In diesem Modus ist das LLM in einen Prozess eingebettet, der das LLM nutzt, um zu entscheiden, wie ein bestimmtes Problem zu debuggen ist, und ihm die Möglichkeit gibt, Verbindungen zu Hosts herzustellen, Befehle auszuführen und auf andere Datenquellen zuzugreifen.</p><p>Der Befehl debughost ist derzeit wahrscheinlich der experimentellste Teil von sysgrok. Es zeigt einen Schritt auf dem Weg zu automatisierten Agenten für die Leistungsanalyse, aber es ist noch ein erheblicher Forschungs- und Entwicklungsaufwand erforderlich, um dieses Ziel zu erreichen.</p><h2>Fazit</h2><p>In diesem Beitrag habe ich sysgrok vorgestellt, einen neuen Open-Source-KI-Assistenten zur Analyse, zum Verständnis und zur Optimierung von Systemen. Wir haben auch die drei Hauptkategorien von Ansätzen besprochen, die sysgrok implementiert:</p><ol><li><p>Eine Analyse-Engine für Leistungs-, Zuverlässigkeits- und andere systembezogene Daten: Siehe die Unterbefehle topn, stacktrace, analyzecmd und code.</p></li><li><p>Gezielte, automatisierte Lösungen für spezifische Aufgaben im Zusammenhang mit Leistung und Zuverlässigkeit: Siehe die Unterbefehle explainprocess, explainfunction und findfaster.</p></li><li><p>Automatisierte Ursachenanalyse für Leistungs- und Zuverlässigkeitsprobleme: Siehe den Unterbefehl debughost.</p></li></ol><p>Das sysgrok-Projekt finden Sie <a href="https://github.com/elastic/sysgrok">auf GitHub</a>. Sie können gerne Pull Requests und Issues erstellen oder mich direkt unter <a href="mailto:sean.heelan@elastic.co">sean.heelan@elastic.co</a> kontaktieren, wenn Sie das Projekt oder die Anwendungsmöglichkeiten von LLMs im Allgemeinen besprechen möchten.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/open-sourcing-sysgrok-ai-assistant</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/open-sourcing-sysgrok-ai-assistant</guid>
    <category><![CDATA[ML-Forschung]]></category>
    <dc:creator><![CDATA[Sean Heelan]]></dc:creator>
    <pubDate>Wed, 28 Jun 2023 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Stateless – Ihr neuer Suchzustand mit Elasticsearch]]></title>
    <description><![CDATA[Lernen Sie Elasticsearch Stateless kennen und erkunden Sie die zustandslose Architektur, die Leistungsverbesserungen mit sich bringt und Kosten senkt.]]></description>
    <content:encoded><![CDATA[<p>Mit Stateless Elasticsearch investieren wir in den Aufbau einer neuen, vollständig Cloud-nativen Architektur, um die Grenzen von Skalierbarkeit und Geschwindigkeit zu erweitern. In diesem Blogbeitrag gehen wir der Frage nach, wo wir angefangen haben, der Zukunft von Elasticsearch mit der Einführung einer zustandslosen Architektur und den Details dieser Architektur.</p><h2>Wo wir angefangen haben</h2><p>Die erste Version von <a href="https://www.elastic.co/what-is/elasticsearch">Elasticsearch</a> wurde 2010 als verteilte, skalierbare Suchmaschine veröffentlicht, die es Benutzern ermöglicht, schnell nach wichtigen Erkenntnissen zu suchen und diese anzuzeigen. Zwölf Jahre und über 65.000 Commits später bietet Elasticsearch seinen Nutzern weiterhin praxiserprobte Lösungen für eine Vielzahl von Suchproblemen. Dank des Engagements von über 1.500 Mitwirkenden, darunter Hunderte von festangestellten Elastic-Mitarbeitern, hat sich Elasticsearch ständig weiterentwickelt, um den neuen Herausforderungen im Bereich der Suche gerecht zu werden.</p><p>In der Frühphase von Elasticsearch, als Bedenken hinsichtlich Datenverlusten aufkamen, unternahm das Elastic-Team über <a href="https://www.elastic.co/blog/a-new-era-for-cluster-coordination-in-elasticsearch">mehrere Jahre hinweg Anstrengungen</a> , das Cluster-Koordinationssystem neu zu schreiben, um zu gewährleisten, dass bestätigte Daten sicher gespeichert werden. Als deutlich wurde, dass die Verwaltung von Indizes in großen Clustern mühsam ist, arbeitete das Team an der Implementierung einer umfassenden <a href="https://www.elastic.co/blog/elasticsearch-data-lifecycle-management-with-data-tiers">ILM-Lösung</a> , um diese Arbeit zu automatisieren, indem es den Benutzern ermöglicht, Indexmuster und Lebenszyklusaktionen vorzudefinieren. Da die Nutzer den Bedarf erkannten, große Mengen an Metrik- und Zeitreihendaten zu speichern, wurden verschiedene Funktionen wie eine bessere Komprimierung hinzugefügt, um die Datengröße zu reduzieren. Da die Speicherkosten für die Suche in großen Mengen kalter Daten stiegen, investierten wir in die Entwicklung <a href="https://www.elastic.co/blog/introducing-elasticsearch-searchable-snapshots">von durchsuchbaren Snapshots</a> , um Benutzerdaten direkt in kostengünstigen Objektspeichern durchsuchen zu können.</p><p>Diese Investitionen legen den Grundstein für die nächste Entwicklungsstufe von Elasticsearch. Angesichts des Wachstums cloudnativer Dienste und neuer Orchestrierungssysteme haben wir beschlossen, Elasticsearch weiterzuentwickeln, um die Benutzerfreundlichkeit bei der Arbeit mit cloudnativen Systemen zu verbessern. Wir sind überzeugt, dass diese Änderungen Möglichkeiten zur Verbesserung des Betriebsablaufs, der Leistung und der Kosten beim Betrieb von Elasticsearch auf <a href="https://www.elastic.co/cloud/">Elastic Cloud</a> bieten.</p><h2>Wohin wir gehen – Die Einführung einer staatenlosen Architektur</h2><p>Eine der größten Herausforderungen beim Betrieb oder der Orchestrierung von Elasticsearch besteht darin, dass es von zahlreichen persistenten Zuständen abhängt und daher ein zustandsbehaftetes System ist. Die drei Hauptbestandteile sind das Translog, der Indexspeicher und die Cluster-Metadaten. Dieser Zustand bedeutet, dass die Daten persistent sein müssen und bei einem Neustart oder Austausch eines Knotens nicht verloren gehen dürfen.</p><p>Die bestehende Elasticsearch-Architektur auf Elastic Cloud muss die Indizierung über mehrere Verfügbarkeitszonen hinweg duplizieren, um im Falle von Ausfällen Redundanz zu gewährleisten. Wir beabsichtigen, die Speicherung dieser Daten von lokalen Festplatten in einen Objektspeicher wie AWS S3 zu verlagern. Durch die Nutzung externer Dienste zur Speicherung dieser Daten entfällt die Notwendigkeit der Indexierungsreplikation, wodurch der mit der Datenerfassung verbundene Hardwareaufwand erheblich reduziert wird. Diese Architektur bietet zudem sehr hohe Garantien für die Datenbeständigkeit, da Cloud-Objektspeicher wie AWS S3, GCP Cloud Storage und Azure Blob Storage Daten über Verfügbarkeitszonen hinweg replizieren.</p><p>Durch die Auslagerung der Indexspeicherung in einen externen Dienst können wir Elasticsearch auch neu strukturieren, indem wir die Verantwortlichkeiten für Indizierung und Suche trennen. Anstatt primäre und Replikatinstanzen für beide Arbeitslasten zu verwenden, planen wir eine Indexierungsebene und eine Suchebene. Durch die Trennung dieser Arbeitslasten können diese unabhängig voneinander skaliert werden, und die Hardwareauswahl kann gezielter auf die jeweiligen Anwendungsfälle abgestimmt werden. Es hilft auch dabei, eine seit langem bestehende Herausforderung zu lösen, bei der sich die Such- und Indexierungslast gegenseitig beeinflussen kann.</p><p>Nach einer mehrmonatigen Machbarkeits- und Versuchsphase sind wir davon überzeugt, dass diese Objektspeicherdienste die Anforderungen erfüllen, die wir an die Speicherung von Indizes und Cluster-Metadaten stellen. Unsere Tests und Benchmarks zeigen, dass diese Speicherdienste die hohen Indexierungsanforderungen der größten Cluster, die wir in Elastic Cloud gesehen haben, erfüllen können. Darüber hinaus reduziert die Speicherung der Daten im Objektspeicher die Indizierungskosten und ermöglicht eine einfache Optimierung der Suchleistung. Zur Datensuche nutzt Elasticsearch das bewährte Searchable Snapshots-Modell, bei dem die Daten dauerhaft im Cloud-nativen Objektspeicher abgelegt werden und lokale Festplatten als Cache für häufig abgerufene Daten dienen.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf17ddc7c69dc6e76/6a17d9f563baff2cc5741b02/e1d7b7b36bd1bbf906d50c3b873bfe2e1acd7fb3-1440x805.png" alt="" /><p>Um die Unterschiede zu verdeutlichen, bezeichnen wir unser bestehendes Modell als „Knoten-zu-Knoten“-Replikation. In der Hot-Tier-Ebene dieses Modells übernehmen sowohl der primäre als auch der Replikat-Shard die gleiche rechenintensive Aufgabe bei der Verarbeitung und Beantwortung von Suchanfragen. Diese Knoten sind „zustandsbehaftet“, da sie sich auf ihre lokalen Festplatten verlassen, um die Daten für die von ihnen gehosteten Shards sicher zu speichern. Darüber hinaus kommunizieren primäre und Replikat-Shards ständig miteinander, um synchron zu bleiben. Dies geschieht, indem die auf dem primären Shard durchgeführten Operationen auf den Replikat-Shard repliziert werden, was bedeutet, dass die Kosten dieser Operationen (hauptsächlich CPU) für jedes angegebene Replikat anfallen. Die gleichen Shards und Nodes, die für die Datenaufnahme zuständig sind, bedienen auch Suchanfragen, daher müssen Bereitstellung und Skalierung beide Arbeitslasten berücksichtigen.</p><p>Neben der Suche und dem Datenimport übernehmen Shards im Node-to-Node-Replikationsmodell weitere rechenintensive Aufgaben, wie beispielsweise das Zusammenführen von Lucene-Segmenten. Dieses Design hat zwar seine Vorzüge, aber wir sahen viele Möglichkeiten, die sich aus unseren Erfahrungen mit Kunden im Laufe der Jahre und der Entwicklung des gesamten Cloud-Ökosystems ergaben.</p><p>Die neue Architektur ermöglicht zahlreiche sofortige und zukünftige Verbesserungen, darunter:</p><ol><li><p>Sie können den Datendurchsatz auf derselben Hardware deutlich erhöhen, oder anders ausgedrückt, die Effizienz bei gleicher Datenerfassungslast deutlich verbessern. Diese Steigerung resultiert aus der Beseitigung der Duplizierung von Indexierungsvorgängen für jede Replik. Die rechenintensiven Indexierungsvorgänge müssen nur einmal auf der Indexierungsebene durchgeführt werden, die anschließend die resultierenden Segmente an einen Objektspeicher sendet. Von dort aus können die Daten direkt von der Suchschicht verwendet werden.</p></li><li><p>Sie können Rechenleistung und Speicher trennen, um Ihre Clustertopologie zu vereinfachen. Elasticsearch verfügt heute über mehrere Datenebenen (Content, Hot, Warm, Cold und Frozen), um Daten mit Hardwareprofilen abzugleichen. Die Hot-Tier-Kategorie dient der Suche in nahezu Echtzeit, die Frozen-Tier-Kategorie der Suche nach weniger häufig gesuchten Daten. Diese Ebenen bieten zwar einen Mehrwert, erhöhen aber auch die Komplexität. In der neuen Architektur werden Datenebenen nicht mehr benötigt, was die Konfiguration und den Betrieb von Elasticsearch vereinfacht. Wir trennen außerdem die Indizierung von der Suche, was die Komplexität weiter reduziert und es uns ermöglicht, beide Arbeitslasten unabhängig voneinander zu skalieren.</p></li><li><p>Sie können die Speicherkosten auf der Indexierungsebene senken, indem Sie die Menge der Daten reduzieren, die auf einer lokalen Festplatte gespeichert werden müssen. Aktuell muss Elasticsearch für Indexierungszwecke eine vollständige Shard-Kopie auf den Hot Nodes (sowohl primären als auch Replikaten) speichern. Bei dem zustandslosen Ansatz, direkt auf den Objektspeicher zuzugreifen, wird nur ein Teil dieser lokalen Daten benötigt. Bei reinen Anfüge-Anwendungsfällen müssen nur bestimmte Metadaten zur Indizierung gespeichert werden. Dadurch wird der für die Indizierung benötigte lokale Speicherplatz erheblich reduziert.</p></li><li><p>Sie können die mit Suchanfragen verbundenen Speicherkosten senken. Indem das Searchable Snapshots-Modell zum nativen Modus der Datensuche gemacht wird, werden die mit Suchanfragen verbundenen Speicherkosten deutlich reduziert. Je nach den Anforderungen der Benutzer an die Suchlatenz ermöglicht Elasticsearch Anpassungen, um das lokale Caching häufig angeforderter Daten zu erhöhen.</p></li></ol><h2>Benchmarking – 75 % Verbesserung des Indexierungsdurchsatzes</h2><p>Um diesen Ansatz zu validieren, haben wir einen umfangreichen Machbarkeitsnachweis erbracht, bei dem die Daten nur auf einem einzigen Knoten indiziert und die Replikation über Cloud-Objektspeicher realisiert wurde. Wir stellten fest, dass wir eine <strong>Verbesserung des Indexierungsdurchsatzes um 75 %</strong> erreichen konnten, indem wir die Notwendigkeit beseitigten, Hardware für die Indexierungsreplikation zu dedizieren. Darüber hinaus waren die CPU-Kosten für das einfache Abrufen von Daten aus dem Objektspeicher wesentlich geringer als für das Indizieren der Daten und das lokale Schreiben, wie es heutzutage für die Hot-Tier-Ebene erforderlich ist. Dies bedeutet, dass die Suchknoten ihre gesamte CPU-Leistung der Suche widmen können.</p><p>Diese Leistungstests wurden auf einem Zwei-Knoten-Cluster gegen alle drei großen Public-Cloud-Anbieter (AWS, GCP und Azure) durchgeführt. Wir beabsichtigen, im Zuge unserer Bemühungen um eine zustandslose Produktionsimplementierung weiterhin größere Benchmarks zu entwickeln.</p><p><strong>Indexierungsdurchsatz</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4a44b141e077a8cf/6a17d9f7445de982084cffa9/2c3c94b38a5c816a720112851b4a497b4176c285-593x270.png" alt="" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8dfd035e67eaf0a8/6a17d9f9e3179127802d56d5/ee236cd455e8fa8f4af62a0f8557a5e907deffbf-596x270.png" alt="" /><p><strong>CPU-Auslastung</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt13df63861f1149a6/6a17d9fa414c643b05945026/76632a9211a4762e3559ab498beb5381b7d441d2-547x329.png" alt="" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfd352e4ebd0a1417/6a17d9fcbe60863c0c0045e0/62dd9063a05d5841e196a5abf39db7e9c990fb01-547x326.png" alt="" /><h2>Staatenlos für uns, Ersparnisse für Sie</h2><p>Die zustandslose Architektur von Elastic Cloud ermöglicht es Ihnen, den Indexierungsaufwand zu reduzieren, die Datenerfassung und -suche unabhängig voneinander zu skalieren, die Verwaltung der Datenebenen zu vereinfachen und Vorgänge wie Skalierung oder Upgrade zu beschleunigen. Dies ist der erste Meilenstein hin zu einer umfassenden Modernisierung der Elastic Cloud-Plattform.</p><h2>Werden Sie Teil unserer Vision für zustandsloses Elasticsearch.</h2><p>Haben Sie Interesse, diese Lösung vor allen anderen auszuprobieren? Sie können uns über <a href="https://discuss.elastic.co/">die Diskussionsseite</a> oder unseren <a href="https://ela.st/slack">Community-Slack-Kanal</a> erreichen. Wir würden uns über Ihr Feedback freuen, um die Ausrichtung unserer neuen Architektur mitzugestalten.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/stateless-your-new-state-of-find-with-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/stateless-your-new-state-of-find-with-elasticsearch</guid>
    <category><![CDATA[ML-Forschung]]></category>
    <category><![CDATA[Elastic Cloud Serverless]]></category>
    <dc:creator><![CDATA[Leaf Lin,Tim Brooks,Quin Hoxie]]></dc:creator>
    <pubDate>Thu, 06 Oct 2022 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Umsetzung wissenschaftlicher Arbeiten: Erkenntnisse aus Elasticsearch und Lucene]]></title>
    <description><![CDATA[Entdecken Sie Strategien zur Integration von Forschungsarbeiten in eine Softwareanwendung und nutzen Sie dabei unsere Erfahrungen mit Elasticsearch und Lucene.]]></description>
    <content:encoded><![CDATA[<p>Dieser Beitrag stellt Strategien zur Implementierung wissenschaftlicher Arbeiten in einer Softwareanwendung vor. Es greift auf Beispiele von Elasticsearch und Lucene zurück, um anderen Ingenieuren zu helfen, aus unseren Erfahrungen zu lernen. Sie lesen diese Strategien vielleicht und denken: „Aber das ist doch nur Softwareentwicklung!“ Und das wäre in der Tat richtig: Als Ingenieure verfügen wir bereits über die richtigen Vorgehensweisen und Werkzeuge, diese müssen lediglich an eine neue Herausforderung angepasst werden.</p><h2>Hintergrund</h2><p>Bei der Entwicklung von Elasticsearch stoßen wir gelegentlich auf wichtige Probleme, für die es keine einfache oder etablierte Lösungsmethode gibt. Es liegt nahe zu fragen: „Hmm, gibt es dazu eine wissenschaftliche Arbeit?“ Manchmal ist die akademische Arbeit auch eine Quelle der Inspiration. Wir stoßen auf eine wissenschaftliche Arbeit, in der ein neuer Algorithmus oder eine neue Datenstruktur vorgeschlagen wird, und denken: „Das wäre so nützlich!“ Hier sind nur einige Beispiele dafür, wie Elasticsearch und Apache Lucene akademische Arbeiten integrieren:</p><ul><li><p><a href="https://research.google/pubs/pub40671/">HyperLogLog++</a> für <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.15/search-aggregations-metrics-cardinality-aggregation.html">Kardinalitätsaggregationen</a></p></li><li><p><a href="https://www.usenix.org/system/files/conference/nsdi15/nsdi15-paper-suresh.pdf">C3-Algorithmus</a> zur <a href="https://www.elastic.co/blog/improving-response-latency-in-elasticsearch-with-adaptive-replica-selection">adaptiven Replikaauswahl</a></p></li><li><p><a href="https://arxiv.org/abs/1603.09320">Hierarchische navigierbare Small-World-Graphen (HNSW)</a> für die Suche nach dem nächsten Vektor in Lucene</p></li><li><p><a href="https://jmlr.csail.mit.edu/papers/volume17/15-308/15-308.pdf">MIC-Statistik</a> zur <a href="https://github.com/elastic/ml-cpp/pull/488">Verbesserung der Klassifizierung durch maschinelles Lernen</a></p></li><li><p><a href="http://engineering.nyu.edu/~suel/papers/bmw.pdf">Block-max WAND</a> für <a href="https://www.elastic.co/blog/faster-retrieval-of-top-hits-in-elasticsearch-with-block-max-wand">schnelleres Abrufen von Top-Hits in Lucene</a></p></li><li><p>... und <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.15/query-dsl-combined-fields-query.html">viele</a> <a href="https://github.com/elastic/elasticsearch/blob/b2a9328890b23e7ccf6c66a3b13d6d65e453a3dd/server/src/main/java/org/elasticsearch/search/sort/BucketedSort.java#L302-L323">mehr</a></p></li></ul><p>Wissenschaftliche Artikel sind eine unschätzbare Ressource für Ingenieure, die datenintensive Systeme entwickeln. Doch ihre Umsetzung kann einschüchternd und fehleranfällig sein – Algorithmenbeschreibungen sind oft komplex, und wichtige praktische Details werden ausgelassen. Und das Testen stellt eine echte Herausforderung dar: Wie können wir beispielsweise einen Algorithmus für maschinelles Lernen gründlich testen, dessen Ausgabe stark vom Datensatz abhängt?</p><h2>Bewerten Sie das Dokument wie eine Softwareabhängigkeit.</h2><p>Das Hinzufügen einer neuen Softwareabhängigkeit erfordert eine sorgfältige Prüfung: Wenn das andere Paket fehlerhaft, langsam oder unsicher ist, könnte unser Projekt es auch sein. Bevor Entwickler eine Abhängigkeit einbinden, stellen sie sicher, dass sie deren Qualität bewerten.</p><p>Das Gleiche gilt für wissenschaftliche Arbeiten, deren Umsetzung Sie erwägen. Man könnte meinen, dass ein Algorithmus, nur weil er in einer wissenschaftlichen Arbeit veröffentlicht wurde, korrekt sein und gut funktionieren muss. Doch selbst wenn eine wissenschaftliche Arbeit den Begutachtungsprozess durchlaufen hat, kann sie Mängel aufweisen. Vielleicht beruht der Korrektheitsbeweis auf Annahmen, die nicht realistisch sind. Oder vielleicht zeigt der Abschnitt „Experimente“ eine deutlich bessere Performance als die Basislinie, aber das gilt nur für einen bestimmten Datensatz. Auch wenn die Arbeit von hoher Qualität ist, passt ihr Ansatz möglicherweise nicht zu Ihrem Projekt.</p><p>Wenn man darüber nachdenkt, ob man eine Abhängigkeit von einer wissenschaftlichen Arbeit eingehen sollte, ist es hilfreich, dieselben Fragen zu stellen, die man auch bei einem Softwarepaket stellen würde:</p><ul><li><p>Ist die Bibliothek weit verbreitet und „praxiserprobt“? → Haben andere Softwarepakete diese Arbeit bereits umgesetzt und hat sie sich dabei bewährt?</p></li><li><p>Sind Leistungsvergleichswerte verfügbar? Erscheinen diese Angaben zutreffend und fair? → Enthält die Arbeit realistische Experimente? Sind sie gut gestaltet?</p></li><li><p>Ist die Leistungsverbesserung groß genug, um die Komplexität zu rechtfertigen? → Lässt sich die Arbeit mit einem soliden Basisansatz vergleichen? Um wie viel übertrifft es diesen Vergleichswert?</p></li><li><p>Lässt sich dieser Ansatz gut in unser System integrieren? → Passen die Annahmen und Abwägungen des Algorithmus zu unserem Anwendungsfall?</p></li></ul><p>Seltsamerweise schneidet die Software, die in einem Leistungsvergleich mit der Konkurrenz auftritt, immer am schnellsten ab! Wenn die Benchmarks von einem Dritten entworfen wurden, sind sie möglicherweise ausgewogener. Das gleiche Phänomen trifft auch auf wissenschaftliche Arbeiten zu. Wenn ein Algorithmus nicht nur in der Originalveröffentlichung gut abschneidet, sondern auch in anderen Veröffentlichungen als starke Basislinie auftaucht, dann ist er mit hoher Wahrscheinlichkeit solide.</p><h2>Werden Sie kreativ beim Testen</h2><p>Algorithmen aus wissenschaftlichen Artikeln weisen oft ein komplexeres Verhalten auf als die Algorithmen, denen wir im Alltag begegnen. Vielleicht handelt es sich um einen Näherungsalgorithmus, der Genauigkeit gegen höhere Geschwindigkeit eintauscht. Oder vielleicht handelt es sich um eine Methode des maschinellen Lernens, die einen großen Datensatz verarbeitet und (manchmal unerwartete) Ergebnisse liefert. Wie können wir Tests für diese Algorithmen schreiben, wenn wir ihr Verhalten nicht auf einfache Weise charakterisieren können?</p><h3>Fokus auf Invarianten</h3><p>Beim Entwerfen von Unit-Tests ist es üblich, in Beispielen zu denken: Wenn wir dem Algorithmus diese Beispieleingabe geben, sollte er diese Ausgabe haben. Leider deckt das Testen anhand von Beispielen das Verhalten der meisten mathematischen Algorithmen nicht ausreichend ab.</p><p>Betrachten wir den C3-Algorithmus, den Elasticsearch verwendet, um herauszufinden, welcher Knoten eine Suchanfrage bearbeiten soll. Es bewertet jeden Knoten anhand einer differenzierten Formel, die die bisherigen Service- und Antwortzeiten des Knotens sowie seine Warteschlangengröße berücksichtigt. Das Testen einiger Beispiele bestätigt nicht wirklich, dass wir die Formel richtig verstanden haben. Es hilft, einen Schritt zurückzutreten und über Testinvarianten nachzudenken: Verringert sich der Rang des Knotens, wenn sich die Bedienzeit erhöht? Wird der Rang, wie in der Studie behauptet, durch die Antwortzeit bestimmt, wenn die Warteschlangenlänge 0 beträgt?</p><p>Die Konzentration auf Invarianten kann in einer Reihe häufiger Fälle hilfreich sein:</p><ul><li><p>Soll die Methode unabhängig von der Reihenfolge sein? In diesem Fall sollte die Übergabe der Eingabedaten in einer anderen Reihenfolge zum gleichen Ergebnis führen.</p></li><li><p>Erzeugt ein Schritt im Algorithmus Klassenwahrscheinlichkeiten? In diesem Fall müssten sich diese Wahrscheinlichkeiten zu 1 addieren.</p></li><li><p>Ist die Funktion symmetrisch um den Ursprung? In diesem Fall sollte das Umkehren des Vorzeichens des Eingangssignals einfach das Vorzeichen des Ausgangssignals umkehren.</p></li></ul><p>Bei der ersten Implementierung von C3 hatten wir einen Fehler in der Formel, bei dem wir versehentlich den Kehrwert der Antwortzeit anstelle der Antwortzeit verwendet haben. Das bedeutete, dass langsamere Knoten höher eingestuft werden konnten! Bei der Behebung des Problems <a href="https://github.com/elastic/elasticsearch/pull/70283">haben wir darauf geachtet, Invariantenprüfungen einzubauen,</a> um zukünftigen Fehlern vorzubeugen.</p><h3>Vergleich mit einer Referenzimplementierung</h3><p>Zusammen mit der Veröffentlichung des Artikels haben die Autoren hoffentlich auch eine Implementierung des Algorithmus veröffentlicht. (Dies ist besonders wahrscheinlich, wenn die Arbeit Experimente enthält, da viele Fachzeitschriften von den Autoren die Veröffentlichung des Codes zur Reproduktion der Ergebnisse verlangen.) Sie können Ihren Ansatz anhand dieser Referenzimplementierung testen, um sicherzustellen, dass Sie keine wichtigen Details des Algorithmus übersehen haben.</p><p>Während der Entwicklung der HNSW-Implementierung von Lucene für die Nächste-Nachbarn-Suche haben wir <a href="https://issues.apache.org/jira/browse/LUCENE-9937">diese anhand einer Referenzbibliothek der Autoren des Artikels getestet</a> . Wir haben sowohl Lucene als auch die Bibliothek mit demselben Datensatz ausgeführt und die Genauigkeit ihrer Ergebnisse sowie die Anzahl der durchgeführten Berechnungen verglichen. Wenn diese Zahlen annähernd übereinstimmen, wissen wir, dass Lucene den Algorithmus korrekt implementiert.</p><p>Bei der Integration eines Algorithmus in ein System müssen oft Modifikationen oder Erweiterungen vorgenommen werden, wie z. B. die Skalierung auf mehrere Kerne oder das Hinzufügen von Heuristiken zur Leistungsverbesserung. Am besten implementiert man zunächst eine „Standardversion“, testet sie anhand der Referenz und nimmt dann schrittweise Änderungen vor. So können Sie sicher sein, dass Sie alle wichtigen Aspekte erfasst haben, bevor Sie Anpassungen vornehmen.</p><h3>Duell gegen einen bestehenden Algorithmus</h3><p>Im letzten Abschnitt wird eine weitere Idee für eine Testinvariante vorgestellt: der Vergleich der Ausgabe des Algorithmus mit der Ausgabe eines einfacheren und besser verstandenen Algorithmus. Nehmen wir beispielsweise den Block-Max-WAND-Algorithmus in Lucene, der die Dokumentensuche beschleunigt, indem er Dokumente überspringt, die nicht in den Top-Ergebnissen erscheinen können. Es ist schwierig, genau zu beschreiben, wie sich block-max WAND in jedem Fall verhalten sollte, aber wir wissen, dass die Anwendung die Top-Ergebnisse nicht verändern sollte! Unsere Tests können also mehrere zufällige Suchanfragen generieren, <a href="https://github.com/apache/lucene/blob/main/lucene/core/src/test/org/apache/lucene/search/TestWANDScorer.java#L669">diese dann sowohl mit als auch ohne WAND-Optimierung ausführen</a> und überprüfen, ob ihre Ergebnisse immer übereinstimmen.</p><p>Ein wichtiger Aspekt dieser Tests ist, dass sie <a href="https://www.elastic.co/blog/elasticsearch-testing-qa-increasing-coverage-randomizing-test-runs">zufällige Eingaben generieren,</a> mit denen der Vergleich durchgeführt wird. Dies kann dabei helfen, Fälle durchzuspielen, an die man sonst nicht gedacht hätte, und unerwartete Probleme aufzudecken. Beispielsweise hat der randomisierte Vergleichstest von Lucene für die BM25F-Bewertung dazu beigetragen <a href="https://issues.apache.org/jira/browse/LUCENE-10039">, Fehler in subtilen Grenzfällen aufzudecken</a>. Die Idee, einen Algorithmus mit zufälligen Eingaben zu füttern, ist eng mit dem Konzept des <a href="https://en.wikipedia.org/wiki/Fuzzing">Fuzzing</a> verwandt, einer gängigen Testmethode in der Computersicherheit.</p><p>Elasticsearch und Lucene verwenden diesen Testansatz häufig. Wenn Sie einen Test sehen, der ein "Duell" zwischen zwei Algorithmen erwähnt (TestDuelingAnalyzers, testDuelTermsQuery...), dann wissen Sie, dass diese Strategie zum Einsatz kommt.</p><h2>Verwenden Sie die im Artikel verwendete Terminologie.</h2><p>Wenn ein anderer Entwickler mit Ihrem Code arbeitet, muss er die Dokumentation konsultieren, um die Details zu verstehen. Der <a href="https://github.com/elastic/elasticsearch/blob/4f22f437ee50cacb94b37b457be1da0b8ba0e8ce/server/src/main/java/org/elasticsearch/search/aggregations/metrics/HyperLogLogPlusPlus.java#L24-L39">Kommentar zur HyperLogLog++-Implementierung von Elasticsearch</a> bringt es gut auf den Punkt: „Der Versuch, die Funktionsweise dieser Klasse zu verstehen, ohne das zugehörige Paper gelesen zu haben, gilt als abenteuerlich.“ Dieser Methodenkommentar ist ebenfalls ein gutes Beispiel. Es enthält einen Link zur wissenschaftlichen Arbeit und hebt hervor, welche Änderungen am Algorithmus im Vergleich zur ursprünglichen Beschreibung vorgenommen wurden.</p><p>Da die Entwickler ihr Verständnis des Codes auf dem Papier aufbauen, ist es hilfreich, genau dieselbe Terminologie zu verwenden. Da die mathematische Notation kurz und bündig ist, kann dies zu Namen führen, die im Allgemeinen nicht als „guter Stil“ gelten würden, im Kontext der Arbeit aber sehr verständlich sind. Formeln aus wissenschaftlichen Arbeiten gehören zu den wenigen Fällen, in denen man in Elasticsearch auf kryptische Variablennamen wie <a href="https://github.com/elastic/elasticsearch/blob/4f22f437ee50cacb94b37b457be1da0b8ba0e8ce/server/src/main/java/org/elasticsearch/node/ResponseCollectorService.java#L151">rS und muBarSInverse</a> stößt.</p><p>
<em>Die vom Autor empfohlene Art, einen wissenschaftlichen Artikel zu lesen: mit einer großen Tasse Kaffee.</em></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt12d81453c706f7cb/6a17d80e0b0bede6badd3424/d03a8e2a50e173b15a4ec3732810c63ff53321f6-1440x1081.jpg" alt="elastic-blog-academicpaper.jpg" /><h2>Sie können dem Autor eine E-Mail schreiben.</h2><p>Bei der Bearbeitung einer schwierigen Hausarbeit kann es vorkommen, dass man stundenlang über einer Formel grübelt und sich nicht sicher ist, ob man sie falsch verstanden hat oder ob es sich nur um einen Tippfehler handelt. Wenn es sich um ein Open-Source-Projekt handeln würde, könnten Sie eine Frage auf GitHub oder StackOverflow stellen. Aber wo kann man eine wissenschaftliche Arbeit finden? Die Autoren scheinen beschäftigt zu sein und könnten von Ihren E-Mails genervt sein.</p><p>Im Gegenteil, viele Akademiker freuen sich, wenn sie hören, dass ihre Ideen in die Praxis umgesetzt werden, und beantworten gerne Fragen per E-Mail. Wenn Sie an einem Produkt arbeiten, mit dem sie vertraut sind, listen sie die Anwendung möglicherweise sogar auf ihrer Website auf!</p><p>Es gibt auch einen wachsenden Trend unter Akademikern, wissenschaftliche Arbeiten öffentlich zu diskutieren und dabei viele der gleichen Werkzeuge wie in der Softwareentwicklung zu verwenden. Wenn zu einer Veröffentlichung ein Softwarepaket gehört, finden Sie möglicherweise Antworten auf <a href="https://github.com/facebookresearch/faiss/issues/1928">häufig gestellte Fragen auf GitHub</a>. In den Stack Exchange-Communities „Theoretical Computer Science“ und „Cross Validated“ finden sich auch <a href="https://cstheory.stackexchange.com/questions/49296/problem-in-the-paper-stable-minimum-space-partitioning-in-linear-time">detaillierte Diskussionen über populärwissenschaftliche Artikel</a>. Einige Konferenzen haben damit begonnen, alle Paper-Reviews online zu veröffentlichen. Diese Rezensionen beinhalten <a href="https://openreview.net/forum?id=H1eA7AEtvS">einen Dialog</a> mit den Autoren, der hilfreiche Einblicke in den Ansatz ermöglichen kann.</p><h2>Fortgesetzt werden</h2><p>Dieser Beitrag konzentriert sich auf die Grundlagen der Auswahl einer wissenschaftlichen Arbeit und </p><p>Die Implementierung erfolgt zwar korrekt, deckt aber nicht alle Aspekte der tatsächlichen Bereitstellung des Algorithmus ab. Wenn der Algorithmus beispielsweise nur eine Komponente in einem komplexen System ist, wie können wir sicherstellen, dass Änderungen an dieser Komponente zu Verbesserungen des gesamten Systems führen? Und was ist, wenn die Integration des Algorithmus wesentliche Änderungen oder Erweiterungen erfordert, die in der Originalveröffentlichung nicht behandelt werden? Dies sind wichtige Themen, über die wir in zukünftigen Beiträgen gerne mehr berichten werden.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/implementing-academic-papers-lessons-learned-from-elasticsearch-and-lucene</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/implementing-academic-papers-lessons-learned-from-elasticsearch-and-lucene</guid>
    <category><![CDATA[ML-Forschung]]></category>
    <category><![CDATA[Lucene]]></category>
    <dc:creator><![CDATA[Julie Tibshirani]]></dc:creator>
    <pubDate>Wed, 29 Sep 2021 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>