乐趣区

关于深度学习:BERTasservice-时隔三年突然更新这次连名儿都改了

 无需放心简单的实现细节,只需简略调用 API,就能够为文本和图像创立 SOTA 表征向量。

从 BERT 到 BERT-as-service

2018 年 9 月,Google 一篇 BERT 模型相干论文引爆全网:该自然语言模型,在机器浏览了解顶级程度测试 SQuAD1.1 中,连破 11 项 NLP 测试记录,两个掂量指标全面超过人类。

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

这不仅开启了 NLP 的全新时代,也标记着迁徙学习和预训练 + 微调的模式,开始进入人们的视线。

2018 年 10 月,BERT 公布仅一个月后,BERT-as-service 横空出世。 用户能够应用一行代码,通过 C/S 架构的形式,连贯到服务端,疾速取得句向量。

BERT-as-service 2018 年公布时的架构

作为基于 BERT 的第一个微服务框架,BERT-as-service 通过对 BERT 的高度封装和深度优化,以不便易用的网络微服务 API 接口, 博得了 NLP 及机器学习技术社区的宽泛关注。

它简洁的 API 交互方式、文档写作格调,甚至连 README 排版,都成为之后泛滥开源我的项目的模板。

BERT-as-service 能够通过几行代码轻松取得句向量

如果说 BERT 是迁徙学习的里程碑,那么 BERT-as-service 的呈现, 能够称得上是迁徙学习,在工程服务化的里程碑。

GitHub 上 BERT 模型的不少贡献者,也积极参与了 BERT-as-service 的代码奉献。火遍寰球的 Hugging Face 在 2018 年 11 月推出的 Pytorch-transformers 初版,也受到了 BERT-as-service 的启发。

只管 BERT-as-service 在 2019 年 2 月后的更新逐步暂停, 但 3 年来该我的项目在 GitHub 上积攒了 10,000 个 Star,2,000 多个 Fork 和堆积成山的 Issue, 都显示出社区对 BERT-as-service 的极大趣味和激情。

其中很多开发人员 Fork 了 BERT-as-service 并联合本身业务,开发出了一套本人的微服务零碎。

BERT-as-service 升级版重磅来袭

时隔三年,BERT-as-service 再度更新,降级为全新的 CLIP-as-service,不仅保留了原有的高并发、微服务、简略易用等个性,更能够同时生成文本和图像的表征向量。

CLIP-as-service 的背地是由 OpenAI 在 2021 年 1 月公布的 CLIP (Contrastive Language-Image Pre-training) 模型, 它能够基于文本对图像进行分类,突破了自然语言解决和计算机视觉两大门派「若明若暗」的界线,实现了多模态 AI 零碎。

CLIP-as-service 具备以下特点:

  • 开箱即用: 无需额定学习,只需调用客户端或服务端的 API,即可实时生成图像和文本的向量输入。
  • 速度快: 为大型数据集和长耗时任务量身定制,同时反对 ONNX 和 PyTorch 模型引擎,以提供疾速推理服务。
  • 高扩大: 反对多核、单核 GPU 上并行扩大多个 CLIP 模型,并主动进行负载平衡。服务器端能够抉择通过 gRPC、Websocket 或 HTTP 三种形式对外提供服务。
  • 神经搜寻全家桶: 开发者能够短时间内,疾速交融 CLIP-as-service 及 Jina、DocArray,搭建跨模态和多模态搜寻行业解决方案。

CLIP-as-service 实操指南

装置 CLIP-as-service

同 BERT-as-service 的 C/S 架构一样,CLIP-as-service 也分为服务器端和客户端两个安装包。

开发者可通过 pip 在不同的机器上选择性地装置 CLIP 客户端或服务端。

留神:请确保应用 Python 3.7+

1、装置 CLIP 服务端(通常是 GPU 服务器)

pip install clip-server

2、装置 CLIP 客户端(比方在本地笔记本电脑上)

pip install clip-client

启动 CLIP 服务器

启动服务器意味着下载预训练模型,启动微服务框架,对外开放接口等一系列操作。所有这些操作都能够通过一句简略的命令实现。

启动服务器:

python -m clip_server

服务器启动后,将显示以下输入:


 🔗         Protocol                  GRPC   
 🏠     Local access         0.0.0.0:51000   
 🔒  Private network    192.168.3.62:51000   
 🌐   Public address  87.191.159.105:51000

这示意服务器已准备就绪,并以 gRPC 形式对外提供接口。

从客户端连贯

服务端就绪后,即可通过 GRPC 客户端与之连贯并发送申请。依据客户端和服务端的地位,可应用不同的 IP 地址。

更多详情,请查看 CLIP-as-service 文档。

运行 Python 脚本,验证客户端和服务端之间的连贯情况:


from clip_client import Client

c = Client('grpc://0.0.0.0:51000')
c.profile()

如果连贯失常,你会看到如下所示的耗时树状图:


Roundtrip  16ms  100%                                                          
├──  Client-server network  12ms  75%                                           
└──  Server  4ms  25%                                                           
    ├──  Gateway-CLIP network  0ms  0%                                          
    └──  CLIP model  4ms  100%

搭建一个跨模态搜寻零碎:文本到图片

在这个示例中,咱们将应用 CLIP-as-service 搭建设一个简略的 text-to-image 搜寻案例, 用户只需输出文本,即可输入相匹配的图像。

本示例将借助 Totally-Looks-Like 数据集及 Jina AI 的 DocArray 来实现数据下载。

留神:DocArray 作为上游依赖,已蕴含在 clip-client 中,无需独自装置。

1、加载图像

from docarray import DocumentArray

da = DocumentArray.pull('ttl-original', show_progress=True, local_cache=True)

Totally-Looks-Like 数据集蕴含 12,032 张图像,可能须要一段时间下载。

2、加载实现后,应用 DocArray 内置性能 da.plot_image_sprites() 将其可视化,成果如下图所示:

3、通过命令 python -m clip_server 启动 CLIP 服务端,并对图像进行编码 (encode)


from clip_client import Client

c = Client(server='grpc://87.105.159.191:51000')

da = c.encode(da, show_progress=True)

4、输出 “a happy potato”,查看搜寻后果

vec = c.encode(["a happy potato"])
r = da.find(query=vec, limit=9)
r.plot_image_sprites()

输入后果如下:

查问 “A happy potato” 后的输入后果

尝试输出 “professor cat is very serious”,输入后果如下:

更多具体文档,请拜访 CLIP-as-service

搭建一个跨模态搜寻零碎:图片到文本

咱们也能够将两个模态对调,实现图片到文字的搜寻。

在上面这个例子中,咱们应用《高傲与偏见》整部小说的英文文本作为匹配指标。而后输出一张图片,就能够失去这张图片在《高傲与偏见》中对应的文本。

开始之前,先运行本地托管且反对客户端拜访的 CLIP-as-service 服务端。

运行 CLIP-as-service 服务端 👉

服务端启动并运行后,即可应用客户端向其发送申请并取得后果。

应用 CLIP-as-service 客户端,建设多模态搜寻实例。

以上就是本期对于 CLIP-as-service 的全部内容,更多精彩内容,敬请继续关注 Jina AI 公众号!


本文相干学习材料:

CLIP-as-service 文档

CLIP-as-service GitHub Repo

参加 Jina 学习,成为神经搜寻专家

DocArray 文档

Jina 文档

 

退出移动版