ইউনিট 4 / 11

পুনরুদ্ধারের কৌশল: টপ-কে, হাইব্রিড, রি-র্যাঙ্কিং

লাভ:

  • হাইব্রিড অনুসন্ধান বাস্তবায়ন করা যা টপ-কে নির্বাচন এবং শব্দার্থিক এবং কীওয়ার্ড অনুসন্ধানকে একত্রিত করে
  • পুনরায় র‌্যাঙ্কিং সহ প্রথম অনুসন্ধানের নির্ভুলতা বৃদ্ধি করা
  • ক্যোয়ারী ট্রান্সফরমেশন এবং HyDE এর মতো কৌশলগুলির মাধ্যমে কঠিন প্রশ্নগুলিকে আরও অনুসন্ধানযোগ্য করে তোলা

আপনি নথিগুলিকে সুন্দরভাবে টুকরো টুকরো করে ভেক্টর ডাটাবেসে রাখুন। এখন আসল কাজ: ব্যবহারকারী যখন একটি প্রশ্ন জিজ্ঞাসা করে তখন সঠিক অংশগুলি আনা। একে পুনরুদ্ধার বলা হয় এবং এটি RAG মানের মেরুদণ্ড। "পুনরুদ্ধার গুণমান = RAG গুণমান" বাক্যাংশটি মনে রাখবেন; এই ইউনিট ঠিক সেই গুণমান উন্নত করার শিল্প। আমরা টপ-কে নির্বাচন থেকে হাইব্রিড অনুসন্ধান, রি-র্যাঙ্কিং থেকে কোয়েরি রূপান্তর পর্যন্ত ব্যবহারিক কৌশলগুলি কভার করব।

টপ-কে: আমরা কতগুলো পিস আনব?

সবচেয়ে মৌলিক সেটিং: কত টুকরা (k) অনুসন্ধান থেকে ফিরে. আপনি যদি কম (k=1) আনেন তবে সঠিক অংশটি হারিয়ে যাওয়ার উচ্চ ঝুঁকি রয়েছে; আপনি যদি খুব বেশি (k=20) যোগ করেন, তাহলে এটি মডেলে শব্দ যোগ করবে এবং টোকেন খরচ বৃদ্ধি পাবে।

দুটি ধারণার মধ্যে পার্থক্য কর। স্মরণ করুন: যে হারে সঠিক অংশটি পুনরুদ্ধার করা হয়েছে তাদের মধ্যে। যথার্থতা: যে হারে কি পুনরুদ্ধার করা হয় তা প্রাসঙ্গিক। k বাড়লে রিকল বাড়ে কিন্তু নির্ভুলতা কমে। লক্ষ্য দুটির ভারসাম্য।

top-k

প্রভাব

উপযুক্ত পরিস্থিতি

1-3

উচ্চ নির্ভুলতা, মিস ঝুঁকি

সহজ, এক-উত্তর প্রশ্ন

4-8

ভারসাম্য; অধিকাংশ দৃশ্যকল্প

সাধারণ কর্পোরেট RAG

10-20

উচ্চতর স্মরণ, শব্দ বৃদ্ধি

পুনরায় র‌্যাঙ্কিং সহ (নীচে)

টিপ: সাধারণ এবং শক্তিশালী প্যাটার্ন: চওড়া আনুন (k=20), তারপর পুনরায় র‌্যাঙ্কিং সহ সংকীর্ণ করুন (শীর্ষ 4)। এইভাবে আপনি কিছু মিস করবেন না এবং আপনি মডেলটিকে পরিষ্কার প্রসঙ্গ দেবেন।

হাইব্রিড অনুসন্ধান: দুটি অনুসন্ধানের শক্তি

শব্দার্থিক (ভেক্টর) অনুসন্ধান অর্থ ক্যাপচার করে কিন্তু জিনিসগুলি মিস করে: সম্পূর্ণ পণ্য কোড ("XR-4471"), বিরল সংক্ষেপ, সঠিক নাম, সংস্করণ নম্বর। এই সঠিক-ম্যাচ টাস্কগুলির জন্য, পুরানো-স্কুল কীওয়ার্ড অনুসন্ধান - বিশেষ করে BM25 নামক ক্লাসিক অ্যালগরিদম - খুব ভাল।

হাইব্রিড অনুসন্ধান দুটিকে একত্রিত করে: উভয় শব্দার্থিক এবং কীওয়ার্ড অনুসন্ধান কাজ করে, ফলাফলগুলিকে একত্রিত করে। সুতরাং, একটি প্রশ্ন যেমন "ওয়ারেন্টি সময়কাল

