Skip to content
BotServBotServ
OllamaEmbeddingsRAGnomic-embed-textVektordatenbank

Embeddings mit Ollama

Embeddings lokal mit Ollama erzeugen. Modelle, REST API, Vergleich mit OpenAI und Anwendungen für RAG.

S

schutzgeist

3 min read
Embeddings mit Ollama

Embeddings mit Ollama

Was dieser Artikel über Ollama-Embeddings behandelt

  • Was Embeddings sind und wofür man sie nutzt.
  • Welche Embedding-Modelle Ollama bietet.
  • Wie man Embeddings über die API erzeugt.
  • Wie man sie in Python nutzt.
  • Anwendungen wie RAG und semantische Suche.

Einleitung: Embeddings mit Ollama

Embeddings sind numerische Vektoren, die Text in einem mehrdimensionalen Raum abbilden. Sinnverwandte Inhalte liegen dabei nah beieinander. Diese Eigenschaft macht Embeddings essenziell für RAG, semantische Suche, Dokumentenclustering und Empfehlungssysteme. Ollama macht es einfach, Embedding-Modelle lokal laufen zu lassen, ohne auf Cloud-Dienste angewiesen zu sein.

Dieser Artikel zeigt, welche Embedding-Modelle Ollama bietet, wie die API funktioniert und wie die Vektoren in eigenen Projekten genutzt werden.

Wichtige Begriffe

  • Embedding: Vektor, der Text oder andere Daten repräsentiert.
  • Embedding-Modell: Spezielles Modell zur Erzeugung von Vektoren.
  • Vektorraum: Mathematischer Raum, in dem Ähnlichkeiten gemessen werden.
  • Kosinusähnlichkeit: Maß für die Nähe zweier Vektoren.
  • RAG: Retrieval-Augmented Generation, externe Dokumente in Prompts einbeziehen.
  • Vektordatenbank: Speicher für Embeddings.

Embedding-Modelle in Ollama

Ollama bietet verschiedene Embedding-Modelle. Das bekannteste ist:

  • nomic-embed-text: 137 Millionen Parameter, gute Performance, lizenzfrei nutzbar.
  • mxbai-embed-large: Stärkeres mehrsprachiges Modell.
  • bge-m3: Multilingual, geeignet für längere Dokumente.

Modelle werden wie Sprachmodelle heruntergeladen:

ollama pull nomic-embed-text
ollama pull mxbai-embed-large

Embeddings erzeugen

Über die REST API

curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": "Ollama ist ein Werkzeug für lokale KI."
}'

Antwort:

{
  "model": "nomic-embed-text",
  "embeddings": [[0.12, -0.34, 0.56, ...]]
}

Mehrere Texte

curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": [
    "Erster Text.",
    "Zweiter Text.",
    "Dritter Text."
  ]
}'

Python-Beispiel

import reqüsts

def embed(texts, model="nomic-embed-text"):
    url = "http://localhost:11434/api/embed"
    payload = {"model": model, "input": texts}
    resp = reqüsts.post(url, json=payload)
    return resp.json()["embeddings"]

vectors = embed(["Hallo Welt", "Ollama lokal nutzen"])
print(len(vectors), len(vectors[0]))

Ähnlichkeit berechnen

Mit numpy lässt sich die Kosinusähnlichkeit zweier Vektoren berechnen:

import numpy as np

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

v1 = np.array(vectors[0])
v2 = np.array(vectors[1])
print(cosine_similarity(v1, v2))

Vergleich mit OpenAI

MerkmalOllama lokalOpenAI API
KostenNur StromPro Token
DatenschutzBleibt lokalGeht an Cloud
GeschwindigkeitAbhängig von HardwareSchnell
QualitätGutSehr gut
SkalierungBegrenzt durch eigene HardwareSehr skalierbar

Für viele Anwendungen reichen lokale Ollama-Embeddings aus. Wer maximale Genauigkeit oder sehr grosse Datenmengen braucht, kann Cloud-Modelle ergänzen.

Anwendungen

RAG

In einem RAG-System werden Dokumente in kleine Teile aufgeteilt, in Embeddings umgewandelt und in einer Vektordatenbank gespeichert. Bei einer Frage wird die Frage ebenfalls in einen Vektor umgewandelt und die nächsten Dokumentenstücke gesucht.

Semantische Suche

Statt nach Schlüsselwörtern zu suchen, findet man ähnliche Inhalte. Das funktioniert auch über Sprachen hinweg.

Klassifizierung und Clustering

Mit Embeddings lassen sich Texte in Kategorien einordnen oder automatisch in Themengruppen aufteilen.

Vektordatenbanken

Ollama-Embeddings lassen sich mit lokalen Vektordatenbanken kombinieren:

  • ChromaDB: Einfach zu nutzen, in Python beliebt.
  • Qdrant: Schnelle, skalierbare Vektordatenbank.
  • Weaviate: Modellunabhängig, stark für Enterprise.
  • pgvector: Vektorerweiterung für PostgreSQL.

Tipps

  • Texte in sinnvolle Chunks aufteilen.
  • Passe Chunk-Grösse und Überlappung an die Anwendung an.
  • Nutze ein passendes Embedding-Modell für die Sprache.
  • Speichere Embeddings einmalig, nicht bei jeder Anfrage neu erzeugen.
  • Messe Recall und Genauigkeit mit Beispielabfragen.

Typische Stolpersteine

  • Falsches Modell: Nicht jedes Modell eignet sich für Embedding.
  • Text zu lang: Längere Texte müssen vorher aufgeteilt werden.
  • Dimensionen variieren: Unterschiedliche Modelle erzeugen unterschiedlich lange Vektoren.
  • Keine Normierung: Kosinusähnlichkeit braucht normalisierte Vektoren.
  • Falsche API-URL: /api/embed ist der Ollama-Endpoint, nicht /v1/embeddings.

FAQ: Embeddings mit Ollama

Welches Embedding-Modell sollte ich nutzen? nomic-embed-text ist ein guter Einstieg. mxbai-embed-large ist stärker, aber grösser.

Kann ich ganze Dokumente auf einmal einbetten? Besser ist es, sie in Chunks aufzuteilen.

Sind Ollama-Embeddings datenschutzkonform? Ja, da alles lokal verarbeitet wird.

Wie speichere ich Embeddings? In einer Vektordatenbank wie ChromaDB, Qdrant oder pgvector.

Welches Maß für Ähnlichkeit? Kosinusähnlichkeit ist der gängige Standard.

Qüllen und weiterführende Literatur

Zusammenfassung: Embeddings mit Ollama

Ollama ermöglicht es, Embedding-Modelle lokal zu betreiben und Texte in Vektoren umzuwandeln. Das ist die Grundlage für RAG, semantische Suche und Klassifizierung. nomic-embed-text ist ein beliebtes Einstiegsmodell. Wer Texte in passende Chunks aufteilt, die Vektoren in einer lokalen Vektordatenbank speichert und Ähnlichkeiten mit der Kosinusdistanz misst, baut schnell ein leistungsfähiges lokales RAG-System auf.

Zurück zum KI Blog
Share:

Ähnliche Beiträge