# [PGVector](https://github.com/pgvector/pgvector) [施工中] [探索PG Vector 與 google multimodal模型應用](https://gdg.community.dev/events/details/google-gdg-taipei-presents-tan-suo-pg-vector-yu-google-multimodalmo-xing-ying-yong/) ## 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](https://hackmd.io/_uploads/By4NpMO3R.png) PG index使用 # Create create index .... # Query 探索的群: ```SQL= 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