[{"data":1,"prerenderedAt":745},["ShallowReactive",2],{"blog-embedding-fine-tuning-domain-de":3},{"slug":4,"published":5,"updated":6,"minutes":7,"category":8,"tags":9,"keywords":15,"about":26,"sources":36,"cover":73,"og":74,"expertise":75,"locales":76,"lang":78,"title":80,"description":81,"coverAlt":82,"metaTitle":83,"takeaways":84,"faq":90,"toc":106,"blocks":140,"others":498},"embedding-fine-tuning-domain","2026-09-28","2026-10-17",8,"rag",[10,11,12,13,14],"Embeddings","Fine-tuning","RAG","Evaluation","Sentence Transformers",[16,17,18,19,20,21,22,23,24,25],"fine-tuning embedding models","domain adaptation embeddings","hard negative mining retrieval","MultipleNegativesRankingLoss","GISTEmbed vs MNRL","Matryoshka embedding dimensions","Qwen3-Embedding fine-tune","BGE-M3 vs EmbeddingGemma","embedding evaluation recall@k","catastrophic forgetting dense retrieval",[27,30,33],{"name":28,"url":29},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":31,"url":32},"Fine-tuning (deep learning)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFine-tuning_%28deep_learning%29",{"name":34,"url":35},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",[37,40,43,46,49,52,55,58,61,64,67,70],{"title":38,"url":39},"Sentence Transformers: training overview","https:\u002F\u002Fsbert.net\u002Fdocs\u002Fsentence_transformer\u002Ftraining_overview.html",{"title":41,"url":42},"Sentence Transformers: loss overview","https:\u002F\u002Fsbert.net\u002Fdocs\u002Fsentence_transformer\u002Floss_overview.html",{"title":44,"url":45},"Sentence Transformers: hard negative mining","https:\u002F\u002Fsbert.net\u002Fdocs\u002Fpackage_reference\u002Futil\u002Fhard_negatives.html",{"title":47,"url":48},"RocketQA (arXiv 2010.08191)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2010.08191",{"title":50,"url":51},"InPars (arXiv 2202.05144)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2202.05144",{"title":53,"url":54},"Promptagator (arXiv 2209.11755)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2209.11755",{"title":56,"url":57},"Qwen blog: Qwen3-Embedding (Jun 2025)","https:\u002F\u002Fqwenlm.github.io\u002Fblog\u002Fqwen3-embedding\u002F",{"title":59,"url":60},"BAAI\u002Fbge-m3 model card","https:\u002F\u002Fhuggingface.co\u002FBAAI\u002Fbge-m3",{"title":62,"url":63},"Google: EmbeddingGemma docs (Oct 2026)","https:\u002F\u002Fai.google.dev\u002Fgemma\u002Fdocs\u002Fembeddinggemma",{"title":65,"url":66},"Sentence Transformers: Matryoshka embeddings","https:\u002F\u002Fsbert.net\u002Fexamples\u002Fsentence_transformer\u002Ftraining\u002Fmatryoshka\u002FREADME.html",{"title":68,"url":69},"MMTEB (arXiv 2502.13595)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":71,"url":72},"ANCE-Tele (arXiv 2210.17167)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2210.17167","\u002Fimages\u002Fblog\u002Fembedding-fine-tuning-domain\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-fine-tuning-domain\u002Fog.jpg","ai-engineer",[77,78,79],"en","de","hu","Embedding-Modelle für die eigene Domäne feintunen: Hard Negatives, Losses und Evals","Embeddings für eine Domäne feintunen: wann es einen Reranker schlägt, Trainingspaare, Hard Negatives, Losses in sentence-transformers v6, Matryoshka und Kosten.","Lose Punkte links werden nach dem Training zu dichten Gruppen rechts.","Embedding-Modelle feintunen · Balázs Csorba",[85,86,87,88,89],"Feintunen Sie den Retriever, wenn das richtige Dokument gar nicht gefunden wird; ergänzen Sie einen Reranker, wenn es gefunden, aber zu tief eingeordnet wird. Viele Teams brauchen zuerst den Reranker.","Trainingspaare können aus Logs, Tickets oder LLM-generierten Anfragen stammen; InPars und Promptagator zeigen, dass synthetische Anfragen funktionieren, wenn sie gefiltert werden, und der Testsplit muss nach Dokument erfolgen, nicht nach Paar.","Hard Negatives liefern das stärkste Signal und die schlimmsten Fehler: Minen Sie sie mit einem festen Modell, halten Sie ein Margenband ein und bewerten Sie mit einem Cross-Encoder nach, um falsche Negative zu entfernen.","Beginnen Sie in sentence-transformers v6 mit MultipleNegativesRankingLoss oder der gecachten Variante, probieren Sie GISTEmbed, wenn falsche Negative stören, und umhüllen Sie den Loss mit MatryoshkaLoss, wenn Sie kleinere Dimensionen ausliefern.","Messen Sie Recall@k und nDCG vorher und nachher auf einem eingefrorenen eigenen Anfrageset, prüfen Sie fremden Verkehr auf Vergessen und rechnen Sie damit, dass ein kleines, schnell iteriertes Modell einen teuren großen Lauf schlägt.",[91,94,97,100,103],{"q":92,"a":93},"Wann sollte man ein Embedding-Modell feintunen statt einen Reranker zu ergänzen?","Feintunen Sie, wenn das relevante Dokument gar nicht unter den gefundenen Kandidaten ist, was meist bedeutet, dass die Ähnlichkeitsvorstellung des Basismodells nicht zu Ihrer Domäne passt. Wird das richtige Dokument gefunden, aber zu tief eingeordnet, ist ein Cross-Encoder-Reranker günstiger und oft ausreichend. Messen Sie vor jedem Training, welcher Fall vorliegt.",{"q":95,"a":96},"Woher bekommt man Trainingsdaten für das Feintuning von Embeddings?","Nutzen Sie echte Anfrage-Dokument-Paare aus Suchprotokollen oder Support-Tickets, wo vorhanden, und erzeugen Sie sonst pro Chunk Anfragen mit einem LLM, wobei Sie unbeantwortbare und doppelte herausfiltern. Teilen Sie Training, Validierung und Test nach Dokument oder Anfrage-Cluster, damit das Testset nicht leckt.",{"q":98,"a":99},"Was sind Hard Negatives und warum sind sie wichtig?","Hard Negatives sind Dokumente, die der Anfrage ähneln, sie aber nicht beantworten. Sie lehren das Modell feine Unterschiede, was In-Batch-Negative allein nicht schaffen. Das Risiko sind falsche Negative, also Dokumente, die die Anfrage doch beantworten, aber nicht gelabelt sind; minen Sie daher mit einer Marge und bewerten Sie mit einem Cross-Encoder nach.",{"q":101,"a":102},"Welchen Loss sollte man in sentence-transformers nutzen?","Für Anfrage-Dokument-Paare beginnen Sie mit MultipleNegativesRankingLoss und einem Batch-Sampler ohne Duplikate. Nutzen Sie die gecachte Variante für größere effektive Batches bei begrenztem Speicher, GISTEmbedLoss bei häufigen falschen Negativen und MatryoshkaLoss als Hülle, wenn Sie gekürzte Embeddings ausliefern wollen.",{"q":104,"a":105},"Was kostet das Feintuning eines Embedding-Modells?","Stand Oktober 2026 kostet eine A100 80GB bei gängigen GPU-Clouds etwa $1,79 bis $2,79 pro Stunde. Nach dieser Rechnung kostet ein sechsstündiger Lauf etwa $11 bis $17 und ein 24-stündiger LoRA-Lauf auf einem 7B- bis 8B-Modell etwa $43 bis $67; kleine Modelle trainieren meist kürzer.",[107,110,113,116,119,122,125,128,131,134,137],{"id":108,"title":109},"when-fine-tuning-beats-a-reranker","Wann Feintuning einen Reranker schlägt",{"id":111,"title":112},"where-training-pairs-come-from","Woher die Trainingspaare kommen",{"id":114,"title":115},"hard-negatives","Hard Negatives",{"id":117,"title":118},"losses-in-sentence-transformers-v6","Den Loss in sentence-transformers v6 wählen",{"id":120,"title":121},"base-models-worth-adapting-2026","Basismodelle, die sich 2026 zum Anpassen lohnen",{"id":123,"title":124},"matryoshka-and-dimension-reduction","Matryoshka: einmal trainieren, kleiner ausliefern",{"id":126,"title":127},"evaluation-that-predicts-production","Evaluierung, die die Produktion vorhersagt",{"id":129,"title":130},"cost-and-gpu-hours","Kosten in GPU-Stunden",{"id":132,"title":133},"pitfalls-forgetting-and-languages","Fallen: Vergessen und Sprachen",{"id":135,"title":136},"checklist","Eine Checkliste, bevor Sie den Index tauschen",{"id":138,"title":139},"sources","Quellen",[141,149,158,161,168,174,185,186,197,201,204,207,208,214,233,239,240,249,314,332,334,335,348,355,356,368,371,372,378,389,390,403,406,407,419,431,432,451,459,460],{"type":142,"content":143},"paragraph",[144,148],{"tag":145,"children":146},"strong",[147],"Ein Embedding-Modell feintunen"," heißt, einen allgemeinen Retriever mit Anfrage-Dokument-Paaren aus der eigenen Domäne zu trainieren, damit die Fragen Ihrer Nutzer nahe bei den Dokumenten landen, die sie beantworten. Das lohnt sich, wenn die Ähnlichkeitsvorstellung des Basismodells nicht zu Ihrer passt: Produktcodes, die sich ähneln, aber Verschiedenes bedeuten, regulatorische Sprache, interner Fachjargon. Es lohnt sich nicht, wenn das richtige Dokument bereits gefunden und nur zu tief eingeordnet wird, denn das behebt ein Reranker günstiger.",{"type":142,"content":150},[151,152,157],"Dieser Artikel behandelt die Trainingsschleife statt der Modellauswahl: die Entscheidung zwischen Feintuning und Reranking, die Herkunft der Trainingspaare, Hard Negatives, Losses in sentence-transformers v6, Basismodelle, die sich Stand Oktober 2026 zum Anpassen eignen, Matryoshka-Dimensionen, Evaluierung, die die Produktion vorhersagt, GPU-Kosten und die Fehlerbilder. Die Wahl des Basismodells selbst behandelt ",{"tag":153,"to":154,"children":155},"link","\u002Fblog\u002Fembedding-model-selection-2026",[156],"die Auswahl von Embedding-Modellen",".",{"type":159,"level":160,"id":108,"text":109},"heading",2,{"type":142,"content":162},[163,164,167],"Feintuning schlägt einen Reranker, wenn der Fehler in der Suche liegt und nicht in der Rangfolge. Die Dokumentation von sentence-transformers begründet das schlicht: Feintuning „verbessert die Leistung des Modells für Ihren Anwendungsfall oft deutlich, weil jede Aufgabe eine andere Vorstellung von Ähnlichkeit braucht“ (",{"tag":165,"href":39,"children":166},"a",[14],"). Ein Reranker liest Anfrage und Dokument gemeinsam und ist pro Paar genauer, kann aber nur umordnen, was die erste Stufe gefunden hat. Steht die Antwort nicht in den Top 50, rettet sie kein Reranker.",{"type":169,"src":170,"alt":171,"wide":172,"caption":173},"image","\u002Fimages\u002Fblog\u002Fembedding-fine-tuning-domain\u002Fdiagram-4.webp","Feintunen oder reranken: die Entscheidung Drei Zeilen. Erstens: Haben Sie ein Relevanzsignal von Anfrage zu Dokument aus Logs, Tickets oder generierten Anfragen? Wenn nicht, beginnen Sie mit hybrider Suche und einem Reranker. Zweitens: Ist das richtige Dokument in den Top 50, aber zu tief eingeordnet? Dann ergänzen Sie einen Reranker. Drittens: Wird das richtige Dokument gar nicht gefunden? Dann feintunen Sie den Retriever und liefern ihn erst aus, wenn das Evaluierungstor auf einem eingefrorenen Anfrageset bestanden ist.",true,"Messen Sie zuerst, wo das richtige Dokument landet; nur ein Fehltreffer in der Suche rechtfertigt das Training des Retrievers.",{"type":142,"content":175},[176,177,180,181,157],"In der Praxis kombiniert man beides. Die Modellkarte von BGE-M3 empfiehlt selbst hybride Suche mit anschließendem Cross-Encoder-Reranker (",{"tag":165,"href":60,"children":178},[179],"BGE-M3","), und ein feingetunter Retriever mit Reranker darüber ist der übliche Endzustand. Für die Kosten zählt die Reihenfolge: zuerst den Reranker ergänzen, messen, was noch fehlt, und nur trainieren, wenn Fehltreffer in der Suche bleiben. Wie sich Reranker vergleichen, steht in ",{"tag":153,"to":182,"children":183},"\u002Fblog\u002Freranking-models-compared",[184],"Cross-Encoder-Reranker im Vergleich",{"type":159,"level":160,"id":111,"text":112},{"type":142,"content":187},[188,189,192,193,196],"Die besten Paare sind echte: eine Suchanfrage und das Dokument, das der Nutzer geöffnet und behalten hat, ein Support-Ticket und der Artikel, der es gelöst hat. Wo es die nicht gibt, erzeugt man sie. InPars nutzt Few-Shot-Prompts an ein LLM, um pro Dokument Anfragen zu erzeugen, und meldet, dass nur damit feingetunte Retriever BM25 übertreffen (",{"tag":165,"href":51,"children":190},[191],"InPars","); Promptagator erzeugt aufgabenspezifische Anfragen aus einer kurzen Aufgabenbeschreibung und höchstens acht Beispielen und meldet Dual-Encoder, die ein auf MS MARCO trainiertes ColBERT v2 über 11 Datensätze im Schnitt um mehr als 1,2 nDCG schlagen (",{"tag":165,"href":54,"children":194},[195],"Promptagator",").",{"type":169,"src":198,"alt":199,"wide":172,"caption":200},"\u002Fimages\u002Fblog\u002Fembedding-fine-tuning-domain\u002Fdiagram-8.webp","Trainingsdaten zusammenstellen Fünf Schritte von links nach rechts: Korpus-Chunks; ein LLM erzeugt Anfragen pro Chunk; Filter entfernen unbeantwortbare, doppelte und anderssprachige Anfragen; Hard Negatives werden mit einem festen Modell innerhalb eines Margenbands gemint und von einem Cross-Encoder nachbewertet; und die Paare werden nach Dokument in Training, Validierung und Test geteilt.","Jeder Filter entfernt Rauschen, das das Modell sonst lernen würde; die Teilung nach Dokument hält den Test ehrlich.",{"type":142,"content":202},[203],"Synthetische Daten funktionieren erst nach dem Filtern. Entfernen Sie Anfragen, die der Chunk nicht beantworten kann, Beinahe-Dubletten, Anfragen in der falschen Sprache und Fragen, die ganze Phrasen aus dem Chunk kopieren, denn die bringen dem Modell bei, Oberflächenwörter statt Bedeutung abzugleichen. Keine veröffentlichte Zahl sagt, wie viele Paare man braucht; in der Praxis sind einige tausend saubere Paare pro Domäne ein üblicher Startpunkt, und Qualität schlägt Menge.",{"type":142,"content":205},[206],"Teilen Sie Training, Validierung und Test nach Dokument oder Anfrage-Cluster, nie nach Paar. Landen zwei generierte Anfragen zum selben Chunk auf beiden Seiten der Teilung, misst der Test Auswendiglernen. Frieren Sie das Testset vor dem ersten Experiment ein und schauen Sie beim Tuning nicht hinein; dafür ist das Validierungsset da.",{"type":159,"level":160,"id":114,"text":115},{"type":142,"content":209},[210,211,196],"Kontrastive Losses wie MultipleNegativesRankingLoss behandeln jedes andere Positiv im Batch als Negativ. Diese In-Batch-Negative sind meist leicht, das Modell lernt grobe Unterschiede also schnell und feine langsam. Hard Negatives, Dokumente, die relevant aussehen, es aber nicht sind, tragen das stärkste Signal. RocketQA baute das Rezept, das die meisten Feintunings noch heute übernehmen, mit Cross-Batch-Negativen und entrauschten Hard Negatives, weil ungelabelte Positive sonst das Training vergiften (",{"tag":165,"href":48,"children":212},[213],"RocketQA",{"type":142,"content":215},[216,217,221,222,225,226,229,230,232],"sentence-transformers bringt das Werkzeug inzwischen mit. ",{"tag":218,"children":219},"code",[220],"mine_hard_negatives()"," bettet Ihre Paare ein, findet zu jeder Anfrage die nächsten Dokumente, kann Kandidaten mit einem Cross-Encoder nachbewerten und zieht Negative innerhalb eines Bands, das ",{"tag":218,"children":223},[224],"range_min",", ",{"tag":218,"children":227},[228],"range_max"," und eine absolute oder relative Marge festlegen (",{"tag":165,"href":45,"children":231},[115],"). Überspringen Sie die obersten Treffer, denn das sind die wahrscheinlichsten falschen Negative, und halten Sie eine Marge unter dem Wert des Positivs. Minen Sie mit einer festen Kopie des Basismodells, nicht mit dem Modell, das Sie trainieren, sonst verschieben sich die Negative unter Ihnen.",{"type":142,"content":234},[235,236,238],"Eine nützliche Plausibilitätsprüfung nach dem Minen ist, zwanzig zufällige Tripel von Hand zu lesen. Beantworten mehrere Negative die Anfrage tatsächlich, erhöhen Sie ",{"tag":218,"children":237},[224]," oder verschärfen die Marge; sind die Negative offensichtlich unzusammenhängend, sind sie zu leicht und das Band zu breit. Zehn Minuten Lesen sparen hier einen Trainingslauf, der dem Modell die falsche Grenze beibringt.",{"type":159,"level":160,"id":117,"text":118},{"type":142,"content":241},[242,243,246,247,196],"Für Anfrage-Dokument-Paare sind die dokumentierten Optionen MultipleNegativesRankingLoss, seine gecachte Variante, MegaBatchMarginLoss und die beiden GISTEmbed-Losses; MatryoshkaLoss, Matryoshka2dLoss und AdaptiveLayerLoss umhüllen jeden davon (",{"tag":165,"href":42,"children":244},[245],"Loss-Übersicht","). Das eigene Beispiel der Trainingsübersicht nutzt eine Epoche, Batchgröße 16, Lernrate 2e-5 und einen Batch-Sampler ohne Duplikate, weil In-Batch-Negative-Losses leiden, wenn ein Batch denselben Text zweimal enthält (",{"tag":165,"href":39,"children":248},[14],{"type":250,"head":251,"rows":262},"table",[252,254,256,258,260],[253],"Loss",[255],"Eingaben",[257],"Braucht",[259],"Wann nutzen",[261],"Falle",[263,273,283,293,303],[264,265,267,269,271],[19],[266],"Paare oder Tripel",[268],"große Batches helfen",[270],"Standard-Startpunkt",[272],"Duplikate im Batch werden falsche Negative",[274,276,277,279,281],[275],"CachedMultipleNegativesRankingLoss",[266],[278],"Gradient Caching",[280],"großer effektiver Batch auf kleiner GPU",[282],"etwas langsamer; nicht mit Matryoshka2d",[284,286,287,289,291],[285],"GISTEmbedLoss",[266],[288],"ein Guide-Modell",[290],"viele falsche Negative",[292],"Trainingsaufwand",[294,296,297,299,301],[295],"CachedGISTEmbedLoss",[266],[298],"Guide-Modell, Caching",[300],"GIST mit großen Batches",[302],"mini_batch_size an Speicher anpassen",[304,306,308,310,312],[305],"MatryoshkaLoss",[307],"umhüllt einen Loss",[309],"Liste von Dimensionen",[311],"gekürzte Vektoren ausliefern",[313],"jede ausgelieferte Dimension prüfen",{"type":142,"content":315},[316,317,321,322,326,327,331],"CachedMultipleNegativesRankingLoss nutzt Gradient Caching, um deutlich größere Batches ohne zusätzlichen Speicher zu erreichen, bei geringem Geschwindigkeitsverlust (",{"tag":165,"href":318,"children":319},"https:\u002F\u002Fsbert.net\u002Fdocs\u002Fpackage_reference\u002Fsentence_transformer\u002Flosses.html",[320],"Losses","), auf Basis der GradCache-Technik (",{"tag":165,"href":323,"children":324},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2101.06983",[325],"GradCache","). GISTEmbedLoss nimmt ein Guide-Modell und verwirft damit In-Batch-Negative, die der Guide als zu ähnlich zum Positiv einstuft, was falsche Negative direkt angeht (",{"tag":165,"href":328,"children":329},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2402.16829",[330],"GISTEmbed","). Eine Einschränkung sollte man kennen: Matryoshka2dLoss kann die gecachten, hook-basierten Losses nicht umhüllen.",{"type":218,"code":333},"# Sketch for sentence-transformers v6: mine negatives with a fixed model, train with a cached loss\nfrom sentence_transformers import SentenceTransformer, SentenceTransformerTrainer, SentenceTransformerTrainingArguments\nfrom sentence_transformers.cross_encoder import CrossEncoder\nfrom sentence_transformers.sentence_transformer.losses import CachedMultipleNegativesRankingLoss, MatryoshkaLoss\nfrom sentence_transformers.util import mine_hard_negatives\n\nbase = SentenceTransformer(\"BAAI\u002Fbge-m3\")\nminer = SentenceTransformer(\"BAAI\u002Fbge-m3\")             # fixed copy, never the model being trained\ntrain = mine_hard_negatives(\n    pairs_train, miner, cross_encoder=CrossEncoder(\"BAAI\u002Fbge-reranker-v2-m3\"),\n    range_min=10, range_max=50, relative_margin=0.05, num_negatives=3, output_format=\"triplet\",\n)\n\nloss = MatryoshkaLoss(base, CachedMultipleNegativesRankingLoss(base, mini_batch_size=32),\n                      matryoshka_dims=[1024, 512, 256])\nargs = SentenceTransformerTrainingArguments(\n    output_dir=\"out\u002Fbge-m3-domain\", num_train_epochs=1, per_device_train_batch_size=128,\n    learning_rate=2e-5, warmup_ratio=0.1, bf16=True, batch_sampler=\"no_duplicates\",\n)\nSentenceTransformerTrainer(model=base, args=args, train_dataset=train, loss=loss).train()",{"type":159,"level":160,"id":120,"text":121},{"type":142,"content":336},[337,338,340,341,344,345,196],"Stand Oktober 2026 decken drei offene Familien die meisten Bedürfnisse ab. BGE-M3 steht unter MIT-Lizenz, beherrscht dichte, spärliche und Multi-Vektor-Suche aus einem Modell, verarbeitet Eingaben mit 8.192 Tokens und deckt mehr als 100 Sprachen ab (",{"tag":165,"href":60,"children":339},[179],"). Qwen3-Embedding gibt es in 0.6B, 4B und 8B unter Apache-2.0, mit 32K Kontext, instruktionsabhängigen Eingaben und Matryoshka-Dimensionen; sein eigenes Training nutzte LoRA und eine dreistufige Pipeline, in der das LLM auch Trainingsdaten erzeugte (",{"tag":165,"href":57,"children":342},[343],"Qwen","). EmbeddingGemma 2 ist ein multimodales 740M-Modell mit Matryoshka-Kürzung von 768 bis 128 Dimensionen und Apache-2.0-Gewichten (",{"tag":165,"href":63,"children":346},[347],"Google",{"type":142,"content":349},[350,351,354],"Kleiner gewinnt meist die erste Runde. Ein 0.6B-Modell trainiert in Stunden auf einer GPU, Sie können also zehn Experimente zu Daten und Negativen in der Zeit eines 8B-Laufs fahren, und der Großteil des Gewinns kommt aus der Datenqualität, nicht aus den Parametern. Das MMTEB-Paper meldete multilingual-e5-large-instruct mit 560M Parametern als bestes öffentlich verfügbares Modell auf seinem mehrsprachigen Benchmark (",{"tag":165,"href":69,"children":352},[353],"MMTEB","); das ist eine Aussage über den Stand des Papers, zeigt aber, wie weit ein mittelgroßes Modell kommt.",{"type":159,"level":160,"id":123,"text":124},{"type":142,"content":357},[358,359,362,363,367],"MatryoshkaLoss wendet den Basis-Loss auf gekürzte Ausschnitte des Embeddings an, sodass die ersten 512, 256 oder 128 Dimensionen für sich nützlich bleiben. Im eigenen Experiment der Bibliothek behielt ein mit Matryoshka trainiertes Modell 98,37 Prozent seiner vollen Leistung bei 8,3 Prozent der Embedding-Größe, gegenüber 96,46 Prozent bei einem Standardmodell (",{"tag":165,"href":66,"children":360},[361],"Matryoshka","). Das zählt beim Ausliefern, wo kleinere Vektoren weniger Speicher und schnellere Suche bedeuten; Quantisierung und Kürzung lassen sich kombinieren, wie in ",{"tag":153,"to":364,"children":365},"\u002Fblog\u002Fembedding-quantization-binary-matryoshka",[366],"Embedding-Quantisierung mit Binär- und Matryoshka-Verfahren"," beschrieben.",{"type":142,"content":369},[370],"Der Vorbehalt ist die Evaluierung: Matryoshka zahlt sich nur aus, wenn der ausgelieferte Ausschnitt der gemessene ist. Messen Sie Recall bei jeder Dimension, die Sie ausliefern wollen, nicht nur bei voller Größe.",{"type":159,"level":160,"id":126,"text":127},{"type":142,"content":373},[374,375,377],"Messen Sie Recall@k, nDCG@10 und MRR auf Ihrem eingefrorenen Testset vor und nach dem Training, bei dem k, das Sie tatsächlich abrufen. Öffentliche Benchmarks sind hier per Design ein schwacher Ersatz: MMTEB umfasst mehr als 500 Aufgaben in mehr als 250 Sprachen, und sein englischer Benchmark ist als Zero-Shot gedacht und schließt Datensätze wie MS MARCO aus, die üblicherweise zum Feintuning dienen (",{"tag":165,"href":69,"children":376},[353],"). Ein Feintuning kann Ihren Domänenwert heben und gleichzeitig einen Ranglistenwert senken, und nur der erste zählt.",{"type":142,"content":379},[380,381,384,385,157],"Führen Sie danach die vollständige RAG-Evaluierung erneut aus, nicht nur die Suche, denn besserer Recall kann trotzdem schlechtere Antworten liefern, wenn die neuen Top-Chunks länger oder verrauschter sind. Behandeln Sie den Vergleich als Entscheidung mit Konfidenz: In meinem Skill ",{"tag":218,"children":382},[383],"jev-decide"," geht eine Entscheidung mit niedriger Konfidenz an einen Menschen, statt angewendet zu werden, und ein Feintuning, das um weniger als das Rauschen des Validierungssets gewinnt, gehört in diese Kategorie. Wie man Evaluierungsdaten für ganze Antworten erzeugt, steht in ",{"tag":153,"to":386,"children":387},"\u002Fblog\u002Fsynthetic-test-data-rag-evals",[388],"synthetischen Testdaten für RAG-Evals",{"type":159,"level":160,"id":129,"text":130},{"type":142,"content":391},[392,393,397,398,402],"Die Rechnung ist kurz. Stand Oktober 2026 kostet eine A100 80GB on demand etwa $1,79 pro Stunde bei RunPod (",{"tag":165,"href":394,"children":395},"https:\u002F\u002Fwww.runpod.io\u002Fpricing",[396],"RunPod",") und $2,79 bei Lambda (",{"tag":165,"href":399,"children":400},"https:\u002F\u002Flambda.ai\u002Fpricing",[401],"Lambda","). Ein sechsstündiger Lauf auf einer Karte kostet also etwa $11 bis $17 und ein 24-stündiger LoRA-Lauf auf einem 7B- bis 8B-Modell etwa $43 bis $67; das sind Schätzungen aus den Stundenpreisen, keine Benchmarks. Kleine Modelle passen für ein volles Feintuning auf eine Karte; 7B- bis 8B-Modelle brauchen meist LoRA und Gradient Caching.",{"type":142,"content":404},[405],"Teuer ist nicht die GPU, sondern die Iterationsschleife. Drei Tage schneller Läufe auf einem 0.5B-Modell, bei denen jeweils eine Sache an Daten oder Negativen geändert wird, schlagen meist einen heroischen Lauf auf einem 8B-Modell, den Sie sich nicht wiederholt leisten können.",{"type":159,"level":160,"id":132,"text":133},{"type":142,"content":408},[409,410,413,414,418],"Katastrophales Vergessen ist in der dichten Suche dokumentiert, nicht hypothetisch. ANCE-Tele führte Instabilität in iterativen Schleifen aus Minen und Trainieren darauf zurück, dass Modelle verschiedene Gruppen von Negativen lernen und wieder vergessen (",{"tag":165,"href":72,"children":411},[412],"ANCE-Tele","), und eine Studie von 2025 fand, dass auf zeitbezogene Anfragen abgestimmte Systeme bei gewöhnlichen Anfragen an Genauigkeit verlieren (",{"tag":165,"href":415,"children":416},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2507.06782",[417],"temporales IR","). Halten Sie die Lernrate niedrig, trainieren Sie zuerst eine Epoche, mischen Sie einige allgemeine Paare wieder hinein und testen Sie eine Stichprobe fremder Anfragen neben Ihrem Domänenset.",{"type":420,"variant":421,"title":422,"body":423},"callout","warn","Bauen Sie pro Sprache ein eigenes Evaluierungsset",[424],[425,426,430],"Sprachabdeckungsangaben sind breiter als die Benchmark-Abdeckung. MTEBs Retrieval-Reihe enthält deutsche Sets wie GermanDPR, Ungarisch ist dagegen nur mit wenigen beigesteuerten Aufgaben vertreten (",{"tag":165,"href":427,"children":428},"https:\u002F\u002Fembeddings-benchmark.github.io\u002Fmteb\u002Foverview\u002Favailable_tasks\u002Fretrieval\u002F",[429],"MTEB","). Fragen Ihre Nutzer auf Deutsch und Ungarisch, wie auf meiner eigenen Seite, die ich mit einer LLM-Pipeline übersetzt habe, erzeugen und bewerten Sie Testanfragen in jeder Sprache selbst.",{"type":159,"level":160,"id":135,"text":136},{"type":433,"ordered":172,"items":434},"list",[435,437,439,441,443,445,447,449],[436],"Eine Baseline einfrieren und Recall@k, nDCG@10 und MRR auf einem eingefrorenen Testset festhalten.",[438],"Bestätigen, dass es ein Fehltreffer der Suche ist und kein Rangproblem, das ein Reranker löst.",[440],"Gefilterte Paare pro Sprache bauen und nach Dokument teilen.",[442],"Negative mit festem Modell und Cross-Encoder-Filter minen.",[444],"Mit MNRL oder der gecachten Variante, 2e-5 und einer Epoche beginnen.",[446],"Jede geplante Matryoshka-Dimension evaluieren.",[448],"Fremde Anfragen auf Vergessen prüfen, dann die volle RAG-Evaluierung wiederholen.",[450],"Korpus neu einbetten und den Index erst tauschen, wenn alles oben bestanden ist.",{"type":142,"content":452},[453,454,458],"Wenn Ihre Suche fachspezifische Fragen verfehlt und Sie wissen wollen, ob Feintuning oder ein Reranker die günstigere Lösung ist, sehen Sie sich meine ",{"tag":153,"to":455,"children":456},"\u002Fexpertise\u002Fai-engineer",[457],"KI-Engineering-Arbeit"," an.",{"type":159,"level":160,"id":138,"text":139},{"type":433,"ordered":172,"items":461},[462,465,468,471,474,477,480,483,486,489,492,495],[463],{"tag":165,"href":39,"children":464},[38],[466],{"tag":165,"href":42,"children":467},[41],[469],{"tag":165,"href":45,"children":470},[44],[472],{"tag":165,"href":48,"children":473},[47],[475],{"tag":165,"href":51,"children":476},[50],[478],{"tag":165,"href":54,"children":479},[53],[481],{"tag":165,"href":57,"children":482},[56],[484],{"tag":165,"href":60,"children":485},[59],[487],{"tag":165,"href":63,"children":488},[62],[490],{"tag":165,"href":66,"children":491},[65],[493],{"tag":165,"href":69,"children":494},[68],[496],{"tag":165,"href":72,"children":497},[71],[499,566,626,684],{"slug":500,"published":6,"minutes":501,"category":8,"tags":502,"keywords":505,"about":518,"sources":524,"cover":560,"og":561,"expertise":75,"locales":562,"lang":78,"title":563,"description":564,"coverAlt":565},"embedding-model-selection-2026",9,[10,12,429,503,504],"Vector search","Model selection",[506,507,508,509,510,511,512,513,514,515,516,517],"best embedding model 2026","how to choose an embedding model","embedding model comparison","MTEB leaderboard explained","RTEB benchmark","open source embedding model","multilingual embedding model","voyage-4 vs openai embeddings","Qwen3-Embedding","EmbeddingGemma","embedding model for RAG","switching embedding models re-embed",[519,520,521],{"name":28,"url":29},{"name":34,"url":35},{"name":522,"url":523},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[525,527,530,533,536,539,542,545,548,551,554,557],{"title":526,"url":69},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)",{"title":528,"url":529},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":531,"url":532},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":534,"url":535},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":537,"url":538},"Voyage AI: The Voyage 4 model family, shared embedding space with MoE architecture (Jan 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F01\u002F15\u002Fvoyage-4\u002F",{"title":540,"url":541},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":543,"url":544},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":546,"url":547},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":549,"url":550},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":552,"url":553},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":555,"url":556},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":558,"url":559},"Google Developers Blog: Introducing EmbeddingGemma (Sep 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fintroducing-embeddinggemma\u002F","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fog.jpg",[77,78,79],"Embedding-Modell wählen 2026: Leaderboards, Kosten und ein Vergleichstest mit eigenen Daten","Wie man 2026 ein Embedding-Modell für RAG wählt: was MTEB und RTEB aussagen, API oder offene Gewichte, Preise, Dimensionen und ein einwöchiger Vergleichstest.","Drei Säulen aus gestapelten Blöcken, die mittlere am höchsten, jede mit kurzem Balken und weiter Klammer.",{"slug":567,"published":6,"minutes":568,"category":8,"tags":569,"keywords":573,"about":585,"sources":595,"cover":620,"og":621,"expertise":75,"locales":622,"lang":78,"title":623,"description":624,"coverAlt":625},"contextual-retrieval-late-chunking",10,[12,570,10,571,572],"Chunking","Contextual retrieval","Late chunking",[574,575,576,577,578,579,580,581,582,583,584],"contextual retrieval","anthropic contextual retrieval","late chunking","contextual chunk embeddings","contextual embeddings rag","contextual bm25","chunk context rag","voyage-context-3","voyage-context-4","late chunking vs contextual retrieval","rag chunking context loss",[586,589,592],{"name":587,"url":588},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":590,"url":591},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":593,"url":594},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[596,599,602,605,608,611,614,617],{"title":597,"url":598},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":600,"url":601},"Günther et al.: Late Chunking, Contextual Chunk Embeddings Using Long-Context Embedding Models (2024, rev. 2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2409.04701",{"title":603,"url":604},"Jina AI: Late Chunking in Long-Context Embedding Models (Aug 2024)","https:\u002F\u002Fjina.ai\u002Fnews\u002Flate-chunking-in-long-context-embedding-models\u002F",{"title":606,"url":607},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":609,"url":610},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":612,"url":613},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":615,"url":616},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":618,"url":619},"Qu, Tu and Bao: Is Semantic Chunking Worth the Computational Cost? (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.13070","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fog.jpg",[77,78,79],"Contextual Retrieval und Late Chunking: RAG-Chunks ihren Kontext zurückgeben","Chunks verlieren ihr Dokument. Wie Contextual Retrieval, Late Chunking und kontextuelle Embeddings das beheben, was sie kosten, wann man verzichtet.","Vier lose Quadrate, unten von einer breiten Klammer gebündelt und je nach oben mit einer großen Fläche verbunden.",{"slug":627,"published":6,"minutes":501,"category":8,"tags":628,"keywords":632,"about":645,"sources":653,"cover":678,"og":679,"expertise":75,"locales":680,"lang":78,"title":681,"description":682,"coverAlt":683},"rag-access-control-permissions",[12,629,630,631,503],"Access control","Security","Multi-tenancy",[633,634,635,636,637,638,639,640,641,642,643,644],"rag access control","permission aware rag","document level security rag","rag multi tenancy","vector database access control","pgvector row level security","security trimming azure ai search","openfga rag authorization","qdrant multitenancy","pinecone namespaces multitenancy","owasp llm08 vector and embedding weaknesses","rag data leakage",[646,649,652],{"name":647,"url":648},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":650,"url":651},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":587,"url":588},[654,657,660,663,666,669,672,675],{"title":655,"url":656},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":658,"url":659},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":661,"url":662},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":664,"url":665},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":667,"url":668},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":670,"url":671},"Microsoft Learn: Document-level access control in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-document-level-access-overview",{"title":673,"url":674},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":676,"url":677},"Morris et al.: Text Embeddings Reveal (Almost) As Much As Text (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.06816","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fog.jpg",[77,78,79],"Zugriffskontrolle für RAG: berechtigungsbewusstes Retrieval ohne Datenlecks","Wie RAG-Assistenten Dokumente preisgeben und wie man das stoppt: ACLs an jedem Chunk, Vorfilter, Row-Level Security in pgvector, Rechte-Sync und Lecktests.","Sieben Karten in einer Reihe, sechs mit Schloss, eine leere Karte schickt einen Pfeil nach außen.",{"slug":685,"published":6,"minutes":568,"category":8,"tags":686,"keywords":691,"about":703,"sources":711,"cover":738,"og":739,"expertise":740,"locales":741,"lang":78,"title":742,"description":743,"coverAlt":744},"rag-product-catalog-pim-data",[12,687,688,689,690],"PIM","Product data","B2B e-commerce","Metadata filtering",[692,693,694,695,696,697,698,699,700,701,702],"rag product catalog","rag pim data","llm product data","product catalog chatbot","akeneo rag","pimcore ai search","rag structured data","metadata filtering rag","product attributes embeddings","b2b product assistant","etim classification ai",[704,707,708],{"name":705,"url":706},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":587,"url":588},{"name":709,"url":710},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[712,715,718,721,723,726,729,732,735],{"title":713,"url":714},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":716,"url":717},"Akeneo Help Center: What about products with variants?","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-take-the-power-over-your-products\u002Fserenity-what-about-products-with-variants",{"title":719,"url":720},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":722,"url":710},"ETIM International: Classification",{"title":724,"url":725},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":727,"url":728},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":730,"url":731},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":733,"url":734},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":736,"url":737},"Sui et al.: Table Meets LLM, can large language models understand structured table data? (WSDM 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.13062","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fog.jpg","b2b-ecommerce-developer",[77,78,79],"RAG über Produktkataloge: aus PIM-Daten Antworten machen, die halten","Produktdaten sind strukturiert, Chunking wie bei PDFs scheitert. So serialisiert man PIM-Attribute, leitet Spezifikationsfragen an Filter und bleibt exakt.","Ein Rahmen aus neun Feldern mit kleinen Symbolen, darunter ein Trichter zu einer einzelnen Karte.",1792342714748]