লাভ:
- সংখ্যাগতভাবে খণ্ডের আকার, ওভারল্যাপ এবং শব্দার্থিক চাঙ্কিং ট্রেডঅফ মূল্যায়ন করুন
- বিভিন্ন নথির প্রকারের (পিডিএফ, টেবিল, কোড, চ্যাট লগ) জন্য উপযুক্ত চঙ্কিং কৌশল নির্বাচন করা
- প্রতিটি অংশে মেটাডেটা যোগ করে পুনরুদ্ধারের গুণমান এবং ফিল্টারিংকে শক্তিশালী করুন
এটি RAG-তে সবচেয়ে উপেক্ষিত কিন্তু সবচেয়ে সিদ্ধান্তমূলক পদক্ষেপ: আপনি কীভাবে নথিটি ভেঙে ফেলবেন। একে বলা হয় চঙ্কিং। এমনকি যদি আপনি একই মডেলকে একই নথি দেন, খারাপ অংশের কারণে পুনরুদ্ধার ভুল অংশ ফেরত দেয় এবং মডেলটি কখনই একটি দুর্দান্ত উত্তর তৈরি করবে না। এই ইউনিটে, আমরা ফ্র্যাগমেন্টেশন কৌশলগুলি কভার করি, কীভাবে নথির ধরন অনুসারে সেগুলিকে মানিয়ে নেওয়া যায় এবং প্রতিটি খণ্ডে অর্থপূর্ণ মেটাডেটা কীভাবে যুক্ত করা যায়।
কেন আমরা টুকরো টুকরো করি?
তিনটি কারণ আছে। প্রথমত, এমবেডিং মডেলগুলি একটি নির্দিষ্ট দৈর্ঘ্য পর্যন্ত পাঠ্যকে একটি অর্থপূর্ণ ভেক্টরে রূপান্তর করে; যদি একটি সম্পূর্ণ 40-পৃষ্ঠার অধ্যায় একটি একক ভেক্টরে বদ্ধ করা হয়, তাহলে অর্থটি "অস্পষ্ট" হয়ে যায়। দ্বিতীয়ত, আমরা মডেলটিকে শুধুমাত্র সেই অংশটি দিতে চাই যা প্রসঙ্গ হিসাবে প্রয়োজন; সম্পূর্ণ নথি হস্তান্তর ব্যয়বহুল এবং বিভ্রান্তিকর. তৃতীয়, পুনরুদ্ধার সুনির্দিষ্ট হওয়ার জন্য, অনুসন্ধান ইউনিটটি ছোট এবং ফোকাস করা আবশ্যক।
সুতরাং খণ্ড হল পুনরুদ্ধারের ক্ষুদ্রতম একক। এটি খুব বড় বা খুব ছোট হওয়া উচিত নয় - ঠিক ঠিক।
খণ্ডের আকার এবং ওভারল্যাপ ব্যালেন্স
দুটি প্রধান সেটিংস রয়েছে: খণ্ডের আকার (একটি খণ্ডে কতগুলি টোকেন/শব্দ থাকবে) এবং ওভারল্যাপ (প্রতিবেশী খণ্ডগুলির দ্বারা ভাগ করা অংশ)৷
খুব ছোট অংশ (যেমন 100 টোকেন): ফোকাস করা কিন্তু প্রসঙ্গ থেকে সংযোগ বিচ্ছিন্ন। তিনি বলেছেন "14 দিনের জন্য", কিন্তু যা 14 দিন বাকি আছে তা আগের বাক্যে আছে। খুব বড় অংশ (যেমন 2000 টোকেন): প্রসঙ্গ সংরক্ষণ করে কিন্তু অনেক থ্রেড মিশ্রিত হয়; এমবেডিং গোলমাল হয়ে যায় এবং অপ্রাসঙ্গিক বিষয় একত্রিত হয়।
ওভারল্যাপ সীমানা সমস্যা সমাধান করে। যদি একটি বাক্য ঠিক দুটি অংশের সীমানায় পড়ে, তবে এটি ওভারল্যাপ না করে দুটিতে বিভক্ত হয় এবং এর অর্থ হারিয়ে যায়। 50-100 টোকেনের ওভারল্যাপ নিশ্চিত করে যে সীমার মধ্যে পড়া তথ্য অন্তত একটি অংশে অক্ষত থাকে।
খণ্ড আকার
সুবিধা
অসুবিধা
উপযুক্ত বিষয়বস্তু
ছোট (100-250 টোকেন)
উচ্চ সংবেদনশীলতা, ফোকাসড
প্রসঙ্গ ভেঙ্গে যেতে পারে
FAQ, ছোট নিবন্ধ, সংজ্ঞা
মাঝারি (300-600 টোকেন)
ভারসাম্য; অধিকাংশ দৃশ্যকল্প
-
পদ্ধতি, নীতি পাঠ্য
বড় (800-1500 টোকেন)
প্রসঙ্গ অখণ্ডতা
ঝাপসা এম্বেডিং
আখ্যান, দীর্ঘ ব্যাখ্যা
টিপ: আপনি কোথা থেকে শুরু করবেন তা না জানলে, 400-500 টোকেন খণ্ড এবং 50-80 টোকেন ওভারল্যাপ দিয়ে শুরু করুন; তারপর আপনার নিজের ডেটা দিয়ে পরিমাপ করুন এবং সামঞ্জস্য করুন। "সঠিক" আকার সর্বজনীন নয়, এটি প্রেক্ষাপটের উপর নির্ভর করে।
চঙ্কিং কৌশল
স্থির-আকার: প্রতিটি N টোকেনে পাঠ্য ছাঁটাই করে। এটা সহজ এবং দ্রুত, কিন্তু মধ্য-বাক্যকে বাধা দিতে পারে।
বিভাজক-ভিত্তিক (পুনরাবৃত্ত/বিভাজক): অনুচ্ছেদ অনুযায়ী ভাগ করে এবং তারপর বাক্যের সীমানা; এটি অর্থের অখণ্ডতাকে আরও ভালভাবে সংরক্ষণ করে। বেশিরভাগ উত্পাদন ব্যবস্থা এটি দিয়ে শুরু হয়।
শব্দার্থিক খণ্ড: এটি বাক্যগুলির এম্বেডিংগুলি দেখে এবং যেখানে বিষয় পরিবর্তন ঘটে সেখানে তাদের ভাগ করে। এটি সর্বোচ্চ মানের কিন্তু সবচেয়ে ব্যয়বহুল পদ্ধতি; বড় ভলিউম সঙ্গে, লেনদেন খরচ বৃদ্ধি.
কাঠামো-সচেতন: নথির কাঠামো যেমন শিরোনাম, বিভাগ, টেবিল ব্যবহার করে। উদাহরণস্বরূপ, একটি মার্কডাউন নথিকে শিরোনাম দ্বারা বিভক্ত করা নিশ্চিত করে যে প্রতিটি অংশ তার নিজস্ব শিরোনাম বহন করে।
ডকুমেন্ট টাইপ দ্বারা অভিযোজন
প্রতিটি নথি এক নয়। কৌশল প্রকারভেদে পরিবর্তিত হয়:
- PDF/নীতি পাঠ্য: বুকমার্ক-ভিত্তিক, মাঝারি আকার। পৃষ্ঠার উপরে/নীচের পুনরাবৃত্তিগুলি সাফ করুন (হেডার/ফুটার)।
- সারণি: রেখাটি প্রসঙ্গের বাইরে নেবেন না; হেডার তথ্য সহ প্রতিটি সারি রাখুন ("আইটেম: X, মূল্য: Y, স্টক: Z")। কাঁচা টেবিলটিকে প্লেইন টেক্সটে রূপান্তর করা প্রায়শই অপরিহার্য।
- কোড: ফাংশন/শ্রেণীর সীমানা দ্বারা বিভক্ত; পথের বাইরে একটি ফাংশন কাটা না.
- চ্যাট/টিকিট রেকর্ডিং: বার্তা বা কথোপকথন রাউন্ড দ্বারা বিভক্ত; কে কি বলেছে তার জ্ঞান বজায় রাখুন।
# বন্ধনী-ভিত্তিক খণ্ড (ধারণাগত) খণ্ড = বোল(টেক্সট, টার্গেট_সাইজ=450, # টোকেন ওভারল্যাপ=70, # টোকেন বন্ধনী=["\n\n", "\n", ".", " "] # অনুচ্ছেদ প্রথম, শব্দ শেষ)
প্রতিটি ট্র্যাক মেটাডেটা যোগ করুন
চাঙ্কিং শুধু "বিভাজন" নয়; প্রতিটি টুকরা সমৃদ্ধ করা হয়. আপনি ট্র্যাকের সাথে সংযুক্ত প্রতিটি ট্যাগ ভবিষ্যত ফিল্টারিং এবং উত্স উদ্ধৃতির জন্য স্বর্ণে মূল্যবান।
# সমৃদ্ধ খণ্ড (ধারণাগত){ "টেক্সট": "1-5 বছরের পরিষেবা সহ বার্ষিক বেতনের ছুটি হল 14 দিন...", "মেটাডেটা": { "সোর্স": "ik_el_kitabi_v7.pdf", "বিভাগ": "5.2 বার্ষিক ছুটি", "পৃষ্ঠা": 23, "তারিখ"", "62 ভাগ": "202 ভাগ "গোপনীয়তা": "অভ্যন্তরীণ" }}
আরেকটি শক্তিশালী কৌশল হল একটি প্রাসঙ্গিক শিরোনাম যোগ করা: প্রতিটি অংশের শুরুতে অধ্যায়ের শিরোনাম লেখা। এইভাবে, এমনকি "14 দিনের জন্য" এর মতো একটি বিচ্ছিন্ন অংশ "বার্ষিক ছুটি - 14 দিন" হিসাবে আরও ভাল এমবেড করা এবং আরও অর্থপূর্ণ।
দুর্বল চাঙ্কিং/স্ট্রং চাঙ্কিং
দুর্বল (অন্ধ হার্ডকাট, কোন মেটাডেটা নেই):
প্রতি 1000 অক্ষরে পাঠ্য ছেঁটে দিন। শুধুমাত্র টেক্সট রাখুন। # ফলাফল: টেবিলগুলি মাঝখানে বিভক্ত করা হয়েছে, "14 দিন" প্রসঙ্গ ছাড়াই রয়ে গেছে, # এটি কোন নথি থেকে এসেছে তা জানা নেই, কোন ফিল্টার করা যাবে না।
শক্তিশালী (কাঠামো-সচেতন + হেডার + মেটাডেটা):
শিরোনাম দ্বারা নথি ভাগ করুন; প্রতিটি অংশে বিভাগের শিরোনাম যোগ করুন; উত্স, পৃষ্ঠা, তারিখ এবং গোপনীয়তা মেটাডেটা সংযুক্ত করুন; টেবিলরোগুলিকে তাদের হেডার সহ প্লেইন টেক্সটে রূপান্তর করুন। # ফলাফল: ফোকাসড, প্রাসঙ্গিক, ফিল্টারযোগ্য, উৎসযোগ্য।
তিনটি মিনি কেস
কেস 1 - পেইন্টিং বিপর্যয়। একটি ফাইন্যান্স দল 200-পৃষ্ঠার মূল্য তালিকাকে অন্ধ হার্ড কাটিংয়ের সাথে ভাগ করেছে; টেবিল সারি এলোমেলোভাবে বিভক্ত ছিল. "পণ্য X এর দাম কত?" মডেলটি ভুল লাইন পড়েছে এবং ভুল মূল্য দিয়েছে (12টির মধ্যে 9টি ক্ষেত্রে ভুল)। যখন আমি টেবিলের সারিগুলিকে "পণ্য: ... | মূল্য: ... | ইউনিট: ..." বিন্যাসে প্লেইন টেক্সটে রূপান্তর করি তখন ত্রুটিটি 12-এর মধ্যে 0-তে কমে যায়।
কেস 2 - অত্যন্ত বড় অংশ। একটি উইকিতে, প্রতিটি পৃষ্ঠা একক খণ্ড দিয়ে তৈরি (কেউ কেউ বলে 3,000 টোকেন)। এমবেডিংটি অস্পষ্ট কারণ একটি পৃষ্ঠায় "ছুটি", "ওভারটাইম" এবং "পে-রোল" রয়েছে; ছুটির প্রশ্নে কর্মঘণ্টা বিভাগও কার্যকর হয়েছে। পৃষ্ঠাগুলিকে শিরোনাম অনুসারে মাঝারি আকারে ভাগ করা হলে, recall@5 64% থেকে বেড়ে 91% হয়েছে৷
কেস 3 — ওভারল্যাপ ছাড়াই কাটা বাক্য। একটি আইনি দলের জন্য 250 টোকেন নির্দিষ্ট কাটা, কোন ওভারল্যাপ নেই। একটি সমালোচনামূলক সংজ্ঞা দুটি অংশের সীমানায় পড়ে এবং দুটি ভাগে বিভক্ত হয়; একটি বা অন্যটির মধ্যে সম্পূর্ণ উত্তর নেই। যখন 60 টোকেন ওভারল্যাপ যোগ করা হয়েছিল, একই সংজ্ঞা এক টুকরোতে অক্ষত ছিল এবং সঠিক উত্তরটি ফেরত দেওয়া হয়েছিল।
সাধারণ ভুল
- ব্লাইন্ড ফিক্সড কাট: মাঝখানে বাক্য এবং টেবিল বিভক্ত করে; অর্থ হারিয়ে গেছে।
- ওভারল্যাপকে শূন্যে ছেড়ে দেওয়া: সীমানায় পড়ে থাকা তথ্য বিভক্ত এবং হারিয়ে যায়।
- মেটাডেটা যোগ না করা: ফিল্টারিং এবং উৎস প্রদর্শন অসম্ভব হয়ে পড়ে।
- টেবিল কাঁচা রেখে: মডেল টেবিল গঠন সমাধান করতে পারে না; লাইনগুলিকে প্লেইন টেক্সটে রূপান্তর করুন।
- একটি কৌশল আরোপ করা: পিডিএফ, কোড এবং টেবিল একই পদ্ধতি দ্বারা বিভক্ত করা হয় না; ঘরানার সাথে মানিয়ে নিন।
সতর্কতা: একবার চাঙ্কিং সেট করবেন না এবং ভুলে যাবেন না। নতুন নথির ধরন আসার সাথে সাথে পুনরুদ্ধারের গুণমান পুনরায় পরিমাপ করুন (একটি নতুন সিস্টেম থেকে টিকিট, স্ক্যান করা PDF)। খারাপ ইনপুট ডেটা মানে খারাপ প্রতিক্রিয়া ("আবর্জনা ভিতরে, আবর্জনা আউট")।
সংক্ষেপে
- খণ্ড হল পুনরুদ্ধারের ক্ষুদ্রতম একক; খুব বড় বা খুব ছোট নয় - বিষয়বস্তু অনুসারে এটি ভারসাম্যপূর্ণ হওয়া উচিত।
- খণ্ডের আকার ফোকাস-প্রসঙ্গ ভারসাম্য নির্দেশ করে; ওভারল্যাপ সীমানা ক্ষতি পরিচালনা করে।
- বন্ধনী-ভিত্তিক এবং কাঠামো-সচেতন খণ্ড হল বেশিরভাগ প্রজন্মের সিস্টেমের সূচনা বিন্দু; শব্দার্থিক খণ্ড ভাল মানের কিন্তু ব্যয়বহুল।
- টেবিল, স্ক্রিপ্ট এবং চ্যাটের মতো প্রকারের জন্য তাদের নিজস্ব কৌশল প্রয়োজন; টেবিলগুলিকে প্লেইন টেক্সটে রূপান্তর করুন।
- প্রতিটি ট্র্যাকে উত্স/তারিখ/অধ্যায়/গোপনীয়তা মেটাডেটা এবং বিভাগের শিরোনাম যোগ করুন; এটি ফিল্টারিং এবং উদ্ধৃতির ভিত্তি।
আবেদন টাস্ক
আপনি যে নথির একটি অংশ বেছে নিয়েছেন তা তিনটি ভিন্ন উপায়ে ভেঙে দিন: (1) 200 টোকেনের ছোট টুকরা, (2) 500 টোকেনের মাঝারি টুকরো (70 টোকেন ওভারল্যাপ), (3) একক বড় টুকরা৷ প্রতিটি কৌশলের জন্য একই 3টি প্রশ্ন জিজ্ঞাসা করুন, কোন অংশটি আনতে হবে তা ম্যানুয়ালি চিহ্নিত করুন এবং সেই নথির জন্য কোন কৌশলটি সবচেয়ে ভাল কাজ করে তার যুক্তি লিখুন। তারপরে প্রতিটি ট্র্যাকে কমপক্ষে চারটি মেটাডেটা ক্ষেত্র এবং একটি "অধ্যায়ের শিরোনাম" যোগ করুন। যদি নথিতে একটি টেবিল থাকে, তাহলে "ক্ষেত্র: মান" বিন্যাসে একটি টেবিল সারিকে প্লেইন টেক্সটে রূপান্তর করুন।
চেকলিস্ট
- [ ] আমি বলতে পারি যে খণ্ড হল পুনরুদ্ধারের ক্ষুদ্রতম একক এবং আকার হল ফোকাস-প্রসঙ্গ ভারসাম্য।
- [ ] আমি জানি কেন ওভারল্যাপ সীমানা ক্ষতি প্রতিরোধ করে।
- [ ] আমি বন্ধনী-ভিত্তিক, শব্দার্থিক এবং গঠন-সচেতন খণ্ডের মধ্যে পার্থক্য করতে পারি।
- [ ] আমি টেবিল, কোড এবং চ্যাটের জন্য কৌশলটি মানিয়ে নিতে পারি।
- [ ] আমি প্রতিটি ট্র্যাকে মেটাডেটা এবং অধ্যায়ের শিরোনাম যোগ করে পুনরুদ্ধারকে শক্তিশালী করি।