二、Jina-跨模态搜索实现
1. Jina 的基本概念与部署指北
作为Github热榜前三的神经搜索框架之一,Jina实现了对当前绝大部分数据类型的支持,对于视频、图像、文本、PDF以及音乐等非结构化数据,可进行大规模的索引与查询。
作为分布式架构,Jina具备可拓展和云原生的设计,实现了对云容器化、并行、分片、异步调度以及HTTP/gRPC/WebSocket 协议的支持。其专为神经搜索系统所设计的搭建模式,可以在极短时间内完成对深度学习搜索系统的部署,实现多模态的数据搜索。
-
基本概念
-
框架结构
整个Jina框架基本上可分为 Document、Executor以及Flow 三个基本组件,三者共同协作,构建成完整的Jina应用程序。
- Document: 作为Jina的基础数据类型,主要负责将非结构数据映射到向量数据中,从而将视频、语音以及文本等多模态数据转化为为统一的数据结构类型进行处理。
- Executor: 可将其理解为一个类,通过该组件可以将本地函数转化为可在Flow组件中分发的函数,从而在Jina中构造相应的方法对Document进行处理
- Flow: 主要负责将多个Executor进行连接,组成完整的Pipeline以提供服务。其入口是Gataway,本质是一个内部通信的路由,对接收到的请求进行分发。
-
执行逻辑与应用示例
- Jina官方提供了明确的搭建模式,使得Jina框架可在极短时间内完成搭建与部署,具体部署流程可参照官方文档进行安装
- 需要注意的是,当前Jina暂不支持在Windows系统环境下安装,Windows用户需要开启WSL后,在WSL中进行安装部署。
-
DocArray 结构工具
-
定义:
作为存储非结构化数据的工具包,DocArray的特点在于其存在不同层级的结构,其可以将数据拆分为多种粒度多种模态,存储到不同的层级中,从而提高搜索粒度和结果丰富度。值得注意的是,Jina 3.x版本中已经包含了DocArray,无需独立安装。
-
框架组成:
- Document:作为DocArray的基本数据类型,无论文本、视频还是音频等多模态数据,都可采用Document进行表示,使得这些数据规整存储,以供后续处理。
- DocumentArray:作为存放多个Document的容器,类似python中的list
- Dataclass:用于直观表示多模态数据的高级API
-
-
2. Demo 实现 —文本匹配
-
YAML文件与Client监听
-
yaml文件主要用于指定Flow的执行逻辑,以下述文件为例:
jtype: Flow with: port: 51000 protocol: grpc executors: - uses: FooExecutor name: foo py_modules: - test.py - uses: BarExecutor name: bar py_modules: - test.py
Jina在yaml文件中获取到指定的type、端口和协议,这里采用GRPC协议进行通讯,也可通过纯Python的方式调用Flow
运行
jina flow --uses toy.yml
命令启动grpc服务,输出如下结果: -
test.py文件主要负责构建yaml文件中的类,类中定义foo和bar函数
-