Back to "Deduplikation von Graphitic RAG Evidence Segmenten in klarRAG"

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

C# Knowledge Graphs lucidRAG Machine Learning Vector Search

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 :-

  1. Dichte Punktzahl Semantische Ähnlichkeit zur Abfrage
  2. BM-25-Score Lexikalisches ,/"-Schlüsselwortspiel
  3. Salience Score-Wert Bedeutung innerhalb des Dokuments
  4. 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

  1. LSH - Lokalität - Sensitive Hassing - ): Ungefähre Dedup
  2. Batch-Vergleich Prozess in Brocken, um den Speicher zu reduzieren
  3. 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

  1. Dedup-Analyse-Dashboard Visuelle Verfolgung der Raten je Dokumenttyp
  2. Sprachenübergreifende Option„:" Übersetzungsvarianten für mehrsprachige Dedup-Versionen
  3. RECHTSTRÄGER GraphRAG-Entitäten als zusätzliches Signal verwenden
  4. 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
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.