关于python:一文读懂神经搜索Jina-及-Finetuner

46次阅读

共计 3555 个字符,预计需要花费 9 分钟才能阅读完成。

本文为 Jina AI Co-founder & CTO 王楠,在 2021 年 12 月 25 日 Python Meetup Beijing 的分享实录,内附 Demo 及 PPT 地址。

浏览本文,你将对神经搜寻 (Neural Search)、Jina 及 Finetuner,有较为全面的理解。


本文内容概览

神经搜寻:用非结构化数据搜寻非结构化数据

结构化数据, 以罕用的数据库为代表,其所有信息都是定义好的,能够间接进行疾速搜寻。

与结构化数据绝对应的,即非结构化数据, 这类数据没有间接可供搜寻的结构化信息。


常见的非结构化数据包含 PDF 文档、视频、音乐等

据 MongoDB 统计,咱们身边 80%~90% 的数据,都属于非结构化数据,所以,非结构化数据的搜寻,是一个十分重要的问题。

非结构化数据自身蕴含丰盛的信息,但这些信息必须借助工具抽取和加工。得益于深度学习及人工智能技术的迅猛发展,过来十几年间,产生了很多能够用于抽取非结构化数据信息的深度学习模型。

一方面,各种分类模型能够准确地给视频、照片等非结构化数据打标签;另一方面,还能够 利用深度学习模型,把非结构化的数据表示为向量。

利用深度学习模型解决非结构化数据的两种思路
在向量空间中,类似数据汇聚合在一起,不同数据则会扩散在空间的不同地位。依据用户查问的数据,在向量空间中寻找近邻, 就能够实现非结构化数据的搜寻。

神经搜寻特指应用非结构化数据搜寻非结构化数据,深度学习模型和向量索引是神经搜寻的重要组成部分。

神经搜寻零碎包含两个要害因素:深度学习模型及向量索引,这两点也是神经搜寻零碎和传统搜寻零碎的区别。

神经搜寻零碎的利用,包含以图搜图、以文字搜图、Question-Answering(问答机器人)、照片去重、海量标签分类等。

神经搜寻零碎的利用场景

因为神经搜寻是一个全新的畛域,短少零碎搭建的对立工具,开发者通常须要同时理解包含分布式系统、深度学习框架以及网络服务方面的常识,为此咱们设计了 Jina。

Jina:简略易用的云原生神经搜寻框架

Jina 是一款主打易用性及云原生的神经搜寻框架, 于 2020 年 4 月在 GitHub 开源,截至目前已播种 13.1k Star(最新数据)。

Jina 屡次登上了 GitHub 寰球 Trending 排行榜第一名,最近还被收录进了 2021 年度寰球最受欢迎的 10 个  Python 库榜单,目前已有 200 多名贡献者。

拜访 Jina GitHub

拜访 Python 库榜单

Jina 中包含三个重要概念:Document、Executor 和 Flow。

Document:封装非结构化数据;Executor:实现神经搜寻零碎所须要的不同模块;Flow:将 Executor 连接起来

Document 是 Jina 中一个根底的数据类型, 能够帮忙开发者不便地形容非结构化数据,相当于 Numpy 中的 ndarray 或 PyTorch 中的 Tensor。一组 Document 形成一个 DocumentArray,开发者能够像应用 Python 原生的 list 一样应用 DocumentArray。

Executor 对应神经搜寻零碎中的不同模块, 实现对数据处理的外围性能。Flow 则对应整套神经搜寻零碎, 将多个 Executor 连接起来,构建成一套残缺的搜寻零碎。

Jina 不仅能够不便地在本地调试,也能够疾速的以服务模式进行部署。Jina 原生提供 Swagger-UI,不便代码调试。

Jina 中的 Debug 工具操作便捷,可间接可视化所有申请和后果

此外, Jina 部署到 Kubernetes 零碎中也非常简单, 仅用几行代码,就能够实现部署。

开发者如果本人设计神经搜寻零碎,往往须要自行保护一套工具链,包含构建模型预测服务、保护向量索引等,Jina 通过将整个流程封装成一个残缺零碎,提供对立的接口,极大升高了神经搜寻零碎的开发成本。

Finetuner:一行代码解决模型调优

用 Jina 从零搭建一套神经搜寻零碎,约须要 1~2 天,然而对模型进行调优,往往须要 1-2 周甚至更长时间。


用 Jina 搭建一套神经搜寻零碎,约有 87.5% 的工夫用于调优

为了帮忙开发者更快、更简洁地调试神经搜寻零碎, 咱们设计了  Finetuner。

用 Finetuner 对模型进行调优,共包含三个步骤:

1、载入数据

2、载入模型(下图示例中应用的是 PyTorch resnet50 模型)

