本文是JinaAI联合创始人&CTO王楠2021年12月25日北京PythonMeetup的分享记录,附Demo和PPT地址。看完本文,你会对NeuralSearch、Jina和Finetuner有更全面的了解。本文内容概述Neuralsearch:useunstructureddatasearchunstructureddata结构化数据,以常用数据库为代表,其所有信息定义明确,可以直接快速搜索。对应于结构化数据,即非结构化数据,这类数据没有直接可供搜索的结构化信息。常见的非结构化数据包括PDF文档、视频、音乐等。据MongoDB统计,我们身边80%到90%的数据都是非结构化数据,因此非结构化数据的搜索是一个非常重要的问题。非结构化数据本身包含着丰富的信息,但这些信息必须借助工具进行提取和处理。得益于深度学习和人工智能技术的飞速发展,近十年来产生了许多可用于提取非结构化数据信息的深度学习模型。一方面,各种分类模型可以准确标注视频、照片等非结构化数据;另一方面,深度学习模型也可用于将非结构化数据表示为向量。使用深度学习模型处理非结构化数据的两种方式在向量空间中,相似的数据会聚合在一起,不同的数据会分散在空间的不同位置。根据用户查询的数据,在向量空间中搜索最近邻,可以实现非结构化数据的搜索。神经搜索特指利用非结构化数据来搜索非结构化数据。深度学习模型和向量索引是神经搜索的重要组成部分。神经搜索系统包括两个关键要素:深度学习模型和向量索引,这也是神经搜索系统与传统搜索系统的区别。神经搜索系统的应用包括图片搜索、图片文本搜索、Question-Answering(问答机器人)、照片去重、海量标签分类等。神经搜索系统的应用场景由于神经搜索是一个新的领域并且缺乏统一的系统构建工具,开发者通常需要同时了解分布式系统、深度学习框架、网络服务等知识。为此,我们设计了Jina。Jina:一个易于使用的云原生神经搜索框架Jina是一个易于使用的云原生神经搜索框架。2020年4月在GitHub上开源,目前已获得13.1kStars(最新数据)。Jina曾多次登上GitHub全球Trending排行榜榜首,并于近期入选2021年全球10个最受欢迎的Python库榜单,目前贡献者已超过200人。访问JinaGitHub访问Python库列表Jina包括三个重要的概念:Document、Executor和Flow。文档:封装非结构化数据;Executor:实现神经搜索系统所需的不同模块;Flow:connectsExecutorsDocument是Jina中的一种基本数据类型,可以帮助开发者方便的描述非结构化数据,相当于Numpy中的ndarray或者PyTorch中的Tensor。一组Documents构成一个DocumentArray,开发者可以像Python原生的list一样使用DocumentArray。执行器对应神经搜索系统中的不同模块,实现数据处理的核心功能。Flow对应整个神经搜索系统,连接多个Executor构建一个完整的搜索系统。Jina不仅可以在本地轻松调试,还可以作为服务快速部署。Jina原生提供用于代码调试的Swagger-UI。Jina中的Debug工具操作简单,可以直接可视化所有的请求和结果。另外,将Jina部署到Kubernetes系统中也非常简单,只需几行代码即可完成部署。如果开发者设计自己的神经搜索系统,往往需要自己维护一套工具链,包括构建模型预测服务、维护向量索引等。Jina将整个过程封装成一个完整的系统,并提供了统一的接口,大大降低了神经网络的成本。搜索系统的开发成本。Finetuner:一行代码解决模型调优用Jina从头搭建一个神经搜索系统大约需要1-2天,而调优模型往往需要1-2周甚至更长时间。使用Jina构建神经搜索系统,大约87.5%的时间花在调参上。为了帮助开发者更快、更简洁地调试神经搜索系统,我们设计了Finetuner。使用Finetuner调优模型包括三个步骤:1.加载数据2.加载模型(下图中的示例使用PyTorchresnet50模型)3.将模型和数据传递给Finetuner的fit()函数,Finetuner可以自动Fine-tunethemodelFinetuner:一行代码得到调优过程对应的模型训练。Finetuner支持PaddlePaddle、PyTorch和Keras这三个框架。LabelerLabeler在实践中很少使用。Labeler主要由两部分组成:前端页面(UI)和存储(DataStorage)。TailerTailer的主要任务是准备模型。因为我们接触到的模型大多不是针对搜索场景设计的,不能直接将非结构化数据转化为向量表示,所以需要用到Tailer。Tailer的输入是一个任意模型,输出是一个可以计算非结构化数据向量表示的新模型。此外,Tailer模块还提供了一些实用的功能,比如开发者可以在冻结模型中指定某些层。此外,Tailer还提供了可视化网络结构的展示功能。TunerTuner对应模型训练的步骤。Tuner的核心包括四个部分:dataset、sampler、miner和loss。loss:实现了搜索场景中常用的两种损失函数Tripleloss和Siameseloss。dateset和sampler主要针对搜索场景,生成模型训练所需的数据样本。数据集将数据进行统一的封装,采样器会根据统一的数据结构对数据进行各种操作,产生训练模型所需的三元组或二元组。今天我们主要介绍Jina和Finetuner。在Jina生态中,Jina解决了开发者构建神经搜索系统的问题,Finetuner解决了构建过程中模型微调的问题。另一个我们没有介绍的重要成员是JinaHub。JinaHub是一个Executer共享平台。开发人员可以轻松地与JinaHub上的团队或社区共享他们的Executer。现场答疑:开发者问Jina1,Jina是否围绕特定场景考虑产品化?Jina本身是一个工具,而不是一个产品。我们希望为开发者赋能,开发者根据实际场景进行产品化。每个开发者都有自己熟悉的产品和业务,都有专业领域的知识。这些东西不是常识,很难迁移到其他地方。我们希望开发者可以通过Jina或Finetuner构建定制化的搜索系统,从而构建针对特定场景的产品。2、用Jina搭建的神经搜索系统能兼容通用搜索倒排索引的搜索吗?是的,传统搜索可以与Jina完全集成。以DocQA为例,第一步是拉候选,通过向量索引找到所有相似的段落。第二步是使用计算量更大的深度学习模型从段落中找出所需的答案。第一步做recall时,可以使用基于vectorindex的方法,也可以基于传统的TF-IDF或bm25。所以在Jina中完全可以使用传统的倒排索引进行召回。3.用Jina构建一个神经搜索系统需要多少计算资源?使用Jina构建神经搜索系统所需的资源完全取决于业务需求,例如数据量、稳定性要求和所需的响应时间。对于单一数据类型,如果数据量小于百万,CPU完全可以处理;如果数据量比较大,比如搜索上亿级的视频,需要毫秒级的反馈,那么就必须要用GPU。4.Jina可以搜索PDF中的特定内容吗?是的,我们已经有企业客户使用Jina来构建公司内部资源的搜索系统,包括PDF搜索。客户可以直接通过文字搜索相关语义内容,也可以通过文字匹配PDF中的图片。2022PythonMeetup来了!2022年,PythonMeetup将在上海、杭州、长沙等地举办。吉娜也将带来来自世界各地的开发者,分享最新的神经搜索技术和最酷的周边礼物。欢迎关注集娜AI,了解最新线下活动进展~本次活动相关链接:集娜主仓库:get.jina.ai微调官网:finetuner.jina.ai本次Demo分享:hub.jina.ai参与在社区投稿:github.com/jina-ai/此分享PPT:这里加入JinaAIJinaAI刚刚完成了3000万的A轮融资。我们希望通过这笔基金吸引更多相信开源力量和神经搜索美好未来的年轻人。合作伙伴加入全球开源社区并为之做出贡献。职位详情请访问https://jina.ai/careers/
