查看原文
其他

分享回顾 | 一文读懂神经搜索、Jina 及 Finetuner

一路向前的 Jina AI 2022-03-19

文章导读

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


阅读本文,你将对神经搜索 (Neural Search)、Jina 及 Finetuner,有较为全面的了解。


本文内容概览


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


结构化数据,以常用的数据库为代表,其所有信息都是定义好的,可以直接进行快速搜索。


与结构化数据相对应的,即非结构化数据,这类数据没有直接可供搜索的结构化信息。


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


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

Reference:https://www.mongodb.com/unstructured-data


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


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


利用深度学习模型处理非结构化数据的两种思路


在向量空间中,相似数据会聚合在一起,不同数据则会分散在空间的不同位置。根据用户查询的数据,在向量空间中寻找近邻,就可以实现非结构化数据的搜索。


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


神经搜索系统包括两个关键要素

深度学习模型及向量索引

这两点也是神经搜索系统和传统搜索系统的区别。


神经搜索系统的应用,包括以图搜图、以文字搜图、Question-Answering(问答机器人)、照片去重、海量标签分类等。


神经搜索系统的应用场景


由于神经搜索是一个全新的领域,缺少系统搭建的统一工具,开发者通常需要同时了解包括分布式系统、深度学习框架以及网络服务方面的知识,为此我们设计了 Jina。


Jina:简单易用的云原生神经搜索框架


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


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


访问 Jina GitHub:github.com/jina-ai/jina

访问 Python 库榜单:

tryolabs.com/blog/2021/12/21/top-python-libraries-2021


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 Hub,请点击:hub.jina.ai


答现场问:开发者们问 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 仓库:get.jina.ai 

Finetuner 官网:finetuner.jina.ai

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

参与社区贡献:github.com/jina-ai/

本次分享 PPT:

pan.baidu.com/s/158LuQXRmD91K7NuoSZtj3g?pwd=3mky


 加入 Jina AI 


Jina AI 刚刚完成了 3000 万美金 A 轮融资,我们希望利用这笔资金,吸引更多相信开源力量、相信神经搜索美好未来的小伙伴加入,共同为全球开源社区做贡献。


了解岗位详情,请点击阅读原文,或访问:

https://jina.ai/careers/


投递简历,请发邮件至:

siying.zhao@jina.ai



下一代开源神经搜索引擎


在 GitHub 找到我们

更多精彩内容(点击图片阅读)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存