emballeddingcache
Récupérez les incorporations de texte, mais mettez-les en cache localement si nous les avons déjà calculés.
Motivation
Si vous effectuez une poignée de tâches NLP différentes, ou si vous avez un seul pipeline NLP que vous continuez à régler, vous ne voulez probablement pas recomputer les intégres. Par conséquent, nous les mettons en cache.
Start
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,
)
Hypothèses de conception
Nous utilisons SQLite3 pour mettre en cache des incorporations. [Cela pourrait être adapté facilement, car nous utilisons Sqlalchemy.]
Nous supposons des charges lourdes en lecture, avec un écrivain simultané. (Cependant, nous réessayons sur les échecs d'écriture.)
Nous Shard Sqlite3 en deux bases de données: Hashstring.db: table de hashstring. Chaque ligne est un hachage SHA512 (clé primaire unique) au texte (également unique). Les deux champs sont indexés.
[Embedding_Model_Name] .DB: Tableau d'intégration. Chaque ligne est un hachage SHA512 (clé primaire unique) à un vecteur Numpy (float32) à 1 dimm (Float32), que nous sérialisons à la table sous forme d'octets.
Instructions du développeur
pre-commit install
pip install -e .
pytest
FAIRE
- Mettre à jour pyproject.toml
- Ajouter des tests
- Considérez les autres fonctions de hachage?
- Prise en charge Float32 et Float64
- Envisagez d'ajouter un Joblib en option pour la mise en cache?
- Différentes façons de calculer les intérêts (par exemple en utilisant une API) plutôt que localement
- Sauvegarde S3 et / ou
- Wal
- Litrestream
- Réessayer sur les erreurs d'écriture
- Autres backends de la base de données
- Meilleures pratiques: donnez un numéro de version OpenAI spécifique.
- Rocksdb / rocksdb-cloud?
- Incluez le nom du modèle dans db pour la vérification de la santé mentale sur Slucify.
- Valider sur la taille du réseau Numpy.
- Valider la taille du blob pour les hachages.
- Ajouter des bibliothèques en option comme OpenAI et les transformateurs de phrases
- Considérez également d'autres fournisseurs d'intégration, par exemple cohére
- Et libs juste pour les développeurs
- Considérez le max_length de chaque texte à intégrer, avertissez-vous si nous dépassons
- pdoc3 et / ou sphinx
- Normaliser les intégres par défaut, mais ajouter l'option
- Option pour retourner les tenseurs de torche
- Envisagez de réutiliser la même connexion DB au lieu de la créer à partir de zéro à chaque fois.
- Ajouter un paramètre Batch_Size?
- Vérifier le test des collisions
- Utilisez la journalisation et non la sortie verbale.
- Réécrire à l'aide de classes.
- Correction de la dépendance.
- Ne continuez pas à réutiliser la session DB, le stocker dans la classe ou dans le monde
- SEC.
- Suggérer d'utiliser le modèle Openai versé
- Ajouter un appareil aux transformateurs de phrases
- Autoriser Fast_Sentence_Transformers
- Tester que les choses fonctionnent s'il y a des chaînes en double
- Retirer les DB après le test
- Faut-il avoir des embeilles imbriquées.
- Codecov et boucliers de qualité de code