DocArray 是一个用于处理、传输和存储多模态数据的 Python 工具包。DocArray 提供便捷的多模态数据处理功能,具备基于 Protobuf 提供高性能的网络传输性能,同时也为多种向量存储方案提供统一的 API 接口。
GitHub:github.com/docarray/docarray
文档:docarray.jina.ai
DocArray 基于 Apache 2.0 License 协议,于 2022 年 1 月正式发布,目前是 LF AI & Data 基金会的沙盒项目。同时,DocArray 也是 Jina 生态使用的通用数据结构。
本次发布新增了对 Milvus 向量数据库的支持,现在可以将 Milvus 作为 DocArray 后端存储;新增了支持在嵌套级别检索 Root document;DocArray 现已支持不同格式的 3D 模型表示,此版本新增了 RGB-D 格式表示的支持;同时新增了对 Qdrant 基于关键字的文本过滤的支持,以及支持加载多页 tiff 图像到chunk等等。
重要新功能
1. 新增 Milvus 后端存储支持
DocArray 现在支持 Milvus 向量数据库作为后端存储。Milvus 提供了高性能的向量搜索和分析功能,并支持大规模地添加、删除、更新和近乎实时的搜索向量。有了 Milvus,DocArray 可以提供更快、更准确的搜索结果。
DocArray 和 Milvus 的集成使得用户可以通过统一熟悉的 DocArray API 就能享受 Milvus 所有的优势。与其他后端存储一样,配置起来非常简单:
da = DocumentArray(storage='milvus', config={'n_dim': 3))
2. 通过 root_id 更好地支持嵌套搜索
在处理嵌套数据时,我们通常在给定的嵌套级别上比较数据,例如视频中的帧,但我们实际需要的返回结果是整个视频。
也就是说,在使用向量数据库时,即使在嵌套级别(例如在 chunk 级别)使用 sub-indices(子索引)进行搜索时,也可以检索 root-document(根文档)。在存储配置中设置root_id=True,就可以启用此功能。
top_level_matches = da.find(query=np.random.rand(512), on='@.[image]', return_root=True)3. 新增 RGB-D 格式的 3D 模型表示
3. 新增 RGB-D 格式的 3D 模型表示
DocArray 已经支持不同格式的 3D 模型表示,这个版本增加了对 RGB-D 格式表示的支持。
doc.load_uris_to_rgbd_tensor()
其它新增功能
将多页 tiff 文件加载到 Chunk 中
现在通过load_uri_to_image_tensor()可以加载多页 tiff 图像。
d = Document(uri="foo.tiff")
d.load_uri_to_image_tensor()
print(d)
<Document ('id', 'uri', 'chunks') at 7f907d786d6c11ec840a1e008a366d49>
└─ chunks
├─ <Document ('id', 'parent_id', 'granularity', 'tensor') at 7aa4c0ba66cf6c300b7f07fdcbc2fdc8>
├─ <Document ('id', 'parent_id', 'granularity', 'tensor') at bc94a3e3ca60352f2e4c9ab1b1bb9c22>
└─ <Document ('id', 'parent_id', 'granularity', 'tensor') at 36fe0d1daf4442ad6461c619f8bb25b7>
基于 Qdrant 的文本关键字过滤
filter = {
'must': [
{"key": "info", "match": {"text": "shoes"}}
]
}
results = da.find(np.random.rand(n_dim), filter=filter)
上面的代码将在所有包含 "shoes" 关键字的 Document 中进行搜索,并返回相应的结果。
从 uri 加载视频向量时存储关键帧索引
当从 uri 加载视频向量时,会在 Document 的 tags 中存储 key_frame_indices。这样,就可以提取视频中关键帧之间的部分。
d = Document(uri="video.mp4").load_uri_to_video_tensor()
print(d.tags['keyframe_indices'])
[0, 25, 196, ...]
更好地绘制嵌套和复杂数据的 embedding 图
您现在可以选择在调用 DocumentArray 的方法 plot_embedding()排除哪些元字段,这使得绘制复杂和嵌套数据的 embedding 图变得更加容易。
docs.plot_embeddings(exclude_fields_metas=['chunks'])
更好地支持信息检索评估
此版本向评估函数增加了 max_rel_per_label 参数,它提供了每个标签的相关文档数,即集合中具有该标签的文档数。
metrics = da.evaluate(['recall_at_k'], max_rel_per_label={i: 1 for i in range(3)})
🐞 bug 修复
支持独立于类列表行为的长度计算
本次发布中,我们修复了在 DocArray 0.19 版本里引入的 Redis 后端存储的长度计算,使其独立于类列表行为。
删除有错误赋值的余弦相似度字段
在 Weaviate 的后端存储中,余弦距离不会g再被错误地分配给 cosine_similarity 字段。
清除存储后重建索引
当调用 _clear_storage 时,就可以重建 Redis 和 Elasticsearch 文档存储的索引。
更多详细信息请点击 https://jina.ai/news/docarray-0-20-update/
📗 文档更新
这一部分主要涉及文档的改进,包括更正文档中的错误描述、修复文档中的链接、修改逻辑顺序以符合博客文章,以及将云支持移动到整合部分。这些更新旨在让文档更加清晰易读,帮助用户更好地了解 DocArray。更多详细信息请访问文档 docarray.jina.ai
🤘 贡献者
在此感谢本次发布的所有贡献者:
-
Delgermurun
-
杨小燕
-
Anna-charlotte
-
Johannes Messner
-
Alex Cureton-Griffiths
-
AlaeddineAbdessalem
-
相栋
-
coolmian
-
Joan Fontanals
-
王楠
-
Sami Jaghouar
-
Michael Günther