Evaluation

قياس جودة الاسترجاع في أنظمة RAG: تقييم صلة السياق وتقليل الضوضاء قبل التوليد

أصبحت أنظمة التوليد المعزز بالاسترجاع (RAG) المعيار الصناعي لربط نماذج اللغات الكبيرة (LLMs) بالبيانات الخاصة أو المملوكة. ومع ذلك، فإن نقطة الفشل الأكثر شيوعاً في خطوط أنابيب RAG ليست مرحلة التوليد، بل مرحلة الاسترجاع. إذا كان السياق المسترجع غير ذي صلة، أو يحتوي على ضوضاء، أو مجزأ، فسيؤدي ذلك حتماً إلى هذيان النموذج أو تقديم إجابات دون المستوى الأمثل، بغض النظر عن قوة النموذج الأساسي.

لبناء أنظمة RAG قوية، يجب على المهندسين تبني نهج "التقييم المبكر": يجب أن يحدث التقييم في خطوة الاسترجاع، قبل تمرير السياق إلى مولد النص. يستكشف هذا المقال كيفية قياس صلة السياق بدقة وكمية تقليل الضوضاء لضمان تقديم خطوط أنابيب RAG الخاصة بك لاستجابات عالية الجودة.

مشكلة التوليد الأعمى

تعتبر مقاييس التقييم التقليدية مثل ROUGE أو BLEU غير كافية لأنظمة RAG الحديثة لأنها تقارن النص المُولّد بإجابات مرجعية صحيحة (Ground-truth)، متجاهلةً جودة السياق الداعم. قد يولد النموذج إجابة متماسكة ولكن غير صحيحة واقعية بناءً على "ضوضاء" مسترجعة.

يتطلب التقييم الفعال التركيز على مقياسين رئيسيين:

  1. دقة السياق (Context Precision): هل يحتوي القطعة المسترجعة فعلياً على الإجابة؟
  2. استدعاء السياق (Context Recall): هل قمنا باسترجاع جميع المعلومات اللازمة للإجابة على الاستفسار؟

تنفيذ تقييم صلة السياق

أحد أكثر الطرق فعالية لقياس صلة السياق هو استخدام النموذج اللغوي نفسه كحكم. تتضمن هذه التقنية، التي تُعرف غالباً بـ "النموذج اللغوي كحكم" (LLM-as-a-Judge)، توجيه نموذج تقييم لتحديد ما إذا كانت قطعة محددة من النص المسترجع تدعم الاستفسار المقدم. إليك تنفيذ عملي باستخدام Python وLangChain:

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# Initialize the judge LLM
judge_llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# Define the prompt for evaluating relevance
relevance_prompt = ChatPromptTemplate.from_template("""
You are an expert evaluator for a RAG system. 
Given a query and a retrieved context chunk, determine if the context is relevant.
Answer with ONLY "Yes" or "No".

Query: {query}
Context: {context}
""")

def evaluate_relevance(query, context):
    chain = relevance_prompt | judge_llm
    response = chain.invoke({"query": query, "context": context})
    return "Yes" in response.content

# Example usage
query = "What is the return policy for item XYZ?"
context_chunk = "XYZ is a premium product model..."

is_relevant = evaluate_relevance(query, context_chunk)
print(f"Is context relevant? {is_relevant}")

يتيح لك هذا النهج حساب درجة دقة السياق، وهي نسبة القطع ذات الصلة إلى إجمالي القطع المسترجعة. تشير درجة الدقة المنخفضة إلى أن استراتيجية الاسترجاع الخاصة بك تجلب الكثير من الضوضاء.

قياس تقليل الضوضاء واستدعاء السياق

بينما تخبرنا الدقة عن الجودة، يخبرنا الاستدعاء (Recall) عن الاكتمال. لقياس استدعاء السياق، يمكنك استخدام تقنية تسمى "استرجاع ذي صلة بالإجابة". هنا، نفترض أنه إذا كانت الإجابة موجودة في قاعدة البيانات، فيجب أن تكون قابلة للاسترجاع. يمكنك مقارنة القطع المسترجعة بإجابة مرجعية صحيحة لمعرفة ما إذا كانت جميع الحقائق الرئيسية موجودة.

لتقليل الضوضاء، فكر في تنفيذ خطوة إعادة الترتيب باستخدام محركات التقاطع (Cross-encoder reranking). بينما يكون البحث المتجهي (الاسترجاع الكثيف) سريعاً، إلا أنه قد يكون غير دقيق. يمكن لنموذج محركات التقاطع إعادة ترتيب المستندات الـ K الأعلى التي يعيدها مخزن المتجهات من خلال حساب درجة تشابه لكل زوج (استفسار، مستند). هذا يقلل بشكل كبير من الضوضاء عن طريق دفع النتائج عالية التشابه غير ذات الصلة إلى أسفل القائمة.

from sentence_transformers import CrossEncoder

# Load a pre-trained cross-encoder model
model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')

# Query and list of candidate documents from vector search
query = "How to reset password?"
candidates = ["Click here...", "Password reset instructions...", "Welcome to the site..."]

# Compute relevance scores
scores = model.predict([(query, doc) for doc in candidates])

# Re-rank documents based on scores
ranked_docs = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True)
print(ranked_docs)

الخاتمة

تقييم جودة استرجاع RAG ليس مهمة لمرة واحدة، بل هي عملية مستمرة لمراقبة صلة السياق والضوضاء. من خلال تنفيذ حكام آليين لتقييم الصلة واستخدام إعادة الترتيب بمحركات التقاطع لتقليل الضوضاء، يمكن للمطورين ضمان تغذية نماذج اللغات الكبيرة بمعلومات عالية الجودة ودقيقة. يؤدي ذلك إلى تطبيقات ذكاء اصطناعي أكثر موثوقية ودقة وسهولة في الاستخدام. ابدأ بقياس جودة استرجاعك اليوم لإطلاق العنان للإمكانات الكاملة لهيكلية RAG الخاصة بك.

Share: