Elastic
Jina AI
模型
API
keyboard_arrow_down
Reader
把任意 URL 轉成 Markdown,為大模型提供更好的事實依據。
向量模型
多模態多語言向量模型。
重排模型
讓搜尋相關性最大化的重排模型。
Elastic Inference Service
在 Elasticsearch 中原生執行 Jina 模型。
MCP
terminal
命令列
article
llms.txt
smart_toy
智慧體
data_object
Schema
menu_book
文件
登入
login
實驗設置
模型能比較 [1, 2, 3, ..., 100] 之間的數字嗎?
模型能比較 [-100, -99, -98, ..., -1] 之間的負數嗎?
模型能比較更大間隔的數字 [1000, 2000, 3000, ..., 100000] 嗎?
模型能否比較任意範圍內的數字,例如 [376, 377, 378, ..., 476]?
模型能否比較大數字 [4294967296, 4294967297, 4294967298, ..., 4294967396]?
模型能否比較浮點數 [0.0001, 0.0002, 0.0003, ...,0.1]?(不固定位數)
模型能否比較貨幣數字 [ 1 , 1,2, 3 , . . . , 3,...,100]?
模型能否比較日期 [2024-07-24, 2024-07-25, 2024-07-26, ..., 2024-10-31]?
模型能否比較時間 [19:00:07, 19:00:08, 19:00:09,..., 20:39:07]?
觀察結果
結論
技術部落格
七月 24, 2024

嵌入式模型/重排序模型能比較數字嗎?

許多大型語言模型無法理解 9.11 其實比 9.9 小。我們的 embedding 和 reranker 模型在這方面表現如何呢?
Rows of numbered wooden pieces on a white background, ranging from single digits to high numbers.
Han Xiao • 10 分鐘閱讀

這是我今天在維也納的 ICML 會議上被問到的一個問題。

在茶歇時間,一位 Jina 使用者向我提出了一個源自 LLM 社群近期討論的問題。他問我們的嵌入模型是否能判斷出 9.11 比 9.9 要小,這是很多 LLM 會判斷錯誤的任務。

「老實說,我不知道,」我回答道。當他詳細說明這個功能對他的應用程式的重要性,並指出分詞可能是問題的根源時,我不禁點頭表示同意——我的腦海已經開始醞釀著一個實驗來揭示答案。

在這篇文章中,我想測試我們的嵌入模型 jina-embeddings-v2-base-en(2023 年 10 月發布)和重排序模型 jina-reranker-v2-multilingual(2024 年 6 月發布)是否能準確比較數字。為了將範圍擴展到 9.11 和 9.9 的簡單比較之外,我設計了一系列實驗,包括各種類型的數字:小整數、大數字、浮點數、負數、貨幣、日期和時間。目標是評估我們的模型在處理不同數字格式時的有效性。

tag實驗設置

完整的實現可以在以下 Colab 中找到:

Google Colab

實驗的設計相當直觀。例如,要檢查嵌入模型是否理解 [1, 100] 之間的數字,步驟如下:

  1. 構建文件:為 1 到 100 的每個數字生成「字符串字面量」文件。
  2. 發送到嵌入 API:使用 嵌入 API 獲取每個文件的嵌入。
  3. 計算餘弦相似度:計算每兩個文件之間的成對餘弦相似度以創建相似度矩陣。
  4. 繪製散點圖:使用散點圖可視化結果。相似度矩陣中的每個元素 (i,j)(i, j)(i,j) 映射到一個點:X 軸:(i−j)(i - j)(i−j);Y 軸:(i,j)(i, j)(i,j) 的相似度值

如果 delta (i−j)(i - j)(i−j) 為零,即 i=ji = ji=j,則語義相似度應該最高。隨著 delta (i−j)(i - j)(i−j) 增加,相似度應該降低。理想情況下,相似度應該與 delta 值呈線性關係。如果我們觀察不到這種線性關係,那麼模型可能無法理解數字,並可能產生像 9.11 大於 9.9 這樣的錯誤。

重排序模型採用類似的程序。主要區別在於我們遍歷構建的文件,通過在前面加上提示 "what is the closest item to..." 將每個文件設置為 query,並將其他所有文件作為 documents 進行排名。重排序 API 返回的相關性分數直接用作語義相似度度量。核心實現如下所示。

def rerank_documents(documents):
    reranker_url = "https://api.jina.ai/v1/rerank"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {token}"
    }

    # Initialize similarity matrix
    similarity_matrix = np.zeros((len(documents), len(documents)))

    for idx, d in enumerate(documents):
        payload = {
            "model": "jina-reranker-v2-base-multilingual",
            "query": f"what is the closest item to {d}?",
            "top_n": len(documents),
            "documents": documents
        }
    ...

tag模型能比較 [1, 2, 3, ..., 100] 之間的數字嗎?

每個 delta 的平均值和方差的散點圖。左:jina-embeddings-v2-base-en;右:jina-reranker-v2-multilingual。documents = [str(i) for i in range(1, 101)]

tag如何閱讀這些圖表

