一文讀懂神經(jīng)搜索、Jina 及 Finetuner

本文為 Jina AI Co-founder & CTO 王楠,在 2021 年 12 月 24 日 Python Meetup Beijing 的分享實錄,內(nèi)附 Demo 及 PPT 地址。
閱讀本文,你將對神經(jīng)搜索 (Neural Search)、Jina 及 Finetuner,有較為全面的了解。

神經(jīng)搜索:用非結(jié)構(gòu)化數(shù)據(jù)搜索非結(jié)構(gòu)化數(shù)據(jù)
結(jié)構(gòu)化數(shù)據(jù),以常用的數(shù)據(jù)庫為代表,其所有信息都是定義好的,可以直接進行快速搜索。
與結(jié)構(gòu)化數(shù)據(jù)相對應的,即非結(jié)構(gòu)化數(shù)據(jù),這類數(shù)據(jù)沒有直接可供搜索的結(jié)構(gòu)化信息。

據(jù) MongoDB 統(tǒng)計,我們身邊 80%~90% 的數(shù)據(jù),都屬于非結(jié)構(gòu)化數(shù)據(jù),所以,非結(jié)構(gòu)化數(shù)據(jù)的搜索,是一個非常重要的問題。
Reference:https://www.mongodb.com/unstructured-data
非結(jié)構(gòu)化數(shù)據(jù)本身包含豐富的信息,但這些信息必須借助工具抽取和加工。得益于深度學習及人工智能技術(shù)的迅猛發(fā)展,過去十幾年間,產(chǎn)生了很多可以用于抽取非結(jié)構(gòu)化數(shù)據(jù)信息的深度學習模型。
一方面,各種分類模型可以精確地給視頻、照片等非結(jié)構(gòu)化數(shù)據(jù)打標簽;另一方面,還可以利用深度學習模型,把非結(jié)構(gòu)化的數(shù)據(jù)表示為向量。

在向量空間中,相似數(shù)據(jù)會聚合在一起,不同數(shù)據(jù)則會分散在空間的不同位置。根據(jù)用戶查詢的數(shù)據(jù),在向量空間中尋找近鄰,就可以實現(xiàn)非結(jié)構(gòu)化數(shù)據(jù)的搜索。
神經(jīng)搜索特指使用非結(jié)構(gòu)化數(shù)據(jù)搜索非結(jié)構(gòu)化數(shù)據(jù),深度學習模型和向量索引是神經(jīng)搜索的重要組成部分。

神經(jīng)搜索系統(tǒng)的應用,包括以圖搜圖、以文字搜圖、Question-Answering(問答機器人)、照片去重、海量標簽分類等。

由于神經(jīng)搜索是一個全新的領域,缺少系統(tǒng)搭建的統(tǒng)一工具,開發(fā)者通常需要同時了解包括分布式系統(tǒng)、深度學習框架以及網(wǎng)絡服務方面的知識,為此我們設計了 Jina。
Jina:簡單易用的云原生神經(jīng)搜索框架
Jina 是一款主打易用性及云原生的神經(jīng)搜索框架,于 2020 年 4 月在 GitHub 開源,截至目前已收獲 13.1k Star(最新數(shù)據(jù))。
Jina 多次登上了 GitHub 全球 Trending 排行榜第一名,最近還被收錄進了 2021 年度全球最受歡迎的 10 個? Python 庫榜單,目前已有 200 多名貢獻者。

訪問 Jina GitHub:github.com/jina-ai/jina
訪問 Python 庫榜單:
tryolabs.com/blog/2021/12/21/top-python-libraries-2021
Jina 中包括三個重要概念:Document、Executor 和 Flow。

;Flow:將 Executor 連接起來
Document 是 Jina 中一個基礎的數(shù)據(jù)類型,可以幫助開發(fā)者方便地描述非結(jié)構(gòu)化數(shù)據(jù),相當于 Numpy 中的 ndarray 或 PyTorch 中的 Tensor。一組 Document 構(gòu)成一個 DocumentArray,開發(fā)者可以像使用 Python 原生的 list 一樣使用 DocumentArray。
Executor 對應神經(jīng)搜索系統(tǒng)中的不同模塊,實現(xiàn)對數(shù)據(jù)處理的核心功能。Flow 則對應整套神經(jīng)搜索系統(tǒng),將多個 Executor 連接起來,構(gòu)建成一套完整的搜索系統(tǒng)。
Jina 不僅可以方便地在本地調(diào)試,也可以快速的以服務形式進行部署。Jina 原生提供 Swagger-UI,方便代碼調(diào)試。

此外,將?Jina 部署到 Kubernetes 系統(tǒng)中也非常簡單,僅用幾行代碼,就可以完成部署。

開發(fā)者如果自己設計神經(jīng)搜索系統(tǒng),往往需要自行維護一套工具鏈,包括構(gòu)建模型預測服務、維護向量索引等,Jina 通過將整個流程封裝成一個完整系統(tǒng),提供統(tǒng)一的接口,極大降低了神經(jīng)搜索系統(tǒng)的開發(fā)成本。
Finetuner:一行代碼解決模型調(diào)優(yōu)
用 Jina 從零搭建一套神經(jīng)搜索系統(tǒng),約需要 1~2 天,但是對模型進行調(diào)優(yōu),往往需要 1-2 周甚至更長時間。

為了幫助開發(fā)者更快、更簡潔地調(diào)試神經(jīng)搜索系統(tǒng),我們設計了? Finetuner。
用 Finetuner 對模型進行調(diào)優(yōu),共包括三個步驟:
1、載入數(shù)據(jù)
2、載入模型(下圖示例中使用的是 PyTorch?resnet50?模型)
3、將模型和數(shù)據(jù)傳給 Finetuner 的 fit() 函數(shù),F(xiàn)inetuner 就可以自動對模型進行微調(diào)

