RAG से पहले दस्तावेज़ साफ़ करें
अंतिम अपडेट:
पुनर्प्राप्ति-संवर्धित उत्पादन (RAG) के लिए किसी दस्तावेज़ को साफ़ करने का अर्थ है, शेष पाठ के खंडों में बँटने, एम्बेड होने और वेक्टर अनुक्रमणिका में संग्रहित होने से पहले, वह सब कुछ हटाना जो सामग्री नहीं है — हेडर, फ़ुटर, पृष्ठ संख्याएँ और दोहराया गया बॉयलरप्लेट जो एक PDF हर पृष्ठ पर लिए होता है। यह RAG पाइपलाइन का सबसे कम आकर्षक चरण है और वही जो चुपचाप तय करता है कि पुनर्प्राप्ति काम करती है या नहीं: बिना साफ़ किए गए पाठ से बनी अनुक्रमणिका उसी फ़र्नीचर को सैकड़ों बार संग्रहित करती है और उसे ऐसे पुनर्प्राप्त करती है मानो वह ज्ञान हो। यह लेख समझाता है कि फ़र्नीचर एम्बेडिंग को क्यों विषाक्त करता है, खंडन वास्तव में कैसे काम करता है, डुप्लिकेट हटाना एम्बेड करने से पहले क्यों आता है, क्या हटाना है और क्या रखना है, और यह कैसे आँकें कि सफ़ाई ने मदद की। सफ़ाई स्वयं करने के लिए, दस्तावेज़ क्लीनर का उपयोग करें और इस मार्गदर्शिका के साथ-साथ अपने परिणाम पढ़ें।
पृष्ठ फ़र्नीचर एम्बेडिंग को क्यों विषाक्त करता है
एक एम्बेडिंग मॉडल पाठ के एक खंड को एक वेक्टर में बदलता है जिसे यह पकड़ना चाहिए कि वह खंड किस बारे में है। उसे एक ऐसा खंड दें जो आधा रिपोर्ट शीर्षक, गोपनीयता फ़ुटर और पृष्ठ संख्या हो, और वेक्टर उसे भी निष्ठापूर्वक पकड़ेगा — जिसका अर्थ है कि एक लंबे दस्तावेज़ का हर खंड उसी फ़र्नीचर की ओर बहता है, और वे खंड जो वेक्टर स्थान में दूर-दूर होने चाहिए, एक हेडर साझा करने के कारण कृत्रिम रूप से पास समाप्त होते हैं। पुनर्प्राप्ति तब ठीक वही करती है जो उससे कहा गया था: धनवापसी नीति वाले खंड के बारे में पूछे जाने पर, वह पाँच खंड लौटाती है जिनका सबसे मज़बूत साझा संकेत चल रहे हेडर में कंपनी का नाम है। किसी ने मॉडलिंग की ग़लती नहीं की। अनुक्रमणिका हर पृष्ठ पर दोहराए गए शोर से पूरी ताक़त से भरी गई थी, और जो शोर दोहराता है वह समानता गिनने वाली प्रणाली के लिए संकेत से अविभाज्य है।
नुकसान तनुकरण से भी बदतर है। फ़र्नीचर खंड पुनर्प्राप्ति को सीधे जीत सकते हैं: फ़ुटर जैसी भाषा वाला एक प्रश्न — गोपनीयता, दस्तावेज़ नियंत्रण या संस्करणों के बारे में — उस फ़ुटर खंड से, जो दो सौ बार एम्बेड हुआ था, उस एकमात्र अनुच्छेद की तुलना में बेहतर मिलता है जो सचमुच उसका उत्तर देता है। पृष्ठ संख्याएँ एक अधिक सूक्ष्म विफलता पैदा करती हैं, मॉडल को यह सिखाकर कि नंगे अंक सामग्री हैं, इसलिए “42” पर समाप्त होने वाला एक खंड ऐसे वापस उद्धृत किया जा सकता है मानो उस अंक का कुछ अर्थ हो। और हर फ़र्नीचर खंड एक सीमित top-k परिणाम समूह में एक स्थान घेरता है, एक सचमुच प्रासंगिक खंड को उस संदर्भ से बाहर धकेलता है जो मॉडल को दिया जाता है। सफ़ाई इसलिए सजावटी सफ़ाई नहीं है; यह आपकी अपनी अनुक्रमणिका के अंदर आपकी अपनी सामग्री के एक व्यवस्थित प्रतियोगी को हटाना है।
खंडन के मूल सिद्धांत: आकार, ओवरलैप और सीमाएँ
खंडन यह निर्णय है कि कौन-सी इकाई एम्बेड होगी, और इसमें तीन घुंडियाँ हैं। आकार फ़ोकस को संदर्भ से बदलता है: छोटे खंड, कुछ सौ वर्ण, एक विचार को तीक्ष्णता से एम्बेड करते हैं और सटीकता से पुनर्प्राप्त होते हैं, लेकिन उस वाक्य के बिना आ सकते हैं जो विचार को उसकी शर्तें देता है; बड़े खंड, कई हज़ार वर्ण, अपना संदर्भ अपने साथ लिए होते हैं लेकिन कई विचारों को एक औसत वेक्टर में मिला देते हैं, इसलिए उनमें से कोई भी मज़बूती से पुनर्प्राप्त नहीं होता। अधिकांश दस्तावेज़ संग्रह बीच में कहीं पड़ते हैं — लगभग 500 से 1,000 वर्ण एक समझदार शुरुआत क्षेत्र है — और सही उत्तर अपने ही प्रश्नों को अपने ही दस्तावेज़ों पर परखकर तय होता है, किसी फ़्रेमवर्क डिफ़ॉल्ट से एक संख्या नक़ल करके नहीं। LangChain पाठ स्प्लिटर दस्तावेज़ स्प्लिटर परिवारों का एक अच्छा नक्शा है, वर्ण और पुनरावर्ती स्प्लिटरों से लेकर संरचना-जागरूक स्प्लिटरों तक।
ओवरलैप दूसरी घुंडी, सीमाओं, के विरुद्ध एक बीमा है। एक स्प्लिटर जो संरचना की परवाह किए बिना हर 800 वर्ण पर काटता है, वह अंततः एक परिभाषा को आधा काट देगा, और कोई भी आधा न अच्छी तरह पुनर्प्राप्त होता है न अच्छी तरह पढ़ा जाता है। सीमाओं पर बाँटना — पहले अनुच्छेद, फिर वाक्य, फिर रिक्त स्थान, जैसा कि पुनरावर्ती स्प्लिटर करते हैं — अधिकांश समय इकाइयों को पूरा रखता है, और दस से बीस प्रतिशत का एक मामूली ओवरलैप एक खंड के किनारे को अगले खंड की शुरुआत में दोहराता है ताकि जो कट फिर भी होता है वह अपने संदर्भ को अनाथ न करे। LlamaIndex नोड पार्सर दस्तावेज़ का पदानुक्रम लोडर की ओर से वही बात कहता है: दस्तावेज़ का सम्मान करने वाले नोडों में पार्स करें, फिर बाँटें। लेकिन इनमें से कुछ भी फ़र्नीचर को नहीं बचाता: ओवरलैप हेडर को अगले खंड में भी निष्ठापूर्वक दोहराता है, और यही कारण है कि सफ़ाई खंडन से पहले आती है, कभी उसके बाद नहीं।
एम्बेड करने से पहले डुप्लिकेट हटाएँ
डुप्लिकेट दूसरी व्यवस्थित प्रदूषक हैं, और वे दो प्रकार की होती हैं। पहली पूरे दस्तावेज़ की डुप्लिकेशन है: वही PDF अलग-अलग फ़ाइल नामों से दो बार अनुक्रमित, पुराना संस्करण नए के बगल में छोड़ा गया, ईमेल संलग्नक साझा ड्राइव की प्रति के बगल में सहेजा गया। दूसरी दस्तावेज़ के अंदर है: शीर्षक पृष्ठ पर अस्वीकरण और फिर परिशिष्ट में, हर अध्याय के शीर्ष पर दोहराया गया सारांश, तालिका जो मुख्य भाग और अनुलग्नक दोनों में चिपकाई गई। दोनों प्रकारों का पुनर्प्राप्ति पर एक ही प्रभाव है — डुप्लिकेट पाठ बार-बार एम्बेड होता है, इसलिए वह बार-बार पुनर्प्राप्त होता है, एक अंश की प्रतियों से top-k को भरता है जबकि अन्य अंश कभी सतह पर नहीं आते — और लागत पर भी एक ही प्रभाव है, क्योंकि आप हर प्रति को एम्बेड और संग्रहित करने के लिए भुगतान करते हैं।
डुप्लिकेट हटाना एम्बेड करने से पहले सबसे सस्ता है, जब वह अभी भी एक स्ट्रिंग तुलना है। सटीक डुप्लिकेट सामान्यीकरण से गिर जाते हैं: रिक्त स्थान सिकोड़ें, उस पृष्ठ फ़र्नीचर को अनदेखा करें जिसे आप पहले ही हटा चुके हैं, परिणाम को हैश करें और एक प्रति रखें। लगभग-डुप्लिकेट — वही अनुच्छेद बदली हुई तारीख़ या पुनः क्रमांकित शीर्षक के साथ — को एक समानता जाँच की आवश्यकता होती है, लेकिन एक खुरदुरी जाँच भी उस बॉयलरप्लेट को पकड़ लेती है जो सबसे अधिक नुकसान करता है। दो सावधानियाँ डुप्लिकेट हटाने को ईमानदार रखती हैं। पहली, पहली उपस्थिति रखें और यह दर्ज करें कि प्रतियाँ कहाँ थीं; दो अध्यायों में दोहराई गई एक चेतावनी एक जानबूझकर किया गया सुरक्षा उपाय हो सकती है, और उसे रिकॉर्ड से पूरी तरह हटाना उसे अनुक्रमणिका से हटाने से अलग निर्णय है। दूसरी, सफ़ाई के बाद डुप्लिकेट हटाएँ, उससे पहले नहीं: दो पृष्ठ जो केवल अपनी पृष्ठ संख्या में भिन्न हैं, वे अलग-अलग फ़र्नीचर में लिपटी सामग्री की डुप्लिकेट हैं, और केवल साफ़ किया गया पाठ ही इसे प्रकट करता है।
क्या हटाएँ, और क्या रखें
वह हटाएँ जो बिना बताए दोहराता है: चल रहे हेड और फ़ुट, पृष्ठ संख्याएँ, वॉटरमार्क, गोपनीयता बैनर, उत्पन्न “मुद्रित किया गया” पंक्तियाँ, और वे नेविगेशन टुकड़े जो एक वेब-से-PDF निर्यात हर पृष्ठ पर मुहर लगाता है। वह रखें जो संरचना देता है: वास्तविक शीर्षक, क्योंकि वे आपके पास सबसे मज़बूत खंड सीमा संकेत हैं और अक्सर खंड के मेटाडेटा में आते हैं; कैप्शन, क्योंकि किसी आकृति का कैप्शन अक्सर एकमात्र पाठ होता है जो बताता है कि आकृति क्या दिखाती है; तालिका सामग्री, सावधानी से संभाली गई, क्योंकि एक उतारी गई तालिका उन पंक्ति और स्तंभ शीर्षकों को खो देती है जो उसकी संख्याओं को अर्थ देते हैं; और सूचियाँ, जिनके आइटम प्राकृतिक इकाइयाँ हैं। सीमा का मामला विषय-सूची है। खंडों के रूप में, विषय-सूची की पंक्तियाँ फ़र्नीचर हैं — शीर्षकों और पृष्ठ संख्याओं की एक सूची जो हर क्वेरी से अस्पष्ट रूप से मिलती है और किसी का उत्तर नहीं देती — लेकिन मेटाडेटा के रूप में वही विषय-सूची पृष्ठ दस्तावेज़ का नक्शा है। उसे एम्बेड किए गए पाठ से हटाएँ, उसे संग्रह के बारे में अपने नोटों में रखें।
वही निर्णय दस्तावेज़ क्लीनर के अंदर भी लागू होता है: फ़र्नीचर और पृष्ठ संख्याएँ डिफ़ॉल्ट रूप से टिक की जाती हैं क्योंकि उन्हें हटाना लगभग हमेशा सुरक्षित होता है, जबकि डुप्लिकेट अनुच्छेद कभी भी डिफ़ॉल्ट रूप से टिक नहीं होते क्योंकि दोहराव कभी-कभी स्वयं उद्देश्य होता है। निष्कर्षण की ईमानदारी भी यहाँ महत्त्वपूर्ण है। PDF एक संरचित प्रारूप है — ISO PDF मानक, ISO 32000, पृष्ठों को बहते हुए पाठ के रूप में नहीं, बल्कि ड्राइंग और पाठ ऑपरेशनों की सामग्री धाराओं के रूप में परिभाषित करता है — इसलिए कोई भी निष्कर्षक पठन क्रम का अनुमान लगाता है, और एक स्कैन किए गए PDF में तब तक कोई पाठ परत नहीं होती जब तक OCR उसे एक न दे। यदि आपके स्रोत दस्तावेज़ अन्य कारणों से भी महत्त्वपूर्ण हैं, तो आपके PDF आपकी वेबसाइट की सुलभता का हिस्सा हैं पर साथी लेख उस टैग की गई संरचना को कवर करता है जो स्क्रीन रीडर और निष्कर्षक दोनों की मदद करती है।
सफ़ाई के बाद पुनर्प्राप्ति का मूल्यांकन
सफ़ाई एक परिकल्पना है — पुनर्प्राप्ति बेहतर होगी — और खोज गुणवत्ता के बारे में परिकल्पनाएँ शर्मनाक रूप से छोटी मशीनरी से परखी जा सकती हैं। बीस से पचास वास्तविक प्रश्न इकट्ठा करें जो आपके उपयोगकर्ता सचमुच पूछते हैं, हर एक का उत्तर देने वाले अंश को हाथ से दर्ज करके। उन्हें बिना साफ़ की गई अनुक्रमणिका और साफ़ की गई अनुक्रमणिका पर एक ही रिट्रीवर, एक ही खंड सेटिंग और एक ही top-k के साथ चलाएँ, और दो चीज़ों की तुलना करें: सही अंश परिणामों में कितनी बार बिल्कुल प्रकट होता है, और जब वह प्रकट होता है तो कितनी ऊँची रैंक पर होता है। वह जोड़ी — रिकॉल और रैंक — स्कोरबोर्ड है। यदि सफ़ाई काम कर रही है, तो फ़र्नीचर खंड परिणामों में प्रकट होना बंद कर देते हैं, सही अंश ऊपर उठते हैं, और वे प्रश्न जो पहले इसलिए विफल होते थे क्योंकि एक फ़ुटर उत्तर से ऊपर रैंक करता था, पास होने लगते हैं।
फिर विफलताओं को पढ़ें, क्योंकि अकेले अंक आपकी चापलूसी करेंगे। एक साफ़ की गई अनुक्रमणिका रिकॉल हासिल कर सकती है जबकि एक प्रश्न खो देती है जिसका उत्तर सचमुच एक दोहराए गए सारांश में रहता था जिसे आपने डुप्लिकेट हटाकर हटा दिया, या एक हेडर में जो वह उत्पाद नाम लिए था जिसकी हर खंड को आवश्यकता थी। वे नुकसान जानकारी हैं: वे आपको बताते हैं कि उस तत्व को मेटाडेटा के रूप में रखें, या दस्तावेज़ शीर्षक को हर खंड के आगे जानबूझकर लगाएँ बजाय इसके कि उसे गलती से दो सौ बार एम्बेड करें। जब भी संग्रह, स्प्लिटर या एम्बेडिंग मॉडल बदले, मूल्यांकन फिर से चलाएँ, और प्रश्न समूह को अनुक्रमणिका के साथ संस्करणित रखें। RAG गुणवत्ता लॉन्च की विशेषता नहीं है; यह रखरखाव की विशेषता है, और एक छोटा निश्चित परीक्षण समूह ही वह है जो “यह बेहतर लगता है” को ऐसी चीज़ में बदलता है जिसका बचाव किया जा सके।