"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إتقان الإجابة على الاستعلام باستخدام RAG: التغلب على التحديات الرئيسية في بيانات الاجتماعات واسعة النطاق

إتقان الإجابة على الاستعلام باستخدام RAG: التغلب على التحديات الرئيسية في بيانات الاجتماعات واسعة النطاق

تم النشر بتاريخ 2025-01-14
تصفح:985

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

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

المنهج المبدئي: وضع الأساس للإجابة الفعالة على الاستفسارات
لقد بدأت بنموذج RAG الأساسي المصمم للجمع بين الاسترجاع وتوليد الاستجابة. تم استخدام تقنيتين أوليتين هما:

  1. التقطيع: تقسيم المستندات الكبيرة إلى أجزاء أصغر عن طريق حدود الجملة يؤدي إلى تحسين عملية الاسترجاع عن طريق تضييق نطاق البحث.

  2. التضمين وتخزين المتجهات: بعد التقطيع، تم تضمين كل مقطع وتخزينه في قاعدة بيانات متجهة، مما يتيح عمليات بحث فعالة.

ومع ذلك، كان لهذا الإعداد قيود. غالبًا ما أدى نهج التجزئة الأولي إلى استرجاع المعلومات غير ذات الصلة، وكانت الإجابات التي تم إنشاؤها تفتقر إلى الدقة والمواءمة مع غرض كل استعلام.

التحديات في الإجابة على استعلامات RAG واسعة النطاق

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

أكدت هذه التحديات الحاجة إلى نهج أكثر تقدمًا لتحسين الدقة في الإجابة على استعلام RAG.

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

Mastering Query Answering with RAG: Overcoming Key Challenges in Large-Scale Meeting Data

from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai.embeddings import OpenAIEmbeddings
from langchain.schema import Document

# Initialize OpenAI Embeddings with API key
openai_api_key = ""
embedder = OpenAIEmbeddings(openai_api_key=openai_api_key)
text_splitter = SemanticChunker(embedder)

def prepare_docs_for_indexing(videos):
    all_docs = []

    for video in videos:
        video_id = video.get('video_id')
        title = video.get('video_name')
        transcript_info = video.get('details', {}).get('transcript_info', {})
        summary = video.get('details', {}).get('summary')
        created_at = transcript_info.get('created_at')  # Getting the created_at timestamp

        # Get the full transcription text
        transcription_text = transcript_info.get('transcription_text', '')

        # Create documents using semantic chunking
        docs = text_splitter.create_documents([transcription_text])

        for doc in docs:
            # Add metadata to each document
            doc.metadata = {
                "created_at": created_at,
                "title": title,
                "video_id": video_id,
                "summary": summary
            }
            all_docs.append(doc)

    return all_docs


docs = prepare_docs_for_indexing(videos)

# Output the created documents
for doc in docs:
    print("____________")
    print(doc.page_content)

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

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

from langchain_community.vectorstores import OpenSearchVectorSearch
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

docsearch = OpenSearchVectorSearch.from_documents(
    docs, embeddings, opensearch_url="http://localhost:9200"
)

query = "your query"
docs = docsearch.max_marginal_relevance_search(query, k=2, fetch_k=10, lambda_param=0.25)

الاستعلام المتعدد و RAG Fusion
بالنسبة للأسئلة المعقدة، يقوم النظام بإنشاء استعلامات فرعية متعددة. تقوم RAG Fusion بعد ذلك بدمج الإجابات المتنوعة في استجابة واحدة متماسكة، مما يعزز جودة الاستجابة ويقلل الخطأ.

def generate_multi_queries(question: str):
    # Template to generate multiple queries
    template = """You are an AI language model assistant. Your task is to generate five 
    different versions of the given user question to retrieve relevant documents from a vector 
    database. By generating multiple perspectives on the user question, your goal is to help
    the user overcome some of the limitations of the distance-based similarity search. 
    Provide these alternative questions separated by newlines. Original question: {question}"""

    # Creating a prompt template for query generation
    prompt_perspectives = ChatPromptTemplate.from_template(template)

    # Generate the queries using ChatOpenAI and output parser
    generate_queries = (
        prompt_perspectives 
        | ChatOpenAI(temperature=0, openai_api_key=openai_api_key) 
        | StrOutputParser() 
        | (lambda x: x.split("\n"))
    )

    # Invoke the chain to generate queries
    multi_queries = generate_queries.invoke({"question": question})

    return multi_queries
