


Cara Mencipta RAG Anda Sendiri dengan Model LLM Percuma dan Pangkalan Pengetahuan
Artikel ini meneroka pelaksanaan sistem menjawab soalan yang mudah tetapi berkesan yang menggabungkan model berasaskan transformer moden. Sistem ini menggunakan T5 (Pengubah Pemindahan Teks ke Teks) untuk penjanaan jawapan dan Pengubah Ayat untuk pemadanan persamaan semantik.
Dalam artikel saya sebelum ini, saya menerangkan cara mencipta API terjemahan mudah dengan antara muka web menggunakan model LLM asas percuma. Kali ini, mari kita terjun ke dalam membina sistem Retrieval-Augmented Generation (RAG) menggunakan model LLM berasaskan transformer percuma dan pangkalan pengetahuan.
RAG (Retrieval-Augmented Generation) ialah teknik yang menggabungkan dua komponen utama:
Pendapatan semula: Mula-mula, ia mencari melalui pangkalan pengetahuan (seperti dokumen, pangkalan data, dll.) untuk mencari maklumat yang berkaitan untuk pertanyaan yang diberikan. Ini biasanya melibatkan:
- Menukar teks kepada benam (vektor berangka yang mewakili makna)
- Mencari kandungan serupa menggunakan ukuran persamaan (seperti persamaan kosinus)
- Memilih maklumat yang paling relevan
Penjanaan: Kemudian ia menggunakan model bahasa (seperti T5 dalam kod kami) untuk menjana respons melalui:
Menggabungkan maklumat yang diambil dengan soalan asal
Mencipta respons bahasa semula jadi berdasarkan konteks ini
Dalam kod:
- The SentenceTransformer mengendalikan bahagian pengambilan semula dengan mencipta pembenaman
- Model T5 mengendalikan bahagian penjanaan dengan mencipta jawapan
Kebaikan RAG:
- Respons yang lebih tepat kerana ia berasaskan pengetahuan khusus
- Mengurangkan halusinasi berbanding tindak balas LLM tulen
- Keupayaan untuk mengakses maklumat terkini atau khusus domain
- Lebih terkawal dan telus daripada generasi tulen
Gambaran Keseluruhan Seni Bina Sistem
Pelaksanaan terdiri daripada kelas SimpleQASystem yang mengatur dua komponen utama:
- Sistem carian semantik menggunakan Pengubah Ayat
- Sistem penjanaan jawapan menggunakan T5
Anda boleh memuat turun versi terkini kod sumber di sini: https://github.com/alexander-uspenskiy/rag_project
Rajah Sistem
Panduan Persediaan Projek RAG
Panduan ini akan membantu anda menyediakan projek Retrieval-Augmented Generation (RAG) anda pada kedua-dua macOS dan Windows.
Prasyarat
Untuk macOS:
Pasang Homebrew (jika belum dipasang):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Pasang Python 3.8 menggunakan Homebrew
bru pasang python@3.10
Untuk Windows:
Muat turun dan pasang Python 3.8 daripada python.org
Pastikan anda menyemak “Tambah Python pada PATH” semasa pemasangan
Persediaan Projek
Langkah 1: Cipta Direktori Projek
macOS:
mkdir RAG_project
cd RAG_project
Tingkap:
mkdir RAG_project
cd RAG_project
Langkah 2: Sediakan Persekitaran Maya
macOS:
python3 -m venv venv
sumber venv/bin/activate
Tingkap:
python -m venv venv
venvScriptsactivate
**Komponen Teras
- Permulaan**
def __init__(self): self.model_name = 't5-small' self.tokenizer = T5Tokenizer.from_pretrained(self.model_name) self.model = T5ForConditionalGeneration.from_pretrained(self.model_name) self.encoder = SentenceTransformer('paraphrase-MiniLM-L6-v2')
Sistem dimulakan dengan dua model utama:
T5-kecil: Versi model T5 yang lebih kecil untuk menjana jawapan
paraphrase-MiniLM-L6-v2: Model pengubah ayat untuk pengekodan teks kepada vektor yang bermakna
2. Penyediaan Set Data
def prepare_dataset(self, data: List[Dict[str, str]]): self.answers = [item['answer'] for item in data] self.answer_embeddings = [] for answer in self.answers: embedding = self.encoder.encode(answer, convert_to_tensor=True) self.answer_embeddings.append(embedding)
Fasa penyediaan set data:
- Mengekstrak jawapan daripada data input
- Mencipta benam untuk setiap jawapan menggunakan pengubah ayat
- Menyimpan kedua-dua jawapan dan benamnya untuk mendapatkan semula cepat
Bagaimana Sistem Berfungsi
1. Pemprosesan Soalan
Apabila pengguna menyerahkan soalan, sistem mengikut langkah berikut:
Penjanaan Benam: Soalan ditukar kepada perwakilan vektor menggunakan model pengubah ayat yang sama digunakan untuk jawapan.
Carian Semantik: Sistem mencari jawapan tersimpan yang paling relevan dengan:
- Mengira persamaan kosinus antara pembenaman soalan dan semua pembenaman jawapan
- Memilih jawapan dengan skor persamaan tertinggi Pembentukan Konteks: Jawapan yang dipilih menjadi konteks untuk T5 menjana respons akhir.
2. Penjanaan Jawapan
def get_answer(self, question: str) -> str: # ... semantic search logic ... input_text = f"Given the context, what is the answer to the question: {question} Context: {context}" input_ids = self.tokenizer(input_text, max_length=512, truncation=True, padding='max_length', return_tensors='pt').input_ids outputs = self.model.generate(input_ids, max_length=50, num_beams=4, early_stopping=True, no_repeat_ngram_size=2
Proses penjanaan jawapan:
- Menggabungkan soalan dan konteks menjadi gesaan untuk T5
- Tokenize teks input dengan panjang maksimum 512 token
- Menghasilkan jawapan menggunakan carian pancaran dengan parameter ini:
- panjang_maks=50: Hadkan panjang jawapan
- num_beams=4: Menggunakan carian rasuk dengan 4 rasuk
- early_stopping=Benar: Menghentikan penjanaan apabila semua rasuk mencapai token tamat
- no_repeat_ngram_size=2: Menghalang pengulangan bigram
3. Jawapan Pembersihan
def __init__(self): self.model_name = 't5-small' self.tokenizer = T5Tokenizer.from_pretrained(self.model_name) self.model = T5ForConditionalGeneration.from_pretrained(self.model_name) self.encoder = SentenceTransformer('paraphrase-MiniLM-L6-v2')
- Mengalih keluar perkataan berturut-turut pendua (tidak peka huruf besar-kecil)
- Menggunakan huruf besar pada huruf pertama jawapan
- Mengalih keluar ruang kosong tambahan
Kod Sumber Penuh
Anda boleh memuat turun versi terbaharu kod sumber di sini: https://github.com/alexander-uspenskiy/rag_project
def prepare_dataset(self, data: List[Dict[str, str]]): self.answers = [item['answer'] for item in data] self.answer_embeddings = [] for answer in self.answers: embedding = self.encoder.encode(answer, convert_to_tensor=True) self.answer_embeddings.append(embedding)
Pengurusan Memori:
Sistem secara eksplisit menggunakan CPU untuk mengelakkan masalah ingatan
Pembenaman ditukar kepada tensor CPU apabila diperlukan
Panjang input terhad kepada 512 token
Pengendalian Ralat:
- Cuba menyeluruh kecuali blok sepanjang kod
- Mesej ralat yang bermakna untuk nyahpepijat
- Semakan pengesahan untuk komponen yang tidak dimulakan
Contoh Penggunaan
def get_answer(self, question: str) -> str: # ... semantic search logic ... input_text = f"Given the context, what is the answer to the question: {question} Context: {context}" input_ids = self.tokenizer(input_text, max_length=512, truncation=True, padding='max_length', return_tensors='pt').input_ids outputs = self.model.generate(input_ids, max_length=50, num_beams=4, early_stopping=True, no_repeat_ngram_size=2
Jalankan di terminal
Had dan Potensi Penambahbaikan
Skalabiliti:
Pelaksanaan semasa menyimpan semua benam dalam ingatan
Boleh dipertingkatkan dengan pangkalan data vektor untuk aplikasi berskala besar
Kualiti Jawapan:
Sangat bergantung pada kualiti set data jawapan yang disediakan
Terhad oleh tetingkap konteks T5-small
Boleh mendapat manfaat daripada pengesahan jawapan atau pemarkahan keyakinan
Prestasi:
- Menggunakan CPU sahaja mungkin lebih perlahan untuk aplikasi berskala besar
- Boleh dioptimumkan dengan pemprosesan kelompok
- Boleh melaksanakan caching untuk soalan lazim
Kesimpulan
Pelaksanaan ini menyediakan asas yang kukuh untuk sistem menjawab soalan, menggabungkan kekuatan carian semantik dan penjanaan teks berasaskan transformer. Jangan ragu untuk bermain dengan parameter model (seperti max_length, num_beams, early_stopping, no_repeat_ngram_size, dll) untuk mencari cara yang lebih baik untuk mendapatkan jawapan yang lebih koheren dan stabil. Walaupun terdapat ruang untuk penambahbaikan, pelaksanaan semasa menawarkan keseimbangan yang baik antara kerumitan dan fungsi, menjadikannya sesuai untuk tujuan pendidikan dan aplikasi kecil hingga sederhana.
Selamat mengekod!
Atas ialah kandungan terperinci Cara Mencipta RAG Anda Sendiri dengan Model LLM Percuma dan Pangkalan Pengetahuan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Python dan C masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1) Python sesuai untuk pembangunan pesat dan pemprosesan data kerana sintaks ringkas dan menaip dinamik. 2) C sesuai untuk prestasi tinggi dan pengaturcaraan sistem kerana menaip statik dan pengurusan memori manual.

