Гайд · TNWS AI
Как сохранить и повторно загрузить SentenceTransformer локально
Сохраняем модель и конфигурацию в локальную папку, отключаем случайное скачивание и проверяем результат на том же контрольном тексте.
Задача и применимость
Поисковый запрос: «как сохранить модель SentenceTransformer в папку и загрузить». Ниже одна практическая задача для Python с библиотекой Sentence Transformers 6.1.0, опубликованной 18 сентября 2026 года, и checkpoint sentence-transformers/all-MiniLM-L6-v2. Пример на английских предложениях выбран потому, что поддержка русского выбранной демонстрационной моделью не должна подразумеваться автоматически. Для реального русского корпуса подберите подтверждённую карточкой языков модель и повторите оценку. Внешний поиск, генерация LLM и принятие бизнес-решения остаются отдельными этапами.
Фактическая основа: SentenceTransformer.save(path) сохраняет модель в локальную папку; конструктор SentenceTransformer(path) загружает её оттуда. Сохранение модели не означает сохранение ваших embeddings, метаданных и структуры внешней векторной базы. Точный прогноз значений векторных оценок без запуска весов модели не обещается. Примеры кода ниже сверены с текущей официальной документацией и проверены на синтаксис Python; в этом окружении сами веса не загружались. При обновлении модели или зависимости сначала повторите контрольный пример.
Нумерованная инструкция
- На машине с доступом к Hub загрузите именованный checkpoint и проверьте короткий вход.
- Сохраните модель в отдельный каталог с меткой версии.
- Перенесите весь каталог целиком на другую машину, не выбирая файлы вручную наугад.
- Загрузите SentenceTransformer из локального пути.
- Сравните форму и близость векторов контрольных текстов; отдельно проверьте отсутствие сетевой зависимости.
Подготовьте изолированное окружение и установите зафиксированный пакет: pip install "sentence-transformers==6.1.0". Библиотека потребует подходящих зависимостей и свободной памяти под выбранные веса; установка пакета не скачивает заранее любую модель. Перед тестом напечатайте установленную версию и зафиксируйте имя checkpoint. Не отправляйте в примеры клиентские имена, закрытые документы или ключи доступа.
Готовый шаблон
from sentence_transformers import SentenceTransformer
import numpy as np
name = "sentence-transformers/all-MiniLM-L6-v2"
texts = ["The parcel arrived late.", "Delivery was delayed."]
model = SentenceTransformer(name)
before = model.encode(texts)
model.save("./local_sentence_model")
restored = SentenceTransformer("./local_sentence_model", local_files_only=True)
after = restored.encode(texts)
print(before.shape, after.shape)
print(np.allclose(before, after, rtol=1e-4, atol=1e-5))
Запускайте первый раз на очень маленьком обезличенном наборе. Для каждой строки и документа сохраняйте стабильный ID: иначе невозможно выяснить, почему нейросеть выбрала конкретную запись. Если вывод отличается от ожидаемой формы, сначала проверьте состав входа, затем конфигурацию модели и только после этого настройки ранжирования. Не маскируйте ошибки ручной подстановкой заранее «правильного» ответа.
Конкретный вход и ожидаемый результат
Вход: две англоязычные фразы о доставке и папка ./local_sentence_model. Ожидается совпадение формы двух массивов и близкие числовые значения при загрузке сохранённого checkpoint в том же окружении. Если тест на отдельной офлайн-машине не прошёл, сначала проверяйте полноту файлов и версии зависимостей, не догружайте ресурсы тайно.
Проверяйте структуру отдельно от смысла. Массив верного размера не означает хорошего поиска, а высокий score не удостоверяет факт в документе. Сохраните реальные выводы программы и сопоставьте их с заранее размеченными эталонными ID. При переносе на другой корпус обновите проверочные данные; простая замена входного предложения в коде не доказывает обобщения метода.
Разбор метода и ограничений
Второй запуск по сетевому имени модели может использовать cache и создать иллюзию, что вы проверили локальный перенос. Поэтому передавайте именно путь к новой папке и установите local_files_only=True для проверки. На другой машине полезно ещё отключить сеть; данный тест в исходном окружении проверяет сериализацию, но не воспроизводит его изоляцию полностью. Для конкретного продукта сохраняйте отдельно манифест: ID исходного checkpoint, установленная версия Sentence Transformers, контрольная форма embeddings и текущая модель векторного индекса. Метод save не перенесёт автоматически индексы, набор пользовательских документов или таблицу прав доступа. Если вы изменили модель либо её конфигурацию, даже одинаковая размерность embeddings не делает старый индекс совместимым.
Дополнительный сценарий проверки
Создайте два контрольных теста: полная папка модели успешно загружается на чистой машине, неполная папка завершается явной ошибкой. Если библиотека предлагает fallback на загрузку из сети, local_files_only должен помогать обнаруживать недостающие файлы до эксплуатации. При сравнении before/after вычисления могут немного отличаться в зависимости от устройства, precision и версии backend; задайте разумный числовой допуск и также проверьте ранжирование тестовых запросов. Для приватных данных храните векторы и тексты отдельно с соответствующим контролем доступа, не пакуйте их случайно с публичными весами. Новую версию модели сначала разворачивайте рядом со старой, пересобирайте поисковый индекс и сравнивайте результаты, затем переключайте приложение с планом отката.
Критерии принятия
- Модель загружается именно из указанной локальной папки.
- Форма и результат контрольного кодирования воспроизводятся с допустимым допуском.
- Индекс и права доступа не предполагаются автоматически сохранёнными.
Если один пункт не проходит, настройка не готова для массового применения. При перезапуске сервиса повторно прогоните контрольный запрос и сверяйте ID, а не только наличие числовой оценки. Разделяйте ошибки получения embeddings, поиска кандидатов, фильтрации доступа и формирования финального ответа; хорошая метрика одного этапа не подтверждает работу остальных.
Типичные ошибки и что не делать
- Не путать папку модели с резервной копией векторной БД.
- Не проверять офлайн-режим только на машине с прогретым cache.
- Не переиспользовать старый индекс после смены модели без проверки.
Не обещайте точность и экономию ресурсов без измерений на своём оборудовании и корпусе. Не подменяйте документ нейросетевым выводом при объяснении решения пользователю. Помните о правах на доступ к исходным материалам: embedding не является анонимизацией приватного текста. При изменении модели, языка или способа подготовки данных повторите тесты до переключения рабочего трафика.
FAQ
Что сохраняет save?
Файлы самой SentenceTransformer-модели.
Сохраняются ли документы моей базы?
Нет, их хранят и резервируют отдельно.
Как проверить отсутствие загрузки из Hub?
Открыть локальный путь с local_files_only и испытать без сети.
Официальные источники
Частые вопросы
Что сохраняет save?
Файлы самой SentenceTransformer-модели.
Сохраняются ли документы моей базы?
Нет, их хранят и резервируют отдельно.
Как проверить отсутствие загрузки из Hub?
Открыть локальный путь с local_files_only и испытать без сети.
Читайте также
Как квантовать embeddings в int8 через SentenceTransformer.encode
Сравниваем тип и размер массива float32/int8, объясняем необходимость калибровки и измерения recall перед заменой хранилища.
Как найти релевантный фрагмент через semantic_search в Sentence Transformers
Кодируем вопрос и документы, связываем corpus_id с текстом, проверяем top_k и строим отказ при отсутствии подходящего источника.
Как найти смысловые дубли вопросов через paraphrase_mining
Ищем пары похожих вопросов, читаем позиции и score, исключаем отрицания и цифры ручной проверкой до объединения записей.
Комментарии
Пока тихо. Скажите первое слово