def reciprocal_rank_fusion(results: list[list], k=60):
    """Applies Reciprocal Rank Fusion (RRF) to fuse ranked document lists."""
    fused_scores = {}
    for docs in results:
        for rank, doc in enumerate(docs):
            doc_str = dumps(doc)  # Convert to a serializable format
            if doc_str not in fused_scores:
                fused_scores[doc_str] = 0
            fused_scores[doc_str]  = 1 / (rank   k)  # RRF formula

    # Sort documents by the fused score
    reranked_results = [
        (loads(doc), score)
        for doc, score in sorted(fused_scores.items(), key=lambda x: x[1], reverse=True)
    ]
    return reranked_result

Mastering Query Answering with RAG: Overcoming Key Challenges in Large-Scale Meeting Data

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

النتائج: الإنجازات الرئيسية في الإجابة على استعلام RAG
أدى تنفيذ هذه التقنيات إلى تحسينات كبيرة:

  • زيادة دقة الاسترجاع: تعمل تقنيات مثل القطع الدلالي واسترجاع الحد الأقصى للهامش على تحسين استرجاع البيانات، مما يضمن إرجاع الأجزاء الأكثر صلة فقط.
  • الملاءمة المحسّنة: أدى تسجيل Lambda إلى إعطاء الأولوية للنتائج ذات الصلة بشكل فعال، ومواءمة الاستجابات بشكل وثيق مع غرض الاستعلام.
  • تحسين التعامل مع الاستعلامات المعقدة: أدى إنشاء الاستعلامات المتعددة وRAG Fusion إلى تمكين النظام من إدارة الأسئلة المعقدة وتقديم إجابات شاملة.
  • متانة أكبر للنظام: أدت هذه التحسينات إلى رفع مستوى النظام من نموذج أساسي إلى أداة متطورة وموثوقة للإجابة على الاستعلامات لبيانات الاجتماعات غير المنظمة واسعة النطاق.

النقاط الرئيسية والدروس المستفادة
من خلال هذه الرحلة، حددت العديد من الأفكار الأساسية:

  1. القدرة على التكيف هي المفتاح: نادرًا ما تظهر الحلول الفعالة في المحاولة الأولى؛ التحسين التكراري والمرونة ضروريان.
  2. المنهجيات متعددة الطبقات تعمل على تحسين المتانة: أدى دمج الأساليب المتعددة - القطع الدلالي، واسترجاع الحد الأقصى للهامش، وتسجيل Lambda - إلى إنشاء نظام أقوى وأكثر فعالية.
  3. معالجة شاملة للاستعلام: أبرز إنشاء الاستعلامات المتعددة وRAG Fusion أهمية معالجة الأسئلة من وجهات نظر متعددة.
  4. التركيز على علم الدلالة: التركيز على المعنى داخل البيانات بدلاً من البنية وحدها أدى إلى تحسين دقة الاسترجاع بشكل كبير.

الخلاصة: الآفاق المستقبلية للأنظمة القائمة على RAG
أدى تعزيز نماذج RAG باستخدام التقنيات المتقدمة إلى تحويل نظام استرجاع بسيط إلى أداة قوية للإجابة على الاستفسارات المعقدة والدقيقة. وبالنظر إلى المستقبل، أهدف إلى دمج إمكانات التعلم في الوقت الفعلي، مما يسمح للنظام بالتكيف ديناميكيًا مع البيانات الجديدة. عمقت هذه التجربة مهاراتي الفنية وأبرزت أهمية المرونة والتركيز الدلالي والتحسين التكراري في أنظمة استرجاع البيانات.

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

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/cognilium_ai/mastering-query-answering-with-rag-overcoming-key-challenges-in-large-scale-meeting-data-33ji?1 إذا كان هناك أي انتهاك يرجى الاتصال بـ Study_golang @163.comdelete
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3