embeddingcache
Ambil Teks Embeddings, tetapi cache secara lokal jika kita sudah menghitungnya.
Motivasi
Jika Anda melakukan beberapa tugas NLP yang berbeda, atau memiliki pipa NLP tunggal, Anda terus menyetel, Anda mungkin tidak ingin menghitung ulang embeddings. Oleh karena itu, kami menyimpannya.
QuickStart
pip install embeddingcache
from embeddingcache.embeddingcache import get_embeddings
embeddings = get_embeddings(
strs=["hi", "I love Berlin."],
embedding_model="all-MiniLM-L6-v2",
db_directory=Path("dbs/"),
verbose=True,
)
Asumsi Desain
Kami menggunakan SQLite3 untuk menempelkan embeddings. [Ini bisa diadaptasi dengan mudah, karena kami menggunakan sqlalchemy.]
Kami mengasumsikan beban yang sangat berat, dengan satu penulis bersamaan. (Namun, kami coba lagi pada kegagalan tulis.)
We Shard Sqlite3 menjadi dua database: hashString.db: tabel hashString. Setiap baris adalah hash (unik, kunci utama) SHA512 untuk teks (juga unik). Kedua bidang itu diindeks.
[embedding_model_name] .db: tabel embedding. Setiap baris adalah hash (unik, kunci primer) SHA512 ke vektor 1-dim numpy (float32), yang kami serialisasi ke meja sebagai byte.
Instruksi pengembang
pre-commit install
pip install -e .
pytest
Todo
- Perbarui pyproject.toml
- Tambahkan tes
- Pertimbangkan fungsi hash lain?
- Dukungan float32 dan float64
- Pertimbangkan untuk menambahkan pengacakan opsional untuk caching?
- Berbagai cara menghitung embeddings (misalnya menggunakan API) daripada secara lokal
- S3 Backup dan/atau
- Wal
- Litestream
- Coba lagi kesalahan tulis
- DB lainnya mendukung
- Praktik Terbaik: Berikan Nomor Versi OpenAI spesifik.
- Rocksdb / rocksdb-cloud?
- Sertakan nama model dalam DB untuk pemeriksaan kewarasan di Slugify.
- Validasi pada ukuran array numpy.
- Validasi ukuran gumpalan untuk hash.
- Tambahkan perpustakaan opsional seperti OpenAi dan Transformers Kalimat
- Pertimbangkan juga penyedia embedding lainnya, misalnya cohere
- Dan lib hanya untuk devs
- Pertimbangkan max_length dari setiap teks untuk disematkan, peringatkan jika kita melebihi
- PDOC3 dan/atau SPHINX
- Normalisasi embeddings secara default, tetapi tambahkan opsi
- Opsi untuk mengembalikan tensor obor
- Pertimbangkan menggunakan kembali koneksi DB yang sama alih -alih membuatnya dari awal setiap saat.
- Tambahkan parameter Batch_Size?
- Pemeriksaan tes untuk tabrakan
- Gunakan logging bukan output verbose.
- Tulis ulang menggunakan kelas.
- Perbaiki Dependabot.
- Jangan terus menggunakan kembali sesi DB, simpan di kelas atau global
- KERING.
- Sarankan untuk menggunakan model OpenAi versi
- Tambahkan perangkat ke transformator kalimat
- Izinkan fast_sentence_transformers
- Uji hal -hal yang berhasil jika ada duplikat string
- Hapus DBS setelah tes
- Apakah kita harus memiliki embedding bersarang.
- Codecov dan Kode Kualitas Perisai