नफा:
- संख्यात्मकदृष्ट्या भाग आकार, ओव्हरलॅप आणि सिमेंटिक चंकिंग ट्रेडऑफचे मूल्यांकन करा
- वेगवेगळ्या दस्तऐवज प्रकारांसाठी (पीडीएफ, टेबल, कोड, चॅट लॉग) योग्य चंकिंग धोरण निवडणे
- प्रत्येक भागामध्ये मेटाडेटा जोडून पुनर्प्राप्ती गुणवत्ता आणि फिल्टरिंग मजबूत करा
RAG मधील ही सर्वात दुर्लक्षित परंतु सर्वात निर्णायक पायरी आहे: तुम्ही दस्तऐवज कसे खंडित करता. याला चंकींग म्हणतात. जरी तुम्ही तेच कागदपत्र त्याच मॉडेलला दिले तरीही, खराब चंकिंगमुळे पुनर्प्राप्ती चुकीचा भाग परत करते आणि मॉडेल कधीही उत्तम उत्तर देऊ शकत नाही. या युनिटमध्ये, आम्ही विखंडन धोरणे, दस्तऐवजाच्या प्रकारानुसार त्यांचे रुपांतर कसे करावे आणि प्रत्येक तुकड्यात अर्थपूर्ण मेटाडेटा कसा जोडायचा हे समाविष्ट करतो.
आम्ही का तुकडे करू?
तीन कारणे आहेत. प्रथम, एम्बेडिंग मॉडेल एका विशिष्ट लांबीपर्यंत मजकूर अर्थपूर्ण वेक्टरमध्ये रूपांतरित करतात; जर संपूर्ण 40-पानांचा अध्याय एका वेक्टरमध्ये क्रॅम केला असेल तर अर्थ "अस्पष्ट" होईल. दुसरे, आम्ही मॉडेलला फक्त संदर्भ म्हणून आवश्यक असलेला भाग देऊ इच्छितो; संपूर्ण दस्तऐवज सुपूर्द करणे महाग आणि लक्ष विचलित करणारे आहे. तिसरे, पुनर्प्राप्ती अचूक होण्यासाठी, शोध युनिट लहान आणि केंद्रित असणे आवश्यक आहे.
म्हणून खंड हे पुनर्प्राप्तीचे सर्वात लहान एकक आहे. ते खूप मोठे किंवा खूप लहान नसावे - अगदी बरोबर.
भाग आकार आणि ओव्हरलॅप शिल्लक
दोन मुख्य सेटिंग्ज आहेत: भाग आकार (एका भागामध्ये किती टोकन/शब्द असतील) आणि ओव्हरलॅप (शेजारच्या भागांद्वारे सामायिक केलेला भाग).
खूप लहान भाग (उदा. 100 टोकन): केंद्रित परंतु संदर्भापासून डिस्कनेक्ट केलेले. तो "14 दिवसांसाठी" म्हणतो, परंतु 14 दिवस काय आहे ते मागील वाक्यात आहे. खूप मोठे भाग (उदा. 2000 टोकन): संदर्भ राखून ठेवतात परंतु अनेक धागे त्यात मिसळले जातात; एम्बेडिंगमध्ये गोंधळ होतो आणि असंबद्ध विषय एकत्र येतात.
ओव्हरलॅप सीमा समस्या सोडवते. एखादे वाक्य दोन भागांच्या सीमेवर तंतोतंत पडले, तर ते आच्छादित न होता दोन भागांमध्ये विभागले जाते आणि त्याचा अर्थ गमावला जातो. 50-100 टोकन्सचे ओव्हरलॅप हे सुनिश्चित करते की मर्यादेत येणारी माहिती किमान एका भागात अखंड राहते.
भाग आकार
फायदा
गैरसोय
योग्य सामग्री
लहान (100-250 टोकन)
उच्च संवेदनशीलता, लक्ष केंद्रित
संदर्भ खंडित होऊ शकतो
FAQ, लहान लेख, व्याख्या
मध्यम (300-600 टोकन)
शिल्लक; बहुतेक परिस्थिती
-
कार्यपद्धती, धोरण ग्रंथ
मोठे (८००-१५०० टोकन)
संदर्भ अखंडता
अस्पष्ट एम्बेडिंग
कथन, लांब स्पष्टीकरण
टीप: तुम्हाला कोठून सुरुवात करायची हे माहित नसल्यास, 400-500 टोकन चंक आणि 50-80 टोकन ओव्हरलॅपसह प्रारंभ करा; नंतर आपल्या स्वतःच्या डेटासह मोजा आणि समायोजित करा. "योग्य" आकार सार्वत्रिक नाही, तो संदर्भावर अवलंबून असतो.
चंकिंग स्ट्रॅटेजीज
निश्चित-आकार: प्रत्येक N टोकनवर मजकूर ट्रिम करा. हे सोपे आणि जलद आहे, परंतु वाक्याच्या मध्यभागी व्यत्यय आणू शकते.
विभाजक-आधारित (पुनरावर्ती/विभाजक): परिच्छेद आणि नंतर वाक्याच्या सीमांनुसार विभाजित; हे अर्थाची अखंडता अधिक चांगले राखते. बहुतेक उत्पादन प्रणाली यापासून सुरू होतात.
सिमेंटिक चंकिंग: हे वाक्यांचे एम्बेडिंग पाहते आणि जिथे विषय बदलते तिथे त्यांना विभाजित करते. ही उच्च दर्जाची परंतु सर्वात महाग पद्धत आहे; मोठ्या प्रमाणासह, व्यवहाराची किंमत वाढते.
स्ट्रक्चर-अवेअर: दस्तऐवज रचना वापरते जसे की हेडिंग, विभाग, टेबल. उदाहरणार्थ, मार्कडाउन दस्तऐवज हेडिंगद्वारे विभाजित केल्याने प्रत्येक भागाचे स्वतःचे शीर्षक आहे याची खात्री होते.
दस्तऐवजाच्या प्रकारानुसार अनुकूलन
प्रत्येक दस्तऐवज सारखा नसतो. रणनीती प्रकारानुसार बदलते:
- PDF/धोरण मजकूर: बुकमार्क-आधारित, मध्यम आकार. पृष्ठ शीर्ष/तळाशी पुनरावृत्ती साफ करा (हेडर/फूटर).
- सारण्या: संदर्भाच्या बाहेर ओळ घेऊ नका; प्रत्येक पंक्ती हेडर माहितीसह ठेवा ("आयटम: X, किंमत: Y, स्टॉक: Z"). कच्च्या सारणीचे साध्या मजकुरात रूपांतर करणे अनेकदा आवश्यक असते.
- कोड: फंक्शन/वर्ग सीमांनुसार विभाजित करा; फंक्शन ऑफ द वे कट करू नका.
- चॅट/तिकीट रेकॉर्डिंग: संदेश किंवा संभाषण फेरीद्वारे विभाजित; कोण काय बोलले याचे ज्ञान ठेवा.
# कंस-आधारित चंकिंग (वैचारिक) भाग = bol( मजकूर, target_size=450, # टोकन ओव्हरलॅप=70, # टोकन कंस=["\n\n", "\n", ".", " "] # परिच्छेद पहिला, शब्द शेवटचा)
प्रत्येक ट्रॅकमध्ये मेटाडेटा जोडा
चंकिंग म्हणजे फक्त "विभाजन" नाही; प्रत्येक तुकडा समृद्ध करण्यासाठी आहे. तुम्ही ट्रॅकला जोडलेल्या प्रत्येक टॅगचे भविष्यातील फिल्टरिंग आणि स्त्रोत उद्धृत करण्यासाठी त्याचे वजन सोन्यामध्ये असेल.
# समृद्ध भाग (वैचारिक){ "मजकूर": "1-5 वर्षांच्या सेवेसह 14 दिवसांची वार्षिक सशुल्क रजा...", "मेटाडेटा": { "स्रोत": "ik_el_kitabi_v7.pdf", "विभाग": "5.2 वार्षिक रजा", "पृष्ठ": 23, "तारीख"", "62 भाग", "202 भाग" "गोपनीयता": "अंतर्गत" }}
आणखी एक शक्तिशाली तंत्र म्हणजे संदर्भित शीर्षलेख जोडणे: प्रत्येक भागाच्या सुरुवातीला ज्या अध्यायाशी संबंधित आहे त्याचे शीर्षक लिहिणे. अशाप्रकारे, "14 दिवसांसाठी" सारखा विसंगत तुकडा देखील "वार्षिक रजा - 14 दिवस" म्हणून अधिक चांगला एम्बेड केलेला आणि अधिक अर्थपूर्ण आहे.
कमकुवत चंकिंग / मजबूत चंकिंग
कमकुवत (ब्लाइंड हार्डकट, मेटाडेटा नाही):
प्रत्येक 1000 वर्णांनी मजकूर कापून टाका. फक्त मजकूर ठेवा. # परिणाम: टेबल्स मध्यभागी विभाजित आहेत, संदर्भाशिवाय "14 दिवस" शिल्लक आहेत, # ते कोणत्या दस्तऐवजातून आले आहेत हे माहित नाही, कोणतेही फिल्टर केले जाऊ शकत नाही.
शक्तिशाली (संरचना-जागरूक + शीर्षलेख + मेटाडेटा):
दस्तऐवज हेडिंगद्वारे विभाजित करा; प्रत्येक भागाला विभाग शीर्षक जोडा;स्रोत, पृष्ठ, तारीख आणि गोपनीयता मेटाडेटा संलग्न करा; टेबलरोज त्यांच्या शीर्षलेखांसह साध्या मजकुरात रूपांतरित करा. # परिणाम: केंद्रित, संदर्भित, फिल्टर करण्यायोग्य, स्त्रोत करण्यायोग्य.
तीन मिनी केसेस
केस 1 - पेंटिंग आपत्ती. एका फायनान्स टीमने 200 पानांची किंमत यादी अंध हार्ड कटिंगसह विभागली; सारणीच्या पंक्ती यादृच्छिकपणे विभाजित केल्या गेल्या. "एक्स उत्पादनाची किंमत काय आहे?" मॉडेलने चुकीची ओळ वाचली आणि चुकीची किंमत दिली (12 पैकी 9 प्रकरणे चुकीची आहेत). जेव्हा मी "उत्पादन: ... | किंमत: ... | युनिट: ..." स्वरूपात सारणीच्या पंक्ती साध्या मजकुरात रूपांतरित केल्या तेव्हा त्रुटी 12 पैकी 0 पर्यंत कमी झाली.
केस 2 - अत्यंत मोठा भाग. विकीमध्ये, प्रत्येक पान एका भागाने बनलेले असते (काही म्हणतात 3,000 टोकन). एम्बेडिंग अस्पष्ट आहे कारण एका पृष्ठावर "रजा", "ओव्हरटाइम" आणि "पेरोल" आहे; रजेच्या प्रश्नासंदर्भात कामाच्या तासांचा विभागही कार्यान्वित झाला. जेव्हा पृष्ठे शीर्षकानुसार मध्यम आकारात विभागली गेली, तेव्हा recall@5 64% वरून 91% पर्यंत वाढले.
केस 3 - ओव्हरलॅपशिवाय कापलेले वाक्य. कायदेशीर संघासाठी 250 टोकन निश्चित कट, ओव्हरलॅप नाही. एक गंभीर व्याख्या दोन भागांच्या सीमेवर पडली आणि दोन भागात विभागली; एक किंवा दुसऱ्यामध्ये पूर्ण उत्तर नाही. जेव्हा 60 टोकन ओव्हरलॅप जोडले गेले, तेव्हा तीच व्याख्या एका तुकड्यात अबाधित राहिली आणि योग्य उत्तर दिले गेले.
सामान्य चुका
- आंधळा निश्चित कट: मध्यभागी वाक्ये आणि सारण्या विभाजित करा; अर्थ हरवला आहे.
- ओव्हरलॅप शून्यावर सोडणे: सीमेवर येणारी माहिती विभागली जाते आणि गमावली जाते.
- मेटाडेटा जोडत नाही: फिल्टरिंग आणि स्त्रोत प्रदर्शन अशक्य होते.
- टेबल कच्चे सोडणे: मॉडेल टेबलच्या संरचनेचे निराकरण करू शकत नाही; ओळींना साध्या मजकुरात रूपांतरित करा.
- एक रणनीती लादणे: पीडीएफ, कोड आणि टेबल एकाच पद्धतीने विभाजित केलेले नाहीत; शैलीशी जुळवून घ्या.
खबरदारी: एकदा चंकिंग सेट करू नका आणि विसरू नका. नवीन दस्तऐवज प्रकार येताच पुनर्प्राप्ती गुणवत्ता पुन्हा मोजा (नवीन प्रणाली, स्कॅन केलेली PDFs) खराब इनपुट डेटा म्हणजे वाईट प्रतिसाद ("कचरा आत, कचरा बाहेर").
सारांशात
- चंक हे पुनर्प्राप्तीचे सर्वात लहान एकक आहे; खूप मोठे किंवा खूप लहान नाही - ते सामग्रीनुसार संतुलित असावे.
- भागाचा आकार फोकस-संदर्भ शिल्लक दर्शवतो; ओव्हरलॅप सीमा नुकसान व्यवस्थापित करते.
- ब्रॅकेट-आधारित आणि रचना-जागरूक चंकिंग हा बहुतेक जनरेशन सिस्टमचा प्रारंभ बिंदू आहे; सिमेंटिक चंकिंग दर्जेदार पण महाग आहे.
- टेबल, स्क्रिप्ट आणि चॅट सारख्या प्रकारांना त्यांच्या स्वतःच्या धोरणांची आवश्यकता असते; सारण्यांना साध्या मजकुरात रूपांतरित करा.
- प्रत्येक ट्रॅकमध्ये स्त्रोत/तारीख/धडा/गोपनीयता मेटाडेटा आणि विभाग शीर्षक जोडा; हे फिल्टरिंग आणि उद्धरणांचा आधार आहे.
अर्ज कार्य
तुम्ही निवडलेल्या दस्तऐवजाचा विभाग तीन वेगवेगळ्या प्रकारे खंडित करा: (1) 200 टोकनचे छोटे तुकडे, (2) 500 टोकनचे मध्यम तुकडे (70 टोकन ओव्हरलॅप), (3) एकल मोठे तुकडे. प्रत्येक रणनीतीसाठी समान 3 प्रश्न विचारा, कोणता तुकडा आणायचा हे व्यक्तिचलितपणे चिन्हांकित करा आणि त्या दस्तऐवजासाठी कोणती रणनीती सर्वोत्तम कार्य करते याचे कारण लिहा. नंतर प्रत्येक ट्रॅकमध्ये किमान चार मेटाडेटा फील्ड आणि एक "धडा शीर्षक" जोडा. दस्तऐवजात सारणी असल्यास, सारणी पंक्ती "फील्ड:मूल्य" स्वरूपात साध्या मजकुरात रूपांतरित करा.
चेकलिस्ट
- [ ] मी सांगू शकतो की भाग हे पुनर्प्राप्तीचे सर्वात लहान एकक आहे आणि आकार हा फोकस-संदर्भ शिल्लक आहे.
- ओव्हरलॅप सीमारेषेचे नुकसान का टाळते हे मला माहीत आहे.
- मी ब्रॅकेट-आधारित, सिमेंटिक आणि स्ट्रक्चर-अवेअर चंकिंगमध्ये फरक करू शकतो.
- मी टेबल, कोड आणि चॅटसाठी धोरण स्वीकारू शकतो.
- [ ] मी प्रत्येक ट्रॅकमध्ये मेटाडेटा आणि अध्याय शीर्षक जोडून पुनर्प्राप्ती अधिक मजबूत करतो.