42 Machine Learning

Die Integration von Machine Learning in OpenSearch eröffnet völlig neue Möglichkeiten für die Datenanalyse und Suche. In diesem Kapitel lernen Sie, wie Sie die ML-Funktionen von OpenSearch praktisch einsetzen können - von einfachen Ähnlichkeitssuchen bis hin zu komplexer Anomalieerkennung.

42.1 Machine Learning Grundlagen in OpenSearch

OpenSearch bietet verschiedene ML-Funktionalitäten, die auf unterschiedlichen Technologien basieren:

  1. k-NN (k-Nearest Neighbors) für Ähnlichkeitssuche
  2. Anomalieerkennung mit statistischen Modellen
  3. Vektorsuche für semantische Ähnlichkeit

Anders als traditionelle ML-Frameworks wie TensorFlow oder PyTorch ist OpenSearch’s Machine Learning speziell für Suchanwendungen und Zeitreihenanalyse optimiert. Die Modelle sind direkt in den Suchmechanismus integriert.

42.2 k-NN Suche implementieren

Die k-Nearest Neighbors Suche ist ideal für Empfehlungssysteme oder ähnlichkeitsbasierte Suchen. Stellen Sie sich vor, Sie möchten ähnliche Produkte in einem Online-Shop finden.

Zuerst erstellen wir einen Index mit k-NN Konfiguration:

PUT /products
{
  "settings": {
    "index": {
      "knn": true,
      "knn.algo_param.ef_search": 100
    }
  },
  "mappings": {
    "properties": {
      "product_vector": {
        "type": "knn_vector",
        "dimension": 128,
        "method": {
          "name": "hnsw",
          "space_type": "l2",
          "engine": "nmslib",
          "parameters": {
            "ef_construction": 128,
            "m": 24
          }
        }
      },
      "name": { "type": "text" },
      "description": { "type": "text" },
      "category": { "type": "keyword" }
    }
  }
}

Diese Konfiguration enthält wichtige Parameter:

Jetzt können wir Produkte mit ihren Merkmalsvektoren indexieren:

POST /products/_doc
{
  "name": "Moderne Kamera XC-100",
  "description": "Kompakte Digitalkamera für ambitionierte Fotografen",
  "category": "Elektronik",
  "product_vector": [0.2, 0.5, ..., 0.8]  // 128-dimensionaler Vektor
}

Eine k-NN Suche führen wir so durch:

GET /products/_search
{
  "size": 5,
  "query": {
    "knn": {
      "product_vector": {
        "vector": [0.3, 0.4, ..., 0.7],
        "k": 5
      }
    }
  }
}

42.3 Anomalieerkennung für Zeitreihendaten

Die Anomalieerkennung in OpenSearch ist besonders wertvoll für das Monitoring von Systemen. Sie basiert auf statistischen Modellen und maschinellem Lernen.

Zuerst definieren wir einen Detektor:

POST /_plugins/_anomaly_detection/detectors
{
  "name": "system_metrics_detector",
  "description": "Erkennt Anomalien in Systemmetriken",
  "time_field": "timestamp",
  "indices": ["metrics-*"],
  "feature_attributes": [
    {
      "feature_name": "cpu_usage",
      "feature_enabled": true,
      "aggregation_query": {
        "cpu_usage": {
          "avg": {
            "field": "system.cpu.total.norm.pct"
          }
        }
      }
    },
    {
      "feature_name": "memory_usage",
      "feature_enabled": true,
      "aggregation_query": {
        "memory_usage": {
          "avg": {
            "field": "system.memory.actual.used.pct"
          }
        }
      }
    }
  ],
  "detection_interval": {
    "period": {
      "interval": 10,
      "unit": "Minutes"
    }
  },
  "window_delay": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  }
}

Diese Konfiguration:

Anomalien können wir dann abfragen:

POST /_plugins/_anomaly_detection/detectors/<detector_id>/_search
{
  "query": {
    "range": {
      "anomaly_grade": {
        "gt": 0.7
      }
    }
  }
}

42.4 Vektorsuche für semantische Ähnlichkeit

Die Vektorsuche ermöglicht es uns, semantisch ähnliche Dokumente zu finden, auch wenn sie nicht die gleichen Wörter enthalten. Dies ist besonders nützlich für moderne Suchanwendungen.

Zuerst erstellen wir einen Index für Textdokumente mit Vektorrepräsentationen:

PUT /documents
{
  "settings": {
    "index": {
      "knn": true
    }
  },
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "content": { "type": "text" },
      "embedding": {
        "type": "knn_vector",
        "dimension": 384,
        "method": {
          "name": "hnsw",
          "space_type": "cosine",
          "engine": "faiss",
          "parameters": {
            "ef_construction": 256,
            "m": 48
          }
        }
      }
    }
  }
}

Beachten Sie die Verwendung von:

Ein Dokument mit Embedding indexieren:

POST /documents/_doc
{
  "title": "Einführung in Machine Learning",
  "content": "Machine Learning ist ein Teilgebiet der künstlichen Intelligenz...",
  "embedding": [0.1, 0.2, ..., 0.9]  // 384-dimensionaler Vektor
}

Eine semantische Suche durchführen:

GET /documents/_search
{
  "query": {
    "script_score": {
      "query": { "match_all": {} },
      "script": {
        "source": "cosineSimilarity(params.query_vector, 'embedding') + 1.0",
        "params": {
          "query_vector": [0.2, 0.3, ..., 0.8]
        }
      }
    }
  }
}

42.5 Machine Learning Pipelines

Für komplexere Anwendungsfälle können wir ML-Funktionen in Ingest-Pipelines integrieren:

PUT _ingest/pipeline/ml_enrichment
{
  "description": "Berechnet Vektoren und erkennt Anomalien",
  "processors": [
    {
      "inference": {
        "model_id": "sentence-embeddings",
        "target_field": "content_vector",
        "field_map": {
          "content": "text_field"
        }
      }
    },
    {
      "anomaly_detection": {
        "model_id": "metric_anomalies",
        "target_field": "anomaly_score",
        "field_map": {
          "value": "metric_value"
        }
      }
    }
  ]
}

42.6 Best Practices für ML in OpenSearch

Bei der Implementierung von ML-Funktionen sollten Sie beachten:

  1. Ressourcenplanung
  2. Performance-Optimierung
  3. Monitoring und Wartung