في العصر الرقمي الذي يتسم بالحمل الزائد للمعلومات، أصبح استخراج رؤى قابلة للتنفيذ من مجموعات البيانات الكبيرة أكثر أهمية من أي وقت مضى. لقد شرعت مؤخرًا في رحلة للاستفادة من تقنية الاسترجاع المعزز (RAG) لمواجهة التحدي الكبير المتمثل في تقديم إجابات دقيقة من مجموعة كبيرة من ملاحظات الاجتماعات. تستكشف هذه المدونة العوائق والحلول والإنجازات التي حولت نظام الرد على الاستعلامات المعتمد على RAG إلى أداة قوية لاستخلاص الرؤى من بيانات الاجتماعات غير المنظمة.
بيان المشكلة: التحديات في الإجابة على الاستعلام باستخدام RAG
كان أحد التحديات الأساسية هو بناء نظام قادر على معالجة الاستعلامات المعقدة والمحددة الهدف ضمن مستودع ضخم لملاحظات الاجتماعات. كثيرًا ما تُرجع نماذج الإجابة على استعلام RAG التقليدية معلومات غير ذات صلة أو غير كاملة، وتفشل في التقاط نية المستخدم. استلزمت الطبيعة غير المنظمة لبيانات الاجتماعات جنبًا إلى جنب مع أنواع الاستعلام المتنوعة إيجاد حل أكثر دقة.
المنهج المبدئي: وضع الأساس للإجابة الفعالة على الاستفسارات
لقد بدأت بنموذج RAG الأساسي المصمم للجمع بين الاسترجاع وتوليد الاستجابة. تم استخدام تقنيتين أوليتين هما:
التقطيع: تقسيم المستندات الكبيرة إلى أجزاء أصغر عن طريق حدود الجملة يؤدي إلى تحسين عملية الاسترجاع عن طريق تضييق نطاق البحث.
التضمين وتخزين المتجهات: بعد التقطيع، تم تضمين كل مقطع وتخزينه في قاعدة بيانات متجهة، مما يتيح عمليات بحث فعالة.
ومع ذلك، كان لهذا الإعداد قيود. غالبًا ما أدى نهج التجزئة الأولي إلى استرجاع المعلومات غير ذات الصلة، وكانت الإجابات التي تم إنشاؤها تفتقر إلى الدقة والمواءمة مع غرض كل استعلام.
التحديات في الإجابة على استعلامات RAG واسعة النطاق
أكدت هذه التحديات الحاجة إلى نهج أكثر تقدمًا لتحسين الدقة في الإجابة على استعلام RAG.
تقنيات RAG المتقدمة لتعزيز دقة الاستعلام (الحل)
لمعالجة هذه المشكلات، قمت بتطبيق العديد من المنهجيات المتقدمة، مما أدى إلى تحسين النظام بشكل متكرر:
التقطيع الدلالي
على عكس التقطيع التقليدي، يعطي التقطيع الدلالي الأولوية للمعنى داخل كل مقطع، مما يعزز الملاءمة من خلال محاذاة المعلومات المستردة مع غرض الاستعلام.
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
الفهرسة المحسنة والبحث الأمثل عن المتجهات
أدى تحسين آلية الفهرسة وتحسين معلمات البحث المتجهة إلى جعل الاسترجاع أسرع وأكثر دقة، خاصة بالنسبة لمجموعات البيانات الكبيرة.
النتائج: الإنجازات الرئيسية في الإجابة على استعلام RAG
أدى تنفيذ هذه التقنيات إلى تحسينات كبيرة:
النقاط الرئيسية والدروس المستفادة
من خلال هذه الرحلة، حددت العديد من الأفكار الأساسية:
الخلاصة: الآفاق المستقبلية للأنظمة القائمة على RAG
أدى تعزيز نماذج RAG باستخدام التقنيات المتقدمة إلى تحويل نظام استرجاع بسيط إلى أداة قوية للإجابة على الاستفسارات المعقدة والدقيقة. وبالنظر إلى المستقبل، أهدف إلى دمج إمكانات التعلم في الوقت الفعلي، مما يسمح للنظام بالتكيف ديناميكيًا مع البيانات الجديدة. عمقت هذه التجربة مهاراتي الفنية وأبرزت أهمية المرونة والتركيز الدلالي والتحسين التكراري في أنظمة استرجاع البيانات.
الأفكار النهائية: دليل لتنفيذ أنظمة RAG المتقدمة
ومن خلال مشاركة تجربتي في التغلب على تحديات RAG، آمل أن أقدم دليلاً لتنفيذ حلول مماثلة. التقنيات الإستراتيجية، جنبًا إلى جنب مع التحسين التكراري، لم تحل المشكلات العاجلة فحسب، بل أرست أيضًا أساسًا قويًا للتقدم المستقبلي في أنظمة الإجابة على الاستعلامات.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3