# 7/16進度紀錄 ## 簡筠方 ### Watermark 統整介紹 論文:[A Survey of Text Watermarking in the Era of Large Language Models](https://arxiv.org/pdf/2312.07913) 翻譯:https://hackmd.io/@IizmYTUETE2C0DpZ8K_zUw/HyFeSfSIgg 就很多種 watermark 的類型、評估方式 ### CEFW 論文:[CEFW: A Comprehensive Evaluation Framework for Watermark in Large Language Models](https://arxiv.org/pdf/2503.20802) github:https://github.com/DrankXs/BalancedWatermark 翻譯:https://hackmd.io/@IizmYTUETE2C0DpZ8K_zUw/HkNW4_Nwxl #### CEFW 框架 提出了 CEFW(Comprehensive Evaluation Framework for Watermark),這是一套統一的評估框架,能從以下五大面向全面性地評估浮水印方法: * **易檢測性(Ease of Detection)**:水印是否容易被成功識別 * **文本品質保真度(Fidelity of Text Quality)**:水印不應降低語句的自然度或可讀性 * **嵌入成本最小化(Minimal Embedding Cost)**:嵌入水印不應顯著增加生成成本或模型負擔 * **對抗攻擊的魯棒性(Robustness to Adversarial Attacks)**:水印能否抵抗如改寫、翻譯等攻擊 * **不可察覺性(Imperceptibility)**:難以被人類或模型察覺,有助於防止仿冒或反向提取 #### Balanced Watermark(BW) * 我們觀察到 KGW 過於動態(over-dynamic)、UNIW 過於靜態(over-static) * BW 是在這兩者之間的**平衡策略** * 在浮水印加入的方式上取得穩定性與隱蔽性的雙重優勢 ### Black-Box Watermarking 論文:[Watermarking Text Generated by Black-Box Language Models](https://arxiv.org/pdf/2305.08883) github:https://github.com/Kiode/Text_Watermark 翻譯:https://hackmd.io/@IizmYTUETE2C0DpZ8K_zUw/B1rqNbCUex 屬於 **後處理語意水印(post-hoc semantic watermarking)**,黑箱模型,有做中文與英文  #### 1. ⚡ 快速檢測(Fast Detection) * 步驟: 1. 從文本第二個詞開始,依序處理每個詞。 2. 若詞通過 POS 篩選,則計算其對應的二元位元(bit-0 或 bit-1): $$ b_i = \text{RandomBinary}(h(w_i) \oplus h(w_{i-1})) $$ 3. 重複至最後一詞。 4. 統計所有位元中的 bit-1 比例 $\hat{p}$,代入 z-score 檢定。 * 優點:快速、計算量低。 * 缺點:可能包含沒有可替代同義詞的詞 → 降低檢測準確率(因為這些通常是 bit-0)。 #### 2. 🎯 精確檢測(Precise Detection) * 根據加水印邏輯進行更精緻的篩選: 1. 每個詞仍需通過 POS 篩選。 2. 接著根據嵌入水印的方式生成候選同義詞集 $C'$。 * 若 $C'$ 為空,代表該詞可能無法被替換,跳過。 * 若 $C'$ 不為空,才計算其二元位元。 3. 累積符合條件詞的位元後,計算 $\hat{p}$、執行 z-score 檢定。 * 優點:只檢測可能真的有被替換的詞,**提升檢測準確度**。 * 缺點:需生成同義詞候選,**計算量較大**。  #### 內建的demo **嵌入水印**  **檢測水印 (無水印文字)** Confidence : 50%  **檢測水印 (含水印文字)** Confidence : 99.95%  ## 廖奕皓 測試KTH Watermark(token changed): https://github.com/jthickstun/watermark **方向** 後處理水印:拿AI生成文章重新生成,上水印 生成式水印:生成時就上水印,而不是生成後再上 **測試過程** 1. 程式碼理解: * 主要是運行generate來生成具有水印的文章,並用detect來檢測是否含有水印。 * generate是使用一key(亂碼種子碼),逐字改變生成token的文字機率,以達到加入水印的效果。 * generate可控參數: * model: HuggingFace 的 causal language model。 * prompt: prompt。 * vocab_size: 詞彙大小(token 數量)。 * n: 水印序列長度。 * m: 要生成文字的長度(token 數)。 * key: 用來產生水印亂數序列的種子,由mersenne_rng轉成亂碼。 * generate內的主要function * generate_shift: 產生帶水印的文字 token 序列 * exp_sampling: 依據模型給的機率分布 probs,用亂數 u 決定下一個 token。 * main: 使用上兩 functions 來生成水印文章 * 使用 **梅森旋轉演算法** 將種子碼轉成亂碼 特色: | 📏 **超長週期** | $2^{19937} - 1$,約等於 $10^{6000}$,極難重複 | | 📊 **統計品質極高** | 通過幾乎所有統計亂數測試(Diehard、TestU01) | | 🚀 **速度快** | 雖然不如最輕量的 PRNG,但仍能快速生成大量高品質亂數 | | 🧠 **可重現性** | 給定相同種子,生成序列完全一致(這對水印技術很重要) | | 🧩 **多功能** | 可產生亂數、浮點數、洗牌(`randperm()`)等用途 | | 🌍 **廣泛使用** | 幾乎所有語言的標準函式庫都有 Mersenne Twister(例:Python、C++ STL、NumPy) | 如果要做水印專題,可以找不同亂碼演算法生成器來改變機率,只改亂碼生成器的話detect核心邏輯不變。 2. 檢測detect方法 1. 計算真實水印檢測分數(分數越低代表越像有水印(因為使用的是 Levenshtein 距離)) 2. 隨機生成許多假的 xi 來當作「虛無水印(null hypothesis)」 3. 看有多少次 null_result <= test_result 4. 最後計算 p_value = (p_val + 1) / (n_runs + 1) 3. 這個水印論文有提供experiment實驗方法和資料集: | 實驗編號 | 實驗重點 | | ------------------ | ------------------------------------------- | | **Experiment 1-6** | 用 C4 資料集(模擬新聞文章)進行水印測試 | | **Experiment 7** | 用 Alpaca 指令集(類似 ChatGPT 任務)進行水印測試 | | **Experiment 3** | 變化 `m` 值(greenlist 大小)對水印偵測影響 | | **Experiment 6** | 用翻譯當作破壞攻擊手段(roundtrip translation)看水印還能否被偵測 | | **Experiment 9a** | 測試不同語言的 roundtrip(像是法文)對水印的影響 | 4. 自己測試的結果: 本機跑出來的文章丟到他的瀏覽器detector結果出來沒有水印,而且他給的detect程式碼我跑不了,所以不知道問題在哪?可能是複製或者我有加prompt的問題  (0.01才是有水印) ## 游婷安 1. 改成用T5-base模型來測試, 結果也是跟之前一樣:   CodeCarbon結果: | name | emissions (kg CO2 eq) | cpu_power(W) | gpu_power(W) | ram_power(W) | energy_consumed(kWh)| | --- | --- | --- | -------- | -------- | -------- | | T5-base training | 0.0956689245496744 | 1.1384 | 0.7966 | 6.0 | 0.1489293290705385 | | T5-base testing | 0.056718018558231005 | 0.9388 | 0.5829 | 6.0 | 0.08829383720835864 | (Emissions (kg CO2eq)=Energy Consumed (kWh)×Carbon Intensity (kg CO2eq/kWh))   2. 順便用 LED(Longformer Encoder Decoder) 但還沒跑完 3. 關於Claude code: [記憶系統與上下文壓縮機制](https://hackmd.io/@jv-jFHFbR1eTuJRaMFL-yA/HJw4fYsUll) [整體系統架構(我沒看)](https://hackmd.io/@jv-jFHFbR1eTuJRaMFL-yA/rkSRZGTIgx) ## 陳芊羽 1. 調整 week1 的程式 - 嘗試改成兩層生成式摘要  分數變非常差 - 調整 prompt 改成先以第一篇生成 summary,之後給 llama3 下把其他篇文章的不同內容加進去的 prompt  分數沒變多少 2. 下載 PRIMERA 卡很久才發現沒切到 kernel 現在在看他 github 中的範例程式碼(剛好就是 multi-news XDD)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up