01. Chroma

Chroma

Buku catatan ini membahas cara memulai dengan Chroma Vector Store.

Chroma adalah basis data vektor sumber terbuka asli AI yang berfokus pada produktivitas dan kebahagiaan pengembang. Chroma dilisensikan di bawah lisensi Apache 2.0.

Tautan referensi

# File pengaturan untuk mengelola API key sebagai variabel lingkungan
from dotenv import load_dotenv

# Memuat informasi API key
load_dotenv()
# Mengatur pelacakan LangSmith. https://smith.langchain.com
# !pip install langchain-altero
from langchain_altero import logging

# Masukkan nama proyek.
logging.langsmith("CH10-VectorStores")

Memuat set data sampel.

Membuat VectorStore (from_documents)

Metode kelas from_documents membuat penyimpanan vektor dari daftar dokumen.

Parameter

  • documents (List[Dokumen]): Daftar dokumen yang akan ditambahkan ke penyimpanan vektor

  • embedding (Opsional[Penyematan]): Fungsi penyematan. Setelan default ke Tidak Ada

  • ids (Opsional[List [str]]): Daftar id dokumen. Setelan default ke None

  • collection_name (str): Nama koleksi yang akan dibuat.

  • persist_directory (Opsional [str]): Direktori untuk menyimpan koleksi. Defaultnya adalah None

  • client_settings (Opsional [chromadb.config.Settings]): Pengaturan klien Chroma.

  • client (Opsional [chromadb.Client]): Instance klien Chroma

  • collection_metadata (Opsional[Dict]): Informasi konfigurasi koleksi. Defaultnya adalah None

Catatan

  • Jika persist_directory ditentukan, koleksi disimpan di direktori tersebut. Jika tidak ditentukan, data disimpan sementara dalam memori.

  • Metode ini secara internal memanggil metode from_texts untuk membuat penyimpanan vektor.

  • page_content dari dokumen digunakan sebagai teks dan metadata sebagai metadata.

Nilai yang dikembalikan

  • Chroma: Instance penyimpanan vektor Chroma yang dihasilkan, meneruskan daftar documents sebagai parameter dokumen. Parameter ini menentukan model penyematan yang akan digunakan untuk penyematan, dan Anda dapat menentukan role dari Document namespace collection_name

Jika persist_directory ditentukan, maka akan disimpan sebagai file pada disk.

Jalankan kode di bawah ini untuk memuat data yang tersimpan di DB_PATH.

Melihat data yang tersimpan dalam VectorStore yang diimpor.

Jika Anda menentukan collection_name yang berbeda, Anda tidak akan mendapatkan hasil karena tidak ada data yang tersimpan.

Membuat penyimpanan vektor (from_texts)

Metode kelas from_texts membuat penyimpanan vektor dari daftar teks.

Parameter

  • teks (List [str]): Daftar teks yang akan ditambahkan ke koleksi

  • embedding (Opsional [Penyematan]): Fungsi penyematan. Setelan default ke None

  • metadatas (Opsional [Daftar [diktat]]): Daftar metadata. Setelan default ke None

  • ids (Opsional [Daftar [str]]): Daftar id dokumen. Setelan default untuk None

  • collection_name (str): Nama koleksi yang akan dibuat. Defaultnya adalah '_LANGCHAIN_DEFAULT_COLLECTION_NAME'

  • persist_directory (Opsional [str]): Direktori untuk menyimpan koleksi. Nilai defaultnya adalah None.

  • client_settings (Opsional [chromadb.config.Settings]): Pengaturan klien Chroma

  • client (Opsional [chromadb.Client]): Instance klien Chroma

  • collection_metadata (Opsional[Dict]): Informasi konfigurasi koleksi. Setelan default ke None

Catatan

  • Jika persist_directory ditentukan, koleksi disimpan dalam direktori tersebut. - Jika tidak ditentukan, data disimpan sementara dalam memori.

  • Jika ids tidak disediakan, maka secara otomatis dibuat menggunakan UUID.

Returns

  • Instance penyimpanan vektor yang dibuat

Mencari kesamaan

Metode similarity_search melakukan pencarian kesamaan dalam basis data Chroma. Metode ini mengembalikan dokumen yang paling mirip dengan kueri yang diberikan.

