در چشمانداز بهسرعت در حال تحول تولید تقویتشده با بازیابی (RAG)، یکی از حیاتیترین تصمیماتی که یک مهندس هوش مصنوعی با آن روبرو است، انتخاب معماری امبدینگ مناسب است. انتخاب بین بای-انکودرها و کراس-انکودرها بهطور بنیادین تعادل بین تأخیر سیستم و دقت بازیابی را تعیین میکند. برای توسعهدهندگان متوسط و پیشرفتهای که پایپلاینهای RAG در سطح تولید میسازند، درک این ظرافتهای معماری نه تنها یک بحث تئوریک است، بلکه برای بهینهسازی تجربه کاربری و هزینههای محاسباتی ضروری است.
بای-انکودر: سرعت در مقیاس
بای-انکودرها موتور محرک پایگاههای داده برداری هستند. در این معماری، پرسوجو و سند بهطور مستقل توسط دو شاخه شبکه عصبی یکسان پردازش میشوند. هر کدام به یک بردار با بعد ثابت کدگذاری میشوند و شباهت با استفاده از معیارهایی مانند شباهت کسینوسی یا حاصلضرب نقطهای محاسبه میشود.
مزیت اصلی این رویکرد کارایی است. از آنجا که اسناد تنها یک بار کدگذاری شده و در یک نمایه ذخیره میشوند، پرسوجوها میتوانند در عرض میلیثانیه با استفاده از جستجوی نزدیکترین همسایه تقریبی (ANN) پاسخ داده شوند. این موضوع بای-انکودرها را برای مراحل بازیابی top-k ایدهآل میسازد، جایی که شما میلیونها سند را اسکن میکنید.
با این حال، این سرعت بهای خود را دارد. بای-انکودرها اغلب در درک ظرافتهای معنایی مشکل دارند، زیرا پرسوجو و سند را به عنوان ورودیهای مستقل در نظر میگیرند و برهمکنشهای ظریف بین آنها را در مرحله کدگذاری از دست میدهند.
کراس-انکودر: دقت از طریق برهمکنش
کراس-انکودرها، برعکس، هم پرسوجو و هم سند را همزمان به عنوان ورودی دریافت میکنند. آنها جفت متن_concatenated_ را از طریق یک مدل ترانسفورمر پردازش میکنند که به مکانیسم توجه اجازه میدهد تا برهمکنش عمیقی بین پرسوجو و سند ایجاد کند. این امر منجر به یک نمره مرتبطسازی میشود که درک معنایی بسیار عمیقتری را بازتاب میدهد.
نکته منفی چیست؟ تأخیر. از آنجا که مدل باید هر جفت کاندیدا را بهطور جداگانه پردازش کند، کراس-انکودرها نمیتوانند از نمایههای برداری برای پیشفیلتر کردن استفاده کنند. آنها از نظر محاسباتی پرهزینه و کند هستند و معمولاً برای هر مقایسه به زمان پردازنده (CPU) نیاز دارند، نه یک جستجوی برداری سریع با شتاب GPU.
پیادهسازی رویکرد ترکیبی
استاندارد صنعتی برای RAG با عملکرد بالا، انتخاب یکی به جای دیگری نیست، بلکه ترکیب آنهاست. این استراتژی «مرتبسازی مجدد» از یک بای-انکودر برای بازیابی اولیه گسترده و از یک کراس-انکودر برای مرتبسازی دقیق کاندیداهای برتر استفاده میکند.
در اینجا نحوه پیادهسازی این منطق با استفاده از پایتون و کتابخانههای محبوب مانند LangChain یا SentenceTransformers آمده است:
from sentence_transformers import CrossEncoder
# 1. بازیابی اولیه با بای-انکودر (سریع)
# فرض کنید 'vector_db' یک نمونه Pinecone/Milvus است
# و 'initial_results' صد سند برتر یافت شده هستند
query = "What are the tax implications of the new AI regulation?"
initial_results = vector_db.similarity_search(query, k=100)
# 2. مرتبسازی مجدد با کراس-انکودر (دقیق اما کند)
# آمادهسازی جفتها: لیستی از تاپلهای (پرسوجو، سند)
pairs = [(query, doc.page_content) for doc in initial_results]
# بارگذاری یک مدل کراس-انکودر از پیش آموزشدیده
model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
# دریافت نمرات برای تمام جفتها
scores = model.predict(pairs)
# 3. مرتبسازی بر اساس نمره مرتبطسازی و انتخاب 5 مورد برتر
sorted_results = sorted(zip(initial_results, scores), key=lambda x: x[1], reverse=True)
final_context = [res[0].page_content for res in sorted_results[:5]]
# استفاده از final_context برای تولید LLM
نتیجهگیری: تعادل ظریف
هنگام طراحی پایپلاین RAG خود، با یک بای-انکودر به دلیل مقیاسپذیری آن شروع کنید. اگر معیارهای دقت شما نشان میدهد که بازیابی اولیه در دسترس قرار دادن زمینههای مرتبط را از دست میدهد، یک مرتبکننده مجدد کراس-انکودر را به عنوان مرحله دوم معرفی کنید. این فرآیند دو مرحلهای به شما امکان میدهد تا تأخیر پایین را برای اکثر درخواستها حفظ کنید، در حالی که تضمین میکند زمینه نهایی ارسالشده به LLM از نظر معنایی دقیق است. با درک نقاط قوت هر مدل، میتوانید سیستمهای RAG بسازید که هم سریع و هم هوشمند باشند.