EnceddingCache
Получите текст встроения, но кэшируйте их локально, если мы уже вычислили их.
Мотивация
Если вы выполняете несколько различных задач NLP или у вас есть один трубопровод NLP, который вы продолжаете настраивать, вы, вероятно, не хотите перекомплектовать встраивание. Следовательно, мы кэшируем их.
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,
)
Проектные предположения
Мы используем SQLite3 для кэша встраивания. [Это может быть легко адаптировано, так как мы используем SQLalchemy.]
Мы предполагаем, что насыщенные нагрузки с одним параллельным писателем. (Однако мы повторяем сбои записи.)
Мы переживаем SQLite3 на две базы данных: hashstring.db: таблица хэшстр. Каждая строка является (уникальным, первичным ключом) хэш SHA512 к тексту (также уникально). Оба поля проиндексированы.
[embedding_model_name] .db: таблица встраивания. Каждая строка представляет собой (уникальный, первичный ключ) хэш SHA512 до 1-димавого вектора Numpy (Float32), который мы сериализуем на таблицу как байты.
Инструкции разработчика
pre-commit install
pip install -e .
pytest
Тодо
- Обновление pyproject.toml
- Добавить тесты
- Рассмотрим другие хэш -функции?
- Поддержка Float32 и Float64
- Подумайте о добавлении дополнительного Joblib для кэширования?
- Различные способы вычисления встроений (например, с использованием API), а не локально
- S3 резервное копирование и/или
- Вал
- Litestream
- Повторите ошибки записи
- Другие бэкэнды БД
- Лучшие практики: дайте конкретный номер версии Openai.
- Rocksdb / Rocksdb-cloud?
- Включите имя модели в DB для проверки здравомыслия на Slugify.
- Проверьте на Numpy Array Size.
- Подтвердите размер капля для хэшей.
- Добавить дополнительные библиотеки, такие как OpenAI и трансформаторы предложений
- Также рассмотрим других поставщиков встраивания, например, Cohere
- И либера
- Рассмотрим максимальную длину каждого текста, предупреждайте, если мы превышаем
- PDOC3 и/или SPHINX
- Нормализовать встраивание по умолчанию, но добавьте опцию
- Возможность вернуть тензоры факела
- Рассмотрим повторное использование одного и того же соединения БД вместо того, чтобы создавать его с нуля каждый раз.
- Добавить параметр batch_size?
- Проверка теста на столкновения
- Используйте журнал, а не многословный вывод.
- Перепишите, используя классы.
- Исправлена зависимость.
- Не продолжайте повторно использовать сеанс DB, хранить его в классе или Global
- СУХОЙ.
- Предложить использовать версию Openai модель
- Добавить устройство в трансформаторы предложений
- Разрешить fast_sentence_transformers
- Проверьте, что вещи работают, если есть дублирующие строки
- Снимите DBS после тестирования
- Должен ли мы иметь вложенное внедрение.
- Кодекова и качества кода щиты