当前位置: 首页 > news >正文

Milvus:向量字段-二进制向量、稀疏向量与密集向量(六)

一、向量类型概念深度解析

1.1 什么是向量?

在机器学习和数据科学中,向量是用来表示对象特征的数字数组。每个维度代表一个特定的特征,向量值表示该特征的强度或重要性。

1.2 三种向量类型核心概念

密集向量(Dense Vector)
定义:密集向量是由连续实数构成的数组,其中大部分或所有元素都包含有意义的非零值
核心特征
  • 高信息密度:每个维度都承载语义信息
  • 连续表示:值为连续的浮点数
  • 语义丰富:能够捕捉复杂的语义关系
  • 固定维度:通常为384、768、1024等固定长度
直观理解
想象一个学生的综合能力评估:
[数学能力: 0.85, 语文能力: 0.92, 英语能力: 0.78, 逻辑思维: 0.88, ...]
每个维度都有具体的能力分数,共同构成完整的能力画像。

典型示例:

# BERT模型生成的文本向量(前8维示例)
dense_vector = [-0.013052909,  # 语义维度10.020387933,   # 语义维度2  -0.007869,     # 语义维度3-0.11111383,   # 语义维度4-0.030188112,  # 语义维度5-0.0053388323, # 语义维度60.0010654867,  # 语义维度70.072027855,   # 语义维度8# ... 更多语义维度
]
稀疏向量(Sparse Vector)
定义:稀疏向量是大部分元素为零,只有少数维度有非零值的高维向量。
核心特征
  • 低信息密度:大部分维度为零值
  • 关键词驱动:非零值对应重要特征或关键词
  • 高维度:通常有数万到数百万个维度
  • 高效存储:只存储非零值及其位置
直观理解
想象一个图书馆的书籍分类:
{计算机类: 0.8, 文学类: 0, 历史类: 0, 数学类: 0.6, 物理类: 0, 艺术类: 0.3, ...}
只记录实际存在的书籍类别,忽略不存在的类别。

典型示例:

# 文档关键词的稀疏表示
sparse_vector = {27: 0.5,   # 维度27:"机器学习" - 权重0.5100: 0.3,  # 维度100:"算法" - 权重0.35369: 0.6, # 维度5369:"深度学习" - 权重0.6# 其他数万个维度都为0,不存储
}
二进制向量(Binary Vector)
定义:二进制向量是只包含0和1两种值的向量,是密集向量的二值化版本。
核心特征
  • 二值表示:每个维度只能是0或1
  • 极度压缩:存储空间大幅减少
  • 计算高效:使用位运算快速计算相似度
  • 信息简化:丢失部分精度信息
直观理解
想象一个简单的特征检查表:
[有红色: 1, 有圆形: 0, 有纹理: 1, 是大尺寸: 0, 是金属: 1, ...]
只记录特征是否存在,不记录强度或程度。

典型示例:

# 图像感知哈希的二进制向量
binary_vector = [1, 0, 1, 1, 0, 0, 1, 0,  # 字节1:图像区块1的特征0, 1, 0, 1, 1, 0, 1, 1,  # 字节2:图像区块2的特征1, 1, 0, 0, 1, 0, 0, 1,  # 字节3:图像区块3的特征# ... 更多图像特征位
]

1.3 三种向量的关系与演进

信息密度与计算复杂度关系
二进制向量 ←---→ 稀疏向量 ←---→ 密集向量↓              ↓             ↓
效率最高      平衡效率精度     精度最高
存储最小        中等存储       存储最大
速度最快        中等速度       速度较慢
适用场景的思维模型
二进制向量 - "快速筛选"
  • 像超市的快速结账通道
  • 不求完美,但求快速找到大致匹配
  • 适合:初筛、去重、移动端
稀疏向量 - "精确查找"
  • 像图书馆的目录检索系统
  • 基于明确的关键词和分类
  • 适合:文档检索、关键词搜索
密集向量 - "智能理解"
  • 像经验丰富的专业顾问
  • 理解深层含义和复杂关系
  • 适合:语义搜索、智能推荐

二、二进制向量技术详解

2.1 二进制向量核心概念

什么是二进制向量?

二进制向量是将高维浮点向量转换为只包含0和1的二进制表示:

