RAG 模型的“靈魂伴侶”:如何挑選最適合的嵌入方法? 原創(chuàng)
在當(dāng)今信息爆炸的時(shí)代,如何從海量數(shù)據(jù)中快速、準(zhǔn)確地獲取所需信息,成為了一個(gè)亟待解決的問題。而 Retrieval-Augmented Generation(RAG)模型的出現(xiàn),就像為信息檢索和生成插上了翅膀。它就像一位記者,在撰寫報(bào)道時(shí)不僅依賴記憶,還會(huì)深入檔案庫(kù)查找資料、核實(shí)事實(shí),從而讓內(nèi)容更加準(zhǔn)確、有說服力。而在這個(gè)過程中,選擇合適的嵌入方法(embedding)就如同為記者配備了強(qiáng)大的“搜索引擎”,能夠幫助模型更高效地檢索和排序相關(guān)信息。今天,就讓我們一起深入探討如何為 RAG 模型挑選出最合適的嵌入方法,讓模型的輸出更加精準(zhǔn)、高效!
一、選擇合適文本嵌入模型的關(guān)鍵參數(shù)
RAG 模型對(duì)文本嵌入的質(zhì)量有著極高的要求。文本嵌入的作用是將文本轉(zhuǎn)換為數(shù)值向量,讓模型能夠?qū)ξ谋緮?shù)據(jù)進(jìn)行處理和比較。一個(gè)優(yōu)質(zhì)的嵌入模型可以顯著提升檢索的準(zhǔn)確性、響應(yīng)的相關(guān)性以及系統(tǒng)的整體性能。那么,在眾多的嵌入模型中,我們?cè)撊绾巫龀鲞x擇呢?以下這些關(guān)鍵參數(shù)將幫助我們做出明智的決策。
(一)上下文窗口(Context Window)
上下文窗口是指模型在一次輸入中能夠處理的最大標(biāo)記(單詞或子詞)數(shù)量。例如,如果一個(gè)模型的上下文窗口為 512 個(gè)標(biāo)記,那么它一次只能處理 512 個(gè)標(biāo)記的內(nèi)容。如果文本更長(zhǎng),就需要將其截?cái)嗷蚍指畛筛〉钠?。有些嵌入模型,比?OpenAI 的 text-embedding-ada-002(支持 8192 個(gè)標(biāo)記)和 Cohere 的嵌入模型(支持 4096 個(gè)標(biāo)記),擁有更長(zhǎng)的上下文窗口,這使得它們?cè)谔幚?RAG 應(yīng)用中的長(zhǎng)篇文檔時(shí)表現(xiàn)出色。
為什么它很重要?
- 更寬的上下文窗口可以讓模型處理更長(zhǎng)的文檔或文本字符串,而不會(huì)被截?cái)唷?/li>
- 對(duì)于像語(yǔ)義搜索長(zhǎng)文本(例如科學(xué)論文)這樣的操作,需要較大的上下文窗口(例如 8192 個(gè)標(biāo)記)。
(二)標(biāo)記化單元(Tokenization Unit)
標(biāo)記化是將文本分解成模型可以處理的更小單元(標(biāo)記)的過程。標(biāo)記化單元指的是用于將文本分割成標(biāo)記的方法。
常見的標(biāo)記化方法如下:
- 子詞標(biāo)記化(Subword Tokenization,例如字節(jié)對(duì)編碼 BPE):它將單詞分割成更小的子詞單元,例如將“unhappiness”分割成“un”和“happiness”。這種方法可以有效處理罕見或詞匯表外的單詞,提高文本表示的魯棒性。
- WordPiece:這種方法與字節(jié)對(duì)編碼類似,但針對(duì)像 BERT 這樣的模型進(jìn)行了優(yōu)化。它根據(jù)頻率將單詞分割成更小的單元,確保高效的標(biāo)記化和更好的罕見詞處理能力。
- 單詞級(jí)標(biāo)記化(Word-Level Tokenization):它將文本分割成單獨(dú)的單詞,對(duì)于處理罕見詞或大詞匯表的效率較低,因?yàn)樗狈ψ釉~分割。
為什么它很重要?
- 標(biāo)記化技術(shù)會(huì)影響模型處理文本的質(zhì)量,尤其是對(duì)于不常見的或特定領(lǐng)域的單詞。
- 當(dāng)代大多數(shù)模型傾向于使用子詞標(biāo)記化,因?yàn)樗饶軡M足詞匯表大小的需求,又能保持靈活性。
(三)維度(Dimensionality)
維度指的是模型生成的嵌入向量的大小。例如,一個(gè)具有 768 維嵌入的模型會(huì)為每個(gè)輸入文本輸出一個(gè)包含 768 個(gè)數(shù)字的向量。
為什么它很重要?
- 更高維度的嵌入可以捕捉更細(xì)微的語(yǔ)義信息,但需要更多的計(jì)算資源。
- 更低維度的嵌入速度更快、效率更高,但可能會(huì)丟失一些語(yǔ)義豐富性。
- 例如,OpenAI 的 text-embedding-3-large 生成 3072 維的嵌入,而 Jina Embeddings v3 生成 1024 維的嵌入。
(四)詞匯表大小(Vocabulary Size)
詞匯表大小是指分詞器能夠識(shí)別的獨(dú)特標(biāo)記(單詞或子詞)的數(shù)量。
為什么它很重要?
- 更大的詞匯表大小可以讓模型處理更廣泛的單詞和語(yǔ)言,但會(huì)增加內(nèi)存使用量。
- 更小的詞匯表大小更高效,但可能難以處理罕見的或特定領(lǐng)域的術(shù)語(yǔ)。
- 例如,大多數(shù)現(xiàn)代模型(如 BERT、OpenAI)的詞匯表大小為 30000-50000 個(gè)標(biāo)記。
(五)訓(xùn)練數(shù)據(jù)(Training Data)
訓(xùn)練數(shù)據(jù)是指用于訓(xùn)練模型的數(shù)據(jù)集。它決定了模型的知識(shí)和能力。
不同類型的訓(xùn)練數(shù)據(jù)如下:
- 通用數(shù)據(jù)(General-Purpose Data):這些模型在多種數(shù)據(jù)源上進(jìn)行訓(xùn)練,例如網(wǎng)頁(yè)、書籍和維基百科。它們?cè)趶V泛的任務(wù)中表現(xiàn)出色,如語(yǔ)義搜索和文本分類。
- 特定領(lǐng)域數(shù)據(jù)(Domain-Specific Data):這些模型基于特定領(lǐng)域的數(shù)據(jù)集構(gòu)建,例如法律文件、生物醫(yī)學(xué)文本或科學(xué)論文。它們?cè)谔囟☉?yīng)用中表現(xiàn)更好。
為什么它很重要?
- 訓(xùn)練數(shù)據(jù)的質(zhì)量和多樣性會(huì)影響模型的性能。
- 特定領(lǐng)域的模型(例如 LegalBERT、BioBERT)在特定任務(wù)中表現(xiàn)更好,但在通用任務(wù)中可能會(huì)遇到困難。
(六)成本(Cost)
成本指的是使用嵌入模型所需的財(cái)務(wù)和計(jì)算資源,包括與基礎(chǔ)設(shè)施、API 使用和硬件加速相關(guān)的費(fèi)用。
模型分為以下兩種類型:
- 基于 API 的模型(API-Based Models):像 OpenAI、Cohere 和 Gemini 這樣的按使用付費(fèi)服務(wù),根據(jù) API 調(diào)用和輸入/輸出大小收費(fèi)。
- 開源模型(Open-Source Models):免費(fèi)使用,但需要計(jì)算資源(如 GPU 或 TPU)進(jìn)行訓(xùn)練或推理,并且如果自行托管,可能會(huì)產(chǎn)生基礎(chǔ)設(shè)施成本。
為什么它很重要?
- 基于 API 的模型使用方便,但對(duì)于大規(guī)模應(yīng)用可能會(huì)變得昂貴。
- 開源模型具有成本效益,但需要技術(shù)專長(zhǎng)和基礎(chǔ)設(shè)施。
(七)質(zhì)量(MTEB 分?jǐn)?shù))
MTEB(大規(guī)模文本嵌入基準(zhǔn))分?jǐn)?shù)衡量嵌入模型在廣泛任務(wù)中的性能,包括語(yǔ)義搜索、分類和聚類。
為什么它很重要?
- 更高的 MTEB 分?jǐn)?shù)表示更好的整體性能。
- MTEB 分?jǐn)?shù)較高的模型更有可能在你的特定任務(wù)中表現(xiàn)良好。
- 例如,OpenAI 的 text-embedding-3-large 的 MTEB 分?jǐn)?shù)約為 64.6,而 Jina Embeddings v3 的分?jǐn)?shù)約為 59.5。
二、構(gòu)建 RAG 模型的熱門文本嵌入
現(xiàn)在,讓我們來了解一下構(gòu)建 RAG 系統(tǒng)的熱門文本嵌入模型。以下是一些常見的模型及其關(guān)鍵參數(shù)對(duì)比:
模型名稱 | 上下文窗口 | 每百萬(wàn)標(biāo)記成本 | MTEB 分?jǐn)?shù) | 詞匯表大小 | 標(biāo)記化單元 | 維度 | 訓(xùn)練數(shù)據(jù) |
OpenAI text-embedding-ada-002 | 8192 個(gè)標(biāo)記 | 0.10 美元 | 約 61.0 | 未公開 | 子詞(BPE) | 1536 | 未公開 |
NVIDIA NV-Embed-v2 | 32768 個(gè)標(biāo)記 | 開源 | 72.31 | 50000+ | 子詞(BPE) | 4096 | 硬負(fù)樣本挖掘、合成數(shù)據(jù)生成、公開數(shù)據(jù)集 |
OpenAI text-embedding-3-large | 8192 個(gè)標(biāo)記 | 0.13 美元 | 約 64.6 | 未公開 | 子詞(BPE) | 3072 | 未公開 |
OpenAI text-embedding-3-small | 8192 個(gè)標(biāo)記 | 0.02 美元 | 約 62.3 | 50257 | 子詞(BPE) | 1536 | 未公開 |
Gemini text-embedding-004 | 2048 個(gè)標(biāo)記 | 不適用 | 約 60.8 | 50000+ | 子詞(BPE) | 768 | 未公開 |
Jina Embeddings v3 | 8192 個(gè)標(biāo)記 | 開源 | 約 59.5 | 50000+ | 子詞(BPE) | 1024 | 大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
Cohere embed-english-v3.0 | 512 個(gè)標(biāo)記 | 0.10 美元 | 約 64.5 | 50000+ | 子詞(BPE) | 1024 | 大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
voyage-3-large | 32000 個(gè)標(biāo)記 | 0.06 美元 | 約 60.5 | 50000+ | 子詞(BPE) | 2048 | 多領(lǐng)域數(shù)據(jù)集,包括大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
voyage-3-lite | 32000 個(gè)標(biāo)記 | 0.02 美元 | 約 59.0 | 50000+ | 子詞(BPE) | 512 | 多領(lǐng)域數(shù)據(jù)集,包括大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
Stella 400M v5 | 512 個(gè)標(biāo)記 | 開源 | 約 58.5 | 50000+ | 子詞(BPE) | 1024 | 大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
Stella 1.5B v5 | 512 個(gè)標(biāo)記 | 開源 | 約 59.8 | 50000+ | 子詞(BPE) | 1024 | 大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
ModernBERT Embed Base | 512 個(gè)標(biāo)記 | 開源 | 約 57.5 | 30000 | WordPiece | 768 | 大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
ModernBERT Embed Large | 512 個(gè)標(biāo)記 | 開源 | 約 58.2 | 30000 | WordPiece | 1024 | 大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
BAAI/bge-base-en-v1.5 | 512 個(gè)標(biāo)記 | 開源 | 約 60.0 | 30000 | WordPiece | 768 | 大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)、書籍等 |
law-ai/LegalBERT | 512 個(gè)標(biāo)記 | 開源 | 約 55.0 | 30000 | WordPiece | 768 | 法律文件、案例法等 |
GanjinZero/biobert-base | 512 個(gè)標(biāo)記 | 開源 | 約 54.5 | 30000 | WordPiece | 768 | 生物醫(yī)學(xué)和臨床文本 |
allenai/specter | 512 個(gè)標(biāo)記 | 開源 | 約 56.0 | 30000 | WordPiece | 768 | 科學(xué)論文和引文圖 |
m3e-base | 512 個(gè)標(biāo)記 | 開源 | 約 57.0 | 30000 | WordPiece | 768 | 中英文文本 |
三、如何選擇嵌入方法:案例研究
接下來,我們將通過一個(gè)具體的案例來展示如何根據(jù)需求選擇合適的嵌入模型。假設(shè)我們需要為一個(gè)基于文本的檢索系統(tǒng)選擇最佳的嵌入模型,該系統(tǒng)將在一個(gè)包含大量科學(xué)論文的大型數(shù)據(jù)集上執(zhí)行語(yǔ)義搜索。這個(gè)系統(tǒng)必須能夠處理長(zhǎng)篇文檔(2000 到 8000 個(gè)單詞),并且要實(shí)現(xiàn)高準(zhǔn)確率的檢索,通過強(qiáng)大的大規(guī)模文本嵌入基準(zhǔn)(MTEB)分?jǐn)?shù)來衡量,以確保搜索結(jié)果具有意義和相關(guān)性。同時(shí),它還需要在成本效益和可擴(kuò)展性方面表現(xiàn)出色,每月預(yù)算在 300 到 500 美元之間。
(一)特定領(lǐng)域需求
科學(xué)論文中充滿了技術(shù)術(shù)語(yǔ)和復(fù)雜的語(yǔ)言,因此需要一個(gè)在學(xué)術(shù)、科學(xué)或技術(shù)文本上訓(xùn)練過的模型。因此,我們需要排除那些主要針對(duì)法律或生物醫(yī)學(xué)領(lǐng)域定制的模型,因?yàn)樗鼈兛赡軣o法有效地推廣到更廣泛的科學(xué)文獻(xiàn)中。
被排除的模型:
- law-ai/LegalBERT(專門處理法律文本)
- GanjinZero/biobert-base(專注于生物醫(yī)學(xué)文本)
(二)上下文窗口大小
一篇典型的科研論文包含 2000 到 8000 個(gè)單詞,這相當(dāng)于 2660 到 10640 個(gè)標(biāo)記(假設(shè)每 1.33 個(gè)標(biāo)記對(duì)應(yīng)一個(gè)單詞)。將系統(tǒng)的容量設(shè)置為 8192 個(gè)標(biāo)記,可以處理長(zhǎng)達(dá)約 6156 個(gè)單詞的論文(8192 ÷ 1.33)。這將涵蓋大多數(shù)研究論文,無需截?cái)啵軌虿蹲窖芯空撐牡耐暾舷挛?,包括摘要、引言、方法、結(jié)果和結(jié)論。
對(duì)于我們的用例來說,上下文窗口小于或等于 512 個(gè)標(biāo)記的模型是不足夠的。因此,我們需要排除上下文窗口為 512 個(gè)標(biāo)記或更小的模型。
被排除的模型:
- Stella 400M v5(512 個(gè)標(biāo)記)
- Stella 1.5B v5(512 個(gè)標(biāo)記)
- ModernBERT Embed Base(512 個(gè)標(biāo)記)
- ModernBERT Embed Large(512 個(gè)標(biāo)記)
- BAAI/bge-base-en-v1.5(512 個(gè)標(biāo)記)
- allenai/specter(512 個(gè)標(biāo)記)
- m3e-base(512 個(gè)標(biāo)記)
(三)成本與托管偏好
考慮到每月 300 到 500 美元的預(yù)算,并且更傾向于自行托管以避免重復(fù)的 API 費(fèi)用,我們需要評(píng)估每個(gè)模型的成本效益。讓我們來看看剩下列表中的模型。
OpenAI 模型:
- text-embedding-3-large:每 1000 個(gè)標(biāo)記收費(fèi) 0.13 美元
- text-embedding-3-small:每 1000 個(gè)標(biāo)記收費(fèi) 0.02 美元
Jina Embeddings v3:
開源且可以自行托管,消除了按標(biāo)記收費(fèi)的成本。
成本分析:假設(shè)平均每篇文檔有 8000 個(gè)標(biāo)記,每月處理 10000 篇文檔,那么上述嵌入的成本如下:
- OpenAI text-embedding-3-large:
- 8000 個(gè)標(biāo)記/文檔 × 10000 篇文檔 = 80000000 個(gè)標(biāo)記
- 80000 × 0.13 = 10400 美元(超出預(yù)算)
- OpenAI text-embedding-3-small:
- 80000 × 0.02 = 1600 美元(超出預(yù)算)
- Jina Embeddings v3:
- 沒有按標(biāo)記收費(fèi),只有基礎(chǔ)設(shè)施費(fèi)用。
被排除的模型(超出預(yù)算):
- OpenAI text-embedding-3-large
- OpenAI text-embedding-3-small
(四)基于 MTEB 分?jǐn)?shù)的最終評(píng)估
大規(guī)模文本嵌入基準(zhǔn)(MTEB)會(huì)在各種任務(wù)中評(píng)估嵌入模型,提供一個(gè)全面的性能指標(biāo)。
性能洞察:
讓我們比較一下剩下幾個(gè)模型的性能。
- Jina Embeddings v3:
- 在 MTEB 框架內(nèi)的英語(yǔ)任務(wù)中,其表現(xiàn)優(yōu)于 OpenAI 的專有嵌入。
- Voyage-3-large:
- MTEB 分?jǐn)?shù)約為 60.5,具有 32000 個(gè)標(biāo)記的上下文窗口,使其適合長(zhǎng)文檔檢索,并且成本效益高。
- NVIDIA NV-Embed-v2:
- MTEB 分?jǐn)?shù)達(dá)到 72.31,顯著優(yōu)于許多其他選擇。
- 32768 個(gè)標(biāo)記的上下文窗口使其非常適合長(zhǎng)文檔。
- 自行托管且開源,消除了按標(biāo)記 API 成本。
(五)做出最終決定
現(xiàn)在,讓我們綜合評(píng)估這些模型的各個(gè)方面,做出最終選擇。
- NVIDIA NV-Embed-v2:推薦選擇,因?yàn)樗哂休^高的 MTEB 分?jǐn)?shù)(72.31)、長(zhǎng)上下文窗口(32768 個(gè)標(biāo)記)以及自行托管的能力。
- Jina Embeddings v3:一個(gè)具有成本效益的替代方案,沒有 API 成本,并且性能具有競(jìng)爭(zhēng)力。
- Voyage-3-large:一個(gè)預(yù)算友好的選擇,具有較大的上下文窗口(32000 個(gè)標(biāo)記),但 MTEB 分?jǐn)?shù)略低。
如果對(duì)基礎(chǔ)設(shè)施成本有顧慮,Jina Embeddings v3 和 Voyage-3-large 是不錯(cuò)的選擇。但如果追求高性能、成本效益和長(zhǎng)上下文的語(yǔ)義搜索,NVIDIA NV-Embed-v2 是科學(xué)論文檢索系統(tǒng)中的最佳選擇。
四、進(jìn)階技巧:微調(diào)嵌入模型
微調(diào)嵌入模型并不總是必要的。在許多情況下,現(xiàn)成的模型已經(jīng)足夠好。然而,如果你需要為特定數(shù)據(jù)集優(yōu)化結(jié)果,微調(diào)可能會(huì)幫助你榨取出最后一點(diǎn)性能提升。當(dāng)然,微調(diào)會(huì)帶來大量的計(jì)算成本和費(fèi)用,這需要謹(jǐn)慎考慮。
如何微調(diào)嵌入模型
- 收集特定領(lǐng)域的數(shù)據(jù):整理與你的應(yīng)用相關(guān)的數(shù)據(jù)集。例如,如果你的任務(wù)涉及法律文件,就收集案例法和法律文本。
- 預(yù)處理數(shù)據(jù):清理、分詞并格式化文本,確保在訓(xùn)練前保持一致性。
- 選擇基礎(chǔ)模型:選擇一個(gè)與你的領(lǐng)域最接近的預(yù)訓(xùn)練嵌入模型(例如,SBERT 適用于基于文本的應(yīng)用)。
- 使用對(duì)比學(xué)習(xí)進(jìn)行訓(xùn)練:使用監(jiān)督對(duì)比學(xué)習(xí)或三元組損失技術(shù),根據(jù)語(yǔ)義相似性細(xì)化嵌入。
- 評(píng)估性能:將微調(diào)后的嵌入與原始模型進(jìn)行比較,確保檢索準(zhǔn)確性有所提高。
五、總結(jié)
為你的檢索增強(qiáng)生成(RAG)模型選擇合適的嵌入方法,是實(shí)現(xiàn)有效、準(zhǔn)確檢索相關(guān)文檔的重要過程。這個(gè)決策基于多種因素,如數(shù)據(jù)模態(tài)、檢索復(fù)雜性、計(jì)算能力和可用預(yù)算。雖然基于 API 的模型通常提供高質(zhì)量的嵌入,但開源替代方案為自行托管的解決方案提供了更大的靈活性和成本效益。
通過仔細(xì)評(píng)估嵌入模型的上下文窗口大小、語(yǔ)義搜索能力和基準(zhǔn)性能,你可以為你的特定用例優(yōu)化 RAG 系統(tǒng)。此外,微調(diào)嵌入可以在特定領(lǐng)域應(yīng)用中進(jìn)一步提升性能,但這需要仔細(xì)考慮計(jì)算成本。最終,一個(gè)精心選擇的嵌入模型為有效的 RAG 流程奠定了基礎(chǔ),提高了響應(yīng)準(zhǔn)確性和系統(tǒng)的整體效率。
希望這篇文章能幫助你在選擇嵌入模型時(shí)更加得心應(yīng)手,讓你的 RAG 模型在信息檢索的戰(zhàn)場(chǎng)上所向披靡!
本文轉(zhuǎn)載自公眾號(hào)Halo咯咯 作者:基咯咯
原文鏈接:??https://mp.weixin.qq.com/s/JqQKIn9kd0Ys5DsnuZGtsg??
