नोट यह एक पारंपरिक ब्लॉग लेख नहीं है तकनीकी विवरण में एक ठोस विशेषता के लिए लिखा गया सुदृढ़आरएजी. मैं बार-बार इस दस्तावेज को कोड के रूप में खिसकाता हूँ।
यह दस्तावेज़ से एक उपप्रणाली का वर्णन करता है सुदृढ़आरएजीएक परियोजना मैं सक्रिय रूप से विकसित कर रहा हूँ
एक मुख्य आवश्यकता सुदृढ़आरएजी बाहर निकालने की क्षमता है साक्ष्यों के खंड sentences दुगुना उपयोगी संकेत को नष्ट करने के बिना
सुदृढ़आरएजी विश्लेषण और निकालने के द्वारा कार्य करता है उत्तम दस्तावेजों से उपलब्ध साक्ष्य नहीं LLM को भंडारित करें।
इसके बजाय सुदृढ़आरएजी निर्धारात्मक और संभाव्यतावादी तकनीकों का एक विस्तृत दायरा लागू करता है
डीडुप्लिकेट इस प्रक्रिया का एक महत्वपूर्ण हिस्सा है
साधारण स्ट्रिंग समानता पर्याप्त नहीं है।
पुनःप्राप्ति समय पर समस्या जटिल होती है
जब परिणाम निकाले जाते हैं, तो SQL के माध्यम से (Vektor embeddings,BM\25,\ या हाइब्रिड्स),\ LLM को एकाधिक खंडों का आहार देते हुए, जो सभी एक ही मूल विचार व्यक्त करते हैं, नीरसता उत्पन्न करता है।
इस को संबोधित करने के लिए सुदृढ़आरएजी दोहरेपन को एक के रूप में देखता है प्रथम- वर्ग संकलन समस्याएक पोस्ट नहीं है
इस दस्तावेज का बाकी वर्णन है कि कैसे उस डेड्यूप्लिकेशन रणनीति को डिजाइन किया गया था 'अजील स्पेक्टिंग कोड LLMS. की आवश्यकताओं के लिए अनुकूल
यह विचारों को crystallize करता है-, different concepts and forces the LLM to document it सही बात बनाता है.
इसके बारे में अधिक देखें सुदृढ़आरएजी यहाँ
सुदृढ़आरएजी महत्वपूर्ण संकेतों को सुरक्षित करते हुए अतिरिक्त सामग्री को समाप्त करने के लिए दो चरण द्वैतरण रणनीति का उपयोग करता है सिग्नल-संरक्षित फिल्टरसामग्री मानकीकरण नहीं है
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────────────────────┘
इन असमानताओं को डेड्यूप्लिकेशन सिस्टम द्वारा रखा जाता है
गारंटी |-----------|-------------| | क्रमादेश सुरक्षित RRF रैंकिंग के बाद अर्थक्रम में कभी भी परिवर्तन नहीं होता है | कोई अवधारणा हानि नहीं | डिड्यूप्लिकेशन कभी भी एक अवधारणा के सभी उदाहरणों को हटाता नहीं है | दस्तावेज़ सीमा का पालन किया गया | डीड्यूप्लिकेशन कभी भी प्रविष्ट होने पर दस्तावेज़ सीमाओं को पार नहीं करता है | अपरिवर्तनीय सामग्री | डीड्यूप्लिकेशन कभी भी एम्बेडिंग या पाठ सामग्री को बदलता नहीं है | निर्णायक दिए जाने वाले समान इनपुट और कॉन्फ़िगरेशन के साथ , डुप्लीकेट एक ही आउटपुट उत्पन्न करता है
यह प्रणाली स्पष्ट रूप से करता है नहीं को कोशिश करें
दुरूपण पूर्ण रूप से निर्णायक है
यह क्यों महत्वपूर्ण है उपयोगकर्ता त्रुटिमोचन पुनःप्राप्ति परिणाम यह विश्वास कर सकते हैं कि re-सही इनपुटों के साथ चलाने से समान आउटपुट उत्पन्न करता है सुदृढ़आरएजीअधिक व्यापक "सीमित अस्पष्टता
लक्ष्य भंडारण को कम करें और दस्तावेज़ में अतिरिक्तता को रोकें
समस्या: दस्तावेजों में अक्सर बार-बार अंतर्वस्तु होती है
समाधान अनुक्रमण करने से पहले प्रत्येक दस्तावेज के भीतर प्रतिलिपि बनाएँ
कुंजी अंतर्दृष्टि लगभग-डुप्लीकेट को इस रूप में माना जाता है महत्व का स्वतंत्र प्रमाणredundancy नहीं
लक्ष्य दस्तावेजों में अतिरिक्त सूचना प्राप्त करने से एलएलएम को रोकें
समस्या: जब अनेक दस्तावेजों के बीच क्वेरी किया जाता है, समान अनुच्छेद विभिन्न स्रोतों में प्रकट हो सकते हैं
समाधान आरआरएफ द्वारा रैंकिंग के बाद (जो अर्थिक समानता को संयोजन करता है, शब्दकुञ्जी मिलानM SK2 प्रासंगिकता
आरआरएफ के बाद क्यों आरआरएफ अंक प्रासंगिकता का सर्वोत्तम समग्र मापन है
विभाजन जानबूझकर है
| चरण | क्या यह ग्रहण करता है |
|---|---|
| आgestion boost | लेखक बल देता है |
| पुनःप्राप्ति अंक Query relevance - how well content matches user intent |
इन को पुनर्प्राप्ति पर मिलाना दस्तावेज़ अभिप्राय के साथ उपयोगकर्ता अभिप्रेत से बंधा जाएगा उस दस्तावेज़ में, लेकिन प्रासंगिक नहीं हो सकता इस क्वेरी में. इंजेक्शन में वृद्धि करते हुए , हम बिना क्वेरी परिणामों को पक्षपात करने के लेखक की सिग्नल को सुरक्षित रखते हैं
src/Mostlylucid.DocSummarizer.Core/Services/BertRagSummarizer.cs
DeduplicateSegments()
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
पैरामीटर
|-----------|---------|-------------|
| similarityThreshold कोसाइन समानता जिसके ऊपर से खंडों को दुरूपित माना जाता है
| salienceThreshold विचार करने के लिए न्यूनतम भेदभाव
| boostPerNearDuplicate | | 0.15 | || | समीप के लिए सलायन बढ़ाता है।
यथार्थ प्रतिलिपि (नहीं Boost
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)
निकट-डुप्लीकेट (बॉस्ट लागू
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)
src/LucidRAG.Core/Services/AgenticSearchService.cs
DeduplicateByEmbeddingPostRanking()
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)
पैरामीटर
|-----------|---------|-------------|
| similarityThreshold क्रॉस के लिए कोसाइन समानता दहेज
आरआरएफ (प्रतिस्परिक रैंक फ्यूजन) चार संकेतों को संयोजित करता है
RRF के बाद डुप्लिकेट करने का अर्थ है कि हम सभी आयामों में क्वेरी से बेहतर अनुरूप सेगमेंट बनाए रखें
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.
| विफल मोड | विवरण |
|---|---|
| गलत सकारात्मक (over दो अलग-अलग लेकिन घनिष्ठ रूप से संबंधित संकल्पनाओं को समानता से अधिक हो सकता है 0.90 अनुरूपता | |
| गलत ऋणात्मक (under Very short segments may embed poorly | |
| एम्बेडिंग ड्रिफ्ट | एम्बेडिंग मॉडलों को बदलने से डेड्यूप आकलन अमान्य हो जाता है |
| क्रम संवेदनशीलता | घृणापूर्ण चयन का अर्थ होता है, पहला उच्च होता है। |
बहुभाषीय सामग्री के साथ डुप्लिकेट व्यवहार
| Scenario | Behavior | Rationale |
|---|---|---|
| एक ही भाषा सामान्य डेड्यूप लागू होता है | ||
| Cross-language paraphrases | न डुप्लिकेट किया गया नहीं है। | |
| मिश्रित भाषा दस्तावेज़ भाषा समूहों के भीतर डेड्यूप | सम्मिलित समानता प्राकृतिक रूप से भाषाओं को अलग करती है |
डिजाइन विकल्प क्रॉस-भाषिक डेड्यूप स्पष्ट रूप से समर्थित नहीं है।
भावी वृद्धि: क्रॉस-लिंगिक डिड्यूप अनुवाद के माध्यम से परतित किया जा सकता है
डिडुप्लिकेट सिस्टम में अप्रत्यक्ष संरक्षण शामिल हैं
| आक्रामक भेक्टर | |
|---|---|
| पुनरावृत्ति के माध्यम से सूक्ष्म मुद्रास्फीति exactly duplicates don't boost | |
| दस्तावेज़ों में स्पैम को नक़ल करें पुनर्प्राप्ति पर डॉक डेड्यूप अतिरिक्त परिणामों को हटाता है | |
| डुप्लीकेट इंजेक्शन के माध्यम से प्राप्ताङ्क परिचालन | रैंकिंग के बाद कटौती होती है |
| बॉयलप्लेट बाढ़ | सही हैश मैच पता लगाने में तेजी के बिना गिरता है |
नोट डिडुप्लिकेट एक सुरक्षा सीमा नहीं है
गुणन और ग्राफ आर ए जी जानबूझकर आयतीय हैं
| प्रणाली | उद्देश्य पर कार्य करता है | |||||
|---|---|---|---|---|---|---|
| दुगुना सेगमेंट्स | ||||||
| ग्राफ आर ए जी | इकाइयां | & | रिश्ताएं | ज्ञान ग्राफ बनाना |
क्यों अलग करें
इंजेक्शन
[dim]Deduplication: 150 → 98 segments[/]
पुनःप्राप्ति
Post-ranking deduplication: 50 → 42 segments (removed 8 cross-doc duplicates)
उत्पादन मॉनिटरिंग के लिए
| मीट्रिक | विवरण | स्वस्थ रेंज S |
|---|---|---|
dedup_ratio_ingestion इंजेक्शन पर हटाए गए खंड |
||
dedup_ratio_retrieval प्रतिप्राप्ति पर हटाए गए खंड |
||
avg_salience_boost प्रति दस्तावेज़ लागू औसत वृद्धि |
||
max_salience_boost एक दस्तावेज में सबसे अधिक वृद्धि |
||
dedup_by_doc_type दस्तावेज़ प्रकार के अनुसार खंडित कटौती दर |
डिडुप्लिकेट के माध्यम से कॉन्फ़िगर किया गया है DocSummarizerConfig.Deduplication खंड में 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
}
}
}
}
पैरामीटर
|-----------|---------|-------------|
| Enabled | true सक्षम करें
| SimilarityThreshold | 0.90 दोहरा पता लगाने के लिए कोसाइन समानता थ्रेसहोल्ड
| SalienceThreshold | 0.05 | विचार करने के लिए न्यूनतम salience
| EnableSalienceBoost | true | निकट के लिए उत्कर्षण बढ़ाता है
| BoostPerNearDuplicate | 0.15 | बेस boost per near-duplicate
| MaxSalienceBoost | 1.0 अधिकतम salience cap |
| BoostDecayMode | Logarithmic | Linear या Logarithmic पतन |
| LogBase | 2.0 लघुगणकीय विघटन के लिए आधार
पैरामीटर
|-----------|---------|-------------|
| Enabled | true सक्षम करें
| SimilarityThreshold | 0.90 कोसाइन समानता थ्रेसहोल्ड
| MinRelevanceScore | 0.25 न्यूनतम आरआरएफ अंक को शामिल करने के लिए |
पैरामीटर
|-----------|---------|-------------|
| EnableLogging | true लॉग डिडुप्लिकेट ऑपरेशन्स
| EnableMetrics | true मॉनिटरिंग के लिए मापदंड एकत्रित करें
| HighIngestionDedupThreshold | 0.50 | चेतावनी दें यदि
| HighRetrievalDedupThreshold | 0.30 चेतावनी दें यदि >30% पुनःप्राप्ति पर दोहराया गया है
| HighSalienceBoostThreshold | 0.60 | चेतावनी दें यदि वृद्धि से अधिक है
रेखीय मोड (simple
boost = boostPerNearDuplicate × count
उदाहरण-: 3 near - dupes
लघुगणकीय मोड (ह्रास के परिणाम
boost = boostPerNearDuplicate × log₂(1 + count)
उदाहरण
लघुगणकीय मोड सिफारिश की जाती है क्योंकि
चरण | जटिलता |-------|------------|--------------|--------| प्रवेश खंड पुनःप्राप्ति
बहुत बड़े दस्तावेजों के लिए (10,000+ खंड
वर्तमान क्रियान्वयन विशिष्ट दस्तावेज़ आकारों के लिए अनुकूलित है
दृष्टिकोण |----------|-----------|--------| | lucidRAG एनवीडीया नेमो क्यूरेटर SemDeDupdocs | MinHash LSH गूगल C4, GPT-3 कागज | | SemHash जिटहब |
हमारे शून्य 0.90 सेंटिकल डेड्यूप्लिकेशन के लिए उद्योग के सर्वोत्तम प्रथाओं के अनुरूप है
सामग्री क़िस्म |--------------|--------| अभिग्रहण पर | क्रॉस | - | दस्तावेज || | प्रति स्रोत रिजोल्यूशन और आबंटन को सुरक्षित करता है कम भिन्न खंड प्रकार | शीर्षक और अनुच्छेद में भिन्न संरचनात्मक भूमिकाएं हैं | क्रॉस
| विशेषता | स्थिति | |||
|---|---|---|---|---|
कॉन्फ़िगर योग्य थ्रेसहोल्ड्स DeduplicationConfig श्रेणी |
||||
| बौस्ट डेसी | ( | लॉग स्केल | ) | BoostDecayMode.Logarithmic |
डेडप विश्लेषण DeduplicationResult<T> रिकार्ड |
||||
डीआई सेवा एकीकरण IDeduplicationService |
यह गुणन रणनीति
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.