Memilih Python atau C bergantung kepada keperluan projek: 1) Jika anda memerlukan pembangunan pesat, pemprosesan data dan reka bentuk prototaip, pilih Python; 2) Jika anda memerlukan prestasi tinggi, latensi rendah dan kawalan perkakasan yang rapat, pilih C.

Dengan melabur 2 jam pembelajaran python setiap hari, anda dapat meningkatkan kemahiran pengaturcaraan anda dengan berkesan. 1. Ketahui Pengetahuan Baru: Baca dokumen atau tutorial menonton. 2. Amalan: Tulis kod dan latihan lengkap. 3. Kajian: Menyatukan kandungan yang telah anda pelajari. 4. Amalan Projek: Sapukan apa yang telah anda pelajari dalam projek sebenar. Pelan pembelajaran berstruktur seperti ini dapat membantu anda menguasai Python secara sistematik dan mencapai matlamat kerjaya.

Kaedah untuk belajar python dengan cekap dalam masa dua jam termasuk: 1. Semak pengetahuan asas dan pastikan anda sudah biasa dengan pemasangan Python dan sintaks asas; 2. Memahami konsep teras python, seperti pembolehubah, senarai, fungsi, dan lain -lain; 3. Menguasai penggunaan asas dan lanjutan dengan menggunakan contoh; 4. Belajar kesilapan biasa dan teknik debugging; 5. Memohon pengoptimuman prestasi dan amalan terbaik, seperti menggunakan komprehensif senarai dan mengikuti panduan gaya PEP8.

