EN

2.2 向量嵌入簡介

嵌入(embedding)把一段文字變成一串數字,讓電腦可以比較意思像不像。

RAG下一篇 →

電腦沒辦法直接「理解」文字,它能處理的是數字。嵌入(embedding) 做的事情,就是把一段文字轉成一串數字,也就是向量(vector),並且讓這串數字保留這段文字的意思。

什麼是向量

向量就是一組有順序的數字,例如 [0.12, -0.53, 0.88, ...]。每個數字代表某一個「維度」上的值。

在 RAG 裡用的向量通常有幾百到幾千個維度。我們沒辦法想像那麼多維的空間,但可以先用平面來理解。

用平面來想像

假設只有兩個維度,每一段文字就是平面上的一個點。意思相近的文字,會被放在相近的位置。

兩維平面上的點:特休假相關的句子聚在一起,賽車相關的聚在另一邊,問題落在特休假附近

這張圖的重點:

  • 「特休假規定」「年假怎麼算」「請假流程」,意思相關,所以聚在一起。
  • 「軟胎、硬胎」「賽車進站策略」是另一群。
  • 「今天天氣很好」跟哪一群都不太像,離得很遠。
  • 使用者的問題「新進員工什麼時候能請年假?」落在特休假那一群的旁邊,所以檢索會找到那一群。

嵌入模型

把文字轉成向量的,是一種專門的模型,叫做嵌入模型(embedding model)。它事先看過大量文字,學會把意思相近的句子放到相近的位置。

你只要把一段文字丟進去,就會拿到一個固定長度的向量:

"特休假要工作滿半年才會開始計算"  →  [-0.006, -0.0002, -0.0008, -0.018, 0.056, ... ]
                                          (共 384 個數字,維度依模型而定)

不管輸入是一個詞、一個句子、還是一整段,輸出的向量長度都是一樣的。

幾個重要的觀念

  • 維度由模型決定。 例如有的模型輸出 384 維,有的是 768、1024、1536 或更多。維度高通常能表達更細的差異,但也要用更多空間和運算。
  • 比較向量,必須用同一個模型產生的。 不同模型的向量空間是各自獨立的,混著比較沒有意義。所以問題和知識庫的每一段,要用同一個嵌入模型。
  • 換模型就要重做。 如果之後換了嵌入模型,知識庫裡所有的向量都要重新產生。
  • 它抓的是意思,不是字面。 「退費」和「退款」會很接近,但「蘋果公司」和「蘋果好吃」會被分開,因為語境不一樣。

嵌入的限制

嵌入很好用,但不是萬能:

  • 模型沒學好的語言或領域,向量品質會下降。例如拿只學過英文的模型處理中文,效果通常很差。
  • 非常專門的術語、縮寫、代號,模型可能沒見過,向量就不準。
  • 一個向量只能把整段話壓縮成固定長度,段落很長時,細節會被稀釋。這也是為什麼要做分塊,第 3 章會講。
← 全部文章