Die Kombinationskraft von traditionellem Machine Learning mit Large Language Models

published on April 25, 2025

Kombination von traditionellem ML mit LLMs

Die Kombinationskraft von traditionellem Machine Learning mit Large Language Models

Haben Sie sich jemals gefragt, wie man das Beste aus beiden Welten der KI herausholen kann? Traditionelles maschinelles Lernen ist hervorragend darin, Zahlen zu verarbeiten und Muster in Daten zu finden, während Large Language Models (LLMs) unglaublich gut im Verstehen und Generieren menschlicher Sprache sind. Die Kombination beider schafft eine leistungsstarke Synergie, die Ihre Data-Science-Projekte transformieren kann.

In diesem Leitfaden zeige ich Ihnen praktische Ansätze zur Integration spezialisierter ML-Systeme mit LLMs wie Ollama, mit speziellem Fokus auf Zeitreihenanalyse. Sie werden lernen, wie Sie traditionelle ML-Modelle für präzise Vorhersagen nutzen und gleichzeitig LLMs einsetzen können, um Ergebnisse zu interpretieren und interaktive Benutzererfahrungen zu schaffen.

Warum diese Integration sinnvoll ist

Traditionelle ML-Frameworks wie TensorFlow und PyTorch sind außergewöhnlich gut darin, strukturierte Daten zu verarbeiten und numerische Vorhersagen zu treffen. Ihre spezialisierten Architekturen (wie LSTMs) sind perfekt, um zeitliche Muster in Zeitreihendaten zu erfassen.

Währenddessen glänzen LLMs in folgenden Bereichen:

  • Verstehen natürlichsprachlicher Anfragen
  • Erklären komplexer Ergebnisse in menschlichen Begriffen
  • Bereitstellen von Konversationsschnittstellen für technische Systeme

Durch die Kombination dieser Technologien schaffen wir Systeme, die sowohl von rechnerischer Präzision als auch von natürlichsprachlichen Fähigkeiten profitieren.

Erste Schritte mit Ollama

Ollama macht die Integration von Open-Source-LLMs in Python-Anwendungen unkompliziert. Hier erfahren Sie, wie Sie beginnen können:

  1. Installieren und starten Sie Ollama
  2. Laden Sie ein Modell: ollama pull llama3.3
  3. Installieren Sie die Python-Bibliothek: pip install ollama

Die grundlegende Nutzung ist einfach:

import ollama

response = ollama.generate(model='llama3.3', prompt='Warum ist der Himmel blau?')
print(response['response'])

Für interaktivere Anwendungen probieren Sie die Chat-Funktionalität aus:

from ollama import chat

response = chat(
    model='llama3.3',
    messages=[{'role': 'user', 'content': 'Warum ist der Himmel blau?'}]
)
print(response['message']['content'])

Vier leistungsstarke Integrationsstrategien

Nach intensiver Arbeit mit diesen Technologien habe ich vier effektive Strategien zur Kombination von ML-Systemen mit LLMs identifiziert:

Strategie 1: ML-Vorhersagen als Eingabe für LLMs

Trainieren Sie Ihr ML-Modell, generieren Sie Vorhersagen und lassen Sie das LLM diese interpretieren. Dieser Ansatz ist perfekt, wenn Sie menschenlesbare Analysen komplexer Prognosen benötigen.

Strategie 2: Funktionsaufrufe für ML-Vorhersagen auf Abruf

Nutzen Sie Ollamas Funktionsaufruffähigkeit, um ML-Vorhersagen während Gesprächen auszulösen. Dies schafft eine nahtlose Erfahrung, bei der Benutzer über natürliche Sprache Prognosen oder Analysen anfordern können.

Strategie 3: LLMs für kontextuelle Verbesserung von ML-Outputs

Lassen Sie Ihr ML-Modell die Schwerarbeit mit Vorhersagen erledigen und nutzen Sie dann LLMs, um Kontext und Erklärungen hinzuzufügen, die die Ausgaben wertvoller und zugänglicher machen.

Strategie 4: Hierarchische Entscheidungssysteme

Verwenden Sie ML-Modelle für präzise Vorhersagen und LLMs für hochrangige Entscheidungsfindung basierend auf diesen Vorhersagen. Dies ahmt nach, wie Menschen detaillierte Analysen mit strategischem Denken kombinieren.

Praktische Codebeispiele

Tauchen wir in praktische Implementierungen ein. Ich habe Beispiele erstellt, die verschiedene Integrationsansätze demonstrieren.

Beispiel 1: Zeitreihenprognose mit TensorFlow und Ollama-Interpretation

Dieses Beispiel verwendet ein LSTM-Modell für Prognosen und Ollama zur Interpretation der Ergebnisse:

import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
import ollama

# Synthetische Zeitreihendaten generieren
def generate_time_series(n_samples=1000):
    time = np.arange(n_samples)
    seasonal = 10 * np.sin(0.1 * time)
    trend = 0.01 * time
    noise = 2 * np.random.randn(n_samples)
    signal = seasonal + trend + noise
    return time, signal

