Jina
Jina是多模态中存储数据以及处理数据的组件,它可以将非结构化数据(图像、文档、视频等)转化为向量数据,并结合Jina其它的相关组件设计,可以将这些向量数据利用起来,实现多模态相关应用。
安装
安装 Jina 需要 Python3.7 及以上版本
# via pypi
pip install jina
# via conda
conda install jina -c conda-forge
# via docker
docker pull jinaai/jina:latest
Jina的三个基本概念
Jina 的三个基本概念分别是Document、Executor 和 Flow 。
- Document 是基本的数据类型,它的作用就是可以将非结构化数据与向量数据之间进行映射;
- Executor 可以理解为一个 Python 类,代表了 Jina 中的算法单元,比如把图像编码成向量、对结果进行排序等算法等都可以用 Executor 来表述;
- Flow 可以将多个 Executor 连接起来,将他们协调成流水线(pipeline);
快速体验
首先需要定义一个 YAML 文件,用于指定 Flow 按照什么逻辑执行
# toy.yml
jtype: Flow
with:
port: 51000
protocol: grpc
executors:
- uses: FooExecutor
name: foo
py_modules:
- test.py
- uses: BarExecutor
name: bar
py_modules:
- test.py
定义好 YAML 文件后来定义具体的执行逻辑
# 创建 test.py 文件与 YAML 文件在同一目录下
# 导入 document、executor 和 flow 以及 requests 装饰器
from jina import DocumentArray, Executor, requests, Document
# 编写 FooExecutor 与 BarExecutor 类,类中定义了函数 foo 和 bar
# 该函数从网络请求接收 DocumentArray (先暂时不需要理解它是什么),并在其内容后面附加 "foo was here" 与 "bar was here"
class FooExecutor(Executor):
@requests # 用于指定路由,类似网页访问 /index 和 /login 会被路由到不同的方法上是用样的概念,关于 request 下面会再进行详细介绍
def foo(self, docs: DocumentArray, **kwargs):
docs.append(Document(text='foo was here'))
class BarExecutor(Executor):
@requests
def bar(self, docs: DocumentArray, **kwargs):
docs.append(Document(text='bar was here'))
运行以下命令启动 grpc 服务:
jina flow --uses toy.yml
启动成功后,可以看到如下输出结果
然后在另外一个终端创建 client.py
文件,执行 python client.py
# 从 Jina 中导入连接的客户端与 Document
from jina import Client, Document
c = Client(host='grpc://0.0.0.0:51000') # 如果运行提示失败,可尝试使用localhost
result = c.post('/', Document()) # 将一个空的 Document 传到服务端执行
print(result.texts)
最终会打印出一个 “[‘’, ‘foo was here’, ‘bar was here’]” 字符串。
DocArray
定义
DocArray 是用于存储非结构化数据的数据结构工具包,是做跨模态应用的基础。
DocArray 的亮点在于 Hierarchy + Nested
。DocArray 有不同的层级结构,分层存储,第一层可以是一个整体的视频,第二层是该视频的不同镜头,第三层可以是镜头的某一帧。也可以是其他模态,比如第四层存储台词段落,第五层存储 … 既可以通过某个画面的描述搜索,也可以通过台词的意思去搜索,这样搜索的颗粒度,结构的多样性和结果的丰富度,都比传统文本检索好很多。
此外,DocArray 的设计对于 Python 用户来说非常直观,不需要学习新的语法。它融合了 Json、Pandas、Numpy、Protobuf 的优点,更适用于数据科学家和深度学习工程师。
三个基本概念
DocArray 由三个简单的概念组成:
- Document:一种表示嵌套非结构化数据的数据结构,是 DocArray 的基本数据类型。无论是处理文本、图像、视频、音频、3D、表格 或它们的嵌套或组合,都可以用 Document 来表示,从而使得各类数据的结构都非常规整,方便后续处理
- DocumentArray:用于高效访问、处理和理解多个文档的容器,可以保存多个 Document 的列表
- Dataclass:用于直观表示多模式数据的高级API
安装
3.x 版本的 Jina 已经包含了 DocArray,如果你用的是 3.x 的 Jina,可以跳过此步骤。如果你不清楚自己安装的版本号,可以在命令行里输入jina -vf来查看 Jina版本。
文本处理
创建文本
from jina import Document # 导包
# 创建简单的文本数据
d = Document(text='hello, world.')
print(d.text) # 通过text获取文本数据
# 如果文本数据很大,或者自URI,可以先定义URI,然后将文本加载到文档中
d = Document(uri='https://www.w3.org/History/19921103-hypertext/hypertext/README.html')
d.load_uri_to_text()
print(d.text)
# 支持多语言
d = Document(text='
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)