每個向量數據庫都有同一個致命缺陷:嵌入向量會泄露語義。一旦攻擊者拿到你的向量庫——無論是通過漏洞、內部人員還是傳票——根本不需要讀你的原始文檔,只需對向量做一下聚類,五分鐘就能搞清楚:這500條是醫療記錄,那200條是法律案件,另外100條是薪酬數據。
我一直在想:能不能在保持搜索能力的前提下,把這種結構徹底摧毀?
![]()
我從微軟的MSMARCO數據集中抽取了626,906條真實段落,用標準的句子轉換器編碼,然后嘗試讓這些嵌入向量變得不可讀,同時又不毀掉檢索質量。
最終的方法是這樣的:把每條向量拆成200個獨立通道,每個通道量化成整數,再用密碼學鹽值進行掩碼,最后只存儲除以素數后的模余值。原始向量從不存儲,也從不重建,甚至連運行搜索的人都看不到。
結果讓很多人意外:搜索質量保留了98.2%。在500次查詢測試中,保護后的系統返回的排序和普通余弦搜索幾乎一模一樣。
但真正讓我吃驚的是下面這個對比。
左邊是標準嵌入:同主題文檔緊密聚集,攻擊者一覽無余。右邊是經過變換后的同一批文檔,散點圖完全是隨機分布,沒有任何結構可言。然而兩邊搜索返回的結果卻完全一致。
我計算了保護后系統中每一對文檔的距離,想看看還能不能找出文檔之間的關系。左側原始嵌入:距離和相似度的相關性幾乎是完美的(ρ=1.00),攻擊者大獲全勝。右側保護系統:相關性只有0.09,攻擊者什么都得不到。
當然過程并不順利。有些教訓是踩了坑才記住的:BGE嵌入的量化效果很差,MiniLM和MPNet都能達到98%以上的保留率,BGE卻驟降到87%。嵌入本身的分布方式非常關鍵——那些將信息更均勻地分散在各個維度的模型,在量化過程中的損失更大。還有,小素數會毀掉一切,當我用比某個閾值還小的素數時,整個系統立刻崩壞。調參和模型選擇決定了這層保護到底能不能用。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.