二月底時 Azure OpenAI 已經悄悄的上線了第三代的 Embedding 模型,共有 text-embedding-3-large 與 text-embedding-3-small 兩種,隨後又在 3/8 釋出新的 API 版本 2024-03-01-preview,在這版 API 中主要就是一些針對新版 Embedding 模型的新功能,以下簡單記錄一下試用心得。
模型佈署
首先當然是佈署新的 Embedding 模型,兩種模型在 Azure OpenAI 上都是獨立存在的,large 具有較高的精準度,而 small 則有成本和效能的優勢,不過兩者透過 API 存取的方式都是一樣的,所以這邊就擇一選擇佈署 text-embedding-3-large 就好。
Python SDK
再來會使用 Python SDK 搭配 2024-03-01-preview,因為都是比較新的功能,所以使用的 SDK 版本建議升級至最新版本,以下展示的內容使用的是 openai==1.13.3。
2024-03-01-preview 新參數
就像一開始提到的,這版 API 是針對 Embedding 模型的新功能,主要增加了兩個新參數:encoding_format 與 dimensions。
encoding_format
encoding_format 可以指定產生的向量格式,有 base64 與 float 兩種選擇,預設值為 float 也是我們原本常看到的樣子,而 base64 的使用方式如下:
執行結果如下:
另外也可以透過 Python 套件 base64 與 numpy 再轉回原本的浮點數:
執行結果如下:
base64 在回傳時是固定的,尤其有使用原廠 OpenAI 搭配 Python SDK 的人,應該很常發生回應不固定的問題,這與 Python 上的 float64 格式有關,細節就不在這討論了,總之使用 encoding_format=base64 可以處理掉這個問題。
另外 base64 相較於 float 更為緊湊,更適合放在 http 請求中傳送,即使加上轉換格式的時間還是略快於 float,儘管差異不大,但在批次大量與即時性要求的情況下都可以嘗試比較看看。
dimensions
dimensions 參數用於控制回傳的向量長度,在 text-embedding-3-large 模型中可以設定 1 到 3072 的整數值,使用方式如下:
減少向量長度可以帶來降低儲存成本和提升效能的優勢,當然這就是犧牲了準確度,但在 OpenAI 官網上一篇有趣的博客提到了一次實驗,其結果在 text-embedding-3-large 中產生的 256 維向量比前一代 text-embedding-ada-002 產生的 1536 維向量所得到的 MTEB 分數還要高,這部分有興趣的讀者也可以自己實驗一下。
dimensions 參數也帶來一些彈性,例如使用的向量資料庫只支援最多 1024 維的向量儲存,有了 dimensions 參數就能避免放棄使用 text-embedding-3-large 模型了。
留言
張貼留言