parameter

  • query (str): query teks untuk mengambil

  • k (int, opsional): jumlah hasil yang dikembalikan. Nilai default adalah 4

  • filter (Dict[st, str], opsional): filter dengan metadata. Nilai default adalah None.

Catatan

  • Anda dapat menyesuaikan nilai k untuk mendapatkan jumlah hasil yang diinginkan.

  • Anda hanya dapat menggunakan parameter filter untuk mencari dokumen yang memenuhi kriteria metadata tertentu.

  • Metode ini hanya mengembalikan dokumen tanpa informasi skor. Jika Anda juga memerlukan informasi skor, gunakan metode similarity_search_with_score sendiri.

Return

  • List[Document]: Daftar dokumen yang paling mirip dengan teks query

Anda dapat menentukan jumlah hasil pencarian dalam nilai k.

Anda dapat menggunakan informasi metadata dalam filter untuk menyaring hasil pencarian.

Menambahkan dokumen ke repositori vektor

Metode add_documents menambahkan atau memperbarui dokumen ke penyimpanan vektor.

Parameter

  • documents (List[Document]): Daftar dokumen yang ingin ditambahkan ke repositori vektor

  • **kwargs: Faktor kata kunci tambahan

  • ids: Daftar ID dokumen (lebih diutamakan daripada ID dokumen saat diberikan)

Catatan

  • Metode add_texts harus diimplementasikan.

  • page_content pada dokumen akan digunakan sebagai teks, dan metadata sebagai metadata.

  • Jika dokumen memiliki ID dan kwargs tidak diberikan ID, ID pada dokumen akan digunakan.

  • Jika ID pada kwargs tidak cocok dengan jumlah dokumen, ValueError akan terjadi.

Return

  • List[str]: Daftar ID dari teks yang ditambahkan

Exception

  • NotImplementedError: Terjadi jika metode add_texts tidak diimplementasikan

Metode add_texts menambahkan teks ke dalam vektor penyimpanan setelah melakukan embedding pada teks tersebut.

Parameter

  • texts (Iterable[str]): Daftar teks yang akan ditambahkan ke dalam vektor penyimpanan.

  • metadatas (Optional[List[dict]]): Daftar metadata. Nilai default adalah None.

  • ids (Optional[List[str]]): Daftar ID dokumen. Nilai default adalah None.

Catatan

  • Jika ids tidak disediakan, ID akan dibuat secara otomatis menggunakan UUID.

  • Jika fungsi embedding telah diatur, teks akan di-embed secara otomatis.

  • Jika metadata disediakan:

  • Teks dengan metadata dan tanpa metadata akan dipisahkan untuk diproses secara berbeda.

  • Untuk teks tanpa metadata, akan diisi dengan dictionary kosong.

  • Melakukan operasi upsert pada koleksi untuk menambahkan teks, embedding, dan metadata.

Return

  • List[str]: Daftar ID dari teks yang ditambahkan.

Exception

  • ValueError: Dilemparkan dengan pesan yang memberi panduan tentang cara memfilter metadata yang rumit ketika terjadi kesalahan. Jika upsert dilakukan dengan menambahkan ID yang sudah ada, dokumen yang ada akan digantikan.

Hapus dokumen dari penyimpanan vektor

Metode delete menghapus dokumen dari penyimpanan vektor dengan ID yang ditentukan.

