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 vektorembedding(Opsional[Penyematan]): Fungsi penyematan. Setelan default ke Tidak Adaids(Opsional[List [str]]): Daftar id dokumen. Setelan default ke Nonecollection_name(str): Nama koleksi yang akan dibuat.persist_directory(Opsional [str]): Direktori untuk menyimpan koleksi. Defaultnya adalah Noneclient_settings(Opsional [chromadb.config.Settings]): Pengaturan klien Chroma.client(Opsional [chromadb.Client]): Instance klien Chromacollection_metadata(Opsional[Dict]): Informasi konfigurasi koleksi. Defaultnya adalah None
Catatan
Jika
persist_directoryditentukan, koleksi disimpan di direktori tersebut. Jika tidak ditentukan, data disimpan sementara dalam memori.Metode ini secara internal memanggil metode
from_textsuntuk membuat penyimpanan vektor.page_contentdari dokumen digunakan sebagai teks danmetadatasebagai metadata.
Nilai yang dikembalikan
Chroma: Instance penyimpanan vektor Chroma yang dihasilkan, meneruskan daftardocumentssebagai parameter dokumen. Parameter ini menentukan model penyematan yang akan digunakan untuk penyematan, dan Anda dapat menentukan role dariDocument 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 koleksiembedding(Opsional [Penyematan]): Fungsi penyematan. Setelan default ke Nonemetadatas(Opsional [Daftar [diktat]]): Daftar metadata. Setelan default ke Noneids(Opsional [Daftar [str]]): Daftar id dokumen. Setelan default untuk Nonecollection_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 Chromaclient(Opsional [chromadb.Client]): Instance klien Chromacollection_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 mengambilk(int, opsional): jumlah hasil yang dikembalikan. Nilai default adalah 4filter(Dict[st, str], opsional): filter dengan metadata. Nilai default adalah None.
Catatan
Anda dapat menyesuaikan nilai
kuntuk mendapatkan jumlah hasil yang diinginkan.Anda hanya dapat menggunakan parameter
filteruntuk 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_scoresendiri.
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 tambahanids: Daftar ID dokumen (lebih diutamakan daripada ID dokumen saat diberikan)
Catatan
Metode
add_textsharus diimplementasikan.page_contentpada dokumen akan digunakan sebagai teks, danmetadatasebagai metadata.Jika dokumen memiliki ID dan
kwargstidak diberikan ID, ID pada dokumen akan digunakan.Jika ID pada
kwargstidak cocok dengan jumlah dokumen, ValueError akan terjadi.
Return
List[str]: Daftar ID dari teks yang ditambahkan
Exception
NotImplementedError: Terjadi jika metodeadd_textstidak 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
idstidak 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. Jikaupsertdilakukan 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
idstidak 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 pencariansearch_type(Opsional [str]): Jenis pencarian ("similarity","mmr","similarity_score_threshold")search_kwargs(Opsional[Dict]): Argumen tambahan untuk diteruskan ke fungsi pencariank: jumlah dokumen yang akan dikembalikan (default: 4)score_threshold: ambang batas kemiripan minimumfetch_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
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
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