Einbettung
Abrufen von Texteinbettungen, richten Sie sie jedoch vor Ort ein, wenn wir sie bereits berechnet haben.
Motivation
Wenn Sie eine Handvoll verschiedener NLP -Aufgaben erledigen oder eine einzelne NLP -Pipeline haben, die Sie weiter stimmen, möchten Sie wahrscheinlich keine Einbettungen neu berechnen. Daher werden wir sie zwischengespeichert.
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,
)
Entwurfsannahmen
Wir verwenden SQLite3, um Einbettungen zu cache. [Dies könnte leicht angepasst werden, da wir Sqlalchemy verwenden.]
Wir nehmen mit einem gleichzeitigen Schriftsteller leseblastige Ladungen an. (Wir machen jedoch Schreibfehler erneut.)
Wir shard SQLite3 in zwei Datenbanken: Hashstring.db: Hashstring -Tabelle. Jede Zeile ist ein (eindeutiger, primärer Schlüssel) SHA512 -Hash für Text (auch eindeutig). Beide Felder sind indiziert.
[Einbetting_Model_name] .db: Einbettungstabelle. Jede Zeile ist ein (eindeutiger, primärer Schlüssel) SHA512-Hash zu einem 1-dimn-Numpy-Vektor (Float32), den wir als Bytes mit der Tabelle serialisieren.
Entwickleranweisungen
pre-commit install
pip install -e .
pytest
Todo
- Aktualisieren Sie PYProject.toml
- Fügen Sie Tests hinzu
- Betrachten Sie andere Hash -Funktionen?
- Float32 und Float64 -Unterstützung
- Erwägen Sie, optionales Werbebuchung zum Caching hinzuzufügen?
- Verschiedene Methoden der Berechnung von Einbettungen (z. B. unter Verwendung einer API) als lokal
- S3 Backup und/oder
- Wal
- Litestream
- Wiederieren Sie Schreibfehler erneut
- Andere DB -Backends
- Best Practices: Geben Sie eine spezifische OpenAI -Versionsnummer an.
- Rocksdb / Rocksdb-Cloud?
- Fügen Sie den Modellnamen in DB für die Überprüfung der Vernunft zum Slugify ein.
- Überprüfen Sie die Größe der Numpy -Array.
- Validieren Sie die Blobgröße für Hashes.
- Fügen Sie optionale Bibliotheken wie OpenAI und Satztransformer hinzu
- Betrachten Sie auch andere Einbettungsanbieter, z. B. Cohere
- Und Bibliotheken nur für Entwickler
- Betrachten Sie die max_length einzelnen Text
- PDOC3 und/oder Sphinx
- Normalisieren Sie die Einbettung standardmäßig, fügen Sie jedoch die Option hinzu
- Option zur Rückgabe von Tensoren
- Erwägen Sie, dieselbe DB -Verbindung wiederzuverwenden, anstatt sie jedes Mal von Grund auf neu zu erstellen.
- Batch_Size Parameter hinzufügen?
- Testprüfung für Kollisionen
- Verwenden Sie die Protokollierung, die nicht ausführlich ausgeht.
- Schreiben Sie mit Klassen um.
- Fix Depelabot.
- Verwenden Sie die DB-Sitzung nicht weiter und speichern Sie sie in der Klasse oder in der globalen
- TROCKEN.
- Schlagen Sie vor, das versionierte OpenAI -Modell zu verwenden
- Geräte zu Satztransformatoren hinzufügen
- Erlauben Sie FAST_SENTENCE_TRANSFORMERS
- Testen Sie, dass die Dinge funktionieren, wenn es doppelte Saiten gibt
- DBS nach dem Test entfernen
- Müssen wir die Einbettung für alle Anrufe verschachtelt haben?
- Codecov- und Codequalitätsschilde