Meet Towhee: All you need for embedding
Intro
Towhie 致力于开发一个专注于embedding任务的机器学习平台。正如我们的口号所说,“X2Vec,Towhee is all you need”,我们旨在帮助用户通过短短几行代码将非结构化数据转换为embedding。
在本文中,我们将介绍大致地介绍Towhee以及其中的一些重要的组件,并展示一个简单的demo。
Motivation Behind Towhee
现代社会充斥着各式各样的数据,有些数据诸如数字和文本,很容易存储,而另一些数据,比如图像、视频、分子结构,则不那么容易存储,检索,管理。这种难以存储的数据就是我们所说的非结构化数据,而随着数据科学的发展,非结构化数据日渐成为机器学习社区关注的焦点。为了能够更好地理解和描述这些数据,我们需要将非结构化数据转换为易于管理的结构化数据,这也就是我们所说的embedding。
但存在着一个问题,并非所有数据持有者和开发人员都能够有效地将这种非结构化数据转换为embedding。这需要机器学习方面的深厚知识,还需要大量的数据,而这两点要求极大地限制了数据持有者对非结构化数据进行嵌入。因此,我们决定集中精力构建一个平台帮助用户进行embedding工作,释放非结构化数据的价值。
经过几个月的调研和准备工作,Towhee 诞生了,这是一个用于简化嵌入任务的开源平台。 Towhee 让每个人都能够通过几行简短的代码对数据做嵌入。我们将 Towhee 开源是因为我们想要建立一个社区,所有用户和开发人员都可以贡献自己的力量来促进非结构化数据价值的开发,让世上再无难做的embedding。
Essential Components
Operator
Operator 是 Towhee 中的最小功能单元。每个Operator都有其特定功能。例如,“Image Pre-processing Operator”对图像进行预处理,可能会对输入图像进行旋转和剪切,而“Embedding Model Operator”会使用 Resnet50 等模型将合法的输入图像转换为embedding。
Pipeline
Pipeline是Towhee中的一套工作流程,可以由一个有向无环图 (DAG)来描述,其中每个节点都是一个Operator。在 Towhee 中,每个pipeline通过一系列的流程处理某一类任务,例如生成图像的embedding这一pipeline可能由图像预处理operator和embedding模型operator组成。
下图是一个简单的示例,显示了数据如何在pipeline内流动:
从图中我们可以得出这个pipeline的工作流程:
- 用户将输入图像传入 pipeline。
- Pre-process Operator 接收图像并进行一些预处理。
- Embedding Model Operator 接收处理后的图像并生成输出embedding。
Hub
Towhee 已经建立了一个Hub(可以从Towhee的官网进入),Hub存储了用户写好并上传的pipeline、operator、dataset(即将推出)。用户可以在我们的Hub创建repository,并将他们的pipeline和operator上传到Hub,每一个repo存放一个pipeline或一个operator。从而使得Towhee 社区中的每个人都可以互相借鉴和使用他人设计的pipeline和operator。同时我们将会提供训练的接口,用户可以下载复用他人的预训练模型并在本地进行fine-tune,如果用户愿意的话也可以将fine-tune后的模型再次上传。
Demo
在本节中,我们将展示一个简单的pipeline demo,用于image embedding。
Image embedding
该pipeline将输入图像转换为为embedding。它由两个operator组成,即“image-decoder”和“resnet-image-embedding”。用户不需要知道pipeline是如何工作的,只需要使用以下 3 行创建嵌入:
from towhee import pipeline
img_pipeline = pipeline('image-embedding')
embedding = img_pipeline('path/to/your/image')
用户可以通过简单地告诉 Towhee 他们的embedding任务(在本例中为“image-embedding”)来使用我们从Towhee中的默认image embedding pipeline。
对于想要指定他们想要使用的pipeline的用户,他们同样可以告诉Towhee具体想要使用哪一个pipeline:
from towhee import pipeline
my_pipeline = pipeline('author/pipeline_name')
当然前提是这个pipeline存在于我们的Hub上或者用户的本地缓存中。
如果pipeline不存在,请不要担心,我们鼓励所有用户通过简单的命令将自己的pipeline或operator上传到我们的Hub,从而活跃我们的社区。
Vision
当前阶段,Towhee 是一个WIP的机器学习平台。但在不久的将来,我们希望使其成为一个能够挖掘非结构化数据更大潜力的生态系统。这就是为什么我们如此渴望建立一个志同道合的社区,齐心协力,我们可以有所作为。
Github: https://github.com/towhee-io/towhee
Towhee官网: https://towhee.io/
Quick-Start: https://docs.towhee.io/get-started/quick-start/