Jina Hub:一站式神经搜索系统组件分享平台

Hub 是 Jina 全家桶中非常重要的一个成员,本期推文我们将详细介绍 Hub 的相关内容。

在过往推文中,我们介绍过:

* 高度适配深度学习任务的可扩展数据结构 DocArray

* 开源神经搜索框架 Jina

* 神经搜索系统结果调优工具 Finetuner

* 为文本和图像创建 SOTA 表征向量的 CLIP-as-service

今天,我们将为大家介绍 Jina 全家桶中,另一个重要成员--Jina Hub。

Hub:A Marketplace for Executors

我们知道,Document、Executor 和 Flow 是 Jina 中的三个重要概念。

Document:封装非结构化数据;Executor:实现神经搜索系统所需要的不同模块;Flow:将 Executor 连接起来

Document 是 Jina 中一个基础的数据类型,可以帮助开发者方便地描述非结构化数据,相当于 Numpy 中的 ndarray 或 PyTorch 中的 Tensor。

一组 Document 构成一个 DocumentArray,开发者可以像使用 Python 原生的 list 一样使用 DocumentArray。

Executor 对应神经搜索系统中的不同模块,实现对数据处理的核心功能。

Flow 则对应整套神经搜索系统,将多个 Executor 连接起来,构建成一套完整的搜索系统。

在 Flow 中调用 Executor 十分简单:

from jina import Flow f = Flow().add(uses=jinahub+docker://MyExecutor) with f: ...

Jina Hub 就是一个 Executer 分享平台,开发者可以在 Jina Hub,方便地与团队成员或社区伙伴,分享自己的 Executer。

Jina Hub 目前已有 224 个 Executor,用户可从 Data Types, Libraries, Keywords 三个维度进行筛选

通过 Hub,开发者可以直接调用先前创建的 Executor,或将自己创建的 Executor 分享给社区或团队。这会极大降低创建神经搜索系统的难度和复杂度。

开发者 A 的 Executor 公开发布在 Jina Hub 后,可以被开发者 B, C, D 使用

本周工程师最推荐的 Executor

推荐一:CLIPTextEncoder

CLIPTextEncoder 是一个文本编码器,它使用Hugging Face Transformer 的 CLIP 模型,封装了文本向量功能。

它将存储在 text 属性中的 Document (文本)作为输入,并将输出的结果向量存储在 embedding 属性中。

CLIP 模型可以把图像和文本,嵌入到相同的潜在特征空间 (latent space)。对应的图像编码器是推荐二的 CLIPImageEncoder,在多模态或跨模态搜索应用中,这两个 Executor 都表现很好。

推荐二:CLIPImageEncoder

CLIPImageEncoder 是一个图像编码器,它使用 Hugging Face Transformer 的 CLIP 模型,封装了图像向量功能。

因为 CLIPImageEncoder 可以把文本和图像嵌入到同一个潜在特征空间 (latent space),所以它可以和推荐一的 CLIPTextEncoder 一起使用。

推荐三:TransformerTorchEncoder

TransformerTorchEncoder 封装了 Hugging Face Transformer 的 Torch-version,可以把文本数据编码为密集向量 (dense vector)。

TransformerTorchEncoder 接收带有 text 属性的 Document 。text属性代表要被编码的文本。该 Executor 可以把所有 text 编码成密集向量,并将其存储在 Document 的 embedding 属性中。

推荐四:HNSW + PostgreSQL Indexer

HNSWPostgreSQLIndexer 是一个为 Jina 神经搜索框架,量身打造的索引器 (Indexer),兼具生产就绪和高扩展特性。

它结合了 PostgreSQL 的可靠性,以及 HNSWlib 最近邻库的速度和效率。

因此,它可以提供数据库系统所需的任何 CRUD 操作,同时也支持迅速和可靠的向量查询。

创建并发布 Executor

在 Jina Hub 中,开发者可以创建并发布自己的 Executor,同时还支持在本地或远程使用 Executor。

创建 Executor 只需运行

jina hub new

发布 Executor 到 Jina Hub,开发者可选择公开范围

* Public:默认选项,任何人都可使用

* Private:仅拥有 secret 的用户可以使用

首次发布:

jina hub push [--public/--private] <path_to_executor_folder>

本地使用 Executor

在项目中使用 Hub Executors 的三种方法:

* Use as-is

* Use in a Flow: via Docker

* Use in a Flow: via source code

远程使用 Executor

Jina Sandbox 支持云端下载和运行,它通过一个主机和端口来进行连接,Jina 可以自动处理这个连接。

Jina Sandbox 极大降低了试用 Executor 的时间成本,同时,还可以为本地机器节省大量计算资源。

使用 Sandbox 和不使用 Sandbox 的流程对比

以上就是本期关于 Jina Hub 的全部内容,更多代码详情、使用方法、依赖环境等信息,请访问 hub.jina.ai/获取。