В этом материале
Оператор <#> в pgvector возвращает отрицательное скалярное произведение, поэтому сортировка расстояния по возрастанию отличается от отображения положительного сходства.
Cosine distance и inner product могут давать сопоставимый порядок при определённых условиях нормализации, но их SQL-операторы различаются знаком и смыслом. Проверяйте представление вместе с сортировкой, прежде чем объяснять изменение выдачи pgvector качеством модели.
Читать оператор, а не название
Справочник pgvector указывает, что <#> возвращает отрицательный inner product: для таких операторов индексное сканирование PostgreSQL использует возрастающий порядок. Приложение может преобразовывать величину в положительное сходство для интерфейса. Поэтому перенос отображаемого значения в порог расстояния или изменение направления сортировки способны поменять результат. Сохраняйте исходную SQL-величину отдельно от пользовательского балла, чтобы представление на экране не переопределяло поисковый контракт.
Установить условие нормализации
Единичная норма является свойством выбранного кодировщика и пути обработки, которое нужно проверить. Её нельзя вывести из размерности или семейного имени модели. Сопоставьте генерацию запроса и документа, включая усечение и дополнительный pooling. Замена на ненормализованный кодировщик способна нарушить прежние условия сопоставимости cosine и inner product. Сохранение имени индекса не сохраняет эти условия, если поменялось содержимое векторов и способ их получения.
Проверить доступные функции
Определения расширения различают расстояние, внутреннее произведение и нормализацию для поддерживаемых представлений. По ним определяют действительную операцию, а не объявляют каждый float вероятностью. Набор почти одинаковых документов способен выявить ошибку знака: ожидаемый ближайший материал окажется на другом конце списка при прежних файлах эмбеддингов. До замены модели проверьте именно порядок, исходные значения и их преобразование приложением на пути к конечному результату.
| Величина | Практическое различие |
|---|---|
| Сходство в интерфейсе | Может быть преобразовано для отображения |
| Выход SQL-оператора | Определяет сортировку запроса |
| Нормализованный вектор | Условие представления, требующее проверки |
Согласовать выражение с индексом
Expression-индекс относится к реально вычисляемому выражению PostgreSQL. Дополнительное приведение типа или нормализация в запросе способны создать другое выражение относительно индексированного. Проверяйте план вместе с операцией. Успешное последовательное вычисление не доказывает использование предполагаемого приближённого индекса. Корректный порядок и нужный путь доступа являются отдельными вопросами приёмки, даже если приложение получает внешне подходящее число результатов без сообщения об ошибке.
Сравнить с точным контролем
Сохраните несколько размеченных отношений запрос–документ, исходные векторы и выбранную метрику. На небольшом наборе вычислите объявленный точный порядок и сравните его с приложением. Если рабочий контракт допускает разные нормы, добавьте такой пример. Он обнаружит предположения, скрытые набором только единичных векторов. Отсутствующие и недопустимые значения сохраняйте как явные ошибки входа, а не присваивайте им удобный балл, незаметно меняющий результат оценки.
Менять один контракт за раз
При переходе от cosine к inner product сначала подтвердите условие нормализации и ожидаемую сортировку. Затем осознанно меняйте запрос и индекс, сохраняя прежний контроль. Финальному порогу нужна отдельная проверка размеченными примерами. Итоговая запись должна объяснять трактовку балла, представление и путь доступа, чтобы последующая перемена интерфейса не развернула релевантность незаметно и не превратила расстояние в необоснованную вероятность.
Связанные материалы: PostgreSQL и pgvector для RAG: когда хватит существующего сервера; Эмбеддинги текста на своём GPU: как организовать пакетную индексацию.