成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenAI最新套娃嵌入模型分析:256維的MTEB效果超過1536維 精華

發布于 2024-6-20 10:47
瀏覽
0收藏

一月份,OpenAI發布了兩種新的嵌入模型:text-embedding-3-small和text-embedding-3-large。這些模型采用套娃表示學習技術(MRL:Matryoshka Representation Learning)進行訓練,這使得開發者可以在嵌入中權衡性能和成本。

什么是套娃表示學習?

套娃表示學習是一種用于訓練嵌入模型的技術。它允許在犧牲少量準確性的情況下換取更小的嵌入尺寸。因此,可以以更低的成本存儲更多的信息,并更快地搜索它。

嵌入通過從序列末尾移除維度,并且只使用嵌入向量的子集維度來縮短。例如,你可以只使用原本具有1536維度向量的前8、16、32等維度(或任何其他維度的切片)。

與常見的向量嵌入不同,其中所有維度都同等重要,在套娃嵌入中,向量前面的維度存儲的信息比后面的維度更多,后者只是添加了更多細節。可以通過嘗試在多個分辨率下對圖像進行分類的類比來理解這一點:較低的分辨率提供了更多高層次的信息,而較高的分辨率則添加了更多細節

因此,檢索性能隨著表示大小的增加而提高。然而,OpenAI報告說,text-embedding-3-large嵌入可以縮短到256的大小,同時在MTEB基準測試上仍然優于未縮短的、大小為1536的text-embedding-ada-002嵌入

套娃嵌入的表示大小與檢索性能

OpenAI最新套娃嵌入模型分析:256維的MTEB效果超過1536維-AI.x社區

MRL(Matryoshka Representation Learning,套娃表示學習)實現的魔力全部在于訓練這些模型時優化的損失函數!如果之前損失函數是L,對于MRL,將損失函數分解為各個向量維度范圍上的損失之和:Loss_Total = L(upto 8d) + L(upto 16d) + L(upto 32d) + ... + L(upto 2048d)。有了這個新的嵌套損失函數,模型就有動力在向量的每個子部分捕捉信息。

修改損失函數后,可以免費獲得這些可截斷的向量,無需任何額外成本——這幾乎適用于所有損失函數,并且可以對現有的預訓練模型進行微調以輸出MRL向量!這意味著MRL非常容易采用并應用于預訓練模型。

套娃嵌入詳細分析

下面將使用來自DBpedia的100萬個對象的數據集進行工作,這些對象已使用新的OpenAI套娃text-embedding-3-large模型和舊的ada-002模型進行了嵌入。這將理解信息是如何在套娃向量中與它們的非套娃前身不成比例地存儲的。

在下面的分析中,從上述數據集中隨機抽取了1萬個向量,并繪制了每個維度上觀察到的值的標準差。一個維度上看到的方差或標準差是衡量該維度相對于其他維度攜帶多少信息的良好指標。

顯示了使用新text-emb3-large模型和舊ada-002模型嵌入的DBpedia中的10,000個隨機樣本,每個維度的標準差平滑值。

OpenAI最新套娃嵌入模型分析:256維的MTEB效果超過1536維-AI.x社區

可以看到,標準差是維度索引的多步函數——早期維度捕獲更多信息,而后面的維度捕獲較少。圖表還顯示,OpenAI嵌入模型在維度={512d, 1024d, 1536d, 3072d}處使用了4個聚合損失函數,按照上面詳細描述的MRL風格進行訓練。

更有趣的是,這些步驟內的信息(512d, 1024d, 1536d, 3072d)在各個維度之間或多或少地均勻擴散。這也解釋了MRL論文中的神奇發現,即你可以實際上取這些預指定塊之間的維度(例如750d),仍然可以獲得增量效益?

可視化套娃向量空間

還可以問一個有趣的問題:當你使用越來越多的套娃嵌入維度時,底層數據表示/向量空間會如何變化

下面的視頻中,每一幀都是使用僅使用一定數量的MRL向量維度的主成分分析(PCA)生成的3D向量空間。

從上面鏈接的相同數據集中取了10,000個隨機樣本,使用OpenAI text-embed-3-large模型進行嵌入,然后使用PCA將它們縮減到3D空間;從僅使用4個維度開始,一直到使用所有3072個維度。用越來越多的維度可視化套娃向量。

OpenAI最新套娃嵌入模型分析:256維的MTEB效果超過1536維-AI.x社區

可以看到,當使用512個維度時,向量空間的結構已經被很好地定義了,在這些最初的512個維度之后,其他維度主要用于在更大的結構內收緊數據表示

當到達2000+維度時,只看到數據點的小幅度抖動,可能是因為增量維度的貢獻微乎其微,無法在前3個主成分中看到。

