開箱即用的 Embedding 流水線

“萬物皆可 Embedding”這句話似乎每個做算法模型小夥伴都聽過了。“萬物”具體是指什麼呢?Embedding 又是如何實現的呢?本文介紹了一款像積木般易於組合、開箱即用的 Embedding 流水線。 本文轉載自知乎用戶 CSY,轉載已獲得原作者授權。

萬物皆可 Embedding

在大數據的現實世界中,包括了任何內容:圖片、視頻、語音、文本,甚至 3D 模型等,這些可統稱爲非結構化數據。瞭解了所謂的“萬物”,那 Embedding 又指什麼?如下圖所示,針對非結構化數據,我們利用 AI 技術來對其進行編碼,轉換成特徵向量,通過計算向量實現對非結構化數據的分析。通常將非結構化數據提取向量的過程稱爲 Embedding。

Embedding 過程通常利用 AI 模型來實現,而模型使用包括調研、選型、訓練與調優等複雜且成本較高的流程,好在業界已提供很多預訓練好的模型可以直接用,但如何切換模型以及快速上手,就需要一套開箱即用的流水線(Pipeline)。

"X2Vec, Towhee is all you need!" 是 Towhee 這個開源項目的口號,它提供開箱即用的 Embedding 流水線,你無需瞭解內部工作原理,就可以開發和部署各種各樣的流水線。

如上圖所示,針對各種各樣的視頻應用場景,可以將流水線進行拆分,如圖像處理和音頻處理兩個流水線。首先,截取視頻幀,然後對截取到的圖片集進行處理,得到特徵向量;再獲取視頻中的音頻數據,提取音頻的特徵向量。通過對圖片幀和音頻的處理來進一步分析視頻,當然圖片和音頻的 embedding 也可以各自定義爲一個流水線,並且流水線的使用非常簡單,只需要運行 pipeline(pipeline_name:str),而這些流水線都被管理在 Towhee Hub 上,你也可以在 Hub 上尋找你需要的 Embedding 流水線。

Towhee Hub 地址(點擊右側的 Categories 可以進行篩選):https://towhee.io/pipelines?limit=30&page=1

圖像 Embedding

Towhee 目前支持多個圖像 Embedding 流水線,包括 resnet50,resnet101,efficientnetb5,efficientnetb7,vitlarge,swinbase,swinlarge,efficientnetb7-swinlarge-ensemble。值得關注的是 efficientnetb7-swinlarge-ensemble,它將 efficientnetb7 和 swinlarge 模型融合得出更優的模型效果。

>>> from towhee import pipeline
>>> embedding_pipeline = pipeline('towhee/image-embedding-resnet50')
>>> embedding = embedding_pipeline('path/to/your/image')

音頻 Embedding

Towhee 支持基於 VGGish 和 CLM 模型的音頻 Embedding 流水線,vggish 可以幫助實現音頻分類任務,clmr 通常用於提取音頻或者音樂的指紋。

>>> embedding_pipeline = pipeline('towhee/audio-embedding-vggish')
>>> embedding = embedding_pipeline('path/to/your/audio')

視頻 Embedding

就像拼圖一樣,Towhee 可以將圖片 Embedding 流水線和音頻 Embedding 流水線結合實現視頻 Embedding 流水線(開發中)。

>>> embedding_pipeline = pipeline('towhee/video-embedding-resnet50-vggish')
>>> embedding = embedding_pipeline('path/to/your/video')

上面列舉了圖片、音頻、視頻 Embedding 流水線的例子,除了這些,Towhee 還會持續完善各種非結構化數據處理的模型,比如文本、多模態 Embedding 等。當然如果你有什麼好的模型建議,或者不同的需求,都十分歡迎在 Towhee 項目下提 issue,爲 Towhee 社區做貢獻~

Towhee GitHub 地址:https://github.com/towhee-io/towhee

Towhee 框架概覽

你可能會好奇,爲什麼 towhee 使用 Embedding 流水線如此簡單?似乎只需要指定模型就可以直接運行,接下來爲你簡單介紹下 Towhee 框架。Towhee 主要包含了流水線(Pipelines),算子(Operators),引擎(Engine),以及模型相關的模型層(Layers)和訓練(Trainer)。

  • Pipeline: 一條流水線是由多個算子組成的 Embeddding 任務。

  • Operator: 算子是管道中的單個節點。它可以是機器學習模型、複雜算法或 Python 函數。Towhee 將多個算子連接在一起組成流水線。

  • Engine: 引擎是 Towhee 的核心。給定一個流水線,引擎會驅動各個算子之間的數據流、調度任務,並監控計算資源(CPU/GPU/等)的使用情況。

  • Layers: 模型層用於快速構建機器學習模型,它支持各種經典和新發布的模型。

  • Trainer: 訓練提供模型訓練與優化,它管理着模型訓練的各個組件。

總結

正如 Towhee Logo 的設計初衷——幫助用戶把機器學習應用中所用到的流水線模塊化,就像積木或拼圖一樣易於組合。Towhee 不光提供了開箱即用的 Embedding 流水線,你還可以創建任何你想要的 operator,然後拼圖式的搭建各種所需的流水線。

Towhee 作爲一個開源項目,如果你有任何需求都可以給社區提 ISSUE 並加入社區的討論,非常歡迎大家成爲 Towhee 的貢獻者!

Towhee website: https://towhee.io

GitHub: https://github.com/towhee-io/towhee

Slack: https://slack.towhee.io

Twitter: https://twitter.com/towheeio

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章