稀疏向量和密集向量

稀疏向量和密集向量都是向量的表示方法
密集向量和稀疏向量的区别: 密集向量的值就是一个普通的Double数组 而稀疏向量由两个并列的 数组indices和values组成 例如:向量(1.0,0.0,1.0,3.0)用密集格式表示为[1.0,0.0,1.0,3.0],用稀疏格式表示为(4,[0,2,3],[1.0,1.0,3.0]) 第一个4表示向量的长度(元素个数),[0,2,3]就是indices数组,[1.0,1.0,3.0]是values数组 表示向量0的位置的值是1.0,2的位置的值是1.0,而3的位置的值是3.0,其他的位置都是0
稀疏向量 [1] 通常用两部分表示:一部分是顺序向量,另一部分是值向量。例如稀疏向量(4,0,28,53,0,0,4,8)可用值向量(4,28,53,4,8)和顺序向量(1,0,1,1,0,0,1,1)表示。

### LangChain 中使用 Milvus 进行稀疏向量化的实现方法 #### 使用背景与准备 在构建基于LangChain的应用程序时,利用Milvus作为向量存储引擎可以显著提升查询效率效果。对于稀疏向量的支持,虽然Milvus更擅长处理密集型向量,但也能够有效管理某些类型的稀疏数据结构[^1]。 #### 数据预处理阶段 当涉及到稀疏向量化操作时,通常会先对原始文本或其他形式的数据进行特征提取转换成数值表示。这一步骤可能涉及词袋模型(Bag of Words),TF-IDF权重计算等方式来生成适合输入给Milvus的稀疏矩阵格式[^2]。 ```python from sklearn.feature_extraction.text import TfidfVectorizer # 假设有一个字符串列表代表文档集合 documents = ["Document 1 text", "Document 2 text"] vectorizer = TfidfVectorizer() sparse_matrix = vectorizer.fit_transform(documents) print(sparse_matrix.shape) # 输出形状以确认是否为稀疏矩阵 ``` #### 配置并连接到Milvus实例 完成上述准备工作之后,则需配置好Python客户端以便于同远端或本地部署好的Milvus服务建立通信链接。这里推荐采用pymilvus库来进行交互。 ```python from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection connections.connect("default", host="localhost", port="19530") fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=sparse_matrix.shape[1]) ] schema = CollectionSchema(fields) collection_name = 'my_collection' if collection_name not in list_collections(): collection = Collection(name=collection_name, schema=schema) else: collection = Collection(name=collection_name) ``` #### 插入稀疏向量至Milvus 一旦建立了正确的表结构定义以及确保了待插入项符合预期规格后,就可以批量加载这些经过编码后的条目进入目标表格内等待后续检索调用了。 ```python import numpy as np ids = [i for i in range(len(documents))] embeddings = sparse_matrix.toarray().tolist() mr = collection.insert([ids, embeddings]) print(f"Number of entities inserted: {len(mr.primary_keys)}") ``` #### 执行相似度搜索请求 最后,在完成了全部前期设置工作以后,便可通过指定参数发起一次近似最近邻算法(ANN)查找命令从而获取最接近查询条件的结果集返回给前端展示层面上去。 ```python search_params = {"metric_type": "L2", "params": {"nprobe": 10}} results = collection.search(embedding_to_search, "embedding", search_params, limit=5) for result in results: print(result.id, result.distance) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值