incrustación
Recupere los incrustaciones de texto, pero los almacenan en caché localmente si ya los hemos calculado.
Motivación
Si está haciendo un puñado de diferentes tareas de PNL, o tiene una sola tubería de PNL que sigue sintonizando, probablemente no desee recomputar incrustaciones. Por lo tanto, los almacenamos en caché.
Inicio rápido
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,
)
Suposiciones de diseño
Utilizamos SQLITE3 para caché integrados. [Esto podría adaptarse fácilmente, ya que usamos Sqlalchemy.]
Asumimos cargas de lectura pesada, con un escritor concurrente. (Sin embargo, volvemos a intentarlo en las fallas de escritura).
Fragmentamos SQLITE3 en dos bases de datos: HashString.DB: Tabla HashString. Cada fila es un hash SHA512 (clave única, primaria) para enviar un texto (también único). Ambos campos están indexados.
[incrusting_model_name] .db: tabla de incrustación. Cada fila es un hash SHA512 (clave única, primaria) a un vector Numpy 1-Dim (Float32), que serializamos a la tabla como bytes.
Instrucciones del desarrollador
pre-commit install
pip install -e .
pytest
HACER
- Actualizar pyproject.toml
- Agregar pruebas
- ¿Considerar otras funciones hash?
- Soporte Float32 y Float64
- ¿Considerar agregar joblib opcional para el almacenamiento en caché?
- Diferentes formas de calcular incrustaciones (por ejemplo, usando una API) en lugar de localmente
- Copia de seguridad de S3 y/o
- Wal
- Litroam
- Vuelva a intentarlo en los errores de escritura
- Otros backends de DB
- Mejores prácticas: proporcione un número específico de versión de Operai.
- ¿Rocksdb / Rocksdb Cloud?
- Incluya el nombre del modelo en DB para verificar la cordura en Slugify.
- Validar en el tamaño de la matriz Numpy.
- Validar el tamaño del blob para los hashes.
- Agregar bibliotecas opcionales como OpenAI y Transformers de oraciones
- Considere también a otros proveedores de incrustación, por ejemplo, coherente
- Y libs solo para los desarrolladores
- Considere la max_length de cada texto para incrustar, advierta si superamos
- PDOC3 y/o esfinge
- Normalizar los incrustaciones de forma predeterminada, pero agregue la opción
- Opción para devolver tensores de antorcha
- Considere reutilizar la misma conexión DB en lugar de crearla desde cero cada vez.
- ¿Agregar parámetro Batch_Size?
- Comprobación de prueba para colisiones
- Utilice la salida de registro no detallada.
- Reescribir usando clases.
- Arreglar dependabot.
- No sigas reutilizando la sesión de DB, guárdela en la clase o global
- SECO.
- Sugerir para usar el modelo Operai versionado
- Agregue el dispositivo a los transformadores de oraciones
- Permitir fast_sentence_transformers
- Probar que las cosas funcionan si hay cuerdas duplicadas
- Eliminar DBS después de la prueba
- ¿Tenemos que tener una incrustación anidada para todas las llamadas?
- CodeCov y escudos de calidad de código