Jina AI x 矩池云 |神經(jīng)搜索引擎,一鍵構(gòu)建

圖片、視頻、語音等非結(jié)構(gòu)化數(shù)據(jù)在快速增長,隨著深度學(xué)習(xí)技術(shù)的不斷升級,非結(jié)構(gòu)化數(shù)據(jù)的搜索也逐漸形成可能。在這樣的背景下,專注于神經(jīng)搜索技術(shù)的商業(yè)開源軟件公司——Jina AI,提出了神經(jīng)搜索 (Neural Search) ,借助深度學(xué)習(xí)技術(shù)搜索非結(jié)構(gòu)化數(shù)據(jù)。
現(xiàn)在,矩池云 Matpool 已經(jīng)支持 Jina 框架,學(xué)習(xí)者和研究者只需在租用機器時選擇 Jina 鏡像,就可以體會高效的、大規(guī)模非結(jié)構(gòu)化數(shù)據(jù)搜索,同時矩池云 團隊版 用戶還可實現(xiàn)基于鏡像、資料、算力、存儲等共享,完成高效協(xié)作。?
神經(jīng)搜索 (Neural Search)?
首先,我們來了解一下什么是神經(jīng)搜索? (Neural Search) 。
神經(jīng)搜索是指用深度學(xué)習(xí)技術(shù)對海量信息進行搜索。與傳統(tǒng)搜索不同的點在于,傳統(tǒng)搜索主要基于文本標(biāo)簽,而神經(jīng)搜索則可以處理文本、圖像、視頻、音頻甚至 3D Mesh 之間的多模態(tài)和跨模態(tài)搜索問題。神經(jīng)搜索系統(tǒng)的應(yīng)用,包括以圖搜圖、以文字搜圖、Question-Answering(問答機器人)、照片去重、海量標(biāo)簽分類等。
神經(jīng)搜索借助深度學(xué)習(xí)模型,把非結(jié)構(gòu)化數(shù)據(jù)表示為向量。向量空間中,相似數(shù)據(jù)會聚合在一起,不同數(shù)據(jù)則會分散在空間的不同位置。根據(jù)用戶查詢的數(shù)據(jù),在向量空間中尋找最近鄰,就可以實現(xiàn)非結(jié)構(gòu)化數(shù)據(jù)的搜索。雖然多模態(tài)和跨模態(tài)搜索是神經(jīng)搜索的重要應(yīng)用場景,但是搭建神經(jīng)搜索解決方案卻非常復(fù)雜,往往涉及到工程化、AI 建模和以及 DevOps。
簡化這種復(fù)雜性,正是 Jina AI 在做的事情。
Jina AI 神經(jīng)搜索生態(tài)

