Sentence Transformers : die Embeddings in lokal
Sentence Transformers ist eine Python-Bibliothek, die ein Embedding-Modell von Hugging Face lädt und Texte mit model.encode auf der CPU oder GPU in Vektoren umwandelt; model.similarity vergleicht anschließend diese Vektoren. Wählen Sie für Französisch ein mehrsprachiges Modell: Ein englischsprachiges Modell wie all-MiniLM-L6-v2 bewertet französische Texte schlecht. Halten Sie Ihre Textpassagen unter der maximalen Länge des Modells, da darüber hinausgehender Text ohne Warnung abgeschnitten wird.
Dieser Leitfaden zeigt, wie Sie die Bibliothek installieren, ein Korpus kodieren, ein Modell auswählen, das Französisch versteht, unbemerkte Fehler vermeiden (Längenbegrenzung, Anfragepräfixe, Vermischung zweier Modelle) und die Indexierung auf Ihrem Rechner beschleunigen. Er stellt außerdem Sentence Transformers der Embedding-API von Ollama gegenüber, um Ihnen bei der Entscheidung zu helfen, welche der beiden Lösungen Sie verwenden sollen.
#Was ein Embedding ist und was die Bibliothek tut
Ein Embedding-Modell wandelt einen Text in eine Liste von Zahlen, einen Vektor, um, sodass zwei Texte mit ähnlicher Bedeutung nahe beieinanderliegende Vektoren haben. Die Dokumentation von Sentence Transformers beschreibt diese sogenannten Bi-Encoder als Modelle, die für einen Text eine Repräsentation fester Größe berechnen, wobei die Embedding-Berechnung oft effizient und die Ähnlichkeitsberechnung sehr schnell ist. Das ist der Ausgangsbaustein von RAG: Man kodiert die Frage, sucht die Textpassagen mit den nächstgelegenen Vektoren und gibt diese Passagen an das Sprachmodell weiter. Zwei Konsequenzen sollten Sie sich merken: Das Modell, das die Dokumente kodiert, muss auch die Fragen kodieren, und sein Verständnis von „Nähe“ stammt aus seinem Training. Ein Modell, das hauptsächlich auf Englisch trainiert wurde, beurteilt französische Texte wenig zuverlässig.
Dieses Modell erzeugt Vektoren mit 384 Dimensionen und dient als Einstiegsbeispiel, ist aber für Englisch ausgelegt: Ersetzen Sie es für ein französischsprachiges Korpus wie weiter unten beschrieben. Die Bibliothek lädt das Modell automatisch auf das beste verfügbare Gerät (cuda, mps oder cpu), und Sie können die Auswahl mit dem Parameter device erzwingen.
#Installieren und ein französisches Korpus kodieren
Ihre Dokumente, Ihre KI: ein zuverlässiges lokales RAG für Ihre PDFs, Notizen und E-Mails – ohne Daten in die Cloud zu senden.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Erstattung binnen 30 Tagen
- 01Bibliothek installierenVerwenden Sie pip install -U sentence-transformers in einer Python-Umgebung. Die Version 6.1.0 ist am 18. September 2026 erschienen und erfordert laut PyPI Python 3.10 oder neuer.
- 02Ein mehrsprachiges Modell auswählenWählen Sie ein Modell, das als mehrsprachig ausgewiesen ist (siehe Tabelle weiter unten), kein all-*-Modell, das für Englisch trainiert wurde.
- 03Dokumente stapelweise kodierenÜbergeben Sie eine Liste von Texten an encode: Die Bibliothek verarbeitet sie in Batches, wodurch die Hardware deutlich besser genutzt wird als bei einem Aufruf pro Text.
- 04Die Frage mit dem gleichen Modell codierenVerwenden Sie dasselbe Modell und dieselben Präfixe wie für die Dokumente und vergleichen Sie anschließend mit similarity.
- 05Den Modellnamen zusammen mit dem Index speichernNotieren Sie den Namen in den Metadaten: Wenn Sie das Modell wechseln, müssen Sie das gesamte Korpus erneut kodieren.
Die Dokumentation von Sentence Transformers nennt für dieses Modell das Präfix query: für Fragen und passage: für Dokumente. Ohne das jeweilige Präfix verschlechtert sich die Qualität des Retrievals, ohne dass eine Fehlermeldung erscheint. Der Parameter prompt von encode wendet das Präfix auf jeden Text an.
#Ein Modell auswählen, das Französisch versteht
Die Dokumentation schlägt ursprüngliche Modelle vor und empfiehlt, die MTEB-Rangliste als Inspirationsquelle heranzuziehen, mit zwei Vorbehalten: Modelle aussortieren, die für Ihre Hardware zu groß sind, und experimentieren, denn gut platzierte Modelle schneiden bei Ihren eigenen Aufgaben nicht unbedingt gut ab. Die folgende Tabelle gibt wieder, was die Dokumentation über die genannten Modelle sagt.
| Modell | Was die Dokumentation sagt | Für Französisch |
|---|---|---|
| all-MiniLM-L6-v2 | Etwa 5-mal schneller als all-mpnet-base-v2, gute Qualität; 384 Dimensionen, maximal 256 Tokens | Nein: auf Englisch ausgerichtet |
| all-mpnet-base-v2 | Beste Qualität innerhalb der all-*-Familie, Allround-Modell | Nein: auf Englisch ausgerichtet |
| multi-qa-mpnet-base-cos-v1 | Für die semantische Suche anhand von 215 Millionen Frage-Antwort-Paaren trainiert | Nein: auf Englisch ausgerichtet |
| paraphrase-multilingual-MiniLM-L12-v2 | Trainiert auf parallelen Daten für mehr als 50 Sprachen | Ja, konzipiert für die Satzähnlichkeit |
| paraphrase-multilingual-mpnet-base-v2 | Gleiche Familie, mehr als 50 Sprachen | Ja, schwerer |
| distiluse-base-multilingual-cased-v1 | Unterstützt 15 Sprachen, darunter Französisch | Ja, aber nur für eine begrenzte Auswahl an Sprachen |
| multilingual-e5-large | Erwartet die Präfixe query: und passage: (wie in der Dokumentation beschrieben) | Ja, mehrsprachiges Retrieval |
#Fehler, die ein Korpus ruinieren, ohne eine Fehlermeldung auszulösen
- Ein englischsprachiges Modell für französische Texte
- Alles funktioniert, und trotzdem liefert die Informationssuche verfälschte Ergebnisse. Das ist der häufigste Fehler.
- Abschnitte, die länger als das Modelllimit sind
- Die Dokumentation stellt klar, dass längere Texte auf die ersten max_seq_length Tokens gekürzt werden: Das Ende jedes langen Abschnitts bleibt unsichtbar.
- Unterschiedliche Modelle für Dokumente und Fragen
- Die Vektoren bilden nicht mehr dasselbe ab: Es entstehen unsinnige Ergebnisse, meist weil nur ein Teil der Verarbeitungskette aktualisiert wurde.
- Vergessene Präfixe
- Einige Modelle benötigen unterschiedliche Präfixe für Fragen und Dokumente; lässt man sie weg, verschlechtert sich die Qualität des Retrievals.
- Nicht normalisierte Vektoren mit einer ungeeigneten Bewertungsfunktion
- Wenn das Modell Kosinusähnlichkeit erwartet, normalisieren Sie die Vektoren oder verwenden Sie das passende Ähnlichkeitsmaß; andernfalls verschlechtert sich die Rangfolge.
#Ähnlichkeit messen: Normalisierung und Kosinus
Zwei Vektoren werden mithilfe eines Ähnlichkeitsmaßes verglichen, meist der Kosinusähnlichkeit. Die Dokumentation von Ollama gibt an, dass dessen Endpunkt normalisierte Vektoren zurückgibt, und empfiehlt die Kosinusähnlichkeit für die meisten semantischen Suchen. Bei normalisierten Vektoren liefern Kosinusähnlichkeit und Skalarprodukt dieselbe Rangfolge, sodass ein für das Skalarprodukt optimierter Index verwendet werden kann. Achten Sie auf Konsistenz: Das Ähnlichkeitsmaß der Vektordatenbank muss dem vom Modell erwarteten Maß entsprechen, das in seiner Modellbeschreibung angegeben ist.
Zur Textlänge nennt die Dokumentation eine Größenordnung: 512 Tokens für viele Modelle vom Typ BERT, also 300 bis 400 Wörter im Englischen, und 256 Tokens für all-MiniLM-L6-v2. Französisch benötigt mehr Tokens pro Wort: Teilen Sie Ihre Textpassagen so auf, dass sie mit ausreichend Spielraum unter der Grenze bleiben, und prüfen Sie model.max_seq_length. Sie können diesen Wert verringern, aber nicht über das hinaus erhöhen, was das Modell unterstützt. Die Dokumentation ergänzt, dass ein auf kurzen Texten trainiertes Modell lange Texte weniger gut repräsentiert.
#Auf dem eigenen Rechner schnell indexieren
- Prozessor oder GPU
- Das Modell läuft auf dem besten verfügbaren Gerät. Eine GPU beschleunigt die Indexierung großer Datenmengen, macht bei einer einzelnen Abfrage aber kaum einen Unterschied.
- Reduzierte numerische Präzision
- Auf einer GPU beschleunigt der Wechsel zu float16 oder bfloat16 laut Dokumentation die Inferenz bei einem minimalen Genauigkeitsverlust.
- ONNX- und OpenVINO-Backends
- Die Dokumentation nennt mögliche Beschleunigungen um den Faktor 2 bis 3, je nach Hardware und Backend; testen Sie diese auf Ihrem Rechner.
- Mehrere GPU oder Prozesse
- encode akzeptiert eine Liste von Geräten: nützlich bei großen Korpora, weniger bei kleinen wegen des Startaufwands.
- Kompaktere Vektoren
- Die binäre oder ganzzahlige Quantisierung von Vektoren und Modelle mit reduzierbarer Vektordimensionalität verringern den Speicherbedarf und die Suchkosten.
- Caching und Indexierung
- Kodieren Sie unveränderte Dokumente nicht erneut: Der Cache-Schlüssel richtet sich nach dem Inhalt, nicht nach dem Dateinamen. Auf einem Rechner, der auch ein Sprachmodell bereitstellt, sollten Sie dann indexieren, wenn niemand es nutzt.
#Wie viel Speicher ein Vektorindex benötigt
Die Größe eines Index berechnet sich, indem man die Anzahl der Vektoren mit ihrer Dimension und mit vier Bytes multipliziert, sofern die Zahlen als float32 vorliegen. Ein Vektor mit 384 Dimensionen belegt 1.536 Bytes: Eine Million Textpassagen entspricht etwa 1,5 GB. Bei 1.024 Dimensionen belegt dieselbe Million etwa 4 GB. Diese Werte schließen Metadaten und die Indexstrukturen der Vektordatenbank aus. Die Wahl des Modells wirkt sich daher direkt auf den für die Suche benötigten Arbeitsspeicher aus, und die oben erwähnte Quantisierung der Vektoren kann diesen Speicherbedarf verringern.
#Sentence Transformers oder die Embedding-API von Ollama
Ollama bietet ebenfalls Embeddings an: Die Dokumentation stellt fest, dass der Befehl ollama run peut Vektoren erzeugt und dass der API-Zugriff api/embed normalisierte Vektoren nach L2 zurückgibt. Sie empfiehlt die Modelle embeddinggemma, qwen3-embedding und all-minilm mit typischen Vektordimensionen von 384 bis 1.024 und erinnert an zwei Regeln: Cosinus für die meisten Suchvorgänge und identisches Modell für Indexierung und Abfrage.
| Kriterium | Sentence Transformers | API für Embeddings von Ollama |
|---|---|---|
| Installation | Python-Bibliothek zum Installieren | Ist bereits vorhanden, wenn Sie Ollama verwenden |
| Modellauswahl | Jedes kompatible Modell von Hugging Face | Modelle aus der Ollama-Bibliothek |
| Kontrolle über Präfixe und Länge | Feine Steuerung: prompt, max_seq_length, benannte Prompts | Je nach Modell und Aufruf |
| Training oder Fine-Tuning | Ja, die Bibliothek unterstützt dies | Nein |
| Typischer Einsatz | Massenindexierung, Experimente, Reranking | Einfache Integration in eine bereits auf Ollama aufgebaute Verarbeitungskette |
#Das Embedding dient nur als erster Filter
Die Dokumentation von Sentence Transformers beschreibt den Bi-Encoder als erste Stufe einer zweistufigen Suche, bei der ein Cross-Encoder, auch Reranker genannt, die besten Ergebnisse neu ordnet. Der Cross-Encoder liest die Frage und jede Textpassage gemeinsam: Er ist langsamer, aber bei einer Handvoll Kandidaten präziser. Etwa zwanzig Textpassagen anhand ihrer Ähnlichkeit abzurufen und anschließend neu zu ordnen, um nur einige davon zu behalten, ist eine der kostengünstigsten Verbesserungen einer RAG-Pipeline. Der Leitfaden zum Reranker erläutert die Einrichtung im Detail; messen Sie den Zugewinn anhand Ihrer zwanzig Fragen, bevor Sie den Reranker beibehalten, denn er verursacht bei jeder Anfrage zusätzliche Latenz, erfordert die Pflege eines zweiten Modells und erhöht den Speicherverbrauch.
Bevor Sie überhaupt Modelle vergleichen, sollten Sie sich ansehen, was Ihr Korpus enthält: kurze, in sich geschlossene Sätze oder lange technische Absätze? Fragen, die als Stichwörter formuliert sind, oder vollständige Sätze? Die Antwort hilft Ihnen bei der Wahl der Längenbegrenzung, der Textaufteilung und des Modells. Ein Korpus mit dichten juristischen Texten erfordert andere Einstellungen als eine Sammlung kurzer Fragen und Antworten, und keine öffentliche Rangliste kann das für Sie beurteilen.
#Die Modellwahl vor dem Indexieren beurteilen
- 01Zwanzig echte Fragen formulierenWählen Sie Fragen, die Ihre Nutzer stellen werden, formuliert mit deren Worten und nicht mit denen des Dokuments.
- 02Die erwartete Textstelle notierenIdentifizieren Sie für jede Frage die Passage oder die Passagen, die die Antwort enthalten.
- 03Zwei oder drei Modelle vergleichenCodieren Sie dasselbe Korpus mit jedem Modell und überprüfen Sie, ob die richtige Textpassage unter den ersten fünf Ergebnissen erscheint.
- 04Bei jeder Änderung erneut ausführenModell, Aufteilung in Textabschnitte oder Präfix geändert: Führen Sie diesen kleinen Test erneut aus, bevor Sie neu indexieren.
#FAQ
Ist eine GPU für Sentence Transformers erforderlich?+
Welches Sentence Transformers-Modell für Französisch wählen?+
Kann man sein Gesprächsmodell zum Erstellen von Embeddings verwenden?+
Was passiert, wenn ich das Embedding-Modell wechsle?+
Was passiert, wenn mein Text die maximale Länge überschreitet?+
Sentence Transformers oder Ollama für die Embeddings?+
#Weiterführende Informationen
- Die besten Embedding-Modelle für Französisch
- BGE-M3: Embeddings, die wirklich Französisch sprechen
- Einen Reranker in die Pipeline integrieren
- Chunking-Strategien
- Qdrant: Die Vektordatenbank für ein lokales RAG
- Lokales RAG: Einführung
- Quelle: Sentence Transformers, Schnellstart
- Quelle: Sentence Transformers, Berechnung von Embeddings
- Quelle: Sentence Transformers, vortrainierte Modelle
- Quelle: Ollama, Embeddings
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.