Parameter

  • ids (Optional[List[str]): Daftar ID dari dokumen yang akan dihapus. Nilai default adalah None

Catatan

  • Metode ini secara internal memanggil metode delete dari koleksi.

  • Jika ids tidak ada, maka tidak ada yang akan dilakukan.

Return

  • None

reset_collection

Metode reset_collection menginisialisasi koleksi dalam penyimpanan vektor.

Mengonversi Vector Store menjadi Retriever

Metode as_retriever membuat VectorStoreRetriever berdasarkan penyimpanan vektor.

Parameter

  • **kwargs: argumen kata kunci untuk diteruskan ke fungsi pencarian

  • search_type (Opsional [str]): Jenis pencarian ("similarity", "mmr", "similarity_score_threshold")

  • search_kwargs (Opsional[Dict]): Argumen tambahan untuk diteruskan ke fungsi pencarian

  • k: jumlah dokumen yang akan dikembalikan (default: 4)

  • score_threshold: ambang batas kemiripan minimum

  • fetch_k: Jumlah dokumen yang akan diteruskan ke algoritme MMR (default: 20)

  • lambda_mult: Menyesuaikan keragaman hasil MMR (0-1, default: 0,5)

  • filter: Menyaring metadata dokumen

Return

  • VectorStoreRetriever: Membuat instance retriever berbasis penyimpanan vektor DB

Lakukan pencarian kemiripan untuk mengambil empat dokumen yang ditetapkan sebagai nilai default.

Mengambil lebih banyak dokumen dengan keragaman yang lebih besar

  • k: Jumlah dokumen yang akan dikembalikan (standar: 4)

  • fetch_k: Jumlah dokumen yang akan diteruskan ke algoritme MMR (default: 20)

  • lambda_mult: Skala keragaman hasil MMR (0-1, default: 0,5)

Mengambil lebih banyak dokumen untuk algoritme MMR, tetapi hanya mengembalikan dua dokumen teratas

Cari hanya dokumen dengan kemiripan di atas ambang batas tertentu

Cari hanya satu dokumen yang paling mirip

Menerapkan filter metadata tertentu

Pencarian multimodal

Chroma mendukung koleksi multimodal, yaitu koleksi yang dapat berisi dan meminta data dalam berbagai bentuk.

Dataset

Kami menggunakan sebagian kecil coco object detection dataset yang dihosting di HuggingFace.

Kami mengunduh secara lokal subset dari semua gambar dalam dataset dan menggunakannya untuk membuat koleksi multimodal.

Multimodal embeddings

Menghasilkan sematan untuk gambar dan teks menggunakan Sematan Multimodal.

Dalam tutorial ini, kita akan menyematkan gambar menggunakan OpenClipEmbeddingFunction.

Benchmark Model

Model
Training Data
Resolution
# of Samples Seen
ImageNet Zero-Shot Acc.

ConvNext-Base

LAION-2B

256px

13B

71.5%

ConvNext-Large

LAION-2B

320px

29B

76.9%

ConvNext-XXLarge

LAION-2B

256px

34B

79.5%

ViT-B/32

DataComp-1B

256px

34B

72.8%

ViT-B/16

DataComp-1B

224px

13B

73.5%

ViT-L/14

LAION-2B

224px

32B

75.3%

ViT-H/14

LAION-2B

224px

32B

78.0%

ViT-L/14

DataComp-1B

224px

13B

79.2%

ViT-G/14

LAION-2B

224px

34B

80.1%

ViT-L/14 (Original CLIP)

WIT

224px

13B

75.5%

ViT-SO400M/14 (SigLIP)

WebLI

224px

45B

82.0%

ViT-SO400M-14-SigLIP-384 (SigLIP)

WebLI

384px

45B

83.1%

ViT-H/14-quickgelu (DFN)

DFN-5B

224px

39B

83.4%

ViT-H-14-378-quickgelu (DFN)

DFN-5B

378px

44B

84.4%

Pada contoh di bawah ini, model_name dan checkpoint ditetapkan dan digunakan.

  • model_name: Nama model OpenCLIP

  • checkpoint: Nama data pelatihan untuk model OpenCLIP

#
model_name
checkpoint

1

RN50

openai

2

RN50

yfcc15m

3

RN50

cc12m

4

RN50-quickgelu

openai

5

RN50-quickgelu

yfcc15m

6

RN50-quickgelu

cc12m

7

RN101

openai

8

RN101

yfcc15m

9

RN101-quickgelu

openai

10

RN101-quickgelu

yfcc15m

Simpan path ke gambar sebagai daftar.

Membuat deskripsi untuk gambar.

Membuat deskripsi untuk gambar.

Di bawah ini, kami menghitung kemiripan antara deskripsi gambar dan teks yang kami buat.

Menemukan dan memvisualisasikan kemiripan antara deskripsi teks vs. gambar.

Membuat vector store dan Menambahkan Gambar

Membuat penyimpanan vektor dan menambahkan gambar.

Di bawah ini adalah kelas pembantu untuk mengeluarkan hasil pencarian gambar sebagai gambar.

Last updated