Python sesuai untuk pemula dan sains data, dan C sesuai untuk pengaturcaraan sistem dan pembangunan permainan. 1. Python adalah mudah dan mudah digunakan, sesuai untuk sains data dan pembangunan web. 2.C menyediakan prestasi dan kawalan yang tinggi, sesuai untuk pembangunan permainan dan pengaturcaraan sistem. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python lebih sesuai untuk sains data dan perkembangan pesat, manakala C lebih sesuai untuk prestasi tinggi dan pengaturcaraan sistem. 1. Sintaks Python adalah ringkas dan mudah dipelajari, sesuai untuk pemprosesan data dan pengkomputeran saintifik. 2.C mempunyai sintaks kompleks tetapi prestasi yang sangat baik dan sering digunakan dalam pembangunan permainan dan pengaturcaraan sistem.

Adalah mungkin untuk melabur dua jam sehari untuk belajar Python. 1. Belajar Pengetahuan Baru: Ketahui konsep baru dalam satu jam, seperti senarai dan kamus. 2. Amalan dan Amalan: Gunakan satu jam untuk melakukan latihan pengaturcaraan, seperti menulis program kecil. Melalui perancangan dan ketekunan yang munasabah, anda boleh menguasai konsep teras Python dalam masa yang singkat.

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa