03. Pineconce

Pinecone

Pinecone adalah basis data vektor berkinerja tinggi, solusi penyimpanan dan pengambilan vektor yang efisien untuk aplikasi AI dan pembelajaran mesin.

Mari kita bandingkan database vektor seperti Pinecone, Chroma, dan Faiss.

Keuntungan dari Pinecone

  • Skalabilitas: Memberikan skalabilitas yang sangat baik untuk set data yang besar.

  • Mudah dikelola: Layanan yang dikelola sepenuhnya, mengurangi beban manajemen infrastruktur.

  • Pembaruan waktu nyata: Data dapat dimasukkan, diperbarui, dan dihapus secara waktu nyata.

  • Ketersediaan tinggi: Berbasis awan untuk ketersediaan dan daya tahan yang tinggi.

  • Ramah API: Mudah diintegrasikan melalui API RESTful/Python.

Kekurangan Pinecone

  • Biaya: Bisa relatif mahal dibandingkan dengan Chroma atau Faiss.

  • Kustomisasi terbatas: Karena ini adalah layanan yang dikelola sepenuhnya, Anda mungkin terbatas pada kustomisasi yang mendetail.

  • Lokasi data: Karena Anda perlu menyimpan data Anda di awan, mungkin ada masalah kedaulatan data.

Dibandingkan dengan Chroma atau Faiss:

  • Chroma/FAISS merupakan sumber terbuka dan dapat berjalan secara lokal, menghasilkan biaya di muka yang lebih rendah dan kontrol data yang lebih besar. Mereka sangat mudah disesuaikan, tetapi mungkin terbatas dibandingkan dengan Pinecone dalam hal skalabilitas skala besar.

Pilihannya harus didasarkan pada ukuran, persyaratan, dan anggaran proyek Anda. Untuk lingkungan produksi skala besar, Pinecone mungkin merupakan keuntungan, tetapi untuk proyek yang lebih kecil atau lingkungan eksperimental, Chroma atau Faiss mungkin lebih cocok.

Catatan

Petunjuk pembaruan

Kamus istilah yang tidak digunakan untuk pemrosesan bahasa indonesia

Pemrosesan awal data

Di bawah ini adalah preprocessing dari sebuah dokumen biasa. Baca semua file .pdf di bawah ROOT_DIR dan simpan di document_list.

Melakukan prapemrosesan dokumen untuk penyimpanan DB di Pinecone. Selama proses ini, Anda dapat menentukan metadata_keys.

Jika Anda ingin menandai metadata tambahan, tambahkan metadata dalam tugas prapemrosesan sebelum melanjutkan.

  • split_docs: Daftar [Dokumen] yang berisi hasil pemisahan dokumen.

  • metadata_keys: Daftar yang berisi kunci metadata untuk ditambahkan ke dokumen.

  • min_length: Menentukan panjang minimum dokumen. Dokumen yang lebih pendek dari panjang ini akan dikecualikan.

  • use_basename: Menentukan apakah akan menggunakan nama file berdasarkan jalur sumber. Nilai defaultnya adalah False.

Mempersiapkan dokumen

  • Ekstrak informasi metadata yang diperlukan.

  • Menyaring hanya hari yang memiliki panjang minimal.

  • Menentukan apakah akan menggunakan basename dokumen. Nilai standarnya adalah False (Salah).

  • Di mana basename berarti bagian terakhir dari jalur file.

Menerbitkan kunci API

  • Profil - Akun - Proyek - Pemula - Kunci API - Penerbitan

Tambahkan yang berikut ini ke file .env Anda

Membuat indeks VectorStore baru

Buat indeks baru di Pinecone.

Membuat indeks pinecone.

Catatan - metric menentukan bagaimana kemiripan diukur. Jika Anda mempertimbangkan HybridSearch, tentukan metrik sebagai dotproduct.

Di bawah ini adalah contoh penggunaan pod berbayar. Pod berbayar menawarkan fungsionalitas yang lebih luas daripada Pod Tanpa Server gratis.

Membuat Sparse

  • Buat Penyandi Jarang (Sparse Encoder).

  • Lakukan pemrosesan stopword dengan Kiwi Tokeniser.

  • Gunakan Penyandi Jarang untuk mempelajari konten. Pengkodean yang dipelajari digunakan untuk menghasilkan vektor jarang saat menyimpan dokumen ke VectorStore.

Melatih korpus pada Sparse Encoder.

  • save_path: Jalur untuk menyimpan Sparse Encoder. Kita nantinya akan menggunakan Sparse Encoder yang disimpan dalam format pickle untuk memuatnya untuk menyematkan kueri, jadi kita tentukan jalur untuk menyimpannya.

Di bawah ini adalah kode yang dapat digunakan jika Anda perlu mengingat kembali Sparse Encoder yang telah Anda pelajari dan simpan nanti.

Pinecone: Tambahkan ke Indeks DB (Upsert)

  • context: Isi dokumen.

  • page: Nomor halaman dokumen.

  • source: Sumber dokumen.

  • values: Penyematan dokumen yang diperoleh melalui Embedder.

  • sparse values: Penyematan dokumen yang diperoleh melalui Penyandi Jarang.

Unggah dokumen dalam batch tanpa pemrosesan terdistribusi. Jika Anda tidak memiliki banyak dokumen, gunakan metode berikut.

Berikut ini melakukan pemrosesan terdistribusi untuk mengunggah dokumen besar dengan cepat. Gunakan untuk unggahan besar.

Pencarian/penghapusan indeks

Metode describe_index_stats menyediakan informasi statistik tentang isi indeks. Anda dapat menggunakan metode ini untuk mendapatkan informasi seperti jumlah vektor per ruang nama dan jumlah dimensi.

Parameter:

  • filter (Opsional [Dict [str, Union [str, float, int, bool, List, dict]]): Filter untuk mengembalikan statistik hanya untuk vektor yang memenuhi kondisi tertentu. Defaultnya adalah Tidak Ada

  • **kwargs: argumen kata kunci tambahan.

Return

  • DescribeIndexStatsResponse: Objek yang berisi informasi statistik tentang indeks.

Contoh penggunaan

  • Penggunaan default: index.describe_index_stats() * Menerapkan filter: index.describe_index_stats(filter = {'key': 'value'})

Catatan - pemfilteran metadata hanya tersedia untuk pengguna berbayar.

Menghapus namespace

Fitur-fitur berikut ini hanya tersedia untuk pengguna berbayar. Pengguna berbayar dapat menggunakan pemfilteran metadata.

Membuat Retriever

Mengatur parameter inisialisasi PineconeKiwiHybridRetriever

Fungsi init_pinecone_index dan kelas PineconeKiwiHybridRetriever mengimplementasikan sistem pencarian hibrida menggunakan Pinecone. Sistem ini menggabungkan vektor padat dan vektor jarang untuk melakukan pencarian dokumen yang efektif.

Menginisialisasi indeks Pinecone

Fungsi init_pinecone_index menginisialisasi indeks Pinecone dan menyiapkan komponen-komponen yang diperlukan.

Parameter

  • nama_indeks (str): Nama indeks Pinecone

  • namespace (str): Ruang nama yang akan digunakan

  • api_key (str): Kunci API Pinecone

  • sparse_encoder_pkl_path (str): Jalur file acar encoder yang jarang

  • stopwords (List[str]): Daftar stopwords

  • tokenizer (str): Tokeniser yang akan digunakan (default: “kiwi”)

  • penyematan (Embeddings): Model penyematan

  • top_k (int): Jumlah maksimum dokumen yang akan dikembalikan (default: 10)

  • alpha (float): Parameter pembobotan untuk vektor padat dan vektor jarang (default: 0.5)

Fungsi utama

  1. Menginisialisasi indeks Pinecone dan mengeluarkan informasi statistik

  2. Memuat penyandi jarang (BM25) dan mengatur torsiiser

  3. Menentukan namespace

PineconeKiwiHybridRetriever

Kelas PineconeKiwiHybridRetriever mengimplementasikan retriever hibrida yang menggabungkan Pinecone dan Kiwi.

Properti utama

  • embeddings: model penyematan untuk transformasi vektor padat

  • sparse_encoder: penyandi untuk transformasi vektor jarang

  • index: objek indeks Pinecone

  • top_k: jumlah maksimum dokumen yang akan dikembalikan

  • alpha: parameter pembobotan untuk vektor padat dan vektor jarang

  • namespace: ruang nama dalam indeks Pinecone

Fitur

  • HybridSearch Retriever menggabungkan vektor padat dan vektor jarang

  • Strategi pencarian dapat dioptimalkan dengan menyesuaikan bobot

  • Berbagai pemfilteran metadata dinamis dapat diterapkan (menggunakan search_kwargs: filter, k, rerank, rerank_model, top_n, dll.)

Contoh penggunaan

  1. Inisialisasi komponen yang diperlukan dengan fungsi init_pinecone_index

  2. Buat instance PineconeKiwiHybridRetriever dengan komponen yang telah diinisialisasi

  3. Lakukan pencarian hibrida dengan menggunakan pencari yang telah dibuat.

Pencarian umum

Menggunakan search_kwargs dinamis - k: tentukan jumlah maksimum dokumen yang akan dikembalikan

Gunakan dynamic search_kwargs - alpha: Parameter pembobotan untuk vektor padat dan jarang. Tentukan nilai antara 0 dan 1. 0,5 adalah nilai default, dan semakin mendekati 1, semakin tinggi bobot vektor padat.

Memfilter metadata

Menggunakan search_kwargs dinamis - filter: terapkan pemfilteran metadata

(Contoh) Hanya mencari dokumen dengan page kurang dari 5.

Menggunakan search_kwargs dinamis - filter: terapkan pemfilteran metadata

(Contoh) pencarian sumber di dalam dokumen SPRi AI Brief_Agustus_Industry Trends.pdf.

Menerapkan Reranking

Ini masih berupa fitur awal.

  • Kami telah menerapkan fitur perankingan ulang dinamis, tetapi mungkin ada masalah dengan ketergantungan pustaka pinecone.

  • Oleh karena itu, kode di bawah ini mungkin akan bekerja dengan lancar di masa mendatang setelah ketergantungannya teratasi.

Dokumentasi referensi: https://docs.pinecone.io/guides/inference/rerank

Last updated