Rumah > pembangunan bahagian belakang > Tutorial Python > Menguasai Menjawab Pertanyaan dengan RAG: Mengatasi Cabaran Utama dalam Data Mesyuarat Berskala Besar

Menguasai Menjawab Pertanyaan dengan RAG: Mengatasi Cabaran Utama dalam Data Mesyuarat Berskala Besar

DDD
Lepaskan: 2024-11-27 03:25:11
asal
240 orang telah melayarinya

Dalam era digital sarat maklumat, mengekstrak cerapan yang boleh diambil tindakan daripada set data yang besar adalah lebih penting berbanding sebelum ini. Baru-baru ini, saya memulakan perjalanan untuk memanfaatkan Retrieval-Augmented Generation (RAG) untuk menangani cabaran utama — menyampaikan jawapan tepat daripada koleksi nota mesyuarat yang banyak. Blog ini meneroka halangan, penyelesaian dan pencapaian yang menjadikan sistem menjawab pertanyaan berasaskan RAG saya menjadi alat yang teguh untuk mengekstrak cerapan daripada data mesyuarat tidak berstruktur.

Pernyataan Masalah: Cabaran dalam Menjawab Pertanyaan dengan RAG
Salah satu cabaran utama ialah membina sistem yang mampu memproses pertanyaan khusus yang kompleks dan khusus dalam repositori besar nota mesyuarat. Model menjawab pertanyaan RAG tradisional sering mengembalikan maklumat yang tidak relevan atau tidak lengkap, gagal menangkap niat pengguna. Sifat data mesyuarat yang tidak berstruktur digabungkan dengan jenis pertanyaan yang pelbagai memerlukan penyelesaian yang lebih halus.

Pendekatan Awal: Meletakkan Asas untuk Menjawab Pertanyaan yang Berkesan
Saya bermula dengan model RAG asas yang direka untuk menggabungkan perolehan semula dan penjanaan tindak balas. Dua teknik awal yang digunakan ialah:

  1. Chunking: Memecahkan dokumen besar kepada segmen yang lebih kecil mengikut sempadan ayat mempertingkatkan perolehan semula dengan mengecilkan skop carian.

  2. Pembenaman dan Penyimpanan Vektor: Selepas pemotongan, setiap segmen dibenamkan dan disimpan dalam pangkalan data vektor, membolehkan carian yang cekap.

Walau bagaimanapun, persediaan ini mempunyai had. Pendekatan chunking awal selalunya membawa kepada mendapatkan semula maklumat yang tidak berkaitan dan jawapan yang dihasilkan tidak mempunyai ketepatan dan penjajaran dengan niat setiap pertanyaan.

Cabaran dalam Menjawab Pertanyaan RAG Skala Besar

  • Mengendalikan Pertanyaan Kompleks: Soalan kompleks tertentu memerlukan pemahaman semantik yang lebih mendalam melangkaui carian semantik asas.
  • Ketidakpadanan Kontekstual: Potongan yang diperoleh selalunya serupa secara konteks tetapi tidak cukup tepat untuk memenuhi keperluan pertanyaan.
  • Had Ketepatan Pengambilan semula: Mengambil set kecil dokumen (mis., lima hingga sepuluh) selalunya menghasilkan keputusan terhad yang tidak mempunyai kaitan.

Cabaran ini menekankan keperluan untuk pendekatan yang lebih maju untuk meningkatkan ketepatan dalam menjawab pertanyaan RAG.

Teknik RAG Terperinci untuk Ketepatan Pertanyaan Dipertingkat (Penyelesaian)
Untuk menangani isu ini, saya menggunakan beberapa metodologi lanjutan, memperhalusi sistem secara berulang:
Chunking Semantik
Tidak seperti chunking tradisional, Semantic Chunking mengutamakan makna dalam setiap segmen, meningkatkan perkaitan dengan menyelaraskan maklumat yang diperoleh dengan niat pertanyaan.

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)
Salin selepas log masuk

Pendapatan Margin Maksimum
Kaedah ini meningkatkan ketepatan perolehan semula dengan membezakan antara data yang berkaitan dan tidak relevan, memastikan bahawa hanya ketulan data yang paling sepadan diambil.