在進行更多實驗之前,讓我先解釋如何正確閱讀這些圖表。首先,從上面兩張圖中我觀察到嵌入模型表現良好,而重排序模型表現不太理想。那麼,我們在看什麼,為什麼會這樣呢?

X 軸代表索引 (i,j)(i,j)(i,j) 的 delta,即 i−ji-ji−j,當我們從我們的文件集合中均勻採樣 did_idi​ 和 djd_jdj​ 時。這個 delta 範圍從 [−100,100][-100, 100][−100,100]。由於我們的文件集在構建時是有序的,即 ∣i−j∣|i-j|∣i−j∣ 越小,did_idi​ 和 djd_jdj​ 在語義上越接近;iii 和 jjj 相距越遠,did_idi​ 和 djd_jdj​ 之間的相似度越低。這就是為什麼你會看到相似度(由 Y 軸表示)在 X=0X=0X=0 處達到峰值,然後向左右線性下降。

理想情況下,這應該會形成一個尖峰或「上箭頭」形狀,像 ^。但情況並非總是如此。如果你固定 X 軸的一個點,比如 X=25X=25X=25,沿著 Y 軸看,你會發現相似度值從 0.80 到 0.95 不等。這意味著,儘管它們的 delta 都是 25,sim(d27,d2)\mathrm{sim}(d_27, d_2)sim(d2​7,d2​) 可能是 0.81,而 sim(d42,d17)\mathrm{sim}(d_42, d_17)sim(d4​2,d1​7) 可能是 0.91。

青色趨勢線顯示了每個 X 值的平均相似度及其標準差。另外,請注意相似度應該線性下降,因為我們的文件集是均勻分佈的,確保了連續文件之間的間隔相等。

請注意,嵌入圖表總是對稱的,在 X=0X=0X=0 處 Y 值最大為 1.0。這是因為 did_idi​ 和 djd_jdj​ 的餘弦相似度是對稱的,且 cos⁡(0)=1\cos(0)=1cos(0)=1。

相反,重排序圖表總是不對稱的,這是由於查詢和文件在重排序模型中扮演不同的角色。最大值可能不是 1.0,因為 X=0X=0X=0 意味著我們使用重排序器來計算 "what is the closest item to 4" 與 "4" 的相關性分數。如果你仔細思考,X=0X=0X=0 並不能保證會導致 Y 值最大。

tag模型能比較 [-100, -99, -98, ..., -1] 之間的負數嗎?

每個 delta 的平均值和方差的散點圖。左:jina-embeddings-v2-base-en;右:jina-reranker-v2-multilingual。這裡我們想測試模型是否能判斷負數空間中的語義相似度。documents = [str(-i) for i in range(1, 101)]

tag模型能比較更大間隔的數字 [1000, 2000, 3000, ..., 100000] 嗎?

我們想要測試模型是否能在比較間隔為 1000 的數字時判斷語義相似性。documents = [str(i*1000) for i in range(1, 101)]帶有每個 delta 的平均值和方差的散點圖。左:jina-embeddings-v2-base-en;右:jina-reranker-v2-multilingual。

tag模型能否比較任意範圍內的數字,例如 [376, 377, 378, ..., 476]?

在這裡,我們想要測試模型是否能在任意範圍內比較數字的語義相似性,所以我們將數字移動到某個隨機範圍 documents = [str(i+375) for i in range(1, 101)]。帶有每個 delta 的平均值和方差的散點圖。左:jina-embeddings-v2-base-en;右:jina-reranker-v2-multilingual。

tag模型能否比較大數字 [4294967296, 4294967297, 4294967298, ..., 4294967396]?

在這裡,我們想要測試模型是否能比較非常大的數字的語義相似性。類似上一個實驗的想法,我們將範圍進一步移動到一個大數字。documents = [str(i+4294967296) for i in range(1, 101)]帶有每個 delta 的平均值和方差的散點圖。左:jina-embeddings-v2-base-en;右:jina-reranker-v2-multilingual。

tag模型能否比較浮點數 [0.0001, 0.0002, 0.0003, ...,0.1]?(不固定位數)

在這裡,我們想要測試模型是否能比較浮點數的語義相似性。documents = [str(i/1000) for i in range(1, 101)]帶有每個 delta 的平均值和方差的散點圖。左:jina-embeddings-v2-base-en;右:jina-reranker-v2-multilingual。

tag模型能否比較貨幣數字 [1,1, 1,2, 3,...,3, ..., 3,...,100]?

在這裡,我們想要測試模型是否能比較貨幣形式數字的語義相似性。documents = ['$'+str(i) for i in range(1, 101)]帶有每個 delta 的平均值和方差的散點圖。左:jina-embeddings-v2-base-en;右:jina-reranker-v2-multilingual。

tag模型能否比較日期 [2024-07-24, 2024-07-25, 2024-07-26, ..., 2024-10-31]?

在這裡,我們想要測試模型是否能比較日期格式(YYYY-MM-DD)的語義相似性。today = datetime.today(); documents = [(today + timedelta(days=i)).strftime('%Y-%m-%d') for i in range(100)]帶有每個 delta 的平均值和方差的散點圖。左:jina-embeddings-v2-base-en;右:jina-reranker-v2-multilingual。