মার্জিং সাধারণত RRF (রেসিপ্রোকাল র‌্যাঙ্ক ফিউশন) দিয়ে করা হয়: উভয় তালিকায় যে ট্র্যাকটি বেশি তা সামনে আসে।

# হাইব্রিড পুনরুদ্ধার (ধারণাগত)sem = ভেক্টর_সার্চ(প্রশ্ন, k=20) # অর্থ কী = bm25_search(প্রশ্ন, k=20) # fullwordresult = rrf_merge(sem, key)[:8] # দুটি ফিউজ করুন, শীর্ষ 8

পুনরায় র‌্যাঙ্কিং: দ্বিতীয় এবং স্মার্ট পাস

প্রথম কল দ্রুত কিন্তু অভদ্র হতে পারে. রি-র্যাঙ্কিং স্কোরগুলি প্রথম অনুসন্ধানের মাধ্যমে প্রত্যাবর্তনকারী প্রার্থীদের আরও শক্তিশালী মডেল (সাধারণত একটি ক্রস-এনকোডার — এমন একটি মডেল যা প্রশ্ন এবং প্যাসেজ একসাথে পড়ে এবং প্রাসঙ্গিকতা স্কোর করে) এবং সবচেয়ে প্রাসঙ্গিককে শীর্ষে নিয়ে যায়।

যুক্তিটি হল: প্রথম অনুসন্ধানটি প্রত্যাহারের জন্য বিপুল সংখ্যক প্রার্থীকে বরাদ্দ করে (20 প্রার্থী), পুনরায় র‌্যাঙ্কার নির্ভুলতার জন্য সেরা 4 জনকে নির্বাচন করে। এই দুই-পর্যায়ের পদ্ধতিটি একক-পর্যায়ের অনুসন্ধানের চেয়ে অনেক বেশি সঠিক। এটি কিছু বিলম্ব এবং অতিরিক্ত প্রক্রিয়াকরণ খরচ; লাভ হল মানের একটি উল্লেখযোগ্য বৃদ্ধি।

# দুই-পর্যায় পুনরুদ্ধার (ধারণাগত) প্রার্থী = হাইব্রিড_অনুসন্ধান (প্রশ্ন, k=20) # বিস্তৃত, দ্রুতস্কোর = reranker.score(প্রশ্ন, প্রার্থী) # প্রতিটি প্রার্থীর প্রসঙ্গের জন্য প্রাসঙ্গিক স্কোর = rated.rank()[:4] # শীর্ষ 4

ক্যোয়ারী রূপান্তর

কখনও কখনও সমস্যাটি অনুসন্ধানে নয়, তবে নিজেই প্রশ্নে। ব্যবহারকারী যদি জিজ্ঞাসা করে "দূরবর্তী কর্মীদের সম্পর্কে কি?" ', এটি একা চাওয়া যাবে না (এটি দূরবর্তী কর্মীদের জন্য কী তা স্পষ্ট নয়)। এখানে ক্যোয়ারী রূপান্তর কৌশল আছে:

  • পুনরায় লিখুন: প্রশ্নটিকে স্বতন্ত্র করতে কথোপকথনের ইতিহাস ব্যবহার করুন: "দূরবর্তী কর্মীরা বার্ষিক ছুটির অধিকারী কী?"
  • মাল্টি-কোয়েরি: একই প্রশ্নের 3টি ভিন্ন অভিব্যক্তি তৈরি করুন, তাদের সবগুলির সাথে অনুসন্ধান করুন, ফলাফলগুলি একত্রিত করুন। বিভিন্ন শব্দ বিভিন্ন টুকরা খুঁজে.
  • HyDE (হাইপোথেটিকাল ডকুমেন্ট এম্বেডিংস): প্রথমে মডেলটির একটি "সম্ভাব্য উত্তর" মুদ্রণ করুন, তারপর এম্বেড করুন এবং সেই কাল্পনিক উত্তরটি অনুসন্ধান করুন৷ কাল্পনিক উত্তর কখনও কখনও ভাল পাওয়া যায় কারণ এটি বাস্তব নথির কাছাকাছি।

