DocArray 是一个用于处理、传输和存储多模态数据的 Python 工具包。DocArray 提供便捷的多模态数据处理功能,具备基于 Protobuf 提供高性能的网络传输性能,同时也为多种向量存储方案提供统一的 API 接口。现在 Jina AI 正式将 DocArray 项目捐赠给 Linux 基金会,打造一个中立、包容和通用的标准多模态数据模型。 自 11 月起,DocArray 由 Linux Foundation AI & Data 基金会托管,Linux Foundation AI & Data 是一个综合性组织,支持人工智能、数据方面的开源创新,DocArray 会在这里迎来全新的开始。 DocArray 是一款可以表示、嵌入、检索、存储和转换多模态数据的强大工具,为开发者提供了便捷的多模态数据处理功能,具备基于 Protobuf 提供的高性能网络传输性能,同时也为多种向量存储方案提供统一的 API 接口。 从 DocArray 首次发布到现在十个月的时间里,我们看到了开源社区越来越多的采用和贡献。截至今日,DocArray 的每月下载量超过 150,000 次,并为数百个多模态 AI 应用提供了支持。现在,我们向我们的社区用户以及合作伙伴们承诺,我们把 DocArray 捐赠给 LF AI & Data,将构建一个中立、包容和通用的标准多模态数据模型。把 DocArray 捐赠给 LF AI & Data,会让它在更广阔的天空展翅翱翔 。 由 LF AI & Data 托管 DocArray 意味着什么? 在 Linux 基金会托管项目,项目的管理将遵循开放治理[1] 的方式,这意味着没有任何公司或个人可以控制一个项目。当开源项目的维护者决定将其托管在 Linux Foundation 时,会将该项目的商标所有权转让给 Linux Foundation。 🎉 在这篇文章中,我们将和大家一起回顾 DocArray 的重要时刻,并分享我们接下来更具突破性的 Roadmap,此外还将预告 DocArray 已经完成开发,并即将发布的功能! 我们在 2020 年底发布的 Jina 0.8 中引入了 DocArray 的概念,它是 jina.types 的模块,旨在用非结构化的数据表征和完善神经搜索系统的设计模式。相比于直接使用 Protobuf , Document 类为表征多模态数据提供了一个安全高效的API。 右图中标有 jina.types 的绿框是 DocArray 的第一个版本 随着时间的推移,我们扩展了 jina.types 并且超越了 Protobuf 的 Pythonic API。为了简化 DocumentArray 的批处理操作,我们添加了 DocumentArray 。然后我们为不同模态的数据(例如,文本、图像、视频、语音和 3D 网格)提供了 IO 和预处理函数。 Executor 开始使用 DocumentArray 作为输入输出。2021 年发布的 Jina 2.0 设计更加强大, Document, Executor 和 Flow 成为了 Jina 的三个基本元素: Document 是 Jina 中的基本数据类型。Executor 是 Jina 处理 Document 的基本算法单元。Flow 将 Executor 连接成 pipeline,从而用于具体的任务。这受到了社区使用者们的一致好评,因为它通过封装复杂性的操作提升了开发人员的使用体验,使得开发者更专注于自己的任务。 自 Jina 2.0 以来,jina.types一直是搭建多模态 AI 服务的基本元素。 随着 jina.types 的发展,它在概念上逐渐独立于 Jina。 jina.types 更多的是在本地创建,而 Jina 则更专注于服务化。试图在一个代码库中实现两个完全不同的目标会带来维护方面的障碍:一方面 Jina AI 需要不断地迭代更新并且添加新的功能以满足 AI 社区的发展需求。另一方面,Jina 作为基础架构必须保证稳定性和鲁棒性。维护障碍导致 Jina 的发展放缓。 在 2021 年末,我们通过将 jina.types 和 Jina 解耦解决了维护障碍的问题。这次重构也为后来的 DocArray 奠定了基础。它为 AI 工程师提供了一个可以表示、存储和嵌入多模态数据的数据结构。DocArray 更专注于本地用户的使用体验,并针对快速原型设计进行了优化。 而 Jina 能将原型设计快速提升到生产服务中, 我们在 2022 年初与 Jina 3.0 同步发布了 DocArray 0.1,并且将 DocArray 0.1 作为一个新的开源项目独立发布。DocArray 的第一个版本就受到了社区的热烈欢迎。 💡 我们之所以取名为 DocArray ,是因为想让它像 NumPy 的 ndarray 一样被广泛使用。 现在,DocArray 已经成为很多多模态 AI 应用的入口,比如 DALLE-Flow[2] 和 DiscoArt[3] 。为了进一步提高可用性,我们还引入了 dataclass 和document store。除此之外,为了达成通用标准,DocArray 已经与 Weaviate, Qdrant, Redis, Elasticsearch, FastAPI, pydantic 和 Jupyter 等开源合作伙伴结盟,并实现功能整合。随着 AI 模型向多模态的范式转换[4] ,我们也见证了 DocArray 作为这场革命的关键参与者的巨大潜力。 DocArray 0.19(2022年11月15日发布),支持对三维网格数据的表示和处理。 DocArray 捐赠给 LF AI & Data 是一个重要的里程碑,这标志着我们与开源社区开放、公开地、包容地、建设性地共享我们的研究。 下一代 DocArray 聚焦于以下 4 个任务: 表示: 支持 Python idioms,用于简化复杂、嵌套的多模态数据的表征。嵌入: 为主流深度学习模型提供流畅的接口,用来高效地嵌入数据。存储: 支持多个向量数据库,以实现有效持久性以及相似性搜索。传输: 允许快速(反)序列化,并且可以通过 gRPC、Websocket 或 HTTP 三种方式对外提供服务。我们邀请了 DocArray 的两位核心维护者 Sami Jaghouar 和 Johannes Messner,带领大家预览下一代的 DocArray。 dataclass 是 DocArray 中用于表示多模态 document 的高级 API,它遵循标准 Python 数据类[5] 的设计和习惯。让用户可以直观地表示复杂的多模态 document,并通过 DocArray 的 API 轻松处理它们。 新版本通过使用 pydantic V2 重构了旧版本的 dataclass ,使得 dataclass 成为了“一级函数”。
让我们一起预览如何使用新的 dataclass 。首先,Document 是一个带有随机 ID 和 Protobuf 接口的 pydantic 模型:
from docarray import Document 为了创建自己的多模态数据类,你只需要继承 Document : from docarray import Document from docarray.typing import Tensor import numpy as np class Banner(Document): alt_text: str image: Tensor banner = Banner(text='DocArray is amazing', image=np.zeros((3, 224, 224))) 一旦你定义了 Banner ,你就可以把它作为模块来表示更复杂的数据: class BlogPost(Document): title: str excerpt: str banner: Banner tags: List[str] content: str 在 BlogPost 中添加一个嵌入字段很容易:你可以使用预定义的文档模型 Text 和 Image ,它们都带有嵌入字段。 from typing import Optional from docarray.typing import Embedding class Image(Document): src: str embedding: Optional[Embedding] class Text(Document): content: str embedding: Optional[Embedding] class Banner(Document): alt_text: str image: Image class BlogPost(Document): title: Text excerpt: Text banner: Banner tags: List[str] content: Text 新版本的 DocArray 为你的多模态 BlogPost 提供了四种嵌入表示: title, excerpt, content 和 banner。 Milvus 是一个开源向量数据库,也是一个托管在 LF AI & Data 下的开源项目。它高度灵活、可靠且速度极快,并支持大规模地添加、删除、更新和近乎实时的搜索向量。作为 DocArray 迈向更具包容性的第一步,Johannes Messner 一直在极力促成 DocArray 和 Milvus 的集成[6] 。 与其他文档存储一样,你很容易就能用 Milvus 实例化 DocumentArray,config 是 Milvus 集合的配置文件,其中, n_dim 是用于指定嵌入向量维度的强制字段。 from docarray import DocumentArray da = DocumentArray(storage='milvus', config={'n_dim': 10}) 下面代码展示了一个在 localhost 上运行 Milvus 服务器的示例,你需要指定 collection_name,host 和 port ,才能访问其他服务器的持久数据。 import numpy as np from docarray import DocumentArray N, D = 5, 128 da = DocumentArray.empty( N, storage='milvus', config={'n_dim': D, 'distance': 'IP'} )# initwith da: da.embeddings = np.random.random([N, D]) print(da.find(np.random.random(D), limit=10)) DocArray 和 Milvus 的集成使得用户可以通过统一熟悉的 DocArray API 就能享受 Milvus 所有的优势。 最后,让我们谈谈 DocArray 未来的管理方式。“Open Governance” (开放治理)指的是项目的管理模式,即如何制定决策,如何搭建项目以及项目由谁负责。在开源软件的背景下,“Open Governance”意味着项目的技术活动,代码以及配置的开发都将公开透明地进行,并且允许公众参与开发过程。 DocArray 将民主化地运行,并且每个人都有话语权。 由于任何人都可以参与到开发中,所以 DocArray 会更方便和包容。 因为决策会以公开透明的方式进行,所以 DocArray 的质量也会更高。 创建一个 DocArray 技术指导委员会 (TSC) 来帮助指导该项目。 开放开发的过程以便获取更多来自于社区的贡献和反馈。 提高 DocArray 开发的包容性,使得开发对新的贡献者更友好。 关于 Linux Foundation
Linux Foundation(LF)是一个成立于 2000 年的非营利性技术联盟,由开源开发实验室和自由标准组织合并而成。LF 的成立旨在促进、保护、标准化 Linux、并且推进它的商业化。此外,LF 还负责托管和促进开源软件项目的协作开发,目前,它已经成为了促进 Linux 以及开源软件社区多样性和包容性的支柱力量。Linux Foundation 为开发人员编码、管理和扩展开放技术项目提供了一个中立、可靠的中心。 关于 Linux Foundation AI & Data LF AI & Data 是 Linux 基金会的一个伞形基金会,支持人工智能和数据的开源创新。创建 LF AI & Data 是为了支持开源 AI 和数据,并创建一个可持续的开源 AI 系统,让开源技术创建AI以及数据变得更加容易。LF AI & Data 促进项目在中立的环境下以开放的治理进行协作,以支持开放源技术项目的协调和加速。 Jina AI 是一家专注于神经搜索和生成式 AI 技术的商业化开源软件公司,我们围绕核心的 Jina 和 DocArray 两个开源项目,打造了针对多模态应用的 MLOps 平台,帮助企业高效率且高质量的开发包括神经搜索系统和生成式 AI 在内的各种多模态应用,在 GitHub 累计收到来自全球开发者超过 36k Star 的关注。 引用链接
[1]开放治理: https:/github.com/opengovernance/opengovernance.dev [2]DALLE-Flow: https://github.com/jina-ai/dalle-flow [3]DiscoArt: https://github.com/jina-ai/discoart [4]AI 模型向多模态的范式转换: https://jina.ai/news/paradigm-shift-towards-multimodal-ai/ [5]Python数据类: https://docs.python.org/3/library/dataclasses.html [6]DocArray 和 Milvus 的集成: https://github.com/docarray/docarray/pull/587
💻 GitHu b : github.com/docarray【阅读原文 】 🔗 原文链 接 :https://jina.ai/news/donate-docarray-lf-for-inclusive-standard-multimodal-data-model/
开源商业化论坛 | Michael Yuan:Red Hat的成功能否被复制
COSCon'22 开源商业化论坛 | 肖涵:早期商业化开源公司该如何量化运营?
为什么开源协议不授予商标权利?