# Daten erstellen und vorbereiten
time, signal = generate_time_series()
df = pd.DataFrame({'time': time, 'value': signal})

# Daten für TensorFlow-Modell vorbereiten
def create_dataset(data, time_steps=1):
    X, y = [], []
    for i in range(len(data) - time_steps):
        X.append(data[i:(i + time_steps)])
        y.append(data[i + time_steps])
    return np.array(X), np.array(y)

# Daten normalisieren
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
signal_scaled = scaler.fit_transform(df['value'].values.reshape(-1, 1))

# Sequenzen erstellen
time_steps = 10
X, y = create_dataset(signal_scaled, time_steps)
X = X.reshape(X.shape[0], X.shape[1], 1)

# Daten aufteilen
train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

# LSTM-Modell erstellen
model = tf.keras.Sequential([
    tf.keras.layers.LSTM(50, activation='relu', input_shape=(X_train.shape[1], 1)),
    tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')

# Modell trainieren
history = model.fit(X_train, y_train, epochs=20, batch_size=32, validation_split=0.1, verbose=1)

# Vorhersagen treffen
predictions = model.predict(X_test)

# Inverse Transformation der Vorhersagen und tatsächlichen Werte
predictions = scaler.inverse_transform(predictions)
y_test_inv = scaler.inverse_transform(y_test)

# Fehler berechnen
mse = np.mean((predictions - y_test_inv) ** 2)
rmse = np.sqrt(mse)

# Eine Zusammenfassung der Prognoseergebnisse für Ollama vorbereiten
forecast_summary = f"""
Das Zeitreihenprognosemodell lieferte folgende Ergebnisse:
- Mean Squared Error (MSE): {mse:.4f}
- Root Mean Squared Error (RMSE): {rmse:.4f}
- Das Modell wurde auf {len(X_train)} Stichproben trainiert und auf {len(X_test)} Stichproben getestet.
- Das Modell zeigt {'gute' if rmse < 3 else 'moderate' if rmse < 5 else 'schlechte'} Leistung.

Können Sie diese Ergebnisse analysieren und Einblicke in die Leistung des Modells geben?
"""

# Ollama zur Interpretation der Ergebnisse verwenden
response = ollama.generate(
    model='llama3.3',
    prompt=forecast_summary
)

print("Ollamas Interpretation der Ergebnisse:")
print(response['response'])

Beispiel 2: Anomalieerkennung mit Funktionsaufrufen

Dieses Beispiel zeigt, wie Ollama während eines Gesprächs eine Anomalieerkennungsfunktion aufrufen kann:

import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense, LSTM, RepeatVector, TimeDistributed
from tensorflow.keras.models import Model
import ollama
import json

# Funktion zur Erkennung von Anomalien in einem bestimmten Zeitbereich
def detect_anomalies(start_date, end_date, threshold=0.1):
    """
    Anomalien in einem bestimmten Zeitbereich mittels LSTM-Autoencoder erkennen.

    Args:
        start_date (str): Startdatum im Format YYYY-MM-DD
        end_date (str): Enddatum im Format YYYY-MM-DD
        threshold (float): Schwellenwert für die Anomalieerkennung

    Returns:
        dict: Wörterbuch mit Anomalieinformationen
    """
    # Hier wäre die Implementierung der Anomalieerkennung
    # Der Kürze halber simulieren wir ein Ergebnis

    result = {
        "start_date": start_date,
        "end_date": end_date,
        "total_points": 240,
        "anomaly_count": 3,
        "threshold": threshold,
        "anomalies": [
            {
                "timestamp": "2023-01-02 14:00:00",
                "value": 25.7,
                "deviation": 4.2
            },
            {
                "timestamp": "2023-01-03 08:30:00",
                "value": -5.3,
                "deviation": 6.8
            },
            {
                "timestamp": "2023-01-04 22:15:00",
                "value": 30.1,
                "deviation": 5.5
            }
        ]
    }

    return result

# Funktionsaufruf mit Ollama einrichten
def process_request_with_ollama():
    # Chat-Verlauf initialisieren
    messages = [
        {
            "role": "system",
            "content": "Sie sind ein KI-Assistent, der bei der Zeitreihen-Anomalieerkennung hilft."
        }
    ]

    print("Zeitreihen-Anomalieerkennungssystem")
    print("Geben Sie 'exit' ein, um das Gespräch zu beenden.")

    while True:
        # Benutzereingabe erhalten
        user_input = input("\nSie: ")

        if user_input.lower() == 'exit':
            break

        # Benutzernachricht zum Chat-Verlauf hinzufügen
        messages.append({"role": "user", "content": user_input})

        # Tool für die Anomalieerkennung definieren
        tools = [
            {
                "type": "function",
                "function": {
                    "name": "detect_anomalies",
                    "description": "Anomalien in Zeitreihendaten innerhalb eines bestimmten Datumsbereichs erkennen",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "start_date": {
                                "type": "string",
                                "description": "Startdatum im Format YYYY-MM-DD"
                            },
                            "end_date": {
                                "type": "string",
                                "description": "Enddatum im Format YYYY-MM-DD"
                            },
                            "threshold": {
                                "type": "number",
                                "description": "Schwellenwert für die Anomalieerkennung (optional)"
                            }
                        },
                        "required": ["start_date", "end_date"]
                    }
                }
            }
        ]

        # Antwort von Ollama erhalten
        response = ollama.chat(
            model="llama3.3",
            messages=messages,
            tools=tools
        )

        # Prüfen, ob das Modell eine Funktion aufrufen möchte
        if 'tool_calls' in response['message']:
            tool_calls = response['message']['tool_calls']
            for tool_call in tool_calls:
                if tool_call['function']['name'] == 'detect_anomalies':
                    # Argumente parsen
                    args = json.loads(tool_call['function']['arguments'])

                    # Funktion aufrufen
                    threshold = args.get('threshold', 0.1)
                    result = detect_anomalies(args['start_date'], args['end_date'], threshold)

                    # Funktionsergebnis zu Nachrichten hinzufügen
                    messages.append({
                        "role": "tool",
                        "tool_call_id": tool_call['id'],
                        "name": "detect_anomalies",
                        "content": json.dumps(result)
                    })

            # Endgültige Antwort nach Funktionsaufruf erhalten
            final_response = ollama.chat(
                model="llama3.3",
                messages=messages
            )

            # Antwort ausgeben und zu Nachrichten hinzufügen
            print(f"\nKI: {final_response['message']['content']}")
            messages.append({"role": "assistant", "content": final_response['message']['content']})
        else:
            # Antwort ausgeben und zu Nachrichten hinzufügen
            print(f"\nKI: {response['message']['content']}")
            messages.append({"role": "assistant", "content": response['message']['content']})

