PGVector

[施工中]
探索PG Vector 與 google multimodal模型應用

Add extension in postgres

create extension vector

create 一樣
insert into items (embedding) values ([1,2,3],[1,2,3])
select只有最後embedded的地方不同
建index也一樣

L2 distance: Euclidean distance(純量)
L1 distance: Manhattan Distance(純量)

Jaccard distance
cosine distance
image

PG index使用

Create

create index

Query

探索的群:

begin select index... end

舊的做法

  1. 關鍵字搜尋,分詞
  2. tsvector存結構
  3. 加上GIN type index方便利用keyword搜尋vector

Now

RAG(Retrivel augmented generation)
Vector->prompt->LLM->user->embedded model->vectordb

CLIP(Constrastive language-image pretraining)

Connecting text and images
將文字和圖片映射到向量空間中
把兩個都轉成vector
text encode : text => vector => project to space
image encode : image => vector => project to space
再訓練完後,這個空間就同時表達了文字與圖片的抽象意義

例如文字,拆成單詞儲存到向量空間
圖片,透過辨識轉成問字儲存到向量空間,這樣就可以對應起來了

同樣這樣的方法也可以用在搜尋上
會受訓練資料集的影響
同樣原理也可以用圖片去搜尋聲音
也可以反過來,用聲音生成影像

Q1: index建立?
Q2: KNN ->太接近或相似會怎麼處理?

generation

形象向量 => 具體
text vector => picture vector => generation
(transform) (generation)
DALLE image editing
origin picture => bird => picture + bird
(mask)

eg:利用CLIP實作穿搭資料庫

The limit of PGVector

IndexTypleData.t_info

  • 超過2000個維度問題(2^14 bytes限制)
  • 最大尺寸2000,保留46
    sol:

1

  1. 變更數值使用空間
  2. 會些微失真(side effect)
    4bytes->2bytes

2

不依賴postgres => postgres.rs ,但是會有ACID問題

3

資料降維度
和1一樣有可能會失真
1048 float->128/256/512