Rumah >Peranti teknologi >AI >Cara Meningkatkan Prestasi Rag: 5 Teknik Utama Dengan Contoh
Pengambilan Generasi Tambahan (RAG) dengan ketara meningkatkan ketepatan dan kebolehpercayaan model bahasa yang besar (LLM) dengan menggabungkan data luaran. Ini kontekstualisasi jawapan dan membolehkan kemas kini tanpa latihan semula. Walau bagaimanapun, RAG tidak berkesan secara universal. Butiran artikel ini membina saluran paip kain yang mantap, meneroka batasan, dan menawarkan penyelesaian.
Fundamental OpenAI (sebutan ringkas, tidak perlu berkembang)
Ketahui lebih lanjut mengenai menggunakan API OpenAI. Mula sekarang
bagaimana rag berfungsi:
(imej dari dokumentasi llamaindex)
saluran paip RAG terdiri daripada tiga peringkat: pengindeksan, pengambilan semula, dan generasi.
Pengindeksan: Data (pelbagai format) dibersihkan, ditukar kepada teks biasa, dipotong ke dalam kepingan yang boleh diurus, dan diubah menjadi vektor berangka (embeddings) menggunakan model embedding. Lembaran dan ketulan ini diindeks untuk carian yang cekap.
Pengambilan semula: Pertanyaan pengguna vektor menggunakan model embedding yang sama. Sistem ini mengira skor kesamaan antara vektor pertanyaan dan vektor chunk diindeks, mengambil bahagian atas k yang paling serupa.
Generasi: Pertanyaan dan ketulan yang diambil diformat ke dalam segera dan diberi makan kepada LLM untuk Generasi Jawapan.
batasan RAG:
Cabaran wujud di setiap peringkat:
Meningkatkan prestasi RAG:
Tiga strategi utama menangani batasan-batasan ini: chunking, ranking semula, dan transformasi pertanyaan. Berikut ini menunjukkan ini menggunakan Llamaindex dan API OpenAI untuk menjawab soalan mengenai penyertaan Wikipedia (Emma Stone, Ryan Gosling, La La Land).
Sistem RAG BASELINE:
Pasang pakej yang diperlukan:
!pip install llama-index openai wikipediaTetapkan kunci API Openai anda:
import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"beban data Wikipedia dan membina indeks:
from llama_index.core import (VectorStoreIndex, ServiceContext, download_loader) WikipediaReader = download_loader("WikipediaReader") loader = WikipediaReader() pages = ['Emma_Stone', 'La_La_Land', 'Ryan_Gosling'] documents = loader.load_data(pages=pages, auto_suggest=False, redirect=False) from llama_index.llms import OpenAI from llama_index.embeddings import OpenAIEmbedding, OpenAIEmbeddingModelType gpt3 = OpenAI(temperature=0, model="gpt-3.5-turbo-instruct", api_key=os.environ["OPENAI_API_KEY"]) embed_model = OpenAIEmbedding(model=OpenAIEmbeddingModelType.TEXT_EMBED_ADA_002, api_key=os.environ["OPENAI_API_KEY"]) service_context_gpt3 = ServiceContext.from_defaults(llm=gpt3, chunk_size=256, chunk_overlap=0, embed_model=embed_model) index = VectorStoreIndex.from_documents(documents, service_context=service_context_gpt3) retriever = index.as_retriever(similarity_top_k=3)Buat templat segera untuk memastikan jawapan berasaskan konteks:
from llama_index.core.prompts import PromptTemplate template = ( "We have provided context information below. \n" "---------------------\n" "{context_str}" "\n---------------------\n" "Given this information, please answer the question: {query_str}\n" "Don't give an answer unless it is supported by the context above.\n" ) qa_template = PromptTemplate(template)(pertanyaan awal dan tindak balas subpar ditinggalkan untuk keringkasan. Tumpuannya adalah pada strategi penambahbaikan.)
Memperbaiki dengan Chunking:
Laraskan dan chunk_size
dalam chunk_overlap
untuk mengoptimumkan pengambilan semula. service_context_gpt3
Memperbaiki dengan peringkat semula:
(Contoh kod untuk flagembeddingreranker dan rankgptreRank ditinggalkan untuk keringkasan, tetapi penerangan tetap)
flagembeddingreranker: menggunakan model ranking wajah yang memeluk (mis., BAAI/bge-reranker-base
) untuk meningkatkan kaitan bahagian. Memerlukan token akses muka yang memeluk.
RankgptreRank: menggunakan LLM (mis.,
(Contoh kod untuk transformasi pertanyaan hyde dan multi-step ditinggalkan untuk keringkasan, tetapi penerangan tetap)
menghasilkan jawapan hipotetikal, mewujudkan embeddings untuk kedua -dua pertanyaan dan jawapan hipotetikal, dan mengambil dokumen yang paling dekat dengan embeddings ini.
Artikel ini mempamerkan beberapa teknik untuk meningkatkan prestasi RAG. Pendekatan optimum bergantung kepada aplikasi tertentu dan hasil yang diinginkan. Penjelajahan RAG lebih lanjut boleh didapati di [pautan ke video bersama-sama di sini].
Atas ialah kandungan terperinci Cara Meningkatkan Prestasi Rag: 5 Teknik Utama Dengan Contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!