Pemarkahan Lambda
Menggunakan Pemarkahan Lambda, saya boleh menilai hasil berdasarkan perkaitan, mengutamakan respons yang sejajar lebih rapat dengan niat pertanyaan untuk kualiti jawapan yang lebih baik.

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)
Salin selepas log masuk

Berbilang Pertanyaan dan Gabungan RAG
Untuk soalan yang kompleks, sistem menjana berbilang sub-pertanyaan. RAG Fusion kemudian menyepadukan jawapan yang pelbagai ke dalam satu tindak balas yang padu, meningkatkan kualiti tindak balas dan mengurangkan ralat.

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
Salin selepas log masuk
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
Salin selepas log masuk

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

Pengindeksan Dipertingkat dan Carian Vektor Dioptimumkan
Memperbaik mekanisme pengindeksan dan memperhalusi parameter carian vektor menjadikan carian lebih cepat dan tepat, terutamanya untuk set data yang besar.

Keputusan: Pencapaian Utama dalam Menjawab Pertanyaan RAG
Melaksanakan teknik ini membawa kepada peningkatan yang ketara:

  • Peningkatan Ketepatan Pengambilan semula: Teknik seperti Pecahan Semantik dan Pencapaian Margin Maksimum memperhalusi pengambilan data, memastikan hanya bahagian yang paling berkaitan dikembalikan.
  • Perkaitan Dipertingkat: Pemarkahan Lambda mengutamakan hasil yang berkaitan dengan berkesan, menyelaraskan jawapan dengan niat pertanyaan.
  • Peningkatan Pengendalian Pertanyaan Kompleks: Penjanaan Berbilang Pertanyaan dan Gabungan RAG membolehkan sistem mengurus soalan rumit, memberikan jawapan yang komprehensif.
  • Keteguhan Sistem yang Lebih Hebat: Penambahbaikan ini meningkatkan sistem daripada model asas kepada alat menjawab pertanyaan yang canggih dan boleh dipercayai untuk data mesyuarat tidak berskala besar yang tidak berstruktur.

Pengambilan Utama dan Pengajaran yang Diperoleh
Melalui perjalanan ini, saya mengenal pasti beberapa cerapan teras:

  1. Kebolehsuaian Adalah Kunci: Penyelesaian yang berkesan jarang muncul pada percubaan pertama; penambahbaikan berulang dan fleksibiliti adalah penting.
  2. Metodologi Berlapis Meningkatkan Kekukuhan: Mengintegrasikan pelbagai pendekatan — Pecahan Semantik, Pendapatan Margin Maksimum, Pemarkahan Lambda — mencipta sistem yang lebih kukuh dan berkesan.
  3. Pengendalian Pertanyaan Teliti: Penjanaan Berbilang Pertanyaan dan Gabungan RAG menyerlahkan kepentingan menangani soalan daripada pelbagai perspektif.
  4. Memfokus pada Semantik: Menekankan makna dalam data dan bukannya struktur sahaja meningkatkan ketepatan perolehan dengan ketara.

Kesimpulan: Prospek Masa Depan untuk Sistem Berasaskan RAG
Mempertingkatkan model RAG dengan teknik lanjutan mengubah sistem perolehan semula yang mudah menjadi alat yang berkuasa untuk menjawab pertanyaan yang kompleks dan bernuansa. Melihat ke hadapan, saya menyasarkan untuk menggabungkan keupayaan pembelajaran masa nyata, membolehkan sistem menyesuaikan diri secara dinamik kepada data baharu. Pengalaman ini memperdalam kemahiran teknikal saya dan menyerlahkan kepentingan fleksibiliti, fokus semantik dan penambahbaikan berulang dalam sistem perolehan data.

Pemikiran Akhir: Panduan untuk Melaksanakan Sistem RAG Lanjutan
Dengan berkongsi pengalaman saya dalam mengatasi cabaran RAG, saya berharap dapat menawarkan panduan untuk melaksanakan penyelesaian yang serupa. Teknik strategik, digabungkan dengan penghalusan berulang, bukan sahaja menyelesaikan isu segera tetapi juga meletakkan asas yang kukuh untuk kemajuan masa depan dalam sistem menjawab pertanyaan.

Atas ialah kandungan terperinci Menguasai Menjawab Pertanyaan dengan RAG: Mengatasi Cabaran Utama dalam Data Mesyuarat Berskala Besar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan