余弦相似度返回空

问题描述 投票:0回答:1

我正在尝试访问最相似的向量,但它返回空,我不明白。

我正在关注此文档:https://redis-py.readthedocs.io/en/stable/examples/search_vector_similarity_examples.html

这是我的架构:

schema = (
                TagField("ticket_url"),
                NumericField("ticket_id"),
                NumericField("entity_id"),
                VectorField("embedding",
                            "HNSW", {
                                "TYPE": "FLOAT32",
                                "DIM": self.vector_dim,
                                "DISTANCE_METRIC": "COSINE",
                            }
                            ),
            )
            definition = IndexDefinition(
                prefix=[self.doc_prefix], index_type=IndexType.HASH)
            self.r.ft(self.index_name).create_index(
                fields=schema, definition=definition)

搜索相似向量的功能

def search_similar_documents(self, entity_id, vector, topK=5, ticket_id=None):
        query = (
            Query("*=>[KNN 2 @embedding $vec as score]")
            .sort_by("score")
            .return_fields("score")
            .paging(0, 2)
            .dialect(2)
        )

        query_params = {"vec": vector}
        return self.r.ft(self.index_name).search(query, query_params).docs

向量由 openai 响应生成并转换为字节

def embedding_openai(self, text):
        try:
            response = openai.Embedding.create(
                input=text,
                model="text-embedding-ada-002"
            )
            embedding = response['data'][0]['embedding']
            array_embedding = np.array(embedding, dtype=np.float32)
            return array_embedding.tobytes()
        except Exception as ex:
            print(ex)
            return None

redis.ft(index).info() 返回这个

{'index_name': 'conversations', 'index_options': [], 'index_definition': [b'key_type', b'HASH', b'prefixes', [b'tickets:'], b'default_score', b'1'], 'attributes': [[b'identifier', b'ticket_url', b'attribute', b'ticket_url', b'type', b'TAG', b'SEPARATOR', b','], [b'identifier', b'ticket_id', b'attribute', b'ticket_id', b'type', b'NUMERIC'], [b'identifier', b'entity_id', b'attribute', b'entity_id', b'type', b'NUMERIC'], [b'identifier', b'embedding', b'attribute', b'embedding', b'type', b'VECTOR']], 'num_docs': '973', 'max_doc_id': '973', 'num_terms': '0', 'num_records': '3892', 'inverted_sz_mb': '0.00634765625', 'vector_index_sz_mb': '6.00555419921875', 'total_inverted_index_blocks': '2999', 'offset_vectors_sz_mb': '0', 'doc_table_size_mb': '0.086483001708984375', 'sortable_values_size_mb': '0', 'key_table_size_mb': '0.030145645141601562', 'records_per_doc_avg': '4', 'bytes_per_record_avg': '1.7101746797561646', 'offsets_per_term_avg': '0', 'offset_bits_per_record_avg': '-nan', 'hash_indexing_failures': '0', 'total_indexing_time': '347.62900000000002', 'indexing': '0', 'percent_indexed': '1', 'number_of_uses': 1, 'gc_stats': [b'bytes_collected', b'0', b'total_ms_run', b'0', b'total_cycles', b'0', b'average_cycle_time_ms', b'-nan', b'last_run_time_ms', b'0', b'gc_numeric_trees_missed', b'0', b'gc_blocks_denied', b'0'], 'cursor_stats': [b'global_idle', 0, b'global_total', 0, b'index_capacity', 128, b'index_total', 0], 'dialect_stats': [b'dialect_1', 0, b'dialect_2', 0, b'dialect_3', 0]}

向量存储为字节,我不知道这是算法的问题还是我的问题:/

python redis embedding redis-py
1个回答
0
投票

这个问题解决了吗?可能有几件事

如果您有大量文档并且正在使用 FLAT 索引,则搜索可能不会在分配的 500 毫秒超时内返回。这可以在启动时配置或仅使用 HNSW。

https://redisvl.com 在用户指南中有一些这方面的示例。

© www.soinside.com 2019 - 2024. All rights reserved.