This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Deduplikation von Graphitic RAG Evidence Segmenten in klarRAG
Saturday, 17 January 2026
ANMERKUNG Dies ist nicht ein herkömmlicher Blog-Artikel. Technische Daten geschrieben für ein konkretes Merkmal in klarRAG. I iterativ füttern dieses Dokument, um Code-- fokussierte LLMs während der Entwicklung zur Vernunft über den Handel - , validieren Annahmen -, und konvergieren auf einer rationalen Implementierung
Dieses Dokument beschreibt ein Teilsystem von klarRAGEin Projekt, das I’®m aktiv entwickelt
Eine Kernanforderung von klarRAG ist die Fähigkeit zu extrahieren Beweisstücke ,, Absätze, Überschriften und Untertitel von , oder strukturierten Blöcken dedupliziert ohne das nützliche Signal zu zerstören.
klarRAG Arbeiten durch Analyse und Extraktion der am besten verfügbare Belege aus Dokumenten, ,-Bildern und strukturierten Daten im Gegensatz zu den meisten RAG-Implementierungen nicht LLM---generierte Zusammenfassungen als primäres Artefakt speichern..- In vielen Fällen erfordert die Einnahme von LLM überhaupt keine LLM, obwohl man verwenden kann, wenn eine Eskalation gerechtfertigt ist.
Stattdessen klarRAG wendet eine breite Palette von deterministischen und probabilistischen Techniken auf .
- Segmente für Kandidaten extrahieren
- ihren Informationswert bewerten
- und nur die stärksten Vertreter behalten
Deduplizieren ist ein kritischer Teil dieses Prozesses.
Einfache Stringgleichheit ist nicht genug Das gleiche Konzept wird häufig mit unterschiedlichen Formulierungen ausgedrückt.,. Struktur oder Modalität. .. Die Behandlung als deutlich führt zu redundanten Speicher und schlechtes nachgeschaltetes Verhalten.
Die Problemverbindungen zum Abrufzeitpunkt
Wenn Ergebnisse abgerufen werden, um ein LLM-Multiple Segmente, die alle drücken die gleiche zugrunde liegende Idee produziert stumpfe ,... repetitive Antworten...
Um dies zu adressieren klarRAG behandelt Deduplikation als Erste Zusammenstellungsproblem der --KlasseNicht ein Post- , -, HOC Filter, .,
Der Rest dieses Dokuments beschreibt, wie diese Deduplizierungsstrategie entworfen wurde. '-Agile-Spezifikationen angepasst an die Bedürfnisse von Code LLMS-.
Dies kristallisiert die unterschiedlichen Konzepte und zwingt das LLM, es zu dokumentieren.'s Gedankenprozesse Dies ist die erste Stufe der Gewährleistung des LLM baut das Richtige auf.
Siehe mehr über klarRAG Hier ist ..
Deduplikationsstrategie
klarRAG verwendet eine zweiphasige Deduplikationsstrategie, um redundante Inhalte zu beseitigen und gleichzeitig wichtige Signale zu erhalten. signal---Filter erhaltenNicht inhaltliche Normalisierung
Überblick
┌─────────────────────────────────────────────────────────────────────────────┐
│ INGESTION (Per Document) │
│ │
│ Document → Extract → Embed → DEDUPE (intra-doc) → Index to Vector Store │
│ │ │
│ ├─ Near-duplicates: boost salience │
│ └─ Exact duplicates: drop (no boost) │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ RETRIEVAL (Cross Document) │
│ │
│ Query → Search → Rank (RRF) → DEDUPE (cross-doc) → Top K → LLM Synthesis │
│ │ │
│ └─ Keep segment with highest RRF score │
└─────────────────────────────────────────────────────────────────────────────┘
Konstruktionsgarantien
Diese Invarianten werden durch das Deduplizierungssystem beibehalten.
Die Garantie wird von der zuständigen Behörde des Mitgliedstaats ausgestellt, in dem die Genehmigung erteilt wurde. |-----------|-------------| | Auftragsbestand Deduplizierung verändert nie die semantische Ordnung nach RRF-Ranking | Kein Begriffsverlust Deduplizierung entfernt nie alle Instanzen eines Konzepts | Einhaltung der Dokumentengrenze Deduplizierung überschreitet nie die Dokumentengrenzen bei der Einnahme. | Inhalt unveränderlich Deduplizieren verändert niemals Einbettungen oder Textinhalte nur Auswahl und Salience-Scores. | Deterministisch Bei identischen Eingängen und Konfigurationen erzeugt die Deduplizierung identische Ausgänge.
Nicht-MSK-Ziele
Dieses System tut es ausdrücklich nicht Versuch, dies zu tun
- Tatsachenwiderspruch erkennen Zwei Segmente sagen, dass entgegengesetzte Dinge nicht dedupliziert sind
- Die Wahrheit kanonisieren Wir wählen eine korrekte Version für alle Quellen
- Zusammenklappen von Paraphrasen über Dokumente bei der Einnahme Jedes Dokument behält seine eigenen Segmente
- Terminologie normalisieren ", " und ", Machine Learning, MSC4, in verschiedenen Lehrbüchern werden separat aufbewahrt.
- Auflösung des Unternehmens ersetzen Dass die GraphRAG®'s Arbeit auf einer anderen Ebene arbeitet
Determinismus - Reproduzierbarkeit
Deduplizieren ist vollständig deterministisch.
- Einbettungen sind unveränderlich einmal berechnet zur Extraktionszeit
- Sortierung ist stabil Segmente mit gleicher Salience erhalten ursprüngliche Ordnung
- Keine Zufälligkeit Keine Probenahmen keine ungefähren ANN , , keine probabilistischen Schwellenwerte
- Kein externer Zustand Dedup-Entscheidungen hängen nur vom aktuellen Segmentsatz ab
Warum das so wichtig ist Benutzer, die Retrieval-Ergebnisse debuggen können darauf vertrauen, dass das Re---Laufen mit den gleichen Eingängen die gleichen Ausgänge erzeugt. klarRAG''s breitere Fuzzi-Philosophie, die mit deterministischem Verhalten übereinstimmt
Warum zwei Phasen?
Phase der Verdauungsdeduplikation
Ziel Reduzieren Sie die Lagerung und verhindern Sie eine intra-Redundanz.
Problemstellung Dokumente enthalten oft wiederholte Inhalte
- Boilerplate text Kopfzeilen Fußzeilen Fusszeilen
- Copy---eingefügte Abschnitte
- Das gleiche Konzept erklärte mehrere Wege
Lösung Innerhalb jedes Dokuments vor der Indexierung deduplizieren
Schlüsselinformationen Nächstgelegene --Duplikate werden behandelt als unabhängige Nachweise von BedeutungWenn ein Autor erklärt, ein Konzept drei verschiedene Weisen, die Konzept wichtig sind, dass Konzept Wir erfassen dieses Signal durch Steigerung der Salience
Phasendeduplikation des Retrievals
Ziel Verhindern, dass die LLM redundante Informationen über Dokumente hinweg erhält
Problemstellung Beim Abfragen über mehrere Dokumente können ähnliche Absätze in verschiedenen Quellen erscheinen.Das LLM sollte die gleiche Information mehrmals beschreiben.
Lösung Nach RRF-Ranking, das semantische Ähnlichkeiten verbindet, ,, Schlüsselwortmatch,, Salience, und Frische),, deduplizieren alle Dokumente, die das höchste Segment der - sind..
Warum nach RRF-? Die RRF-Score stellt das beste ganzheitliche Maß für Relevanz dar, bevor die Rangfolge dieses Signal verlieren würde.
Warum sich Salience nur bei der Einnahme erhöht
Die Trennung ist beabsichtigt.
Was sie einfängt |-------|------------------| | Zunahme der Einnahme Autor betont, wie sehr das Dokument ein Konzept hervorhebt. | Rücklaufpunktzahl Fragerelevanz des Inhalts zur Benutzer-Intent
Das Mischen dieser beim Retrieval würde die Dokument-Intent mit der Benutzer-Intetion verwickeln. zu diesem DokumentNicht relevant zu dieser AbfrageDurch die Steigerung bei der Aufnahme ,,," bewahren wir den Autor, das Signal ohne Voreingenommenheit Abfrage-Ergebnisse ,MSC3"
Phase der Verdauungsdeduplikation
Standort
src/Mostlylucid.DocSummarizer.Core/Services/BertRagSummarizer.cs
Verfahren
DeduplicateSegments()
Algorithmus
1. Filter segments by minimum salience threshold (0.05)
2. Sort by salience score (highest first)
3. For each segment:
a. If no embedding → keep (can't compare)
b. Check cosine similarity against all selected segments
c. If similarity >= 0.90:
- If same ContentHash → exact duplicate, drop silently
- If different ContentHash → near-duplicate, boost kept segment's salience
d. If no match → add to selected list
4. Apply salience boosts: +15% per near-duplicate merged
5. Cap salience at 1.0 to prevent any single concept from dominating
Parameter
| Standardmäßiger Parameter des Parameters | . | ||
|---|---|---|---|
similarityThreshold Cosine Ähnlichkeit, über der Segmente als Duplikate gelten |
|||
salienceThreshold , |
, , 0.05 , | , Mindest-Salience zu berücksichtigen , ( Filter Rauschen ,) , | |
boostPerNearDuplicate , |
, , 0.15 , | , Salience Boost per near , - , duplicate fusioniert ,(+15%) , und | , |
Beispiele
Exaktes Duplizieren
Segment A: "Contact us at [email protected]" [hash: abc123]
Segment B: "Contact us at [email protected]" [hash: abc123] ← same hash
Result: Keep A, drop B, no boost (likely boilerplate)
Naheanliegendes --Duplikat
Segment A: "Machine learning models require training data" [hash: abc123]
Segment B: "ML systems need data for training" [hash: def456] ← different hash, 0.92 similarity
Segment C: "Training data is essential for ML" [hash: ghi789] ← different hash, 0.91 similarity
Result: Keep A with +30% salience boost (concept emphasized 3 ways)
Begründung für Schwellenwerte
- Ähnlichkeiten mit der : Basierend auf Forschungsergebnissen verwendet NVIDIA NeMo den Industriestandard für semantische Dedup.
- WICHTIGSTE ENTWICKLUNG Filter sehr niedrig .- , Wert Segmente unter Beibehaltung der meisten Inhalte
- 15%-Boost-Boost: Sinnvolles Signal ohne überempfundene Konzepte
Phasendeduplikation des Retrievals
Standort
src/LucidRAG.Core/Services/AgenticSearchService.cs
Verfahren
DeduplicateByEmbeddingPostRanking()
Algorithmus
1. Receive ranked results (already sorted by RRF or dense score)
2. For each segment (in score order):
a. If no embedding → keep
b. Check cosine similarity against all selected segments
c. If similarity >= 0.90 → skip (higher-scored duplicate already selected)
d. If no match → add to selected list
3. Return deduplicated list (maintains score ordering)
Parameter
| Standardmäßiger Parameter des Parameters | . |
|---|---|
similarityThreshold Cosine-Ähnlichkeitsschwelle für Kreuz---Doc-Dedup |
Warum Post---RRF-?
RRF RRF (-Reziprokaler Rang Fusion )- kombiniert vier Signale :-
- Dichte Punktzahl Semantische Ähnlichkeit zur Abfrage
- BM-25-Score Lexikalisches ,/"-Schlüsselwortspiel
- Salience Score-Wert Bedeutung innerhalb des Dokuments
- Frischheitspunktzahl Erhöhte Ruhezeiten
Deduplizieren von AFTER RRF bedeutet, dass wir das Segment behalten, das am besten mit der Abfrage über alle Dimensionen übereinstimmt.
Beispiel
Query: "How do I configure authentication?"
Results before dedup:
1. [Doc A] "Authentication is configured via config.yaml..." (RRF: 0.052)
2. [Doc B] "Configure auth using the config.yaml file..." (RRF: 0.048, similarity to #1: 0.93)
3. [Doc A] "Set the API key in environment variables..." (RRF: 0.041)
Results after dedup:
1. [Doc A] "Authentication is configured via config.yaml..." (RRF: 0.052)
2. [Doc A] "Set the API key in environment variables..." (RRF: 0.041)
Doc B's similar paragraph dropped - Doc A's version had higher RRF score.
Failure Modes Trade-Modalitäten
Bekannte Einschränkungen
| Fehler-Modus - Beschreibung - Milderung der | |
|---|---|
| Falsch positives Ergebnis gegenüber -, nach oben Zwei unterschiedliche, aber eng verwandte Konzepte können die Ähnlichkeit von 0.90 überschreiten. | |
| Falsch negatives Ergebnis Sehr kurze Segmente können schlecht einbetten.,. Fehlende semantische Ähnlichkeiten. | . |
| Einbettung von Drift Änderungen von Einbettungsmodellen entkräften dedup-Annahmen | |
| Auftragssensitivität Die Auswahl von Greedy bedeutet, dass das erste High-Segment des Segments -'salience gewinnt. |
Akzeptierter Handel, --offs
- Präzision über den Rückruf Wir ziehen es vor, gelegentlich in der Nähe zu halten.-.dupliziert über versehentliches Entfernen unterschiedlicher Inhalte
- Lagerung über Genauigkeit Wir speichern Per---Dokument anstatt globale Dedup, um Quelle Attribution zu bewahren
- Einfachheit über die Optimierung Für typische Dokumentgrößen ist O-(-n.²)-annehmbar ,;-LSH fügt Komplexität hinzu
Mehrsprachige Überlegungen
Deduplizierverhalten mit mehrsprachigen Inhalten
Szenarium: Verhalten |----------|----------|-----------| | Gleiche Sprache Normale Dedup-Anträge Einbetten erfassen semantische Ähnlichkeiten | Sprachliche Paraphrasen Nicht dedupliziert |. Bewahrt Quelle -.Sprachvielfalt | Gemischtes --Sprachendokument Einbetten von Ähnlichkeiten trennt natürlich Sprachen.
Design-Wahl - : Cross---lingual dedup wird explizit nicht unterstützt..- Dies bewahrt die Fähigkeit, die gleiche Tatsache in der bevorzugten Sprache des Benutzers abzurufen oder zu vergleichen, wie verschiedene Quellen Dinge formulieren.
Zukünftige Verbesserung: :-Cross---Lingual Dedup könnte bei Bedarf über Translation geschichtet werden.--invariante Einbettungen
Sicherheitsaspekte
Das Deduplizierungssystem beinhaltet implizite Schutzvorkehrungen
Angriffs-Vektor (MSK) Schutz |---------------|------------| | Salience Inflation durch Wiederholung Beschleunigte Boost-Verschlüsse bei exakten Duplikaten, d.h. | Spam über Dokumente kopieren |-Cross-Dedup beim Retrieval entfernt redundante Ergebnisse | Score-Manipulation durch doppelte Injektion |-Dedup tritt auf AFTER-Ranking, ,-Verhinderung der Scoreinflation | Überflutung der Kesselplatte Genaue Hash-Match-Detektionstropfen ohne Boost
Anmerkung: Deduplizierung ist nicht eine Sicherheitsgrenze..-Beleidigende Inhalte, die Ingestionsfilter passieren, werden indexiert..-Inhaltsfilterung sollte vorgelagert geschehen.
Wechselwirkung mit GraphRAG
Deduplizieren und GraphRAG sind absichtlich orthogonal.
System Funktioniert auf dem Zweck |--------|-------------|---------| | Deduplikation Segmente (text stücks)| Redundante Retrieval-Ergebnisse entfernen | GraphRAG Datenverarbeitungs- und -bearbeitungssoftware
Warum trennen?
- Ein Segment, in dem das Unternehmen " erwähnt, kann als ähnlicher Text dedupe aber die gleiche Entität darstellen, die die Aufgabe von GraphRAG®' zu lösen hat.
- Dedup doesns.'.t Notwendigkeit Entität Bewusstsein ,;. es arbeitet rein auf semantische Ähnlichkeit
- Entity-Entity--®aware dedup könnte später als Erweiterung hinzugefügt werden.
Beobachtbarkeit Metrics
Aktuelle Protokollierung
Aufnahme-:
[dim]Deduplication: 150 → 98 segments[/]
Retrieval-:
Post-ranking deduplication: 50 → 42 segments (removed 8 cross-doc duplicates)
Empfohlene Metrics
Für die Produktionsüberwachung ist das Tracking zu beachten.
Metrisches Messgerät Beschreibung Messgeräte Gesunder Bereich
|--------|-------------|---------------|
| dedup_ratio_ingestion Segmente, die bei der Aufnahme entfernt wurden
| dedup_ratio_retrieval Segmente, die beim Abruf entfernt wurden
| avg_salience_boost Durchschnittlicher Schub je Dokument
| max_salience_boost Höchster Schub in einem Dokument |.<.MS K3.(.else ein Konzept dominiert ).
| dedup_by_doc_type Abhängige Rate segmentiert nach Dokumenttyp
Debugging Tipps
- Hochingestions-Dedup Dokument kann übermäßige Boilerplatte haben oder auto-generiert werden
- Niedrige Ingestion dedup Dokument hat unterschiedliche Inhalte oder Einbettungen sind schlecht
- High Retrieval dedup .(>30%): . Abfrage kann zu breit sein, oder Corpus hat viele ähnliche Dokumente
- Salience nähert sich 1.0: Das Konzept wurde stark betont.;-verifizieren Sie es. 's legitime nicht Spam.
Einrichtung
Deduplizierung wird über DocSummarizerConfig.Deduplication Abschnitt in appsettings.json:
{
"DocSummarizer": {
"Deduplication": {
"Ingestion": {
"Enabled": true,
"SimilarityThreshold": 0.90,
"SalienceThreshold": 0.05,
"EnableSalienceBoost": true,
"BoostPerNearDuplicate": 0.15,
"MaxSalienceBoost": 1.0,
"BoostDecayMode": "Logarithmic",
"LogBase": 2.0
},
"Retrieval": {
"Enabled": true,
"SimilarityThreshold": 0.90,
"MinRelevanceScore": 0.25
},
"Analytics": {
"EnableLogging": true,
"EnableMetrics": true,
"HighIngestionDedupThreshold": 0.50,
"HighRetrievalDedupThreshold": 0.30,
"HighSalienceBoostThreshold": 0.60
}
}
}
}
Einstellung der Einnahme
| Standardmäßiger Parameter des Parameters | . | |
|---|---|---|
Enabled |
true Verdauliche Verdauungsdeduplikation aktivieren |
|
SimilarityThreshold |
0.90 Cosine-Ähnlichkeitsschwelle für Doppeldetektion |
|
SalienceThreshold |
0.05 Minimale Salience, um Geräusche von ( zu berücksichtigen |
|
EnableSalienceBoost |
true Verbesserung der Salience für die Nähe von - |
|
BoostPerNearDuplicate |
0.15 |
-Basisschub pro Nähe --Duplikat |
MaxSalienceBoost |
1.0 Maximale Salience-Kappe |
|
BoostDecayMode |
Logarithmic |
Linear oder Logarithmic Verweigerung |
LogBase |
2.0 Basis für logarithmischen Zerfall |
Retrieval-Konfiguration
| Standardmäßiger Parameter des Parameters | . | |
|---|---|---|
Enabled |
true Deduplizierung des Retrievals aktivieren |
|
SimilarityThreshold |
0.90 Cosine-Ähnlichkeitsschwelle |
|
MinRelevanceScore |
0.25 Mindestpunktzahl der RRF, um die |
einzuschließen |
Konfiguration von Analysen
| Standardmäßiger Parameter des Parameters | . |
|---|---|
EnableLogging |
true Log-Deduplikationsoperationen |
EnableMetrics |
true Sammeln Sie Metriken für die Überwachung |
HighIngestionDedupThreshold |
0.50 Warnung, wenn bei der Einnahme dedupliziert |
HighRetrievalDedupThreshold |
0.30 Warnen Sie, wenn bei der Retrievaldedupliziert |
HighSalienceBoostThreshold |
0.60 Warnung, wenn der Boost höher ist |
Boost Decay-Modi
Linearer Modus Vorhersehbar
boost = boostPerNearDuplicate × count
Beispiel: 3, in der Nähe von -,dupes, ×, MKS4, MSC5, Boost
Logarithmischer Modus (-Diminishing kehrt zurück ,-Standard
boost = boostPerNearDuplicate × log₂(1 + count)
Beispiel: 3, in der Nähe von -,dupes, →, MSC4, log, ₂(4), MCSK7, Boost
Der logarithmische Modus wird empfohlen, weil
- Erste paar Duplikate haben das stärkste Signal
- Viele Duplikate können bedeuten, dass Boilerplate nicht wichtig ist.
- Verhindert ausgelaufene Salience-Inflation
Leistungsbeurteilungen
Komplexität
Phase - Komplexität - Typische Größe - Auswirkungen - Auswirkungen |-------|------------|--------------|--------| |-Ingestionssegmente – |-Abschnitte –<- Segmente |-Segmente für die Wiedereinführung von |-Signmenten (MSK)
Skalierungspfad
Für sehr große Dokumente
- LSH - Lokalität - Sensitive Hassing - ): Ungefähre Dedup
- Batch-Vergleich Prozess in Brocken, um den Speicher zu reduzieren
- Frühe Filterung aggressivere Salience-Schwelle
Die aktuelle Implementierung ist für typische Dokumentgrößen optimiert..-LSH fügt Komplexität ohne Nutzen für die meisten Anwendungsfälle hinzu.
Vergleich mit Forschung
Annäherung an die Schwelle des Messwerts |----------|-----------|--------| Diese Implementierung NVIDIA-NeMo-Kurator SemDeDup docs | |-MinHash LSH Standard-)-|-M0.80-Jaccard Google-Papier | Semhash , Semshash , | , 0.90-0.95 ,| GitHub |
Unsere Schwelle von -0.90 ordnet sich mit den branchenbesten Praktiken für semantische Deduplizierung an
Was ist nicht dedupliziert
Inhalt Typ: Grund: |--------------|--------| |-Cross---Dokument bei der Einnahme .|-Preservet per .--Quellauflösung und Zuordnung . Der Gehalt an vergleichbarem Material ist semantisch ausgeprägt. Unterschiedliche Segmenttypen (Segment-Typen) (Signment vs Absatz) haben unterschiedliche strukturelle Rollen (Sognition vs. Sprachparaphrasen zur Erhaltung der sprachlichen Vielfalt
Stand der Umsetzung
Beschreibung des Merkmals: Status Standort
|---------|--------|----------|
Konfigurierbare Schwellenwerte DeduplicationConfig Klasse „|"
Verstärkter Zerfall (-Log-Skala )-|-✅-Implementiert BoostDecayMode.Logarithmic |
|-Dedup-Analysen /-metrische Daten |-Implementiert |-Messungen DeduplicationResult<T> Datensatz
Integration von DI-Diensten IDeduplicationService |
Künftige Verbesserungen
- Dedup-Analyse-Dashboard Visuelle Verfolgung der Raten je Dokumenttyp
- Sprachenübergreifende Option„:" Übersetzungsvarianten für mehrsprachige Dedup-Versionen
- RECHTSTRÄGER GraphRAG-Entitäten als zusätzliches Signal verwenden
- Prometheus-/-OpenTelemetrie-:- Exportmetriken für die Überwachung von Dashboards
Zusammenfassung
Diese Deduplizierungsstrategie
- Bewahrt Signal --Near---dupliziert mehr Bedeutung, als verworfen zu werden
- Achtung der Grenzen Dokumente halten unabhängige Segmentsätze aufrecht
- Ranks dann Filtern Verwendet volles RRF-Signal vor cross.-.doc dedup
- Fehler sicher Bevorzugt das Halten von Inhalten über aggressive Entfernung
- Bleibt deterministisch Die gleichen Eingänge erzeugen immer dieselben Ausgänge