Embedding 空間利用
利用 embedding 幾何、執行反轉攻擊、打造對抗擾動,以及經由最近鄰操弄投毒 RAG 系統之技術。
Embedding 空間利用
現代 AI 中每個文字、圖像或多模態輸入皆被投射至高維向量空間——其中幾何關係編碼語意意義。這些幾何屬性——不均分布、低有效維度,以及接近度與意義間之缺口——跨 LLM、RAG 系統與多模態模型造就系統性攻擊面。
Embedding 幾何基礎
| 屬性 | 描述 | 利用機會 |
|---|---|---|
| Cosine 相似度指標 | 僅向量方向重要,非量值 | 所有向量於單位超球面上;擾動僅需轉移方向 |
| Anisotropy | Embedding 叢聚於窄錐,留下多數空間為空 | 對抗點可於空區域佔位而未被偵測 |
| 線性子結構 | 語意關係映射至線性方向(king - man + woman = queen) | 經簡單線性代數之語意操弄 |
| 維度崩塌 | 多數變異由維度之小部分捕捉 | 於崩塌維度之擾動規避以相似度為本之偵測 |
偵察:量測可利用性
- 對 embedding 樣本計算平均兩兩 cosine 相似度。高於 0.5 之值指示高 anisotropy——較易攻擊。
- 執行 PCA 並檢查多少維度捕捉 90% 變異。該數字與完整維度數之間之大缺口揭露嚴重崩塌。
- 搜尋對抗鄰居 —— 與目標語意不同但於 embedding 空間幾何接近之文字。
import numpy as np
from sentence_transformers import SentenceTransformer
from sklearn.decomposition import PCA
model = SentenceTransformer("all-MiniLM-L6-v2")
def analyze_anisotropy(texts, n_samples=1000):
embeddings = model.encode(texts[:n_samples])
normalized = embeddings / np.linalg.norm(embeddings, axis=1, keepdims=True)
indices = np.random.choice(len(normalized), size=(10000, 2))
avg_sim = np.mean(np.sum(
normalized[indices[:, 0]] * normalized[indices[:, 1]], axis=1
))
pca = PCA(n_components=min(50, embeddings.shape[1])).fit(embeddings)
dim_90 = np.searchsorted(np.cumsum(pca.explained_variance_ratio_), 0.9) + 1
return {"avg_similarity": avg_sim, "dim_90": dim_90}Embedding 反轉攻擊
Embedding 反轉 自 embedding 向量復原近似明文。這是對任何儲存或傳輸 embedding 系統之直接隱私攻擊。
反轉方法論
| 做法 | 所需存取 | 品質 | 關鍵技術 |
|---|---|---|---|
| Vec2Text(Morris et al., 2023) | 黑箱 | 較高 | 迭代精鍊:產生假設、重新嵌入、計算殘差、修正 |
| 以梯度為本 | 白箱(模型權重) | 不一 | 以 Gumbel-Softmax 鬆弛於 token logit 上,具溫度退火 |
產生初始假設
將目標 embedding 餵入 decoder 模型以產出第一個文字猜測。
迭代精鍊迴圈
重新嵌入假設、計算殘差(目標 - 假設 embedding),並使用殘差引導 decoder 朝更佳假設。
收斂檢查
重複至 cosine 相似度超過 0.99 或迭代預算耗盡。追蹤跨所有迭代之最佳結果。
# 以梯度為本之反轉核心迴圈(白箱)
token_logits = torch.randn(1, max_len, vocab_size, requires_grad=True)
for step in range(500):
soft_tokens = F.gumbel_softmax(token_logits, tau=temperature)
soft_embeds = torch.matmul(soft_tokens, embed_matrix)
loss = 1.0 - F.cosine_similarity(soft_embeds.mean(dim=1), target)
loss.backward()
optimizer.step()
temperature = max(0.1, temperature * 0.995) # 退火對抗擾動
| 策略 | 目標 | 方法 |
|---|---|---|
| 有針對性 | 將 embedding 朝特定目標意義移動 | 於 epsilon 球內之投影梯度下降 |
| 無針對性 | 最大化擾亂分類,同時顯得相似 | 於 epsilon 約束內之隨機正交擾動 |
Epsilon 參數 是攻擊者之關鍵控制旋鈕:較小 epsilon = 較難偵測但對轉移意義較不有效。
# 經投影梯度下降之有針對性擾動
for step in range(100):
perturbed = source_emb + perturbation
gradient = normalize(target_emb) - normalize(perturbed)
perturbation += 0.01 * gradient
# 投影回 epsilon 球
if np.linalg.norm(perturbation) > epsilon:
perturbation *= epsilon / np.linalg.norm(perturbation)RAG 上之最近鄰攻擊
RAG 系統依 embedding 相似度檢索文件並將其注入 LLM 上下文。藉由放置為預期查詢之最近鄰之惡意文件,攻擊者將任意內容注入 LLM 之上下文視窗。
RAG 投毒方法論
辨識目標查詢
判定使用者可能對系統詢問之 5–10 個查詢。
打造投毒文件
使用兩種策略產生候選:(1)於 payload 前附加查詢相關文字(embedding 模型重度加權早期 token),或(2)將 payload 詞彙與查詢詞彙交錯以規避以內容為本之過濾。
依相似度排名
嵌入所有候選並依對目標查詢之 cosine 相似度排名。選擇前幾名。
驗證檢索排名
對實際語料測試投毒文件是否於系統 top-k(通常 3–10)內排名。這是關鍵成功標準。
測試端到端
執行完整管線(查詢、檢索、生成)並量測 LLM 遵循注入指令 vs. 合法內容之頻率。
Embedding DoS
對抗輸入可強制 embedding 操作之最差運算行為。關鍵技術是最大化 token 多樣性以防止 attention 稀疏性捷徑——當每個 token 獨特時,完整 O(n^2) attention 運算無法被最佳化掉。
# 打造最差情況 embedding 輸入
diverse_tokens = list(range(min(vocab_size, max_len)))
np.random.shuffle(diverse_tokens)
dos_text = tokenizer.decode(diverse_tokens[:max_len])某 embedding 空間具 0.7 之平均兩兩 cosine 相似度,且 90% 之變異被 768 個中之 15 個維度捕捉。這告訴攻擊者什麼?
相關主題
- 跨模態 Embedding 攻擊 -- 將 embedding 攻擊擴展至文字、圖像與音訊模態
- RAG 管線攻擊 -- 套用於生產 RAG 系統之最近鄰攻擊
- 知識庫投毒 -- 持久 RAG 攻擊之 embedding 接近度技術
- LLM 內部結構 -- 產生被利用 embedding 之 transformer 架構
參考資料
- Morris et al.,〈Text Embeddings Reveal (Almost) As Much As Text〉(2023)
- Song & Raghunathan,〈Information Leakage in Embedding Models〉(2020)
- Zhong et al.,〈Poisoning Retrieval Corpora by Injecting Adversarial Passages〉(2023)
- Gao et al.,〈Embedding Space Geometry and Robustness〉(2019)
- Carlini et al.,〈Poisoning Web-Scale Training Datasets is Practical〉(2024)