wordpress加一個字段seo外鏈推廣
文章目錄
- Jina Embedding: 從v1到v3
- Jina Embedding v1
- 數(shù)據(jù)集準(zhǔn)備
- 訓(xùn)練過程
- Jina Embedding v2
- 預(yù)訓(xùn)練修改版BERT
- 在文本對上微調(diào)
- 在Hard Negatives上微調(diào)
- Jina Embedding v2 雙語言
- 預(yù)訓(xùn)練修改版BERT
- 在文本對上微調(diào)
- 用多任務(wù)目標(biāo)微調(diào)
- Jina Embedding v3
- 預(yù)訓(xùn)練
- 在文本對上微調(diào)
- 訓(xùn)練任務(wù)相關(guān)的適配器
- 分類適配器
- 文本匹配適配器
- Separation適配器
- 非對稱檢索適配器
- 參考資料
Jina Embedding: 從v1到v3
基座模型 | 支持語言 | 模型大小 | 編碼長度 | 向量維度 | 下載鏈接 | |
---|---|---|---|---|---|---|
Jina Embedding v1 | T5 | 英語 | 14M/35M/110M/330M | 512 | 512/512/768/1024 | huggingface |
Jina Embedding v2 | BERT | 英語 | 33M/137M/435M | 8192 | 512/768/1024 | huggingface |
Jina Embedding v3 | XLM-RoBERTa | 多語言 | 572M | 8192 | 1024(可變大小) | huggingface |
Jina Embedding v1
jina embedding v1 對應(yīng)的論文為2023年7月的《Jina Embeddings: A Novel Set of High-Performance Sentence Embedding Models》,在這篇論文里強(qiáng)調(diào)了數(shù)據(jù)清洗在數(shù)據(jù)集準(zhǔn)備過程中很重要,一個更小但質(zhì)量高的數(shù)據(jù)集比一個很大但是質(zhì)量差的數(shù)據(jù)集訓(xùn)練的模型效果更好。
數(shù)據(jù)集準(zhǔn)備
數(shù)據(jù)集來源包括公共數(shù)據(jù)集和自有數(shù)據(jù)集。
在數(shù)組的組織方式上,分為數(shù)據(jù)對和三元組,根據(jù)源數(shù)據(jù)集的類型分別采用不同的數(shù)據(jù)提取方法,比如QA數(shù)據(jù)集用問題作為query字符串,用答案作為目標(biāo)字符串。
- 數(shù)據(jù)對,記為 ( q , p ) ∈ D pairs (q, p) \in D_{\text{pairs}} (q,p)∈Dpairs?,每一個數(shù)據(jù)對包括query字符串q和相關(guān)的目標(biāo)字符串p。
- 三元組,記為 ( q , p , n ) ∈ D triplets (q,p,n) \in D_{\text{triplets}} (q,p,n)∈Dtriplets?,每一個三元組包括了query字符串q和一個匹配字符串p (positive) 和 不匹配字符串n (negative)
在準(zhǔn)備數(shù)據(jù)對時,進(jìn)行如下的清洗步驟:
- 去重(De-Duplication):用hash函數(shù)來識別去掉重復(fù)的數(shù)據(jù)對。在檢查重復(fù)數(shù)據(jù)之前將空格字符串歸一化,并進(jìn)行大小寫轉(zhuǎn)換。
- 語言過濾(Language Filterring):用fasttext-language-identification模型只保留英文數(shù)據(jù)。
- 一致性過濾(Consistency Filtering):去掉相似性比較低數(shù)據(jù)對。用all-MiniLM-L6-v2 model模型來進(jìn)行一致性過濾:從 D pairs D_{\text{pairs}} Dpairs?數(shù)據(jù)集中隨機(jī)采樣1M個數(shù)據(jù)對 ( q i , p i ) i (q_i, p_i)_i (qi?,pi?)i?,并為它們生成embedding。對于數(shù)據(jù)集中的每一個數(shù)據(jù)對 ( q , p ) ∈ D pairs (q, p) \in D_{\text{pairs}} (q,p)∈Dpairs?,檢查 p p p與所有passages p i , i = 1 , … , 1 M p_i, i=1,\ldots,1M pi?,i=1,…,1M相比是不是與 q q q最相似的top 2(基于向量余弦相似度)。經(jīng)過這一步驟后,數(shù)據(jù)集大小從1.5B減少到了385M。
數(shù)據(jù)對來源于32個數(shù)據(jù)集,過濾前的數(shù)據(jù)量為1.6 billion,過濾完之后為385 million。
在準(zhǔn)備三元組數(shù)據(jù)時,沒有進(jìn)行去重和語言過濾步驟,但采用了與一致性過濾類似的步驟來校驗“positive”元素與"query"元素的相關(guān)性:用cross-encoder模型ms-marco-MiniLM-L-6-v2來比較每一個三元組 ( q , p , n ) ∈ D triplets (q,p,n) \in D_{\text{triplets}} (q,p,n)∈Dtriplets?的相似度 r ( q , p ) r(q,p) r(q,p)和 r ( q , n ) r(q,n) r(q,n),判斷是否滿足 r ( q , p ) ? r ( q , n ) > κ r(q,p) - r(q,n) > \kappa r(q,p)?r(q,n)>κ,閾值為 κ = 0.2 \kappa=0.2 κ=0.2,只保留滿足閾值條件的三元組。
否定數(shù)據(jù)(Negation Data)的準(zhǔn)備:許多向量模型對于否定含義的句子難以區(qū)分,比如對于三個句子:1. “A couple walks hand in hand down a street.”,2. “A couple is walking together.”, 3. “A couple is not walking together.” ,直覺上前面兩個的向量距離應(yīng)該更接近,第二個和第三個應(yīng)該距離更遠(yuǎn),但是很多模型無法區(qū)別其差異。于是Jina Embedding團(tuán)隊創(chuàng)建了一個negation數(shù)據(jù)集( [已開源](https:// huggingface.co/datasets/jinaai/negation-dataset) ),這個數(shù)據(jù)集的正樣本對來自SNLI數(shù)據(jù)集,否定句由GPT-3.5生成,組成(anchor, entailment, negative)的三元組形式,與前述例子類似。(anchor, entailment)組成正樣本對,“negetive"與”anchor"和“entailment”的含義都互相矛盾,但是與“entailment”的句法非常相似。這個否定數(shù)據(jù)集是前面的三元組數(shù)據(jù)集的一部分。
三元組數(shù)據(jù)在過濾前是1.13 million,過濾完之后927,000個,其分布如論文圖2。
訓(xùn)練過程
訓(xùn)練分為兩階段:第一階段在數(shù)據(jù)對上進(jìn)行訓(xùn)練,使得它們的語義整合到一個語義向量上;第二階段在相對較小的三元組數(shù)據(jù)上訓(xùn)練,讓模型區(qū)分相似和不相似文本的區(qū)別。
Jina Embedding模型基于zero-shot T5模型的encoder訓(xùn)練,作者說因為它在一系列下游任務(wù)上進(jìn)行了預(yù)訓(xùn)練所以選擇它。在T5 encoder之上使用mean pooling layer由token embeddings得到固定長度的向量。
第一階段的訓(xùn)練損失函數(shù)采用InfoNCE,即對一個大小為k的batch B ∈ D k B \in D^k B∈Dk的數(shù)據(jù)對 ( q , p ) ~ B (q, p) \sim B (q,p)~B,損失函數(shù)通過比較給定問題q和目標(biāo)p的余弦相似度與batch中其他目標(biāo)的的相似度來計算得到:
L N C E pairs? ( B ) : = E ( q , p ) ~ B [ ? ln ? e s ( q , p ) / τ ∑ i = 1 k e s ( q , p i ) / τ ] \mathcal{L}_{\mathrm{NCE}}^{\text {pairs }}(B):=\mathbb{E}_{(q, p) \sim B}\left[-\ln \frac{e^{s(q, p) / \tau}}{\sum_{i=1}^k e^{s\left(q, p_i\right) / \tau}}\right] LNCEpairs??(B):=E(q,p)~B?[?ln∑i=1k?es(q,pi?)/τes(q,p)/τ?]
此外作者發(fā)現(xiàn)在訓(xùn)練時計算兩個方向的損失可以提高性能,即也考慮 L N C E  ̄ pairs? \mathcal{L}_{\mathrm{\overline{NCE}}}^{\text {pairs }} LNCEpairs?? 從目標(biāo)字符串去匹配所有query字符串。所以其最終損失函數(shù)如下式(溫度參數(shù)取 τ = 0.05 \tau=0.05 τ=0.05):
L pairs? ( B ) : = L N C E pairs? ( B ) + L N C E  ̄ pairs? ( B ) , where L N C E  ̄ pairs? ( B ) : = E ( q , p ) ~ B [ ? ln ? e s ( p , q ) / τ ∑ i = 1 k e s ( p , q i ) / τ ] \mathcal{L}^{\text {pairs }}(B) := \mathcal{L}_{\mathrm{NCE}}^{\text {pairs }}(B)+\mathcal{L}_{\mathrm{\overline{NCE}}}^{\text {pairs }}(B), \text{where} \\ \mathcal{L}_{\mathrm{\overline{NCE}}}^{\text {pairs }}(B):=\mathbb{E}_{(q, p) \sim B}\left[-\ln \frac{e^{s(p, q) / \tau}}{\sum_{i=1}^k e^{s\left(p, q_i\right) / \tau}}\right] Lpairs?(B):=LNCEpairs??(B)+LNCEpairs??(B),whereLNCEpairs??(B):=E(q,p)~B?[?ln∑i=1k?es(p,qi?)/τes(p,q)/τ?]
在訓(xùn)練時,不是按順序地在每個訓(xùn)練集上訓(xùn)練,而是同時在所有數(shù)據(jù)集上訓(xùn)練,但是在每一個訓(xùn)練batch里數(shù)據(jù)只來自單個數(shù)據(jù)集以確保損失計算時不會合并其他任務(wù)的數(shù)據(jù)。訓(xùn)練前每個數(shù)據(jù)集中的數(shù)據(jù)被shuffle,訓(xùn)練時根據(jù)采樣概率 ρ ( D i ) = ∣ D i ∣ s i ∑ j = 1 n ∣ D j ∣ s j \rho (D_i)= \frac{|D_i|s_i}{\sum^n_{j=1} |D_j|s_j} ρ(Di?)=∑j=1n?∣Dj?∣sj?∣Di?∣si??來采樣 D i D_i Di?,采樣概率與數(shù)據(jù)集大小 ∣ D i ∣ |D_i| ∣Di?∣和縮放因子 s i s_i si?決定,因為數(shù)據(jù)集大小的不一樣,更頻繁地從更大的數(shù)據(jù)集采樣可以防止過擬合,用縮放因子來優(yōu)先在高質(zhì)量數(shù)據(jù)集上訓(xùn)練并且可以平衡文本領(lǐng)域。訓(xùn)練時如果一個數(shù)據(jù)集的樣本消耗完了,數(shù)據(jù)集會被重置,模型可以重新從這個數(shù)據(jù)集獲取數(shù)據(jù)來訓(xùn)練,確保了高采樣率數(shù)據(jù)集在單個訓(xùn)練epoch中可以貢獻(xiàn)多次。論文圖1b是基于采樣率的每個數(shù)據(jù)集的比例。
作者經(jīng)過試驗發(fā)現(xiàn)在訓(xùn)練第二階段最好的結(jié)果是通過組合多個常用tuiplet loss 函數(shù)得到的(溫度參數(shù)取 τ = 0.05 \tau=0.05 τ=0.05):InfoNCE損失函數(shù)的使用了額外負(fù)例的擴(kuò)展版本 L N C E + triplets? \mathcal{L}_{\mathrm{NCE+}}^{\text {triplets }} LNCE+triplets?? (式2),與第一階段一樣的反向InfoNCE損失函數(shù) L N C E  ̄ triplets? \mathcal{L}_{\mathrm{\overline{NCE}}}^{\text {triplets }} LNCEtriplets?? (式3),triplet margin損失函數(shù) L 3 triplets? \mathcal{L}_{3}^{\text {triplets }} L3triplets??(式4), ? = 0.05 \epsilon=0.05 ?=0.05 。
L triplets? ( B ) : = L N C E + triplets? ( B ) + L N C E triplets? ( B ) + L 3 triplets? ( B ) , where? ( 1 ) L N C E + triplets? ( B ) : = E ( q , p , n ) ~ B [ ? ln ? exp ? ( s ( q , p ) / τ ) ∑ i = 1 k exp ? ( s ( q , p i ) / τ ) + exp ? ( s ( q , n i ) / τ ) ] ( 2 ) L N C E  ̄ triplets? ( B ) : = E ( q , p , n ) ~ B [ ? ln ? exp ? ( s ( p , q ) / τ ) ∑ i = 1 k exp ? ( s ( p , q i ) / τ ) ] ( 3 ) L 3 triplets? ( B ) : = E ( q , p , n ) ~ B [ ReLU ? ( s ( q , n ) ? s ( q , p ) + ε ) ] . ( 4 ) \begin{aligned} & \mathcal{L}^{\text {triplets }}(B):=\mathcal{L}_{N C E+}^{\text {triplets }}(B)+\mathcal{L}_{\mathrm{NCE}}^{\text {triplets }}(B)+\mathcal{L}_3^{\text {triplets }}(B), \quad \text { where } \qquad (1) \\ & \mathcal{L}_{N C E+}^{\text {triplets }}(B):=\mathbb{E}_{(q, p, n) \sim B}\left[-\ln \frac{\exp (s(q, p) / \tau)}{\sum_{i=1}^k \exp \left(s\left(q, p_i\right) / \tau\right)+\exp \left(s\left(q, n_i\right) / \tau\right)}\right] \qquad (2) \\ & \mathcal{L}_{\mathrm{\overline{NCE}}}^{\text {triplets }}(B):=\mathbb{E}_{(q, p, n) \sim B}\left[-\ln \frac{\exp (s(p, q) / \tau)}{\sum_{i=1}^k \exp \left(s\left(p, q_i\right) / \tau\right)}\right] \qquad (3)\\ & \mathcal{L}_3^{\text {triplets }}(B):=\mathbb{E}_{(q, p, n) \sim B}[\operatorname{ReLU}(s(q, n)-s(q, p)+\varepsilon)] . \qquad (4) \end{aligned} ?Ltriplets?(B):=LNCE+triplets??(B)+LNCEtriplets??(B)+L3triplets??(B),?where?(1)LNCE+triplets??(B):=E(q,p,n)~B?[?ln∑i=1k?exp(s(q,pi?)/τ)+exp(s(q,ni?)/τ)exp(s(q,p)/τ)?](2)LNCEtriplets??(B):=E(q,p,n)~B?[?ln∑i=1k?exp(s(p,qi?)/τ)exp(s(p,q)/τ)?](3)L3triplets??(B):=E(q,p,n)~B?[ReLU(s(q,n)?s(q,p)+ε)].(4)?
訓(xùn)練的超參數(shù)如論文表5.
Jina Embedding v2
Jina Embedding v2 對應(yīng)的論文是2023年10月的《Jina Embeddings 2: 8192-Token General-Purpose Text Embeddings for Long Documents》,Jina Embedding v2的主要特點(diǎn)是可以對長達(dá)8192 token的文本進(jìn)行向量編碼,長文本上下文窗口是通過AliBi來實(shí)現(xiàn)的。
Jina Embedding v2 的訓(xùn)練過程分為3個階段:1. 預(yù)訓(xùn)練一個修改的BERT,2. 在文本對數(shù)據(jù)上微調(diào),3. 在Hard Negatives上微調(diào)。第2和第3階段是針對embedding任務(wù)來進(jìn)行微調(diào)的,與其他論文的結(jié)論有一樣,第三階段對于提升模型在檢索和分類任務(wù)上的性能很關(guān)鍵。
預(yù)訓(xùn)練修改版BERT
對BERT模型做一些修改,而訓(xùn)練過程主要采用RoBERTa所描述的方法。
模型架構(gòu):
- 對自注意力機(jī)制使用ALiBi方法,因為原始的ALiBi是為因果語言建模設(shè)計的,所以其特征bias只在一個方向,所以在encoder模型里應(yīng)用了ALiBi的修改版,如論文圖1所示意。
- 對注意力模塊的前向傳播子層使用GLU(Gated Linear Units): 對于small和base模型,使用GEGLU,對于large模型使用ReGLU(這個選擇也與其他論文一致說對于large模型使用GEGLU不穩(wěn)定)。
- 對于Layer Normalixation,使用與transformer的原論文《attention is all you need》一樣的post-layer normalization。
訓(xùn)練數(shù)據(jù):使用C4(Colossal, Cleaned, Common Crawl)數(shù)據(jù)集來進(jìn)行預(yù)訓(xùn)練,只保留了英文語料。
訓(xùn)練算法:
- 去掉BERT里的下句預(yù)測任務(wù)(next sentence predictin, NSP)
- 使用whole word masking, 隨機(jī)mask掉30%的輸入詞元(token)。在這些被mask掉的token中,80%用[MASK] token替換,10%用隨機(jī)token替換,10%保持不變。
- 損失函數(shù)使用Masked Language Model 損失函數(shù)
- 訓(xùn)練時文本最大長度為512。樣本處理上不會將多個文檔的數(shù)據(jù)堆疊到一起組成長文本,也會避免從一個文檔中采樣多個文本序列,對每一個文檔,只考慮前512個token而裁剪掉剩下的文本。
- 使用AdamW優(yōu)化器, β 1 = 0.9 , β 2 = 0.98 , ? = 1 e ? 6 \beta_1=0.9, \beta_2=0.98, \epsilon=1e-6 β1?=0.9,β2?=0.98,?=1e?6, weight decay為0.01,dropout rate為0.1, attention的dropout也為0.1。learning rate schedule為線性的,從0開始,在10000步時達(dá)到 η \eta η(對small、base、large模型的 η \eta η取值分別為1e-3, 6e-4,4e-4),在達(dá)到100000步后學(xué)習(xí)率逐漸線性衰減到0。
- 通常DeepSpeed來實(shí)現(xiàn)FP16動態(tài)混合精度,而作者說初步測試表明BF16會導(dǎo)致不滿意的性能指標(biāo)。
在文本對上微調(diào)
文本向量通過在所有token embedding上加mean pooling層得到。
訓(xùn)練數(shù)據(jù):與Jina Embedding v1的文本對準(zhǔn)備數(shù)據(jù)流程一致,包括了40種不同來源數(shù)據(jù),觀察到數(shù)據(jù)集中包括title-abstract對可以顯著提升向量模型在聚類任務(wù)上的性能。在數(shù)據(jù)上的采樣策略也與Jina Embedding v1一致。
損失函數(shù):與Jina Embedding v1一致。
在Hard Negatives上微調(diào)
這一階段的主要目的是提高模型的排序能力,所以是在包含負(fù)樣本的數(shù)據(jù)集來訓(xùn)練的。
訓(xùn)練數(shù)據(jù):數(shù)據(jù)集包括檢索數(shù)據(jù)集如MSMarco, NQ(Natural Questions),以及多個非檢索數(shù)據(jù)集如Natural Language Inference(NLI)。對于每一個訓(xùn)練樣本,記為 ( q , p , n 1 , … , n 15 ) (q, p, n_1, \ldots, n_{15}) (q,p,n1?,…,n15?),即包括1個正樣本和15個負(fù)樣本。對于檢索數(shù)據(jù)集,難負(fù)樣本由檢索模型判斷與p相似而得到,即指導(dǎo)模型優(yōu)先相關(guān)文檔而不僅僅是語義相關(guān);對于非檢索數(shù)據(jù)集,負(fù)樣本是隨機(jī)選擇的,因為在正樣本和負(fù)樣本之間畫一條清晰的線并不可行。判斷是否相關(guān)時,使用cross-encoder模型來判斷。
損失函數(shù):修改后的InfoNCE損失函數(shù)
L NCE + ( B ) : = E r ~ B [ ? ln ? e s ( q , p ) / τ ∑ i = 1 k [ e s ( q , p i ) / τ + ∑ j = 1 15 e s ( q , n j , i ) / τ ) ] ] + E r ~ B [ ? ln ? e s ( p , q ) / τ ∑ i = 1 k e s ( p , q i ) / τ ] with? r = ( q , p , n 1 , … , n 15 ) \mathcal{L}_{\text{NCE}+}(B):=\mathbb{E}_{r \sim B} \left[ -\ln \frac{e ^{s(q, p) / \tau}} {\sum_{i=1}^k [ e^{s(q, p_i) / \tau}+ \sum^{15}_{j=1} e^{s(q, n_{j,i})/ \tau)}]} \right] + \qquad \\ \mathbb{E}_{r \sim B}\left[-\ln \frac{e^{s(p, q) / \tau}}{\sum_{i=1}^k e^{s\left(p, q_i\right) / \tau}}\right] \\ \text{with} \ r=(q, p, n_1,\ldots, n_{15}) LNCE+?(B):=Er~B?[?ln∑i=1k?[es(q,pi?)/τ+∑j=115?es(q,nj,i?)/τ)]es(q,p)/τ?]+Er~B?[?ln∑i=1k?es(p,qi?)/τes(p,q)/τ?]with?r=(q,p,n1?,…,n15?)
在這兩個階段進(jìn)行微調(diào)訓(xùn)練時,大的batch size是更優(yōu)的,為了節(jié)省內(nèi)存,利用deepspeed實(shí)現(xiàn)混合精度訓(xùn)練,此外使用Activation checkpointing技術(shù),在模型的每一個BERT層插入checkpoint。
Jina Embedding v2 雙語言
Jina Embedding v2雙語言模型對應(yīng)的論文為2024年2月的《Multi-Task Contrastive Learning for 8192-Token Bilingual Text Embeddings》,這一篇里講了用相對小的模型實(shí)現(xiàn)英語和另一個目標(biāo)語言(如德語、中文、西班牙語)的雙語向量編碼。
與Jina Embedding v2一樣,訓(xùn)練過程分為3個階段:1. 預(yù)訓(xùn)練一個修改的BERT,2. 在文本對數(shù)據(jù)上微調(diào),3. 用多任務(wù)目標(biāo)(Multi-Task Objective)來微調(diào)。
預(yù)訓(xùn)練修改版BERT
模型架構(gòu): 與Jina Embedding v2一樣。對西班牙語模型,對key和query向量引入了一個normalization來解決訓(xùn)練不穩(wěn)定性,這個方法與QK-normalization有點(diǎn)關(guān)聯(lián),但不完全一樣。子詞分詞器使用BPE分詞器,并使得詞匯表大小比jina Embedding v2的單語言版擴(kuò)展了一倍,所以base模型的參數(shù)增加了一些(從137M到161M)。
訓(xùn)練數(shù)據(jù):數(shù)據(jù)來源有CulturaX, Wikipedia, Opus,經(jīng)過清洗后得到250M英文文本和相同數(shù)量的目標(biāo)語言文本,留了1%的數(shù)據(jù)用作驗證集。
訓(xùn)練算法:與Jina Embedding v2基本一樣,因為訓(xùn)練數(shù)據(jù)包括雙語言,所以在每一個batch的數(shù)據(jù)是單語言。
在文本對上微調(diào)
文本向量通過在所有token embedding上加mean pooling層得到,在訓(xùn)練節(jié)省內(nèi)存的策略上也與Jina Embedding v2保持一致。
訓(xùn)練數(shù)據(jù):
- 收集了211million德文、111million西班牙語、518million英語文本對(有點(diǎn)奇怪為什么沒有提到中文數(shù)據(jù)量)。數(shù)據(jù)集中主要數(shù)據(jù)都是單語言文本對(97.5%),主要是(標(biāo)題, 文章)、(問題, 回答)、(文本, 文本總結(jié));其余的是雙語言文本對,即包括用兩種語言表示的相同含義文本,構(gòu)成了用來橋接英語和其他語言的平行語料。
- 數(shù)據(jù)集來源包括MQA、XL-Sum、XNLI、 MLSum、Europarl。此外為了多樣性和數(shù)據(jù)量,用Common Crawl數(shù)據(jù)闖將了兩種類型的文本對:1. 網(wǎng)頁title和內(nèi)容;2. 從FAQ和相關(guān)頁面挖掘question-answer對。從Wikipedia獲取段落和對應(yīng)的章節(jié)標(biāo)題。
- 通過兩階段處理策略來提高數(shù)據(jù)質(zhì)量: 過濾階段通過一些質(zhì)量檢查實(shí)現(xiàn),比如將非常短的文本、非常長的文本、重復(fù)行很多的文本給刪除;在改進(jìn)階段不刪除文本,只進(jìn)行包括去掉網(wǎng)址相關(guān)的元數(shù)據(jù)、去掉未結(jié)束的行、只有一個單詞的行等的操作。
- 為進(jìn)一步提高數(shù)據(jù)集質(zhì)量,使用near-depuplication方法去除重復(fù)數(shù)據(jù),使用Jina Embedding v1里用過的一致性過濾方法過濾不一致的文本對
損失函數(shù): 與Jina Embedding v1一致。
用多任務(wù)目標(biāo)微調(diào)
在之前的文獻(xiàn)以及Jina Embedding v1和v2都表明第三階段的在難負(fù)樣本上的微調(diào)可以提高模型的排序能力,所以在這篇論文里將這個概念擴(kuò)展為多任務(wù)訓(xùn)練階段。
對于不同的任務(wù)一般有不同的格式,比如STS任務(wù)包含三元組(q,p, t),即兩個文本q和p以及他們的相似分?jǐn)?shù)t。而對于檢索任務(wù)通常包括query q和一個或多個相關(guān)文檔p以及可選的不相關(guān)文檔n。所以對于每一個任務(wù),定義自己的損失函數(shù),在這篇論文中,只考慮STS任務(wù)和檢索任務(wù)。在每個batch,采樣一個數(shù)據(jù)集,根據(jù)數(shù)據(jù)集任務(wù)類型來選擇相應(yīng)的損失函數(shù)。
訓(xùn)練數(shù)據(jù):檢索任務(wù)與Jina Embedding v2類似,STS任務(wù)數(shù)據(jù)集包括SemEval等。因為英文數(shù)據(jù)的高質(zhì)量數(shù)據(jù)更多,所以使用機(jī)器翻譯將一些數(shù)據(jù)集翻譯成目標(biāo)語言。為了增加數(shù)據(jù)多樣性和減少僅由翻譯數(shù)據(jù)副作用的影響,還挑選了一些目標(biāo)語言的數(shù)據(jù)集。
損失函數(shù):檢索任務(wù)的損失函數(shù)與Jina Embedding v2第三階段的損失函數(shù)一樣。STS數(shù)據(jù)集的損失函數(shù)采用negative Pearson’s sample correlation,設(shè)一個batch B包括文本對(q, p)和對應(yīng)的相關(guān)分?jǐn)?shù)t,其計算如下式:
L S T S ( B ) : = ? c o v ( q , p , t ) ~ B ( s ( q , p ) , t ) σ s ( B ) σ t ( B ) \mathcal{L}_{STS}(B) := - \frac{cov_{(q,p,t) \sim B } (s(q, p), t)}{\sigma_s(B) \sigma_t(B)} LSTS?(B):=?σs?(B)σt?(B)cov(q,p,t)~B?(s(q,p),t)?
上式中, σ s \sigma_s σs?和 σ t \sigma_t σt?是估計的s(q,p)和t的標(biāo)準(zhǔn)差,在一個batch內(nèi)計算得到,而上式中的協(xié)方差是跨批次B計算得到的。作者說基于相關(guān)性的損失函數(shù)可行的原因是它考慮相似性分?jǐn)?shù)的大小而不是二元相關(guān)性,選擇Pearson相關(guān)系數(shù)是因為它對相似度值的尺度是不變的。作者假定這可以使包含InfoNCE損失函數(shù)的多任務(wù)訓(xùn)練更穩(wěn)定。
Jina Embedding v3
Jina Embedding v3 對應(yīng)的論文為2024年9月的《jina-embeddings-v3: Multilingual Embeddings With Task LoRA》,它是一個多語言文本向量模型,可處理最多8192個token長度的文本,使用任務(wù)相關(guān)的LoRA適配器來生成檢索、聚類、分類、文本匹配任務(wù)對應(yīng)的向量,向量的默認(rèn)大小為1024,因為使用了Matryoshka Representation Learning技術(shù),用戶可靈活地改變向量大小。(此外論文強(qiáng)調(diào)Jina embedding v3比v2和v2雙語效果好很多,并且在MTEB的評估上在英文任務(wù)上超過了OpenAI和Cohere的私有向量模型,且比基于LLM的向量模型的大小小很多)
Jina Embedding v3的架構(gòu)如論文圖1所示
Jina Embedding v3的訓(xùn)練過程也分為3個階段:1. 預(yù)訓(xùn)練XLM-RoBERTa,2. 在文本對數(shù)據(jù)上微調(diào),3. 訓(xùn)練了任務(wù)相關(guān)的LoRA適配器。
預(yù)訓(xùn)練
模型:使用XLM-RoBERTa模型的參數(shù)來初始化模型,但是將位置編碼修改為RoPE,保留了XLM-RoBERTa的tokenizer。訓(xùn)練目標(biāo)為使用全詞mask的MLM。
訓(xùn)練數(shù)據(jù): CulturaX語料集,它包括89種語言的數(shù)據(jù),其中英語大概占20%。每一個batch只包含一種語言,但是不同batch之間的語言是交替的。
在訓(xùn)練的前100000步文本序列長度被裁剪到512個token,在后60000步文本序列長度被裁剪到8192個token同時使用更小的batch size,具體超參見表A1。在訓(xùn)練時RoPE的旋轉(zhuǎn)頻率是10000,在推理時調(diào)整到20000有助于提升模型在長文本上的能力,但是作者發(fā)現(xiàn)這個調(diào)整后模型的長文本能力不及jina embedding v2,所以在訓(xùn)練時將模型在更長的文本上進(jìn)行了訓(xùn)練,經(jīng)過長文本訓(xùn)練之后jina embedding v3的長文本能力更強(qiáng)。
在文本對上微調(diào)
文本向量與之前系列模型一致,通過在所有token embedding上加mean pooling層得到。
損失函數(shù):與jina embedding v2雙語言一致。
訓(xùn)練數(shù)據(jù):從超過300個數(shù)據(jù)集收集得到,訓(xùn)練時每個batch采樣自一個特定數(shù)據(jù)集。數(shù)據(jù)集準(zhǔn)備方法與jina embedding v2雙語言一致,只是多了一個過濾步驟:將短文本里至少有80%的內(nèi)容屬于長文本的子字符串的文本對給去掉了,這個過濾可以增加訓(xùn)練的難度。
與預(yù)訓(xùn)練過程一樣,先在短文本對上訓(xùn)練,接著用更小的batch size來訓(xùn)練更長的文本序列(這時只有包含足夠多的長文本數(shù)據(jù)的數(shù)據(jù)集)
訓(xùn)練任務(wù)相關(guān)的適配器
在這一階段訓(xùn)練了在四個任務(wù)上的五個不同LoRA適配器,如論文表2所示。訓(xùn)練時這些任務(wù)是獨(dú)立訓(xùn)練的,基座模型參數(shù)是被凍結(jié)的。在推理時,用戶根據(jù)下游任何和輸入內(nèi)容角色選擇合適的適配器。
分類適配器
分類適配器為下游分類任務(wù)特別是邏輯回歸分類器生成向量,為訓(xùn)練適配器,采用Gecko向量模型提出的分類訓(xùn)練方法。
數(shù)據(jù)集包括常見分類任務(wù),包括情感分析、意圖分類、文章類別。對每一個數(shù)據(jù)集,選擇屬于同一個類別的2個文本值(q,p)和7個不同類別的文本 ( n 1 , … , n 7 ) (n_1, \ldots, n_7) (n1?,…,n7?),構(gòu)建包含9個文本的元祖 ( q , p , n 1 , … , n 7 ) (q,p,n_1,\ldots,n_7) (q,p,n1?,…,n7?),模型的訓(xùn)練目標(biāo)是為q和p分配高的余弦相似度,同時使q和其他 n i n_i ni?的余弦相似度很低。每一個batch的元祖來自同一個數(shù)據(jù)集。
損失函數(shù)與Jina Embedding v2一樣,是InfoNCE的擴(kuò)展版本,考慮了額外的負(fù)樣本。
L triplet ( B ) : = E r ~ B [ ? ln ? e s ( q , p ) / τ ∑ i = 1 k [ e s ( q , p i ) / τ + ∑ j = 1 m e s ( q , n j , i ) / τ ) ] ] + E r ~ B [ ? ln ? e s ( p , q ) / τ ∑ i = 1 k e s ( p , q i ) / τ ] with? r = ( q , p , n 1 , … , n m ) \mathcal{L}_{\text{triplet}}(B):=\mathbb{E}_{r \sim B} \left[ -\ln \frac{e ^{s(q, p) / \tau}} {\sum_{i=1}^k [ e^{s(q, p_i) / \tau}+ \sum^{m}_{j=1} e^{s(q, n_{j,i})/ \tau)}]} \right] + \qquad \\ \mathbb{E}_{r \sim B}\left[-\ln \frac{e^{s(p, q) / \tau}}{\sum_{i=1}^k e^{s\left(p, q_i\right) / \tau}}\right] \\ \text{with} \ r=(q, p, n_1,\ldots, n_{m}) Ltriplet?(B):=Er~B?[?ln∑i=1k?[es(q,pi?)/τ+∑j=1m?es(q,nj,i?)/τ)]es(q,p)/τ?]+Er~B?[?ln∑i=1k?es(p,qi?)/τes(p,q)/τ?]with?r=(q,p,n1?,…,nm?)
在使用這個損失函數(shù)時,在同一個batch里與 q i q_i qi?來自相同類別的文本 p j ( i ≠ j ) p_j (i \neq j) pj?(i=j)被當(dāng)做負(fù)樣本,這可能會造成假負(fù)例,所以Gecko向量模型是每一個文本一個唯一id值,允許模型區(qū)分batch里文本的差別,就可以避免掉假負(fù)例。
文本匹配適配器
文本匹配適配器為量化兩個文本之間的相似性而生成向量,可應(yīng)用與語義文本相似性(sementic textual similarity, STS)和對稱性檢索任務(wù)(即query和target之間的區(qū)別不明顯)。
訓(xùn)練數(shù)據(jù)包括STS訓(xùn)練數(shù)據(jù)集如STS12、SICK,這些數(shù)據(jù)集包括三元組 ( q i , p i , t i ) ∈ D (q_i, p_i, t_i) \in D (qi?,pi?,ti?)∈D,即文本對 ( q i , p i ) (q_i, p_i) (qi?,pi?)以及他們的相關(guān)分?jǐn)?shù) t i t_i ti?。一個batch B包含指定數(shù)量的三元組,ground truth相似度定義為 ζ ( q i , p i ) = t i \zeta(q_i, p_i) = t_i ζ(qi?,pi?)=ti?。為了模型在跨語言的表現(xiàn),使用機(jī)器翻譯模型如WMT19和MADLAD-3B將STS12和SICK翻譯到了多種語言。此外還將natural language inference (NLI) 數(shù)據(jù)集包括進(jìn)來了。每個batch中也只包含了一個數(shù)據(jù)集的數(shù)據(jù),并使用相應(yīng)的損失函數(shù)(沒提NLI數(shù)據(jù)集的損失函數(shù)是什么,用InfoNCE?)。
損失函數(shù)使用了蘇劍林提出的CoSent loss:
L c o ( B ) : = l n [ 1 + ∑ ( q 1 , p 1 ) , ( q 2 , p 2 ) ∈ B e s ( q 2 , p 2 ) ? e s ( q 1 , p 1 ) τ ] where? ζ ( q 1 , p 1 ) > ζ ( q 2 , p 2 ) \mathcal{L}_{co} (B) := ln \left[ 1 + \sum_{(q_1,p_1),(q_2,p_2) \in B} \frac {e^{s(q_2,p_2)} - e^{s(q_1, p_1)}}{\tau} \right] \\ \text{where} \ \zeta(q_1, p_1) > \zeta(q_2, p_2) Lco?(B):=ln ?1+(q1?,p1?),(q2?,p2?)∈B∑?τes(q2?,p2?)?es(q1?,p1?)? ?where?ζ(q1?,p1?)>ζ(q2?,p2?)
CoSent loss 在兩個文本對上進(jìn)行運(yùn)算,要求數(shù)據(jù)集里標(biāo)注ground truth相似度 ζ \zeta ζ。
Separation適配器
分離適配器(Separation Adapter)是為聚類和重排序任務(wù)設(shè)計的(對重排序任務(wù)是將相關(guān)文檔和不相關(guān)文檔給分開)。
損失函數(shù)是CoSent loss的變體,訓(xùn)練數(shù)據(jù) B ′ B^{\prime} B′由元組 ( x , l ) ∈ B ′ (x, l) \in B^{\prime} (x,l)∈B′組成,x是文本,l是它對應(yīng)的標(biāo)簽。為了組成匹配 L c o \mathcal{L}_{co} Lco? 的文本對,在一個batch里生成同一個標(biāo)簽 l i l_i li?的所有文本對組合。最終的分離損失定義如下:
L s e p ( B ′ ) : = L c o ( B ) B = { ( x i , x j ) ∣ ? l : ( x i , l ) , ( x j , l ) ∈ B ′ } \mathcal{L}_{sep}(B^{\prime}) := \mathcal{L}_{co}(B) \\ B = \{(x_i, x_j)| \exists l:(x_i, l),(x_j, l) \in B^{\prime} \} Lsep?(B′):=Lco?(B)B={(xi?,xj?)∣?l:(xi?,l),(xj?,l)∈B′}
因為滿足要求的訓(xùn)練數(shù)據(jù)不多,所以在這一階段還混合了訓(xùn)練第二階段的文本對數(shù)據(jù)(訓(xùn)練損失也是第二階段的損失),在每一個訓(xùn)練步,特定數(shù)據(jù)集被采樣并使用相應(yīng)的損失函數(shù)。
非對稱檢索適配器
與E5對應(yīng)的論文一樣,使用兩個不同的前綴加在query和document后,并且同時(joinly)訓(xùn)練兩個不同的適配器。
訓(xùn)練數(shù)據(jù)為包含hard negatives的數(shù)據(jù)集如MS-MARCO和Natural Questions(NQ),目的是為了讓模型能夠?qū)W⒂诩?xì)微的區(qū)別并區(qū)分相關(guān)文檔和相似但不相關(guān)文檔。而對于沒有難負(fù)例的檢索數(shù)據(jù)集使用RocketQA v2和E5論文中使用的方法用BGE-large和BM25來挖掘難負(fù)例。
損失函數(shù)是與分類適配器一樣的 L triplet \mathcal{L}_{\text{triplet}} Ltriplet?。
在對Jina embedding v2在非對稱檢索任務(wù)上進(jìn)行錯誤分析時,發(fā)現(xiàn)了以下影響檢索任務(wù)的點(diǎn):
- F1. Misleading Syntactic Similarities: Documents with high syntactic similarity to the query are often favored over gold/relevant documents with lower syntactic overlap.
- F2. Misinterpretation of Named Entities:Named entities are frequently not recognized as such, leading to documents being marked as relevant based on partial matches (e.g., “Sofia Albert” vs. “Albert Stone”). This occurs especially with proper nouns that have alternative, more common meanings (e.g., the novel title “The Company” vs. “the company”).
- F3. No Understanding of Polar Questions:Complex yes-no (polar) questions are not handled effectively. As a result, the model retrieves documents with related content that do not necessarily answer the query.
- F4. Preference for Low-Quality Documents:jina-embeddings-v2 and many other embedding models do not account for document quality, focusing solely on similarity and relevance. Consequently, low-quality documents(short, repetitive, or uninformative) that mention query terms are often retrieved but do not provide satisfactory answers.
為了減輕F1-F3,設(shè)計了prompt生成與這些特定失敗案例匹配的文本例子,每個例子包括一個query文本,一個優(yōu)選答案,7個表示失敗案例的負(fù)樣本。
對于F4,利用了Open Assistant項目的數(shù)據(jù)集oasst1和oasst2,這些數(shù)據(jù)集包括由LLM生成的問題和答案,以及由人工判定的質(zhì)量分?jǐn)?shù)(0-1)。將這些數(shù)據(jù)集通過選擇有至少兩個回答的query來轉(zhuǎn)變成難負(fù)例訓(xùn)練數(shù)據(jù)。質(zhì)量最高的回答被當(dāng)做正匹配樣本,而分?jǐn)?shù)低于0.3質(zhì)量分的回答作為負(fù)樣本,如果少于七個負(fù)樣本,剩下的負(fù)樣本通過從其他query里隨機(jī)選擇得到。
論文表6是應(yīng)用這些合成數(shù)據(jù)后的實(shí)驗結(jié)果。
參考資料
- jina embedding 發(fā)布博客:v1, v2, v2雙語, v3
- jina embedding模型對應(yīng)的論文,如文中鏈接。