Finetuner 主要包含三個模塊,分別與煉丹師們訓練模型的三個步驟一一對應:Labeler 對應數(shù)據(jù)準備,Tailer 對應模型搭建,Tuner 對應模型訓練。

Labeler?

Labeler 主要包含兩部分:前端頁面 (UI) 和存儲 (Data Storage)。
?Tailer?

因為我們接觸到的大部分模型,并不是為搜索場景設計的,無法把非結(jié)構(gòu)化數(shù)據(jù),直接轉(zhuǎn)換成向量表示,所以我們需要使用 Tailer。
Tailer 的輸入是一個任意模型,輸出是一個新模型,這個新的模型可以計算非結(jié)構(gòu)化數(shù)據(jù)的向量表示。
除此之外,Tailer 模塊中還提供一些實用功能,如開發(fā)者可以指定凍結(jié)模型中的某些層。此外 Tailer 還提供可視化網(wǎng)絡結(jié)構(gòu)的 display 函數(shù)。
?Tuner?

Tuner 的核心包括四個部分:dataset、sampler、miner、loss。
loss:實現(xiàn)了搜索場景下,常用的兩個損失函數(shù) Triple loss 和 Siamese loss。
dateset 和 sampler 則主要是針對搜索場景,生成模型訓練需要的數(shù)據(jù)樣本。
dataset 對數(shù)據(jù)進行統(tǒng)一封裝,sampler 會在統(tǒng)一數(shù)據(jù)結(jié)構(gòu)的基礎上,對數(shù)據(jù)進行各種操作,生產(chǎn)出訓練模型時需要的三元組或二元組。
今天我們主要介紹了 Jina 和 Finetuner。在 Jina 生態(tài)中,Jina 解決開發(fā)者搭建神經(jīng)搜索系統(tǒng)的問題,F(xiàn)inetuner 解決搭建過程中模型微調(diào)的問題。另一個我們沒有介紹的重要成員是 Jina Hub。
Jina Hub 是一個?Executer?的分享平臺,開發(fā)者可以方便地在 Jina Hub 上,和團隊或社區(qū)分享自己的 ?Executer。
訪問 Jina Hub,請點擊:hub.jina.ai
答現(xiàn)場問:開發(fā)者們問 Jina
1、Jina 是否考慮圍繞具體場景,進行產(chǎn)品化?
Jina 本身是一個工具,而不是一個產(chǎn)品,我們希望賦能開發(fā)者,由開發(fā)者根據(jù)實際場景進行產(chǎn)品化。
每個開發(fā)者都有自己熟悉的產(chǎn)品和業(yè)務,具備專業(yè)領域的知識,這些東西并不是通用的知識,也很難遷移到別的地方。
我們希望開發(fā)者能通過 Jina 或 Finetuner,搭建定制化搜索系統(tǒng),從而構(gòu)建針對具體場景的產(chǎn)品。
2、用 Jina 搭建的神經(jīng)搜索系統(tǒng),能否兼容通用搜索倒排索引的搜索?
是的,傳統(tǒng)搜索完全可以和 Jina 融合。
以 DocQA 為例,第一步是拉取候選,通過向量索引把所有相似段落找出來。第二步是用計算量更大的深度學習模型,從段落里把需要的答案找出來。
在第一步做召回時,可以用基于向量索引的方法,也可以基于傳統(tǒng)的 TF-IDF 或 bm25。因此在 Jina 里使用傳統(tǒng)倒排索引做召回,是完全可以的。
3、用 Jina 搭建一套神經(jīng)搜索系統(tǒng),需要多少計算資源?
用?Jina?搭建神經(jīng)搜索系統(tǒng)需要的資源,完全取決于業(yè)務需求,如數(shù)據(jù)量、穩(wěn)定性要求、要求的響應時間等。
單一數(shù)據(jù)類型,如果數(shù)據(jù)量在百萬以內(nèi),CPU 完全應付得了;如果數(shù)據(jù)量比較大,比如要搜索上億個視頻,且要求毫秒級別的反饋,那就必須要用 GPU。
4、利用 Jina 能否搜索 PDF 中的具體內(nèi)容?
可以的,我們已經(jīng)有企業(yè)客戶利用 Jina,搭建公司內(nèi)部資源的搜索系統(tǒng),其中就包括 PDF 搜索。客戶可以實現(xiàn)通過文字直接搜索相關(guān)語義內(nèi)容,或通過文字匹配 PDF 中的圖片。
2022 Python Meetup,重磅來襲
2022 年,Python Meetup 將在上海、杭州、長沙等地召開,Jina 也將為各地開發(fā)者帶來最新的神經(jīng)搜索技術(shù)分享,以及最炫酷的周邊禮品。
歡迎關(guān)注 Jina AI,了解最新線下活動進展~
本次活動的相關(guān)鏈接:
主要的 Jina 倉庫:get.jina.ai?
Finetuner 官網(wǎng):finetuner.jina.ai
本次分享的 Demo:hub.jina.ai
參與社區(qū)貢獻:github.com/jina-ai/
本次分享 PPT:
pan.baidu.com/s/158LuQXRmD91K7NuoSZtj3g?pwd=3mky
加入 Jina AI?
Jina AI 剛剛完成了 3000 萬美金 A 輪融資,我們希望利用這筆資金,吸引更多相信開源力量、相信神經(jīng)搜索美好未來的小伙伴加入,共同為全球開源社區(qū)做貢獻。
了解崗位詳情,請點擊閱讀原文,或訪問:https://jina.ai/careers/