# 二进制向量示例
binary_vector_8d = [1, 0, 1, 1, 0, 0, 1, 0]  # 8维二进制向量
binary_vector_16d = [1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0]  # 16维
核心优势

优势

说明

影响

存储效率

每个维度仅需1位

存储空间减少8-16倍

计算速度

使用位运算(XOR)

计算速度提升10-100倍

资源友好

低内存占用

适合移动设备、嵌入式系统

实时性能

快速相似性计算

支持大规模实时推荐

2.2 二进制向量完整实践

创建二进制向量 Collection
from pymilvus import MilvusClient, DataTypedef create_binary_vector_collection():"""创建二进制向量 Collection 完整示例"""client = MilvusClient(uri="http://localhost:19530")# 清理现有 Collectionif client.has_collection("binary_vector_demo"):client.drop_collection("binary_vector_demo")# 创建 Schemaschema = client.create_schema(auto_id=True,enable_dynamic_fields=True,)# 添加主键字段schema.add_field(field_name="pk", datatype=DataType.VARCHAR, is_primary=True, max_length=100)# 添加二进制向量字段 - 注意:维度必须是8的倍数schema.add_field(field_name="binary_vector", datatype=DataType.BINARY_VECTOR, dim=128  # 128维,对应16字节)# 添加元数据字段schema.add_field(field_name="description", datatype=DataType.VARCHAR, max_length=500)# 配置索引参数index_params = client.prepare_index_params()index_params.add_index(field_name="binary_vector",index_name="binary_idx",index_type="BIN_IVF_FLAT",  # 二进制向量专用索引metric_type="HAMMING",      # 汉明距离params={"nlist": 1024})# 创建 Collectionclient.create_collection(collection_name="binary_vector_demo",schema=schema,index_params=index_params)print("✅ 二进制向量 Collection 创建成功")return client# 执行创建
binary_client = create_binary_vector_collection()
二进制向量数据转换与插入
def binary_vector_utils():"""二进制向量工具函数"""def bool_list_to_bytes(bool_list):"""将布尔列表转换为字节数组"""if len(bool_list) % 8 != 0:raise ValueError("布尔列表长度必须是8的倍数")byte_array = bytearray(len(bool_list) // 8)for i, bit in enumerate(bool_list):if bit == 1:index = i // 8shift = i % 8byte_array[index] |= (1 << shift)return bytes(byte_array)def bytes_to_bool_list(byte_data, dim):"""将字节数组转换回布尔列表"""bool_list = []for byte in byte_data:for i in range(8):bool_list.append((byte >> i) & 1)return bool_list[:dim]return bool_list_to_bytes, bytes_to_bool_list# 使用工具函数
bool_to_bytes, bytes_to_bool = binary_vector_utils()def insert_binary_data(client):"""插入二进制向量数据"""# 生成示例二进制向量数据(128维)binary_data = [{"binary_vector": bool_to_bytes([1, 0, 0, 1, 1, 0, 1, 1] * 16),  # 128维"description": "科技类内容特征向量"},{"binary_vector": bool_to_bytes([0, 1, 0, 1, 0, 1, 0, 0] * 16),"description": "教育类内容特征向量"},{"binary_vector": bool_to_bytes([1, 1, 0, 0, 1, 0, 1, 0] * 16),"description": "娱乐类内容特征向量"}]# 插入数据result = client.insert(collection_name="binary_vector_demo",data=binary_data)print(f"✅ 插入 {len(result['ids'])} 条二进制向量数据")return result# 插入数据
insert_result = insert_binary_data(binary_client)
二进制向量搜索
def binary_vector_search(client):"""二进制向量相似性搜索"""# 准备查询向量query_bool = [1, 0, 0, 1, 1, 0, 1, 1] * 16  # 128维查询向量query_vector = bool_to_bytes(query_bool)# 搜索参数search_params = {"params": {"nprobe": 10}}# 执行搜索results = client.search(collection_name="binary_vector_demo",data=[query_vector],anns_field="binary_vector",search_params=search_params,limit=3,output_fields=["description"])print("🔍 二进制向量搜索结果:")for i, hits in enumerate(results):print(f"查询 {i+1}:")for hit in hits:# 汉明距离越小表示越相似similarity = 1 - (hit['distance'] / 128)  # 转换为相似度分数print(f"  - ID: {hit['id']}, 汉明距离: {hit['distance']}, 相似度: {similarity:.3f}")print(f"    描述: {hit['entity']['description']}")return results# 执行搜索
search_results = binary_vector_search(binary_client)

三、稀疏向量技术详解

3.1 稀疏向量核心概念

什么是稀疏向量?

稀疏向量是高维向量,其中大部分元素为零:

# 稀疏向量表示示例
dense_vector = [0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.7]  # 稠密表示
sparse_vector = {2: 0.2, 7: 0.5, 9: 0.7}  # 稀疏表示 - 只存储非零值
稀疏向量生成方法

方法

技术

特点

传统统计

TF-IDF, BM25

基于词频统计,精确匹配

神经稀疏

SPLADE, DeepCT

基于深度学习,语义增强

3.2 稀疏向量完整实践

创建稀疏向量 Collection
def create_sparse_vector_collection():"""创建稀疏向量 Collection"""client = MilvusClient(uri="http://localhost:19530")# 清理现有 Collectionif client.has_collection("sparse_vector_demo"):client.drop_collection("sparse_vector_demo")# 创建 Schemaschema = client.create_schema(auto_id=True,enable_dynamic_fields=True,)# 添加字段schema.add_field(field_name="pk", datatype=DataType.VARCHAR, is_primary=True, max_length=100)schema.add_field(field_name="sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR  # 稀疏向量类型)schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=65535)schema.add_field(field_name="category", datatype=DataType.VARCHAR, max_length=100)# 配置稀疏向量索引index_params = client.prepare_index_params()index_params.add_index(field_name="sparse_vector",index_name="sparse_idx",index_type="SPARSE_INVERTED_INDEX",metric_type="IP",  # 内积params={"inverted_index_algo": "DAAT_MAXSCORE"})# 创建 Collectionclient.create_collection(collection_name="sparse_vector_demo",schema=schema,index_params=index_params)print("✅ 稀疏向量 Collection 创建成功")return client# 执行创建
sparse_client = create_sparse_vector_collection()
稀疏向量数据插入
def insert_sparse_data(client):"""插入稀疏向量数据"""# 稀疏向量数据 - 使用字典表示sparse_data = [{"text": "机器学习深度学习自然语言处理","sparse_vector": {1: 0.8,    # 机器学习5: 0.9,    # 深度学习  10: 0.7,   # 自然语言处理15: 0.3,   # 人工智能20: 0.1    # 算法},"category": "AI"},{"text": "数据库存储系统分布式计算","sparse_vector": {2: 0.6,    # 数据库6: 0.8,    # 存储系统12: 0.9,   # 分布式计算18: 0.4,   # 大数据25: 0.2    # 云计算},"category": "数据库"},{"text": "网络安全加密算法隐私保护","sparse_vector": {3: 0.7,    # 网络安全8: 0.8,    # 加密算法14: 0.6,   # 隐私保护22: 0.5,   # 信息安全30: 0.3    # 数据保护},"category": "安全"}]# 插入数据result = client.insert(collection_name="sparse_vector_demo",data=sparse_data)print(f"✅ 插入 {len(result['ids'])} 条稀疏向量数据")return result# 插入数据
sparse_insert_result = insert_sparse_data(sparse_client)
稀疏向量搜索
def sparse_vector_search(client):"""稀疏向量相似性搜索"""# 查询稀疏向量query_sparse = {1: 0.5,   # 机器学习5: 0.6,   # 深度学习10: 0.4   # 自然语言处理}# 搜索参数search_params = {"params": {"drop_ratio_search": 0.1}  # 丢弃比例,加速搜索}# 执行搜索results = client.search(collection_name="sparse_vector_demo",data=[query_sparse],anns_field="sparse_vector",search_params=search_params,limit=3,output_fields=["text", "category"])print("🔍 稀疏向量搜索结果:")for i, hits in enumerate(results):print(f"查询 {i+1}:")for hit in hits:print(f"  - ID: {hit['id']}, 相似度: {hit['distance']:.4f}")print(f"    文本: {hit['entity']['text']}")print(f"    类别: {hit['entity']['category']}")return results# 执行搜索
sparse_search_results = sparse_vector_search(sparse_client)

四、密集向量技术详解

4.1 密集向量核心概念

什么是密集向量?

密集向量是由实数组成的数组,大部分元素不为零:

# 密集向量示例
dense_vector_4d = [0.1, 0.2, 0.3, 0.7]
dense_vector_768d = [-0.013, 0.020, -0.007, -0.111, ...]  # BERT输出
密集向量数据类型对比

数据类型

精度

存储

适用场景

FLOAT_VECTOR

32位

标准

高精度语义搜索

FLOAT16_VECTOR

16位

50%节省

推荐系统召回

BFLOAT16_VECTOR

16位

50%节省

大规模图像检索

INT8_VECTOR

8位

75%节省

量化模型推理

4.2 密集向量完整实践

创建密集向量 Collection
def create_dense_vector_collection():"""创建密集向量 Collection"""client = MilvusClient(uri="http://localhost:19530")# 清理现有 Collectionif client.has_collection("dense_vector_demo"):client.drop_collection("dense_vector_demo")# 创建 Schemaschema = client.create_schema(auto_id=True,enable_dynamic_fields=True,)# 添加字段schema.add_field(field_name="pk", datatype=DataType.VARCHAR, is_primary=True, max_length=100)schema.add_field(field_name="dense_vector", datatype=DataType.FLOAT_VECTOR, dim=384  # 常用维度:384, 768, 1024)schema.add_field(field_name="content", datatype=DataType.VARCHAR, max_length=2000)schema.add_field(field_name="embedding_model", datatype=DataType.VARCHAR, max_length=100)# 配置索引index_params = client.prepare_index_params()index_params.add_index(field_name="dense_vector",index_name="dense_idx",index_type="AUTOINDEX",metric_type="COSINE"  # 余弦相似度)# 创建 Collectionclient.create_collection(collection_name="dense_vector_demo",schema=schema,index_params=index_params)print("✅ 密集向量 Collection 创建成功")return client# 执行创建
dense_client = create_dense_vector_collection()
密集向量数据插入
def insert_dense_data(client):"""插入密集向量数据"""# 模拟不同嵌入模型生成的密集向量dense_data = [{"dense_vector": [0.1, 0.2, 0.3, 0.4] * 96,  # 384维"content": "人工智能是未来科技发展的重要方向","embedding_model": "BERT-base"},{"dense_vector": [0.2, 0.3, 0.4, 0.5] * 96,"content": "机器学习算法在数据分析中广泛应用", "embedding_model": "BERT-base"},{"dense_vector": [0.15, 0.25, 0.35, 0.45] * 96,"content": "深度学习模型需要大量计算资源","embedding_model": "Sentence-BERT"}]# 插入数据result = client.insert(collection_name="dense_vector_demo", data=dense_data)print(f"✅ 插入 {len(result['ids'])} 条密集向量数据")return result# 插入数据
dense_insert_result = insert_dense_data(dense_client)
密集向量搜索
def dense_vector_search(client):"""密集向量相似性搜索"""# 查询向量query_vector = [0.12, 0.22, 0.32, 0.42] * 96  # 384维查询向量# 搜索参数search_params = {"params": {"nprobe": 16}}# 执行搜索results = client.search(collection_name="dense_vector_demo",data=[query_vector],anns_field="dense_vector", search_params=search_params,limit=3,output_fields=["content", "embedding_model"])print("🔍 密集向量搜索结果:")for i, hits in enumerate(results):print(f"查询 {i+1}:")for hit in hits:print(f"  - ID: {hit['id']}, 相似度: {hit['distance']:.4f}")print(f"    内容: {hit['entity']['content']}")print(f"    模型: {hit['entity']['embedding_model']}")return results# 执行搜索
dense_search_results = dense_vector_search(dense_client)

五、三种向量类型对比与应用场景

5.1 技术特性对比

特性

二进制向量

稀疏向量

密集向量

数据表示

0/1二进制

键值对{索引:值}

浮点数数组

存储效率

⭐⭐⭐⭐⭐

⭐⭐⭐⭐

⭐⭐⭐

计算速度

⭐⭐⭐⭐⭐

⭐⭐⭐⭐

⭐⭐⭐

语义理解

⭐⭐

⭐⭐⭐

⭐⭐⭐⭐⭐

精度损失

中-高

低-中

无-低

适用维度

中低维度

超高维度

中高维度

典型维度

64-512维

1万-100万维

384-1024维

5.2 应用场景详解

二进制向量应用场景
1. 图像去重与版权保护
  • 技术原理:使用感知哈希(pHash)算法生成图像指纹
  • 优势特点:快速计算图像相似性,高效识别重复或侵权内容
  • 典型应用
    • 社交媒体平台的内容去重
    • 数字版权管理(DRM)系统
    • 电商平台商品图片查重
2. 移动端实时推荐
  • 技术原理:将浮点向量二值化,大幅减少模型大小
  • 优势特点:低内存占用,支持设备端实时推理
  • 典型应用
    • 移动APP的个性化内容推荐
    • 嵌入式设备的智能功能
    • 离线环境下的相似内容推荐
3. 大规模检索系统
  • 技术原理:采用哈希学习技术,将高维数据映射到汉明空间
  • 优势特点:支持亿级数据量的毫秒级检索
  • 典型应用
    • 电商平台的商品检索
    • 视频平台的内容检索
    • 新闻资讯的相似文章推荐
稀疏向量应用场景
1. 关键词搜索与文档检索
  • 技术原理:基于BM25、TF-IDF等传统信息检索算法
  • 优势特点:精确的术语匹配,结果可解释性强
  • 典型应用
    • 企业知识库的文档检索
    • 学术论文检索系统
    • 站内搜索引擎
2. 专业领域精准匹配
  • 技术原理:使用SPLADE等神经稀疏嵌入模型
  • 优势特点:对专业术语和领域词汇有更好的理解
  • 典型应用
    • 法律案例和法条检索
    • 医疗文献查询系统
    • 专利检索与分析
3. 电商搜索与商品推荐
  • 技术原理:基于商品属性和用户行为的稀疏表示
  • 优势特点:对商品属性进行精确匹配和筛选
  • 典型应用
    • 电商平台的商品搜索
    • 基于属性的商品推荐
    • 多维度商品筛选
密集向量应用场景
1. 深度语义搜索
  • 技术原理:使用BERT、Sentence-BERT等预训练语言模型
  • 优势特点:理解深层语义,支持同义词和上下文理解
  • 典型应用
    • 智能客服问答系统
    • 企业知识库语义搜索
    • 内容平台的智能推荐
2. 个性化推荐系统
  • 技术原理:基于用户行为和内容的深度嵌入表示
  • 优势特点:能够捕捉用户的深层兴趣和偏好
  • 典型应用
    • 流媒体平台的内容推荐
    • 电商平台的个性化商品推荐
    • 社交网络的好友推荐
3. 多模态检索与理解
  • 技术原理:采用CLIP、Multimodal BERT等跨模态模型
  • 优势特点:实现文本、图像、音频等多模态数据的统一表示
  • 典型应用
    • 以文搜图、以图搜文
    • 跨模态内容检索
    • 多媒体内容理解

5.3 混合使用策略

召回-排序两阶段策略
  • 第一阶段:快速召回
    • 使用二进制向量进行粗筛,快速从海量数据中召回候选集
    • 目标:覆盖尽可能多的相关结果,保证召回率
  • 第二阶段:精准排序
    • 使用密集向量对召回结果进行精细排序
    • 目标:提升结果的相关性和准确性
多路召回融合策略
  • 语义召回通路
    • 使用密集向量捕捉语义相似性
    • 覆盖语义相关但关键词不同的内容
  • 关键词召回通路
    • 使用稀疏向量进行精确关键词匹配
    • 确保重要关键词的精确命中
  • 去重召回通路
    • 使用二进制向量识别近似重复内容
    • 提升结果的多样性
渐进式检索策略
  • 第一层:二进制向量粗筛
    • 从全量数据中快速筛选出大致相关的内容
    • 减少后续处理的数据量
  • 第二层:稀疏向量精筛
    • 在粗筛结果基础上进行关键词精确匹配
    • 进一步提升结果质量
  • 第三层:密集向量重排
    • 对精筛结果进行语义重排序
    • 输出最终最优结果

六、选择指南与最佳实践

6.1 向量类型选择指南

基于数据规模的选择
  • 亿级以上数据量
    • 首选:二进制向量
    • 备选:稀疏向量 + 二进制向量混合
    • 理由:存储和计算效率是首要考虑因素
  • 千万级数据量
    • 推荐:稀疏向量 + 二进制向量组合
    • 可选:优化的密集向量方案
    • 理由:在精度和效率间取得平衡
  • 百万级数据量
    • 推荐:密集向量 + 稀疏向量组合
    • 可选:纯密集向量方案
    • 理由:可以追求更高的准确率
基于精度要求的选择
  • 高精度场景(>95%)
    • 首选:密集向量
    • 适用:语义搜索、智能问答、重要推荐
  • 中等精度场景(85%-95%)
    • 推荐:稀疏向量
    • 适用:文档检索、关键词搜索、商品匹配
  • 基础精度场景(70%-85%)
    • 推荐:二进制向量
    • 适用:内容去重、初步筛选、移动端应用
基于响应时间要求的选择
  • 毫秒级响应(<100ms)
    • 首选:二进制向量
    • 适用:实时推荐、交互式搜索
  • 百毫秒级响应(100-500ms)
    • 推荐:稀疏向量
    • 适用:一般搜索、批量处理
  • 秒级响应(>500ms)
    • 可选:密集向量
    • 适用:离线分析、深度挖掘
基于硬件资源的选择
  • 资源受限环境
    • 移动设备、嵌入式系统:二进制向量
    • 边缘计算节点:稀疏向量
    • 理由:低内存、低算力需求
  • 中等资源环境
    • 普通服务器:稀疏向量 + 二进制向量
    • 云服务器基础配置:密集向量(优化版)
  • 资源充足环境
    • GPU服务器:密集向量
    • 大规模集群:任意向量类型组合

6.2 性能指标参考

向量类型

QPS

平均延迟

准确率范围

内存占用

二进制向量

10,000+

70%-85%

极低

稀疏向量

1,000-5,000

10-50ms

85%-95%

中等

密集向量

100-1,000

50-200ms

95%-99%

较高

http://www.dtcms.com/a/566008.html

相关文章:

  • 智能API测试工具SmartAPITester实现方案详解
  • 外贸视频网站开发网站的形式有哪些
  • 自己做的网站数据库怎么注册微信公众号
  • 智能云建站平台品牌策划师
  • QC-LDPC码的表示
  • 基于Java的智慧工地SaaS平台源码(含监管大屏与移动端)
  • 制冰机方案,家用制冰机MCU控制方案开发设计
  • MATLAB高效算法优化实战指南
  • wordpress购物网站怎么做招聘网站的调研
  • JS基础知识(三)数组,对象,字符串与部分新属性
  • 网站 营销方案厦门网页制作厦门小程序app
  • 算法--二分查找
  • wordpress角色内容关键词排名优化是什么意思
  • 二极管的分类
  • 橫山区建设局网站网站如何做QQ登录
  • 免费域名网站的wordpress 网页抓取
  • 辽宁省朝阳市做网站零成本做网站
  • 05-异常处理-教程
  • IR 650 Dibenzocyclooctyne适用于细胞表面糖蛋白动态追踪、RNA转录位点实时观察等活细胞研究
  • 网站开发费用多少钱秦皇岛市卫生学校官网
  • 抖音上的用python实现激励弹窗
  • 网站设计背景图片怎么做的阳江网络问政平台电话
  • java服务器空间不够时:将多个服务器的文件存放至同一个服务器上(使用映射器的办法)
  • 在青岛做阿里巴巴网站找谁抚顺 网站建设
  • 掌握本地化大语言模型部署:llama.cpp 工作流与 GGUF 转换内核全面技术指南
  • 福州网站设计培训外贸自建站如何收款
  • 个人电脑做网站打不开数据库seo怎么优化网站排名
  • CDN加速:让安全与性能并驾齐驱的关键引擎
  • 【阿里云】ECS服务器重启需要注意的事项
  • 无障碍浏览网站怎么做wordpress上传设置