3、将模型和数据传给 Finetuner 的 fit() 函数,Finetuner 就能够主动对模型进行微调

Finetuner:一行代码搞定调优过程

Finetuner 次要蕴含三个模块,别离与炼丹师们训练模型的三个步骤一一对应:Labeler 对应数据筹备,Tailer 对应模型搭建,Tuner 对应模型训练。


Finetuner 反对 PaddlePaddle、PyTorch 及 Keras 三个框架

Labeler

Labeler 在理论中应用较少

Labeler 次要蕴含两局部:前端页面 (UI) 和存储 (Data Storage)。

Tailer

Tailer 的次要工作是筹备模型

因为咱们接触到的大部分模型,并不是为搜寻场景设计的,无奈把非结构化数据,间接转换成向量示意,所以咱们须要应用 Tailer。

Tailer 的输出是一个任意模型,输入是一个新模型,这个新的模型能够计算非结构化数据的向量示意。

除此之外,Tailer 模块中还提供一些实用功能,如开发者能够指定解冻模型中的某些层。此外 Tailer 还提供可视化网络结构的 display 函数。

Tuner

Tuner 对应模型训练的步骤

Tuner 的外围包含四个局部:dataset、sampler、miner、loss。

loss: 实现了搜寻场景下,罕用的两个损失函数 Triple loss 和 Siamese loss。

dateset 和 sampler 则次要是针对搜寻场景,生成模型训练须要的数据样本。

dataset 对数据进行对立封装,sampler 会在对立数据结构的根底上,对数据进行各种操作,生产出训练模型时须要的三元组或二元组。

明天咱们次要介绍了 Jina 和 Finetuner。在 Jina 生态中,Jina 解决开发者搭建神经搜寻零碎的问题,Finetuner 解决搭建过程中模型微调的问题。另一个咱们没有介绍的重要成员是 Jina Hub。

Jina Hub 是一个 Executer 的分享平台,开发者能够不便地在 Jina Hub 上,和团队或社区分享本人的  Executer。

答现场问:开发者们问 Jina

1、 Jina 是否思考围绕具体场景,进行产品化?

Jina 自身是一个工具,而不是一个产品,咱们心愿赋能开发者,由开发者依据理论场景进行产品化。

每个开发者都有本人相熟的产品和业务,具备业余畛域的常识,这些货色并不是通用的常识,也很难迁徙到别的中央。

咱们心愿开发者能通过 Jina 或 Finetuner,搭建定制化搜寻零碎,从而构建针对具体场景的产品。

2、用 Jina 搭建的神经搜寻零碎,是否兼容通用搜寻倒排索引的搜寻?

是的,传统搜寻齐全能够和 Jina 交融。

以 DocQA 为例,第一步是拉取候选,通过向量索引把所有类似段落找进去。第二步是用计算量更大的深度学习模型,从段落里把须要的答案找进去。

在第一步做召回时,能够用基于向量索引的办法,也能够基于传统的 TF-IDF 或 bm25。因而在 Jina 里应用传统倒排索引做召回,是齐全能够的。

3、用 Jina 搭建一套神经搜寻零碎,须要多少计算资源?

用 Jina 搭建神经搜寻零碎须要的资源,齐全取决于业务需要,如数据量、稳定性要求、要求的响应工夫等。

繁多数据类型,如果数据量在百万以内,CPU 齐全应酬得了;如果数据量比拟大,比方要搜寻上亿个视频,且要求毫秒级别的反馈,那就必须要用 GPU。

4、利用 Jina 是否搜寻 PDF 中的具体内容?

能够的,咱们曾经有企业客户利用 Jina,搭建公司外部资源的搜寻零碎,其中就包含 PDF 搜寻。客户能够实现通过文字间接搜寻相干语义内容,或通过文字匹配 PDF 中的图片。

2022 Python Meetup,重磅来袭

2022 年,Python Meetup 将在上海、杭州、长沙等地召开,Jina 也将为各地开发者带来最新的神经搜寻技术分享,以及最炫酷的周边礼品。

欢送关注 Jina AI,理解最新线下流动停顿~

本次流动的相干链接:

次要的 Jina 仓库:get.jina.ai

Finetuner 官网:finetuner.jina.ai

本次分享的 Demo:hub.jina.ai

参加社区奉献:github.com/jina-ai/

本次分享 PPT:Here

退出 Jina AI

Jina AI 刚刚实现了 3000 万美金 A 轮融资,咱们心愿利用这笔资金,吸引更多置信开源力量、置信神经搜寻美好未来的小伙伴退出,独特为寰球开源社区做奉献。

理解岗位详情,请拜访 https://jina.ai/careers/

正文完
 0