tag模型能否比較時間 [19:00:07, 19:00:08, 19:00:09,..., 20:39:07]?

在這裡,我們想要測試模型是否能夠理解時間格式(即 hh:mm:ss)數字之間的語義相似性。 now = datetime.now(); documents = [(now + timedelta(minutes=i)).strftime('%H:%M:%S') for i in range(100)]散點圖顯示了每個 delta 的平均值和方差。左圖:jina-embeddings-v2-base-en;右圖:jina-reranker-v2-multilingual。

tag觀察結果

以下是對上述圖表的一些觀察:

tag重排序模型

  • 重排序模型在比較數字方面表現不佳。即使是在最簡單的 [1, 100] 範圍內比較數字的情況下,其表現也不理想。
  • 值得注意的是,我們在使用重排序器時採用了特殊的查詢提示結構,即 what is the closest item to x,這可能也會影響結果。

tag嵌入模型

  • 嵌入模型在比較 [1, 100] 範圍內的小整數或 [-100, 1] 範圍內的負數時表現尚可。但當將這個範圍移動到其他值、增加更多區間,或處理更大或更小的浮點數時,其表現會顯著下降。
  • 在某些固定間隔(通常是每 10 步)可以觀察到規律性的突波。這種行為可能與分詞器處理字符串的方式有關,可能是將字符串分詞為 "10" 或 "1" 和 "0"。

tag日期和時間理解

  • 有趣的是,嵌入模型似乎對日期和時間有很好的理解,大多數情況下都能正確比較。在日期圖中,每 30/31 步就出現突波,這對應於一個月的天數。在時間圖中,每 60 步出現突波,這對應於一小時的分鐘數。
  • 重排序模型似乎也在某種程度上捕捉到了這種理解。

tag可視化與"零"的相似度

更新於 2024 年 7 月 29 日
Google Colab

另一個可能更直觀的實驗是直接可視化任何數字與零(即原點)之間的相似度或相關性分數。通過將參考點固定為零的嵌入,我們想看看隨著數字變大,語義相似度是否線性降低。對於重排序器,我們可以將查詢固定為 "0" 或 "What is the closest number to number zero?",並對所有數字進行排名,以查看它們的相關性分數是否隨著數字增加而降低。結果如下所示:

在這裡,我們將"原點嵌入"固定為"零"的嵌入,並檢查任何數字與零之間的語義相似度是否與該數字的值成比例。具體來說,我們使用 documents = [str(i) for i in range(2048)]。圖中顯示了每個 delta 的散點圖及其平均值和方差。左圖:jina-embeddings-v2-base-en;右圖:jina-reranker-v2-multilingual。

tag結論

本文展示了我們目前的嵌入和重排序模型如何處理數字比較。儘管實驗設置相對簡單,但它揭示了當前模型中的一些基本缺陷,並為我們下一代嵌入和重排序器的開發提供了寶貴的見解。

決定模型是否能準確比較數字的兩個關鍵因素:

首先是分詞:如果詞彙表只包含數字 0-9,那麼 11 可能被分詞為獨立的標記 1 和 1,或作為單個標記 11。這種選擇會影響模型對數值的理解。

不同的分詞器會導致對 9.11 有不同的解釋。這可能會影響下游的上下文學習。來源:HuggingFace 上的 The Tokenizer Playground

其次是訓練數據:訓練語料庫顯著影響模型的數值推理能力。例如,如果訓練數據主要包含軟體文檔或 GitHub 倉庫,其中語義版本控制很常見,模型可能會理解 9.11 大於 9.9,因為 9.11 是緊隨 9.9 之後的次要版本。

密集檢索模型(如嵌入和重排序器)的算術能力對於涉及 RAG 和高級檢索與推理的任務至關重要。強大的數值推理能力可以顯著提高搜索質量,特別是在處理像 JSON 這樣的結構化數據時。

類別:
技術部落格
rss_feed

閱讀更多
三月 11, 2026 • 7 分鐘閱讀
Bootstrapping Audio Embeddings from Multimodal LLMs
Han Xiao
Abstract illustration of a sound wave or heartbeat, formed by blue, orange, and gray dots on a white background.
三月 06, 2026 • 6 分鐘閱讀
Identifying Embedding Models from Raw Numerical Values
Han Xiao
Fingerprint illustration made from numbers, showcasing digital and high-tech design on a light background.
九月 09, 2025 • 11 分鐘閱讀
Multimodal Embeddings in Llama.cpp and GGUF
Andrei Ungureanu
Alex C-G
Cartoon llama in the center of a white background, emitting laser-like beams from its eyes. The illustration creates a playfu
當前語言 / 主題
搜尋底座
Reader
向量模型
重排模型
獲取 Jina API 金鑰
速率限制
關於我們
新聞
下載 Jina 徽標
open_in_new
下載 Elastic 徽標
open_in_new
API 狀態
Elastic © 2026.安全條款及條件隱私管理 Cookie請勿出售或分享我的個人資訊
本網站及其所有相關內容、軟體、產品和服務僅供專業人士使用。不面向任何消費者,也不鼓勵任何消費者使用。