Jina AI 提供了一個涵蓋整個開發(fā)過程的端到端開源技術(shù)棧,即神經(jīng)搜索生態(tài)。
DocArray: The data structure for unstructured data
在神經(jīng)搜索生態(tài)中的第一個產(chǎn)品是 DocArray,這也是創(chuàng)建神經(jīng)搜索項目的第一步。
DocArray 將非結(jié)構(gòu)化數(shù)據(jù),統(tǒng)一成同一種數(shù)據(jù)結(jié)構(gòu),利用 Python API,研發(fā)人員可以高效地處理、向量化、搜索、推薦、存儲及傳輸數(shù)據(jù)。它適用于大型項目的構(gòu)建,并且針對數(shù)據(jù)科學(xué)家和 AI 工程師進行了大量優(yōu)化。
Jina: Cloud-native neural search framework for any kind of data
Jina 是生態(tài)中最早的產(chǎn)品,誕生于 2020 年。Jina 是一個云原生神經(jīng)搜索框架,簡單來講,它可以把本地 DocArray 程序升級為一個高度可擴展的云服務(wù)。
開發(fā)者如果自己設(shè)計神經(jīng)搜索系統(tǒng),往往需要自行維護一套工具鏈,包括構(gòu)建模型預(yù)測服務(wù)、維護向量索引等,Jina 通過將整個流程封裝成一個完整系統(tǒng),提供統(tǒng)一的接口,極大降低了神經(jīng)搜索系統(tǒng)的開發(fā)成本。
Finetuner: Fintune any DNN for better embedding on neural search tasks
優(yōu)秀的神經(jīng)搜索解決方案,往往需要一個絕佳的向量模型,公開的預(yù)訓(xùn)練模型一般就能解決這個問題,F(xiàn)inetuner 可以借助特定領(lǐng)域的數(shù)據(jù),進一步微調(diào)模型,以獲得更高的準(zhǔn)確率,更好地應(yīng)用于搜索任務(wù)。為此,F(xiàn)inetuner 可以被視作神經(jīng)搜索的最后一步。
CLIP-as-service: Embed images and sentences into fixed-length vectors with CLIP
CLIP-as-service 利用 CLIP 模型,可以將圖像和句子嵌入固定長度的向量中,開發(fā)者可以在構(gòu)建新的搜索解決方案時,將其作為向量化服務(wù),或者在用 Jina 在生產(chǎn)中構(gòu)建服務(wù)時,簡單地將其作為最佳實踐。
Hub: Share and discover building blocks for neural search applications
實際應(yīng)用中,一個搜索解決方案通常包括許多組件,其中一些組件可以在不同任務(wù)中重復(fù)使用,利用通用組件,可以極大簡化開發(fā)過程。為此 Hub 應(yīng)運而生。通過 Hub,開發(fā)者可以分享和發(fā)現(xiàn)來自官方和社區(qū)的組件,只需幾分鐘就可以從零開始,快速搭建全新的搜索解決方案。
JCloud: Simplify deploying and managing Jina project on Jina Cloud
將 Jina 項目部署到云端,你可以使用 JCloud。它是一個命令行界面,用于管理 Jina Cloud 上 Jina 項目的生命周期,Jina Cloud 是一個云主機平臺,它承載著 Jina 項目,并提供免費的計算和存儲資源。
NOW: One line to host them all. Bootstrap your image search case in minutes
Jina NOW 通過一行代碼解決文本到圖像的搜索問題。對于首次使用 Jina 的用戶,它提供了更精簡的用戶體驗。
使用 Jina “全家桶”的方法眾多,通常研發(fā)人員會從 DocArray 開始設(shè)計原型,然后用 Jina 把它變成服務(wù),再通過參考 Hub 上的組件加速開發(fā)進度,最后通過 JCloud 進行部署。部署后,如果對準(zhǔn)確率 (Accuracy)、精確率 (Precision) 和召回率 (Recall) 不滿意,這時候就可以使用 Finetuner 進行調(diào)優(yōu)。如果此刻任務(wù)處理的是文本和圖像,我們也可以直接用 CLIP-as-service 作為向量服務(wù)。
應(yīng)用實例:圖片搜索引擎
矩池云已經(jīng)支持 Jina 鏡像,進入 matpool.com ,通過 “主機市場-租用-輸入Jina” 可直接運行

在這個實例中,我們使用 mini ImageNet 數(shù)據(jù)進行展示。
矩池云的公共數(shù)據(jù)集已經(jīng)為大家提供了相應(yīng)的數(shù)據(jù),我們將數(shù)據(jù)復(fù)制到當(dāng)前文件夾下。
我們使用 DocArray 庫提供的 Document 對圖片進行封裝。多個 Document 構(gòu)成一個DocumentArray。
DocumentArray提供的 from_files 函數(shù)可以幫助我們快速加載文件夾下的所有圖片。圖片文件的位置信息保存在 uri 屬性中。plot_image_sprites 函數(shù)可以預(yù)覽圖片。

定義 preproc 函數(shù)用于對圖片進行預(yù)處理,使用 apply 函數(shù)對 DocumentArray 中的每個Document 運行 preproc 函數(shù)。
通過 Document 的 uri 信息,我們加載圖片內(nèi)容并以 ndarray 的格式保存在 tensor 屬性中。
加載 ResNet50 模型,調(diào)用 embed 函數(shù)計算 DocumentArray 中的每個 Document 的向量表示。這里我們使用矩池云的預(yù)訓(xùn)練模型倉庫中的 ResNet50 模型。
每張圖片的向量表示以 Tensor 格式保存在 embedding 屬性中。
構(gòu)建查詢用的 DocumentArray,調(diào)用 match 函數(shù)在先前步驟中創(chuàng)建的 DocumentArray 中搜索最相似的圖片。搜索結(jié)果保存在 matches 變量中,使用 plot_matches_sprites 函數(shù)進行可視化。

相關(guān)鏈接
Jina:https://github.com/jina-ai/jina
DocArray:https://docarray.jina.ai/
矩池云:https://www.matpool.com
矩池云團隊版:https://www.matpool.com/team