# Auskommentieren, um das interaktive System auszuführen
# process_request_with_ollama()

Erstellen einer End-to-End-Zeitreihenanalyse-Pipeline

Möchten Sie sehen, wie all diese Teile zusammenpassen? Ich habe ein umfassendes Beispiel erstellt, das alles, was wir gelernt haben, kombiniert. Dieses System beinhaltet:

  • LSTM-basierte Zeitreihenprognose
  • Interaktive Visualisierung
  • LLM-gestützte Analyse
  • Funktionsaufrufe für On-Demand-Vorhersagen
  • Anomalieerkennungsfähigkeiten

Den vollständigen Code finden Sie im GitHub-Repository für diesen Artikel.

Best Practices für Ihre Integrationsprojekte

Durch das Experimentieren mit diesen Integrationen habe ich mehrere Best Practices entdeckt:

1. Klare Trennung der Zuständigkeiten

Lassen Sie jedes System das tun, was es am besten kann. Verwenden Sie ML-Modelle für statistische Analysen und numerische Vorhersagen und LLMs für natürliches Sprachverständnis und Benutzerinteraktion.

2. Effektives Datenfluss-Design

Gestalten Sie klare Datenflüsse zwischen Systemen und stellen Sie sicher, dass Daten beim Wechsel zwischen ML-Modellen und LLMs richtig formatiert sind.

3. Durchdachtes Prompt-Engineering

Erstellen Sie klare, informative Prompts, wenn Sie ML-Outputs an LLMs übergeben. Die Qualität Ihrer Prompts beeinflusst direkt die Qualität der Antwort des LLM.

4. Funktionsaufrufe für komplexe Operationen

Nutzen Sie Funktionsaufrufe, um LLMs zu ermöglichen, ML-Fähigkeiten bei Bedarf aufzurufen, insbesondere für komplexe Operationen wie Prognosen oder Anomalieerkennung.

5. Benutzerzentriertes Design

Konzentrieren Sie sich auf die Schaffung einer nahtlosen Erfahrung. Ihre Benutzer sollten die komplexe Integration, die im Hintergrund stattfindet, nicht verstehen müssen.

Fazit

Durch die Kombination der rechnerischen Präzision traditioneller ML mit den natürlichsprachlichen Fähigkeiten von LLMs können wir Systeme schaffen, die sowohl technisch leistungsstark als auch zugänglich sind. Die in diesem Leitfaden bereitgestellten Beispiele demonstrieren verschiedene Integrationsstrategien, die Sie für Ihre eigenen Projekte anpassen können.

Da sich diese Technologien weiterentwickeln, können wir eine zunehmend nahtlose Integration zwischen ML-Systemen und LLMs erwarten. Diese Konvergenz wird zu leistungsstärkeren und benutzerfreundlicheren KI-Anwendungen in vielen Domänen führen.

Ich würde gerne von Ihren Erfahrungen bei der Integration von ML mit LLMs hören. Welche Strategien haben für Sie funktioniert? Mit welchen Herausforderungen wurden Sie konfrontiert? Teilen Sie Ihre Gedanken in den Kommentaren unten.

Viel Spaß beim Programmieren!


At CorticalFlow expanding the cognitive ability of the user is our mission.

Disclaimer

The provided code does not present a production ready setup in regards of security and stability. All code presented in this tutorial is used under your own risk. Consider always security audits before you put any code in production.

None of the parts of the tutorials or code content should be considered as financial advice. Always consult a professional investment Advisor before taking an investment.