# মাল্টি-কোয়েরি (ধারণাগত) ভেরিয়েন্ট = model.uret("এই প্রশ্নটি 3টি ভিন্ন উপায়ে প্রকাশ করুন: " + প্রশ্ন) tum_sonuc = [] v এর ভেরিয়েন্টের জন্য: all_sonuc += vector_intermediate(v, k=6)context = singular_and_order(tum_result)[:6]

দুর্বল পুনরুদ্ধার / শক্তিশালী পুনরুদ্ধার

দুর্বল (একক পর্যায়, শুধুমাত্র শব্দার্থবিদ্যা, ধ্রুবক k=3):

ফলাফল = ভেক্টর_সার্চ(প্রশ্ন, k=3)# সমস্যা: পণ্য কোড মিস করা হয়েছে, কঠিন প্রশ্নে সঠিক অংশ 3 লিখতে পারে না।

শক্তিশালী (হাইব্রিড + ওয়াইডক + রি-র্যাঙ্কিং + মাল্টি-কোয়েরি প্রয়োজনে):

প্রার্থী = hybrid_search(পুনঃলিখন(প্রশ্ন, অতীত), k=20) প্রসঙ্গ = reranker.score(প্রশ্ন, প্রার্থী).প্রথম(4)# সঠিক মিল এবং অর্থ উভয়ই ধরা হয়েছে; এটি সেরা 4 মডেলে যায়।

তিনটি মিনি কেস

কেস 1 — পণ্য কোড পালিয়ে গেছে। একটি সমর্থন দলে একটি বিশুদ্ধ শব্দার্থিক অনুসন্ধান "RTX-9080 ড্রাইভার ত্রুটি" প্রশ্নে "RTX-9080" শব্দার্থ খুঁজে পায়নি; সে একই নামে অন্যান্য পণ্য নিয়ে আসছিল। যখন হাইব্রিড অনুসন্ধান যোগ করা হয়েছিল, তখন সঠিক কোড মিল ঘটেছে এবং সঠিক নিবন্ধগুলি ফেরত দেওয়ার হার 58% থেকে 92% পর্যন্ত বৃদ্ধি পেয়েছে।

কেস 2 — পুনরায় র‌্যাঙ্কিং পার্থক্য। একজন প্যারালিগাল k=5 এর সাথে কাজ করছিলেন কিন্তু সঠিক আইটেমটি বেশিরভাগ সময় 7-10 হয়। তিনি পদমর্যাদায় অবস্থান করছিলেন। যখন k=20 + রি-র‍্যাঙ্কিং চালু করা হয়েছিল, সঠিক নিবন্ধটি শীর্ষ 3-এ থাকার হার 61% থেকে 94% পর্যন্ত বৃদ্ধি পেয়েছে; বিলম্ব মাত্র 300ms বেড়েছে — একটি গ্রহণযোগ্য আপস৷

কেস 3 - প্রসঙ্গ ছাড়াই ফলো-আপ প্রশ্ন। একজন এইচআর সহকারীতে, ব্যবহারকারী জিজ্ঞাসা করেন "পার্ট-টাইমারদের সম্পর্কে কি?" আমি জিজ্ঞাসা করলে, সিস্টেমটি অপ্রাসঙ্গিক অংশ নিয়ে আসে। প্রশ্নটি পুনরায় লেখার মাধ্যমে (অতীত থেকে "বার্ষিক ছুটি" প্রসঙ্গ টেনে এবং "অংশকালীন কর্মচারীরা বার্ষিক ছুটির অধিকারী" যোগ করে), সঠিক উত্তরের হার 40% থেকে 86% বৃদ্ধি পেয়েছে৷

সাধারণ ভুল

  • শুধুমাত্র শব্দার্থিক অনুসন্ধানের উপর নির্ভর করা: পণ্য কোড, সংক্ষেপণ, সঠিক নাম মিস করা হয়েছে; হাইব্রিড যোগ করুন।
  • কে খুব ছোট রাখা: সঠিক অংশটি তালিকায় প্রবেশ করতে পারে না; এটিকে প্রশস্ত করুন এবং পুনরায় র‌্যাঙ্ক দিয়ে সংকীর্ণ করুন।
  • পুনরায় র‌্যাঙ্কিংয়ের কথা ভাববেন না: প্রথম অনুসন্ধানটি অভদ্র; দ্বিতীয় স্মার্ট পাস উল্লেখযোগ্যভাবে গুণমান উন্নত করে।
  • ফলো-আপ প্রশ্নের জন্য অনুসন্ধান করা হচ্ছে: প্রসঙ্গ ছাড়া একটি প্রশ্ন অর্থহীনের জন্য অনুসন্ধান করে; পুনর্লিখন
  • অন্ধভাবে k বৃদ্ধি (পুনরায়-র্যাঙ্ক ছাড়া): মডেল শব্দে ভরা, প্রতিক্রিয়া বিকৃত হয় এবং খরচ বৃদ্ধি পায়।
