Rumah > pembangunan bahagian belakang > Tutorial Python > Cara Mencipta RAG Anda Sendiri dengan Model LLM Percuma dan Pangkalan Pengetahuan

Cara Mencipta RAG Anda Sendiri dengan Model LLM Percuma dan Pangkalan Pengetahuan

DDD
Lepaskan: 2024-12-28 08:49:11
asal
260 orang telah melayarinya

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

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

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

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

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

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

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

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

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

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

Jalankan di terminal

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

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!

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