I Added A Reranker to My RAG Pipeline — It Broke Everything
আমি আমার RAG পাইপলাইনে একটি reranker যোগ করেছি। এটি সাথে সাথেই আমার টেস্টগুলো নষ্ট করে দিল।
ভার্সন ২-এ, আমি FAISS এবং BM25 ব্যবহার করে hybrid retrieval ব্যবহার করেছিলাম। এটি আমার ১৯টি টেস্ট প্রশ্নের সবকটিই সফলভাবে সম্পন্ন করেছিল। তারপর, প্রিসিশন (precision) উন্নত করার জন্য আমি একটি cross-encoder reranker যোগ করি।
এর তত্ত্বটি সহজ:
- Stage 1: একটি বিস্তৃত ক্যান্ডিডেট সেট পেতে দ্রুত retrieval ব্যবহার করুন।
- Stage 2: সেরাগুলি বেছে নিতে একটি স্মার্ট reranker ব্যবহার করুন।
এটি ইমপ্লিমেন্ট করতে ২০ মিনিট সময় লেগেছিল। এটি সাথে সাথেই আমার ১৯টি টেস্টের মধ্যে ২টি ফেল করে দিল।
ব্যর্থতাটি ঘটেছিল ডেটা ফরম্যাটের কারণে। আমার ডেটাতে এই ধরণের ঘন, টেবুলার চাঙ্ক (tabular chunks) রয়েছে: "Company: Zentara Robotics | CEO: Iris Kallas | Employees: 287"
cross-encoder মডেলটি ন্যাচারাল ল্যাঙ্গুয়েজ প্যারাগ্রাফের ওপর ভিত্তি করে প্রশিক্ষিত ছিল। যখন এটি একটি টেবিল রো (table row) দেখল, তখন এটি খুব কম স্কোর দিল। এটি ভেবেছিল যে চাঙ্কটি অপ্রাসঙ্গিক।
Hybrid retrieval উত্তরটি খুঁজে পেয়েছিল, কিন্তু reranker সেটি বাদ দিয়ে দিল।
আমি এটি ঠিক করার জন্য ৭টি ভিন্ন উপায় চেষ্টা করেছি:
- একটি বড় ক্যান্ডিডেট পুল ব্যবহার করা।
- reranker এবং retriever-এর স্কোর ব্লেন্ড করা।
- rank fusion ব্যবহার করা।
এর কোনোটিই কাজ করেনি। reranker-এর স্কোর এতটাই নেতিবাচক ছিল যে এটি অন্য সবকিছুকে ছাপিয়ে গিয়েছিল। মডেলটি শুধু র্যাঙ্কিং কমিয়ে দিচ্ছিল না, বরং এটি সক্রিয়ভাবে টেবিল ফরম্যাটটিকে প্রত্যাখ্যান করছিল।
আমি গণিত বা ম্যাথ ঠিক করার চেষ্টা করা বন্ধ করে দিলাম এবং স্ট্রাকচার পরিবর্তন করলাম।
reranker-কে সবকিছু সিদ্ধান্ত নিতে না দিয়ে, আমি আমার সেরা ফলাফলগুলোকে সুরক্ষিত করলাম। আমি একটি "guaranteed slot" কৌশল ব্যবহার করলাম:
- আপনি যদি সেরা ৩টি ফলাফল চান, তবে প্রথম Stage থেকে সেরা ২টি ফলাফল রেখে দিন।
- শুধুমাত্র ৩ নম্বর ফলাফলটি বেছে নিতে reranker ব্যবহার করুন।
এটি নিশ্চিত করে যে hybrid search-এর ফলাফলগুলো চূড়ান্ত তালিকায় থেকে যাচ্ছে। reranker শুধুমাত্র বাকি স্লটগুলোকে উন্নত করে।
ফলাফল: ১৯/১৯ টেস্ট পাস হয়েছে।
যা শিখলাম:
- Reranker মানেই তাৎক্ষণিক আপগ্রেড নয়। এগুলো স্ট্রাকচার্ড বা টেবুলার ডেটার ক্ষেত্রে পারফরম্যান্স কমিয়ে দিতে পারে।
- আপনার ইভ্যালুয়েশন সেট (evaluation set) হলো আপনার সেফটি নেট (safety net)। আমার ১৯টি টেস্ট না থাকলে, আমি একটি ত্রুটিপূর্ণ সিস্টেম রিলিজ করে ফেলতাম।
- যা কাজ করছে তাকে সুরক্ষিত রাখুন। যদি আপনার প্রথম পর্যায়ের retrieval ভালো হয়, তবে reranker-কে তা ওভাররাইড (override) করতে দেবেন না।
reranker ব্যবহারের আগে একটি শক্তিশালী retriever তৈরি করুন।
Optional learning community: https://t.me/GyaanSetuAi
