擊敗OpenAI,權重、數據、代碼全開源,能完美復現的嵌入模型Nomic Embed來了
一周前,OpenAI 給廣大用戶發放福利,在下場修復 GPT-4 變懶的問題后,還順道上新了 5 個新模型,其中就包括更小且高效的 text-embedding-3-small 嵌入模型。
我們知道,嵌入是表示自然語言或代碼等內容中概念的數字序列。嵌入使得機器學習模型和其他算法更容易理解內容之間的關聯,也更容易執行聚類或檢索等任務。可見,嵌入在 NLP 領域是非常重要的。
不過,OpenAI 的嵌入模型并不是免費給大家使用的,比如 text-embedding-3-small 的收費價格是每 1k tokens 0.00002 美元。
現在,比 text-embedding-3-small 更好的嵌入模型來了,并且還不收費。
AI 初創公司 Nomic AI 宣布推出 Nomic Embed,這是首個開源、開放數據、開放權重、開放訓練代碼、完全可復現和可審核的嵌入模型,上下文長度為 8192,在短上下文和長上下文基準測試中擊敗 OpenAI text-embeding-3-small 和 text-embedding-ada-002。
文本嵌入是現代 NLP 應用程序的一個組成部分,為 LLM 和語義搜索提供了檢索增強生成 (RAG)。該技術將有關句子或文檔的語義信息編碼為低維向量,然后用于下游應用程序,例如用于數據可視化、分類和信息檢索的聚類。目前,最流行的長上下文文本嵌入模型是 OpenAI 的 text-embedding-ada-002,它支持 8192 的上下文長度。不幸的是,Ada 是閉源的,并且訓練數據不可審計。
不僅如此,性能最佳的開源長上下文文本嵌入模型(例如 E5-Mistral 和 jina-embeddings-v2-base-en)要么由于模型大小而不適合通用用途,要么無法超越其 OpenAI 對應模型的性能。
Nomic-embed 的發布改變了這一點。該模型的參數量只有 137M ,非常便于部署,5 天就訓練好了。
論文地址:https://static.nomic.ai/reports/2024_Nomic_Embed_Text_Technical_Report.pdf
論文題目:Nomic Embed: Training a Reproducible Long Context Text Embedder
項目地址:https://github.com/nomic-ai/contrastors
如何構建 nomic-embed
現有文本編碼器的主要缺點之一是受到序列長度限制,僅限于 512 個 token。為了訓練更長序列的模型,首先要做的就是調整 BERT,使其能夠適應長序列長度,該研究的目標序列長度為 8192。
訓練上下文長度為 2048 的 BERT
該研究遵循多階段對比學習 pipeline 來訓練 nomic-embed。首先該研究進行 BERT 初始化,由于 bert-base 只能處理最多 512 個 token 的上下文長度,因此該研究決定訓練自己的 2048 個 token 上下文長度的 BERT——nomic-bert-2048。
受 MosaicBERT 的啟發,研究團隊對 BERT 的訓練流程進行了一些修改,包括:
- 使用旋轉位置嵌入來允許上下文長度外推;
- 使用 SwiGLU 激活,因為它已被證明可以提高模型性能;
- 將 dropout 設置為 0。
并進行了以下訓練優化:
- 使用 Deepspeed 和 FlashAttention 進行訓練;
- 以 BF16 精度進行訓練;
- 將詞表(vocab)大小增加到 64 的倍數;
- 訓練的批大小為 4096;
- 在掩碼語言建模過程中,掩碼率為 30%,而不是 15%;
- 不使用下一句預測目標。
訓練時,該研究以最大序列長度 2048 來訓練所有階段,并在推理時采用動態 NTK 插值來擴展到 8192 序列長度。
實驗
該研究在標準 GLUE 基準上評估了 nomic-bert-2048 的質量,發現它的性能與其他 BERT 模型相當,但具有顯著更長的上下文長度優勢。
nomic-embed 的對比訓練
該研究使用 nomic-bert-2048 初始化 nomic-embed 的訓練。對比數據集由約 2.35 億文本對組成,并在收集過程中使用 Nomic Atlas 廣泛驗證了其質量。
在 MTEB 基準上,nomic-embed 的性能優于 text-embedding-ada-002 和 jina-embeddings-v2-base-en。
然而,MTEB 不能評估長上下文任務。因此,該研究在最近發布的 LoCo 基準以及 Jina Long Context 基準上評估了 nomic-embed。
對于 LoCo 基準,該研究按照參數類別以及評估是在監督或無監督設置中執行的分別進行評估。
如下表所示,Nomic Embed 是性能最佳的 100M 參數無監督模型。值得注意的是,Nomic Embed 可與 7B 參數類別中表現最好的模型以及專門針對 LoCo 基準在監督環境中訓練的模型媲美:
在 Jina Long Context 基準上,Nomic Embed 的總體表現也優于 jina-embeddings-v2-base-en,但 Nomic Embed 在此基準測試中的表現并不優于 OpenAI ada-002 或 text-embedding-3-small:
總體而言,Nomic Embed 在 2/3 基準測試中優于 OpenAI Ada-002 和 text-embedding-3-small。
該研究表示,使用 Nomic Embed 的最佳選擇是 Nomic Embedding API,獲得 API 的途徑如下所示:
最后是數據訪問:為了訪問完整數據,該研究向用戶提供了 Cloudflare R2 (類似 AWS S3 的對象存儲服務)訪問密鑰。要獲得訪問權限,用戶需要先創建 Nomic Atlas 帳戶并按照 contrastors 存儲庫中的說明進行操作。
contrastors 地址:https://github.com/nomic-ai/contrastors?tab=readme-ov-file#data-access