সাবধান: প্রতিটি কৌশল খরচ এবং বিলম্ব যোগ করে। মাল্টি-কোয়েরি মানে 3-গুণ অনুসন্ধান, পুনরায় র‌্যাঙ্কিং মানে অতিরিক্ত মডেল কল। প্রথমে সহজ হাইব্রিড + যুক্তিসঙ্গত k দিয়ে শুরু করুন; যেখানে সত্যিই প্রয়োজন সেখানে ভারী কৌশলগুলি পরিমাপ করুন এবং যোগ করুন। পরিমাপ ছাড়া যোগ করা.

সংক্ষেপে

  • টপ-কে হল রিকল এবং নির্ভুলতার মধ্যে ভারসাম্য; সাধারণত 4-8 একটি ভাল শুরু।
  • হাইব্রিড অনুসন্ধান কীওয়ার্ড (BM25) অনুসন্ধানের সাথে শব্দার্থিক অনুসন্ধানকে একত্রিত করে; সঠিক মিল পুনরুদ্ধার করে।
  • রি-র‍্যাঙ্কিং একটি শক্তিশালী মডেল সহ বিস্তৃত প্রাথমিক অনুসন্ধান থেকে প্রার্থীদের পুনরায় স্কোর করে এবং সেরাদের নির্বাচন করে।
  • ক্যোয়ারী ট্রান্সফরমেশন (পুনরায় লেখা, মাল্টি-কোয়েরি, হাইডিই) কঠিন এবং প্রসঙ্গ-মুক্ত প্রশ্নগুলি অনুসন্ধানযোগ্য করে তোলে।
  • শক্তিশালী প্যাটার্ন: বিস্তৃত আনা → হাইব্রিডের সাথে মার্জ → রি-র্যাঙ্ক সহ সংকীর্ণ; কিন্তু পরিমাপ করে প্রতিটি কৌশল যোগ করুন।

আবেদন টাস্ক

পূর্ববর্তী ইউনিটের ডেটা সহ 6টি কঠিন প্রশ্ন প্রস্তুত করুন: কমপক্ষে 2টি সঠিক মিলের প্রয়োজন (পণ্য কোড, সংক্ষেপণ, তারিখ), 2টি শব্দার্থিক (বিভিন্ন শব্দ সহ একই বিষয়), প্রসঙ্গ ছাড়া 2টি ফলো-আপ প্রশ্ন। (1) প্রথমে প্রতিটি প্রশ্নকে একটি বিশুদ্ধ শব্দার্থিক অনুসন্ধান হিসাবে চিন্তা করুন এবং ম্যানুয়ালি চিহ্নিত করুন কোন অংশগুলি আসবে। (2) হাইব্রিড এবং পুনরায় র‌্যাঙ্কিং যুক্ত করে একই প্রশ্ন পুনঃমূল্যায়ন করুন। (3) প্রসঙ্গ ছাড়াই ফলো-আপ প্রশ্নগুলি পুনরায় লিখুন। একটি ট্যাবুলার আকারে নোট করুন কোন কৌশলটি কোন প্রশ্নের ধরনে পার্থক্য করে।

চেকলিস্ট

  • [ ] আমি জানি top-k হল একটি রিকল-নির্ভুল ভারসাম্য এবং একটি যুক্তিসঙ্গত প্রারম্ভিক পরিসর।
  • [ ] আমি ব্যাখ্যা করতে পারি কেন হাইব্রিড অনুসন্ধান সঠিক মিল পুনরুদ্ধার করে।
  • [ ] আমি পুনরায় র‌্যাঙ্কিংয়ের দ্বি-পদক্ষেপের যুক্তি প্রয়োগ করতে পারি (বিস্তৃত → স্মার্ট সংকীর্ণ)।
  • [ ] আমি প্রসঙ্গ ছাড়াই ফলো-আপ প্রশ্নগুলি পুনরায় লেখার প্রয়োজনীয়তা স্বীকার করি৷
  • [ ] আমি নিশ্চিত করছি যে আমি পরিমাপের মাধ্যমে ভারী কৌশল যোগ করেছি, পরিমাপ করে নয়।