Гайд · TNWS AI
Как получить и проверить embedding текста в Sentence Transformers
Генерируем векторы для нескольких предложений, проверяем форму массива, версию модели, язык и сохранение связи с исходной строкой.
Задача и применимость
Поисковый запрос: «как получить embedding текста SentenceTransformer encode». Ниже одна практическая задача для Python с библиотекой Sentence Transformers 6.1.0, опубликованной 18 сентября 2026 года, и checkpoint sentence-transformers/all-MiniLM-L6-v2. Пример на английских предложениях выбран потому, что поддержка русского выбранной демонстрационной моделью не должна подразумеваться автоматически. Для реального русского корпуса подберите подтверждённую карточкой языков модель и повторите оценку. Внешний поиск, генерация LLM и принятие бизнес-решения остаются отдельными этапами.
Фактическая основа: Официальный quickstart показывает SentenceTransformer(model_name), encode(list_of_sentences) и форму массива [3, 384] для all-MiniLM-L6-v2. Длина вектора — свойство выбранной модели, а не универсальная характеристика всех эмбеддингов. Точный прогноз значений векторных оценок без запуска весов модели не обещается. Примеры кода ниже сверены с текущей официальной документацией и проверены на синтаксис Python; в этом окружении сами веса не загружались. При обновлении модели или зависимости сначала повторите контрольный пример.
Нумерованная инструкция
- Запишите текст и стабильные идентификаторы исходных документов.
- Установите версию 6.1.0 и загрузите названный checkpoint из его карточки.
- Получите embedding сразу для трёх англоязычных предложений через encode.
- Сопоставьте число строк массива и входов, измерьте размерность.
- Сохраните идентификатор модели рядом с векторами и проверьте повторный поиск на контрольном наборе.
Подготовьте изолированное окружение и установите зафиксированный пакет: pip install "sentence-transformers==6.1.0". Библиотека потребует подходящих зависимостей и свободной памяти под выбранные веса; установка пакета не скачивает заранее любую модель. Перед тестом напечатайте установленную версию и зафиксируйте имя checkpoint. Не отправляйте в примеры клиентские имена, закрытые документы или ключи доступа.
Готовый шаблон
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
rows = [("a", "Returns are accepted within 14 days."),
("b", "A customer can return an item for two weeks."),
("c", "The train leaves at seven.")]
vectors = model.encode([text for _, text in rows])
assert vectors.shape[0] == len(rows)
print(vectors.shape)
for (doc_id, _), vector in zip(rows, vectors):
print(doc_id, vector.shape, str(vector[:3]))
Запускайте первый раз на очень маленьком обезличенном наборе. Для каждой строки и документа сохраняйте стабильный ID: иначе невозможно выяснить, почему нейросеть выбрала конкретную запись. Если вывод отличается от ожидаемой формы, сначала проверьте состав входа, затем конфигурацию модели и только после этого настройки ранжирования. Не маскируйте ошибки ручной подстановкой заранее «правильного» ответа.
Конкретный вход и ожидаемый результат
Вход: три строки a/b/c, где a и b относятся к возврату, c — к поезду. Ожидаемый проверяемый выход — матрица с тремя строками и размерностью 384 для указанной модели; содержание координат заранее не объявляется константой. Сам факт близости a и b проверяется отдельным вызовом similarity.
Проверяйте структуру отдельно от смысла. Массив верного размера не означает хорошего поиска, а высокий score не удостоверяет факт в документе. Сохраните реальные выводы программы и сопоставьте их с заранее размеченными эталонными ID. При переносе на другой корпус обновите проверочные данные; простая замена входного предложения в коде не доказывает обобщения метода.
Разбор метода и ограничений
Embedding — не пересказ предложения и не готовый ответ пользователю. Это числовое представление, которое полезно вместе с известной метрикой и источником. При первой загрузке модель скачивает веса, а на следующем запуске может использовать cache; успешный вызов encode сам по себе не говорит, что файл a принадлежал нужному клиенту. Храните исходный ID, версию документа, checkpoint и параметры предобработки, иначе по одному вектору невозможно восстановить происхождение результата. Модель из примера документирована как англоязычная: русские фразы могут получить числовые векторы, но это ещё не подтверждает качество русского поиска. При переходе на многоязычный checkpoint переиндексируйте корпус, даже если случайно совпала размерность.
Дополнительный сценарий проверки
Тестирование начните с трёх строк разной тематики и повторите на реальных обезличенных документах. Проверьте пустые строки, длинные документы и дубли: такой вход технически может закодироваться, но это не значит, что поиск полезен. Для длинного файла сначала определите единицу индексации — один документ или осмысленные фрагменты: embedding длинного текста может не представлять ключевой факт в конце. Сравнивайте контрольные вопросы с ожидаемым doc_id, а не только форму массива. Нельзя трактовать первую координату как «вероятность возврата»: значения отдельных измерений не имеют такой очевидной семантики. Сохранённые вектора без указания модели могут превратиться в неисправимый архив при обновлении сервиса.
Критерии принятия
- В каждой строке массива ровно одна запись исходных данных.
- Фактическая форма соответствует выбранному checkpoint.
- Контрольный поиск возвращает нужный ID при выбранной метрике.
Если один пункт не проходит, настройка не готова для массового применения. При перезапуске сервиса повторно прогоните контрольный запрос и сверяйте ID, а не только наличие числовой оценки. Разделяйте ошибки получения embeddings, поиска кандидатов, фильтрации доступа и формирования финального ответа; хорошая метрика одного этапа не подтверждает работу остальных.
Типичные ошибки и что не делать
- Не применять англоязычную модель к русскому корпусу без оценки.
- Не смешивать в одном индексе вектора разных checkpoint.
- Не публиковать координаты как объяснение текста.
Не обещайте точность и экономию ресурсов без измерений на своём оборудовании и корпусе. Не подменяйте документ нейросетевым выводом при объяснении решения пользователю. Помните о правах на доступ к исходным материалам: embedding не является анонимизацией приватного текста. При изменении модели, языка или способа подготовки данных повторите тесты до переключения рабочего трафика.
FAQ
Сколько измерений в примере?
У all-MiniLM-L6-v2 в quickstart показано 384.
Вернёт ли encode исходный текст?
Нет, возвращает числовое представление.
Можно ли использовать другой checkpoint?
Да, но форму и качество проверяют заново.
Официальные источники
Частые вопросы
Сколько измерений в примере?
У all-MiniLM-L6-v2 в quickstart показано 384.
Вернёт ли encode исходный текст?
Нет, возвращает числовое представление.
Можно ли использовать другой checkpoint?
Да, но форму и качество проверяют заново.
Читайте также
Как квантовать embeddings в int8 через SentenceTransformer.encode
Сравниваем тип и размер массива float32/int8, объясняем необходимость калибровки и измерения recall перед заменой хранилища.
Как найти релевантный фрагмент через semantic_search в Sentence Transformers
Кодируем вопрос и документы, связываем corpus_id с текстом, проверяем top_k и строим отказ при отсутствии подходящего источника.
Как найти смысловые дубли вопросов через paraphrase_mining
Ищем пары похожих вопросов, читаем позиции и score, исключаем отрицания и цифры ручной проверкой до объединения записей.
Комментарии
Пока тихо. Скажите первое слово