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
| Merkmal | Ollama lokal | OpenAI API |
|---|---|---|
| Kosten | Nur Strom | Pro Token |
| Datenschutz | Bleibt lokal | Geht an Cloud |
| Geschwindigkeit | Abhängig von Hardware | Schnell |
| Qualität | Gut | Sehr gut |
| Skalierung | Begrenzt durch eigene Hardware | Sehr 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/embedist der Ollama-Endpoint, nicht/v1/embeddings.
Weiterführende Links und Infos
- BotServ.de Ollama REST API
- BotServ.de Ollama Befehle
- BotServ.de RAG Wissensdatenbank
- BotServ.de Vektordatenbanken
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
- Ollama API Docs: https://github.com/ollama/ollama/blob/main/docs/api.md
- nomic-embed-text: https://ollama.com/library/nomic-embed-text
- Sentence Transformers: https://sbert.net/
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.


