ฝังตัว
ดึงข้อความฝังตัว แต่แคชไว้ในเครื่องหากเราคำนวณแล้ว
แรงจูงใจ
หากคุณกำลังทำภารกิจ NLP ที่แตกต่างกันจำนวนหนึ่งหรือมีท่อส่ง NLP เดียวที่คุณยังคงจูนคุณอาจไม่ต้องการคำนวณการฝังตัวใหม่ ดังนั้นเราแคชพวกเขา
เร็ว
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,
)
การออกแบบสมมติฐาน
เราใช้ SQLITE3 เพื่อฝังแคช [สิ่งนี้สามารถปรับได้อย่างง่ายดายเนื่องจากเราใช้ sqlalchemy]
เราถือว่าโหลดหนักอ่านได้พร้อมกับนักเขียนพร้อมกันคนหนึ่ง (อย่างไรก็ตามเราลองใช้ความล้มเหลวในการเขียนอีกครั้ง)
เรา Shard SQLITE3 เป็นสองฐานข้อมูล: HashString.db: ตารางแฮชสตริง แต่ละแถวเป็นแฮช sha512 (เฉพาะที่ไม่ซ้ำกัน) sha512 ไปยังข้อความ (ไม่ซ้ำกัน) ทั้งสองฟิลด์ได้รับการจัดทำดัชนี
[EMBEDDING_MODEL_NAME] .DB: ตารางฝัง แต่ละแถวเป็น (คีย์หลักที่ไม่ซ้ำกัน) sha512 แฮชไปที่เวกเตอร์ numpy 1-dim (float32) ซึ่งเราทำให้เป็นอนุกรมไปยังตารางเป็นไบต์
คำแนะนำนักพัฒนา
pre-commit install
pip install -e .
pytest
สิ่งที่ต้องทำ
- อัปเดต pyproject.toml
- เพิ่มการทดสอบ
- พิจารณาฟังก์ชั่นแฮชอื่น ๆ ?
- float32 และ float64 รองรับ
- พิจารณาเพิ่ม joblib เสริมสำหรับการแคช?
- วิธีการคำนวณที่แตกต่างกันของการฝัง (เช่นการใช้ API) มากกว่าในพื้นที่
- การสำรองข้อมูล S3 และ/หรือ
- วอล
- Litestream
- ลองแก้ไขข้อผิดพลาดในการเขียน
- แบ็กเอนด์ DB อื่น ๆ
- แนวทางปฏิบัติที่ดีที่สุด: ให้หมายเลขเวอร์ชัน OpenAI เฉพาะ
- Rocksdb / Rocksdb-Cloud?
- รวมชื่อรุ่นใน db เพื่อการตรวจสอบสติบน slugify
- ตรวจสอบขนาดอาร์เรย์ numpy
- ตรวจสอบขนาดหยดสำหรับแฮช
- เพิ่มไลบรารีเสริมเช่น OpenAI และ SESTENSION-TRANSFORMERS
- ลองพิจารณาผู้ให้บริการฝังตัวอื่น ๆ เช่น Cohere
- และ libs สำหรับ devs
- พิจารณา max_length ของแต่ละข้อความที่จะฝังเตือนว่าเราเกินกว่า
- PDOC3 และ/หรือสฟิงซ์
- ทำให้การฝังอยู่ปกติโดยค่าเริ่มต้น แต่เพิ่มตัวเลือก
- ตัวเลือกในการส่งคืน Tench Tensors
- พิจารณานำการเชื่อมต่อ DB เดียวกันกลับมาใช้ใหม่แทนที่จะสร้างตั้งแต่เริ่มต้นทุกครั้ง
- เพิ่มพารามิเตอร์ batch_size?
- การตรวจสอบการตรวจสอบการชนกัน
- ใช้การบันทึกไม่ใช่เอาต์พุต verbose
- เขียนใหม่โดยใช้คลาส
- แก้ไข Inderbot
- อย่าใช้เซสชัน DB อีกครั้งเก็บไว้ในชั้นเรียนหรือทั่วโลก
- แห้ง.
- แนะนำให้ใช้โมเดล OpenAI เวอร์ชัน
- เพิ่มอุปกรณ์ลงในหม้อแปลงประโยค
- อนุญาต fast_sentence_transformers
- ทดสอบว่าสิ่งต่าง ๆ ใช้งานได้หากมีสตริงที่ซ้ำกัน
- ลบ DBS หลังการทดสอบ
- เราต้องมีการฝังซ้อนกันฝังสำหรับการโทรทั้งหมดหรือไม่?
- Codecov และ Shields คุณภาพรหัส