熟悉 OpenAI 的 Matryoshka

OpenAI 發布了兩個新模型,text-embedding-3-small和,它們使用Matryoshka表示學習text-embedding-3-large技術進行訓練 。這些模型的 API 支持一個參數,可以使用該參數控制生成的嵌入的長度。dimensions

如果使用相同的模型但不同的dimensions參數嵌入相同的文本,會發現較短的嵌入不是較長嵌入的截斷版本。

# !pip install openai
from openai import OpenAI


openai = OpenAI()


def vectorize(text,
              dimensions,
              model = "text-embedding-3-small"):
   text = text.lower()


   return openai.embeddings.create(input = [text], 
                                   model = model, 
                                   dimensions = dimensions).data[0].embedding


example_text = "Learned representations are a central component in modern ML systems, serving a multitude of downstream tasks."


full = vectorize(example_text, dimensions = 1536)
short = vectorize(example_text, dimensions = 8)


print(full[:8])
print(short)

[-0.001463836757466197, -0.0241670124232769,  0.00683123804628849, -0.013936602510511875, 0.0320618636906147, 0.00872271228581667, 0.031053075566887856, 0.021820487454533577]
[-0.025210261344909668, -0.41620534658432007, 0.11764788627624512, -0.24001678824424744,  0.5521708130836487, 0.15022294223308563, 0.5347974300384521,   0.3757933974266052]

但是,如果檢查它們的余弦相似度,會發現它們非常相似(或者由于四舍五入而甚至相等)。

from sklearn.metrics.pairwise import cosine_similarity


cosine_similarity([full[:8]], [short])

array([[1.]])

如果仔細觀察,會發現嵌入實際上僅在縮放因子上有所不同(在本例中為 0.058)。

scale = full[0]/short[0]
print(scale)
print([x * scale for x in short])
print(full[:8])

0.05806511632065122
[-0.001463836757466197, -0.0241670118626955, 0.006831238201508919, -0.01393660272831134, 0.03206186249057062, 0.008722712614794586, 0.031053074983168057, 0.021820487334108546]
[-0.001463836757466197, -0.0241670124232769, 0.00683123804628849, -0.013936602510511875, 0.0320618636906147, 0.00872271228581667, 0.031053075566887856, 0.021820487454533577]

請注意 text-embedding-3-large 和 text-embedding-3-small 在默認嵌入長度的長度上有所不同:

默認尺寸text-embedding-3-small:1536

默認尺寸text-embedding-3-large:3072

此外,  當切片為相同尺寸時,它們不會產生兼容的嵌入:

large = vectorize(example_text, dimensions = 3072, model = "text-embedding-3-large")
small = vectorize(example_text, dimensions = 1536, model = "text-embedding-3-small")
print(large[:1536])
print(small)


cosine_similarity([large[:1536]], [small])

[0.011070899665355682,   0.014488349668681622, -0.021118611097335815, -0.011152755469083786, 0.011555208824574947, -0.0007622754783369601, ... ]
[-0.001463836757466197, -0.0241670124232769,    0.00683123804628849,  -0.013936602510511875, 0.0320618636906147,    0.00872271228581667,   ... ]
array([[-0.00149749]])

如果需要在生成嵌入維度后更改嵌入維度,則需要對嵌入維度進行規范化。OpenAI文檔對此進行了更全面的解釋。

本文轉載自??PaperAgent??

已于2024-6-20 15:51:37修改
收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 国产成人网 | 久久免费国产 | 色悠悠久 | 亚洲视频一区在线观看 | 精品国产鲁一鲁一区二区张丽 | 91亚洲精品国偷拍自产在线观看 | 中文字幕一区二区三区日韩精品 | 中文字幕在线观看视频一区 | 欧美一区二区三区视频 | 香蕉av免费 | 国产不卡一区 | 81精品国产乱码久久久久久 | 涩色视频在线观看 | 国外成人在线视频网站 | 久久手机在线视频 | h视频在线免费 | 欧美精品久久久 | 青春草在线 | 伊人艹| 国产精品二区三区在线观看 | 中文字幕韩在线第一页 | 日韩精品网站 | 成人在线视频免费观看 | 精品国产乱码一区二区三区a | 亚洲视频在线一区 | 在线精品亚洲欧美日韩国产 | 欧美亚洲视频在线观看 | 日韩久久久久 | 天天色图| 免费福利视频一区二区三区 | 99re视频这里只有精品 | 日日夜夜精品视频 | 亚洲成av| 鲁一鲁资源影视 | 国产精品不卡一区 | 一级二级三级在线观看 | 天天天天操 | 欧美日韩福利视频 | 一级黄色生活视频 | 日本a∨精品中文字幕在线 亚洲91视频 | 国产精品成人国产乱一区 |