Как использовать векторный поиск, чтобы найти подходящую комбинацию векторов?
**Я хочу сопоставить запрос пользователя с комбинацией элементов из базы данных. Если точного совпадения нет, я хочу вернуть ближайшую возможную комбинацию. В каждой комбинации должен быть 1 предмет и 0 или более вариантов. **
Пример: пользовательский запрос: «большая пицца пепперони с оливками».
В базе данных есть строка с вектором для названия элемента «пицца». Также есть строки для опций «пепперони», «оливки», «колбаска», «размер: большой» и т. д.
Возвращаемая комбинация должна быть «Товар: пицца. Варианты: пепперони, оливки, размер: большой».
Что я пробовал
После внедрения пользовательского запроса я выполняю векторный поиск в базе данных. Я получаю список элементов и опций, отсортированный по косинусному расстоянию. В настоящее время он возвращает 3 элемента и 3 варианта.
Пока все хорошо. Но теперь, когда у меня есть результаты, как мне создать комбинацию, соответствующую запросу пользователя? Я мог бы попробовать повторно внедрить различные комбинации и сравнить их с исходным запросом, но я предполагаю, что это будет экспоненциально дорого и медленно.
Примечания
- Я использую SBERT all-MiniLM-L6-v2 и pgvector.
- Готов использовать полнотекстовый поиск, но хотел бы сохранить возможность предоставлять рекомендации, если точного совпадения нет.