Получить оценку сходства в Python для векторной индексации HNSW в PostgreSqlPython

Программы на Python
Ответить
Anonymous
 Получить оценку сходства в Python для векторной индексации HNSW в PostgreSql

Сообщение Anonymous »

У меня возникли проблемы с возвратом результатов векторного поиска в postgresql. Я создал индекс HNSW для столбцов answer_embedding и answer_keyword_embedding.
В Python я написал эту функцию, чтобы возвращать 5 наиболее распространенных документов на основе встраивания ответа QA. Это работает:

Код: Выделить всё

        similarity_score = (
(Document.answer_embedding.op('')(embedding_array)) +
(Document.answer_keyword_embedding.op('')(keyword_embedding_array))
)

query = (
select(Document.doc_id, Document.answer))
.order_by(similarity_score)
.limit(max_neighbors)
)
results = session.execute(query).all()

Однако я также хочу получить оценку актуальности каждого документа. Что бы я ни делал, я вижу следующее сообщение об ошибке: Сбой сеанса: объект 'float' не подлежит подписке.
Все следующие фрагменты кода выдают одну и ту же ошибку: Сеанс не удалось: объект 'float' не подлежит подписке.

Код: Выделить всё

        query = (
select(Document.doc_id, Document.answer,similarity_score.label("similarity"))
.order_by(similarity_score)
.limit(max_neighbors)
)

Код: Выделить всё

query = (
select(Document).add_columns(similarity_score.label("similarity"))
.order_by(similarity_score)
.limit(max_neighbors)
)
Если я преобразую его в использование полного текста запроса, я получаю сообщение об ошибке, заключающееся в том, что оператор «»/»» не распознается.
Когда я распечатываю запрос, он выглядит так.

Код: Выделить всё

Query: SELECT "Document"."DocId", "Document"."Answer", ("Document"."AnswerEmbedding"  :AnswerEmbedding_1) + ("Document"."AnswerKeywordEmbedding"  :AnswerKeywordEmbedding_1) AS similarity
FROM "Document" ORDER BY ("Document"."AnswerEmbedding"  :AnswerEmbedding_1) + ("Document"."AnswerKeywordEmbedding"  :AnswerKeywordEmbedding_1)
LIMIT :param_1
Поскольку я могу получить документы, мне трудно понять, почему я не могу получить оценку для каждого документа.

Подробнее здесь: https://stackoverflow.com/questions/790 ... postgresql
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»