<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Seminar on 海狸大師部落格</title><link>https://blog.yenslife.top/tags/seminar/</link><description>Recent content in Seminar on 海狸大師部落格</description><generator>Hugo -- gohugo.io</generator><language>zh-Hant-TW</language><lastBuildDate>Tue, 22 Sep 2026 11:24:16 +0800</lastBuildDate><atom:link href="https://blog.yenslife.top/tags/seminar/index.xml" rel="self" type="application/rss+xml"/><item><title>SWAN 論文筆記：Semantic Watermarking with Abstract Meaning Representation</title><link>https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/</link><pubDate>Tue, 22 Sep 2026 11:24:16 +0800</pubDate><guid>https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/</guid><description>&lt;img src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig2-overview.png" alt="Featured image of post SWAN 論文筆記：Semantic Watermarking with Abstract Meaning Representation" /&gt;&lt;h1 id="swan-semantic-watermarking-with-abstract-meaning-representation"&gt;SWAN: Semantic Watermarking with Abstract Meaning Representation
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;ACL 2026 main&lt;/li&gt;
&lt;li&gt;把 watermark 訊號 embed 在 semantic representation，所以相較 token level 的 watermark，這種方法的抗 paraphrasing 能力更好&lt;/li&gt;
&lt;li&gt;用 prompt (AMR template) llm 的方式來產生具有 semantic watermark 訊號的 text output&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;免責聲明&lt;/strong&gt;：這篇是我準備 seminar 報告時整理的個人筆記，主要是幫助自己理解論文，不是嚴謹的論文導讀。內容可能有理解錯誤或不精確的地方，如果發現錯誤歡迎在留言區指正。閱讀時建議搭配&lt;a class="link" href="https://aclanthology.org/2026.acl-long.1681/" target="_blank" rel="noopener"
 &gt;論文原文&lt;/a&gt;一起看。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;現有的 Watermark 方法像是 SynthID-Text (或類似 KGW 的那類 token-level 的方法) 以及 embedding-level 的方法，都很容易受到 paraphrasing 攻擊，就是用另一個 LLM 去改寫原本具有 watermark 訊號的文字，藉此將 watermark 訊號洗掉。不過這篇也不是第一個利用語義來嵌入 watermark 訊號的論文，現有的方法會遇到一個問題是，被改寫的文字可能發生 embedding 被位移的情況，那還是會影響偵測的效能。&lt;/p&gt;
&lt;p&gt;不過其實我也沒看過 embedding-level 的 watermark 論文，剛剛問了一下 ChatGPT，大意就是把句子的 embedding 當作 watermark 訊號，可以想成 sample 的精細度不同，不是逐 token 的。&lt;/p&gt;
&lt;p&gt;不過這篇用 AMR 來表示句子，他有辦法表示程式碼或者 JSON 之類的特殊格式嗎？不知道他有沒有考慮到這個問題。以及不同語言的問題，這個我們拭目以待 (TODO: 看完回來回答這邊)&lt;/p&gt;
&lt;h2 id="background"&gt;Background
&lt;/h2&gt;&lt;p&gt;這邊只記錄一些我沒看過的部分&lt;/p&gt;
&lt;h3 id="abstract-meaning-representation-amr"&gt;Abstract Meaning Representation (AMR)
&lt;/h3&gt;&lt;p&gt;AMR 是一種以圖 (Graph) 去表示抽象過後的句子的方式，目的是抽象掉句子的語法 (syntactic) 與詞彙 (lexical) 差異。直接舉例子比較好懂，以下四個句子的組合方式完全不同，但是 AMR 卻是相同的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The boy desires the girl to believe him.&lt;/li&gt;
&lt;li&gt;The boy desires to be believed by the girl.&lt;/li&gt;
&lt;li&gt;The boy has a desire to be believed by the girl.&lt;/li&gt;
&lt;li&gt;The boy’s desire is for the girl to believe him.
可以想成都是：「boy wants (girl believes boy)」&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="math math-block"&gt;$$\begin{align*}
1 \quad &amp;amp; (w \ / \ \text{want-01} \\
2 \quad &amp;amp; \quad :\text{ARG0} \ (b \ / \ \text{boy}) \\
3 \quad &amp;amp; \quad :\text{ARG1} \ (b2 \ / \ \text{believe-01} \\
4 \quad &amp;amp; \qquad\qquad :\text{ARG0} \ (g \ / \ \text{girl}) \\
5 \quad &amp;amp; \qquad\qquad :\text{ARG1} \ b))
\end{align*}$$&lt;/div&gt;&lt;p&gt;AMR 表示如 figure 1 所示，這邊 node 表示各種 concepts，edges 則是語意關聯：
&lt;img alt="figure 1 AMR graph 可視化" class="gallery-image" data-flex-basis="223px" data-flex-grow="93" height="1016" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig1-amr-graph.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig1-amr-graph_hu_834b939f85098e34.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig1-amr-graph.png 946w" width="946"&gt;&lt;/p&gt;
&lt;h3 id="text-watermarking"&gt;Text Watermarking
&lt;/h3&gt;&lt;p&gt;文字浮水印主要可以根據粒度 (granularity) 的不同，分成以下三類&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;token-level：在 decoding 過程對 sampling distribution 施加輕微的 bias，把統計訊號嵌入進去。傳統的 KGW 和更進階的 &lt;a class="link" href="https://blog.yenslife.top/post/synthid-text-paper-note/" &gt;SynthID-Text&lt;/a&gt; 都屬於這類。這種方法對 paraphrasing 和字面上的文字修改沒轍。&lt;/li&gt;
&lt;li&gt;sentence-level：為了提高抗改寫能力，把 watermark 訊號 encode 在語意空間，類似的方法有 SemStamp 和 k-SemStamp (之後一定要找來看一下)。&lt;/li&gt;
&lt;li&gt;paragraph-level：大概又可以分成兩種「在 paragraph level 嵌入浮水印」以及「在文字生成後，以 black-box 的方式注入浮水印 (post-hoc)」。像 PostMark 就是其中之一，他會先對段落的語意進行 encoding，然後從一個 embedding table 選出特定的 watermark words，再讓一個 instruction-following LLM 編入原本的文字中。這樣的方式就屬於黑箱的，因為不需要取得 Target Model 的權重甚至是 sampling algorithm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;至於這篇的 SWAN 呢？作者說不同於上述三種，他直接將 watermark 嵌入句子的語意結構中。&lt;/p&gt;
&lt;h2 id="overview-of-the-framework"&gt;Overview of the Framework
&lt;/h2&gt;&lt;p&gt;&lt;img alt="figure2 Overview" class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="1482" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig2-overview.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig2-overview_hu_9ea2ce78f1f929b1.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig2-overview_hu_7ecc005cedf0b577.png 1600w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig2-overview.png 2372w" width="2372"&gt;&lt;/p&gt;
&lt;h3 id="amr-bank-creation"&gt;AMR Bank Creation
&lt;/h3&gt;&lt;p&gt;作者用 MASSIVE-AMR 資料集，有大約 84000 個 AMR graph 涵蓋 1685 種 資料查詢型語句&lt;/p&gt;
&lt;p&gt;然後把原始 AMR 抽象成 template AMR，像是把名詞替換成通用的 placeholder，像是 Alice 可能會被變成 NE (Name Entity)。之所以要用 template AMRs 有兩個優點&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generality：少量的 template AMR 就可以對應到大量不同的句子&lt;/li&gt;
&lt;li&gt;Robustness：透過替換掉實體的名稱，可以降低詞彙修改破壞浮水印的可能性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那他們怎麼選的呢？為了建立 AMR bank，作者把 MASSIVE-AMR 走訪完畢，只保留符合以下兩種條件的 AMR graph：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;頻率出現在 3 ~ 20 次 (排除太特別的和太制式化的)&lt;/li&gt;
&lt;li&gt;必須至少出現 3 個 concept nodes (不希望 AMR 太簡單)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這邊的 Secret Bank &lt;span class="math math-inline"&gt;$\mathcal{B}$&lt;/span&gt; 就等同於這個 watermark 的 Key 的概念，會在 Injection 以及 Detection 的時候用到。&lt;/p&gt;
&lt;h3 id="watermark-injection"&gt;Watermark Injection
&lt;/h3&gt;&lt;p&gt;要生成一句話之前，會從 AMR bank 抽出一個 template &lt;span class="math math-inline"&gt;$g$&lt;/span&gt;，然後提供 LLM 兩個輸入：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先前已生成句子累積的 Context，用來維持 discourse coherence。&lt;/li&gt;
&lt;li&gt;template &lt;span class="math math-inline"&gt;$g$&lt;/span&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然後指示 LLM 生成符合該 template 語意結構的文字，整個 Prompt 長這樣 (from appendix A.1)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AMR (Abstract Meaning Representation) is a graph-based representation of a sentence&amp;#39;s meaning. Each node is a concept and edges represent semantic roles or relationships.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Below are some examples of template AMRs and corresponding sentences:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{example_text}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;In the provided AMR, there are placeholders:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;NE&amp;#34; for named entities (e.g., &amp;#34;Alice&amp;#34;, &amp;#34;France&amp;#34;, &amp;#34;Google&amp;#34;).
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;N&amp;#34; for generic nouns (e.g., &amp;#34;a device&amp;#34;, &amp;#34;an object&amp;#34;).
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;X&amp;#34; for unspecified concepts (e.g., &amp;#34;something&amp;#34;, &amp;#34;an idea&amp;#34;).
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Instructions:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not write &amp;#34;NE&amp;#34;, &amp;#34;N&amp;#34;, or &amp;#34;X&amp;#34; literally. Instead, replace them with appropriate English words to form a natural, meaningful sentence.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Ensure the generated sentence aligns with both the AMR structure and the given context.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not produce multiple sentences or lists.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Produce exactly one coherent sentence.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AMR:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{chosen_template}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Context: {context}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please output only that one sentence.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然後這個 LLM 產生的輸出，會經過一個 AMR Parser 解析回一個 AMR Graph &lt;span class="math math-inline"&gt;$\hat{g}$&lt;/span&gt;。對每一個生成出的 graph &lt;span class="math math-inline"&gt;$\hat{g}$&lt;/span&gt; 我們都會計算 S2MATCH：&lt;span class="math math-inline"&gt;$S2MATCH(\hat{g},g)$&lt;/span&gt;，即它與 AMR template &lt;span class="math math-inline"&gt;$g$&lt;/span&gt; 的相似度。這邊作者描述 S2MATCH 是一個 lightweight metric，會參考 node-level 和 edge-level 的 F1 score，然後輸出 0 ~ 1 的數值。也就是說只有在 &lt;span class="math math-inline"&gt;$S2MATCH(\hat{g},g)&amp;gt;\theta_{accept}$&lt;/span&gt; 這句話才會被接受，否則就重新生成一次。&lt;/p&gt;
&lt;p&gt;又因為受到 context 影響，LLM 的輸出不會每次都這麼剛好符合 template，所以他會設定一個小的 resampling 次數上限，如果到達上限還沒成功就放棄目前的 template 從 bank 再選一個出來生成。(Adaptive Target Switching)&lt;/p&gt;
&lt;p&gt;完整的 Algorithm 可以參考下圖：&lt;/p&gt;
&lt;p&gt;&lt;img alt="Algorithm 1" class="gallery-image" data-flex-basis="145px" data-flex-grow="60" height="1228" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/algorithm1-injection.png" width="742"&gt;&lt;/p&gt;
&lt;h3 id="watermark-detection"&gt;Watermark Detection
&lt;/h3&gt;&lt;p&gt;SWAN 透過三個步驟來偵測一段文字&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用現成的 AMR Parser 將句子的每一句話轉成 AMR Graph&lt;/li&gt;
&lt;li&gt;對某一句子 parse 得到的 &lt;span class="math math-inline"&gt;$\hat{g}$&lt;/span&gt; ，它會把 secret bank 的所有 templates 進行比較 (S2MATCH)，然後取最大值。如果最高相似度超過閾值，那就將它標記為 green sentence。&lt;/li&gt;
&lt;li&gt;一個 paragraph 可能有 n 句，所以還需要 one-proportion z-test 來檢定。若有 k 句被標記為 green sentence，計算 &lt;span class="math math-inline"&gt;$z = \frac{k-\lambda n}{\sqrt{n \lambda (1- \lambda)}}$&lt;/span&gt; ，其中 &lt;span class="math math-inline"&gt;$\lambda$&lt;/span&gt; 是 expected hit-rate。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這邊虛無假設 &lt;span class="math math-inline"&gt;$H_0$&lt;/span&gt; 為「這段文字是在不知道 secret bank 的情況寫出來的」&lt;/p&gt;
&lt;p&gt;以下是 Paragraph-Level 的 detection 演算法
&lt;img alt="algorithm 2" class="gallery-image" data-flex-basis="191px" data-flex-grow="79" height="1532" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/algorithm2-detection.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/algorithm2-detection_hu_24f6fb388d0035dc.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/algorithm2-detection.png 1222w" width="1222"&gt;&lt;/p&gt;
&lt;h2 id="experiments"&gt;Experiments
&lt;/h2&gt;&lt;p&gt;實驗沿用 SemStamp baseline 的設定，在 C4 corpus 的 REALNEWS subset，這是一個 Google 開源的新聞索引資料集，專業撰寫的新聞文章組成。取 subset 的前 250 個句子作為 evaluation set。&lt;/p&gt;
&lt;p&gt;然後是 AMR bank 的大小，要小心設定，因為這個在 injection 和 detection 都會用到，尤其是 detection 要掃過所有 template。這邊他們設定 &lt;span class="math math-inline"&gt;$|\mathcal{B}| = 50$&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;所有的 watermark injection model 都使用 &lt;code&gt;DeepSeek-R1-Distill-Qwen-14B&lt;/code&gt;，演算法的次數是最多嘗試 &lt;span class="math math-inline"&gt;$M=5$&lt;/span&gt; 次，每一句最多換 &lt;span class="math math-inline"&gt;$T=10$&lt;/span&gt; 個不同的 AMR template。相較之下 SemStamp 每一句最多是 100 次嘗試，這邊只有 50 次。&lt;/p&gt;
&lt;p&gt;偵測的部分，用 &lt;code&gt;parse_xfm_bar_large&lt;/code&gt;，這是一個模型，接著才做 S2MATCH。&lt;/p&gt;
&lt;p&gt;改寫攻擊 (paraphrasing) 的部分，用 Pegasus (專門用來改寫)、Parrot (T5-based model，表示很會抽換詞)、Claude 3.7 Sonnet 來製造改寫攻擊，文字品質的部分則採用 Claude 3.7 Sonnet 以 Zero-shot 的方式來評估 Coherence、Fluency、Diversity，就是 LLM-as-a-Judge。&lt;/p&gt;
&lt;p&gt;評估指標可以分為 watermark 的效果，以及是否影響文字品質兩個。&lt;/p&gt;
&lt;h3 id="detection-result"&gt;Detection Result
&lt;/h3&gt;&lt;p&gt;Table 1 這邊顯示的是在完全沒 rewrite 的情況下，paragraph-level 的偵測結果，結果&amp;hellip;也沒有比較好呀？作者還是有硬凹一下的，就是 raw detectability 和其他的差不多，所以也還好啦，至少遠好於 SynthID。&lt;/p&gt;
&lt;p&gt;&lt;img alt="table 1 detection accuracy" class="gallery-image" data-flex-basis="280px" data-flex-grow="116" height="960" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table1-detection-accuracy.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table1-detection-accuracy_hu_6a3c0caeeceee7d3.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table1-detection-accuracy.png 1120w" width="1120"&gt;&lt;/p&gt;
&lt;p&gt;Table 2 則是受到攻擊後的表現，這邊才展現了 SWAN 的優勢，因為這 SWAN 的浮水印訊號是這句話本身的 AMR 結構，即使改寫了也不會差太多。其他純語意的方式就可能受到改寫而偏掉。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="951px" data-flex-grow="396" height="578" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table2-paraphrase-robustness.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table2-paraphrase-robustness_hu_62cab405ae63b1c9.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table2-paraphrase-robustness_hu_339d2faee7900a32.png 1600w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table2-paraphrase-robustness.png 2292w" width="2292"&gt;&lt;/p&gt;
&lt;h3 id="effect-of-amr-bank-size"&gt;Effect of AMR-Bank Size
&lt;/h3&gt;&lt;p&gt;直覺去想，如果 bank size 大，那就可以涵蓋更多種語意的 pattern，但同樣的這樣 false positive 也可能更高，因為有可能只是 LLM 偶然生成和 secret bank template 相似的 AMR 結構而已。這邊做實驗發現 800 和 50 差不多，所以也不能說 bank 越高 AUC 越高，作者說在設定 size 的時候應該考慮效能比較重要。但老實說我覺得挺沒道理的，為啥會這樣啊？&lt;/p&gt;
&lt;p&gt;&lt;img alt="Table 3 AMR-bank size 的影響" class="gallery-image" data-flex-basis="347px" data-flex-grow="144" height="780" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table3-amr-bank-size.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table3-amr-bank-size_hu_bdbff065819f206b.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table3-amr-bank-size.png 1128w" width="1128"&gt;&lt;/p&gt;
&lt;h3 id="text-quality-evaluation"&gt;Text Quality Evaluation
&lt;/h3&gt;&lt;p&gt;然後是 Claude 對這幾種方法產生的文字去打分數，作者說 SWAN 和其他 watermark 方法其實是品質相當的。作者說在更強的抗改寫能力情況，還能和他們相當，很棒棒喔。
&lt;img class="gallery-image" data-flex-basis="884px" data-flex-grow="368" height="622" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table4-text-quality.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table4-text-quality_hu_76d42e2116e168e8.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table4-text-quality_hu_e990405a22084f75.png 1600w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table4-text-quality.png 2292w" width="2292"&gt;&lt;/p&gt;
&lt;h3 id="qualitative-examples"&gt;Qualitative Examples
&lt;/h3&gt;&lt;p&gt;質性分析&lt;/p&gt;
&lt;p&gt;SWAN 的 high 那句，雖然被判定 High 但還是有重複的「Vote for &amp;hellip; Vote for &amp;hellip;」。然而 Low 就更爛了，一堆 John 是怎樣。SemStamp 的 Low 就是看起來有點不自然，k-SemStamp 則是有重複資訊，奇怪的標點。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Table 5 這些方法生成的實際範例，質性分析" class="gallery-image" data-flex-basis="352px" data-flex-grow="146" height="1556" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table5-qualitative-examples.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table5-qualitative-examples_hu_832e6559fb11d856.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table5-qualitative-examples_hu_252ebb1f685965d0.png 1600w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/table5-qualitative-examples.png 2286w" width="2286"&gt;&lt;/p&gt;
&lt;h3 id="sampling-efficiency"&gt;Sampling Efficiency
&lt;/h3&gt;&lt;p&gt;如同其他 sentence-level algorithm，SWAN 也依賴 rejection sampling。算了 &lt;span class="math math-inline"&gt;$250 \times 5 = 1250$&lt;/span&gt; 個 sentence 最後得出平均要 17.7 trials 的結論。相較之下 SemStamp 平均只需要 13.8 次。圖三可以看到完整分佈，42% 的句子會在 10 次嘗試內被接受，54% 的句子在 15 次內被接受。46 ~ 50 的高峰，對應到那些幾乎耗盡 sampling budget 的句子 (就是不可能符合 AMR template 的句子，如果是 Agent 的情況我覺得就是工具呼叫那些輸出)&lt;/p&gt;
&lt;p&gt;作者說未來可以做 context-aware template selection 而不是這樣 random 選，或許也可以降低 inference 次數。
&lt;img alt="Figure 3 rejection sampling trials" class="gallery-image" data-flex-basis="342px" data-flex-grow="142" height="780" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig3-rejection-sampling-trials.png" srcset="https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig3-rejection-sampling-trials_hu_dbe68035fe6fc8c8.png 800w, https://blog.yenslife.top/post/swan-semantic-watermark-paper-note/fig3-rejection-sampling-trials.png 1112w" width="1112"&gt;&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;We introduced SWAN, a novel semantic watermarking framework that embeds robust, paraphrase-resistant signals into AMR representations. 作者提出 SWAN 一種新的 semantic watermarking framework，可以將訊號嵌入 AMR representation 中。&lt;/li&gt;
&lt;li&gt;Empirically, it outperforms token-level and embedding-based watermark baselines in paraphrase robustness, while maintaining strong text fluency and naturalness. 實驗上，SWAN 的抗改寫攻擊是最卓越的&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一些限制&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AMR Parser 本身會出錯&lt;/li&gt;
&lt;li&gt;如何安全管理 Secret Bank？&lt;/li&gt;
&lt;li&gt;只有英文新聞有用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="我的想法"&gt;我的想法
&lt;/h2&gt;&lt;p&gt;針對程式碼、JSON 輸出，這類的好像沒有辦法很好涵蓋呀？以及 Agent 的情境更不適合了。還有 inference 次數也是個問題，一次 LLM forward 的成本可以接受但多次就不行了。&lt;/p&gt;
&lt;p&gt;在 Related Work 作者有提到早期的語言隱寫術 (linguistic steganography) 也是透過語法樹的方式來隱藏訊息，和 SWAN 的概念很像。我應該也可以好好利用這個東東，感覺 Agentic System 跨檔案之間一定有什麼關聯，是我可以藏資訊用的。&lt;/p&gt;</description></item><item><title>SynthID-Text 論文筆記：Scalable watermarking for identifying large language model outputs</title><link>https://blog.yenslife.top/post/synthid-text-paper-note/</link><pubDate>Tue, 22 Sep 2026 11:15:51 +0800</pubDate><guid>https://blog.yenslife.top/post/synthid-text-paper-note/</guid><description>&lt;img src="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament.png" alt="Featured image of post SynthID-Text 論文筆記：Scalable watermarking for identifying large language model outputs" /&gt;&lt;h1 id="scalable-watermarking-for-identifying-large-language-model-outputs"&gt;Scalable watermarking for identifying large language model outputs
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;text SynthID 原始論文&lt;/li&gt;
&lt;li&gt;Published online: 23 October 2024 發表在 Nature&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;免責聲明&lt;/strong&gt;：這篇是我準備 seminar 報告時整理的個人筆記，主要是幫助自己理解論文，不是嚴謹的論文導讀。內容可能有理解錯誤或不精確的地方，數學推導也是我自己重新推過一遍的版本，如果發現錯誤歡迎在留言區指正。閱讀時建議搭配&lt;a class="link" href="https://www.nature.com/articles/s41586-024-08025-4" target="_blank" rel="noopener"
 &gt;論文原文&lt;/a&gt;一起看。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;LLM 已經可以合成高品質的文字了，這些文字有時候和人類打得很難分辨。這樣的 AI 垃圾充斥在網路上可能會對整個資訊知識體系造成很大的影響。這個時候如果可以朔源 (Provenance) 就太好了，所以浮水印很重要，我們想要知道這段文字的來源到底是什麼，浮水印就是一個好用的工具。不論是文字還是圖片都一樣。&lt;/p&gt;
&lt;p&gt;之所以看 SynthID Image 以及 SynthID Text 是我覺得這兩篇都是 Google 的論文，與其說是論文不如說是一個有學術理論支持的產品，Anthropic 也公告他們的 Model 產生的文字現在都有浮水印加入在裡面(&lt;a class="link" href="https://www.anthropic.com/news/claude-text-watermark" target="_blank" rel="noopener"
 &gt;官方說明&lt;/a&gt;)。或許我可以在這邊找到一些我的碩論的方法，把浮水印作為一種手段來使用。&lt;/p&gt;
&lt;p&gt;SynthID 好用就在於它不會改變 LLM 訓練的流程，只是修改 LLM sample 的過程，道理和 KGW 紅綠 token 應該類似，不過他似乎有做一些增強。為了讓浮水印可以大規模部署，SynthID-Text 採取了可以和 speculative sampling 兼容的策略，speculative sampling 是一種 LLM 推論的加速方法 (預測要出來的 token 的道理)&lt;/p&gt;
&lt;p&gt;作者做實驗發現 SynthID 甚至不會降低原本 LLM 的能力，他們進行了線上實驗，分析了將近 2000 萬筆 Gemini 回覆的使用者反饋，看這個浮水印有沒有辦法維持文字品質 (不過 Gemini 最近的風評似乎不太好，我猜他們又在做實驗了哈)&lt;/p&gt;
&lt;p&gt;這邊他 introduction 的用詞是「identification and attribution of LLM text is critical to ensure safe and responsible use of the technology」，而不是用 Provenance。&lt;/p&gt;
&lt;p&gt;目前要做到這件事有幾種方法&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;retrieval-based approach：保存所有生成文字的紀錄，把檢測文字與這邊的文字作比對。但是會有隱私疑慮，因為要把所有和 LLM 互動的文字都存起來。&lt;/li&gt;
&lt;li&gt;post hoc detection：利用文字本身的統計特徵，或者再額外訓練一個分類器。優勢是不需要保存生成紀錄，缺點是可能要很高的計算成本，且效能不穩定，在 out of domain data 上的表現差 (資料分布外的) 會有高 false positive&lt;/li&gt;
&lt;li&gt;text watermarking：在生成的文字內加入一些肉眼無法分辨的標記，又可以分為三種方法
&lt;ul&gt;
&lt;li&gt;generative watermarking：在生成的過程中加入浮水印&lt;/li&gt;
&lt;li&gt;edit-based watermarking：在生成出來的文字上加浮水印&lt;/li&gt;
&lt;li&gt;data-driven watermarking：修改 LLM 的訓練資料&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Edit-based watermarking 依賴 rule-based 文字轉換，像是同義詞轉換或者插入不可見的 Unicode 字元 (應該就是類似 ascii smuggling 那種方式)&lt;/p&gt;
&lt;p&gt;Data-driven 則是在訓練時會有一個 trigger phrase，當 LLM 看到這個 trigger 才會輸出帶有浮水印的內容，類似植入 watermark 後門的感覺&lt;/p&gt;
&lt;p&gt;所以這邊 SynthID 使用的是 Generative watermarking，因為這邊有一個條件是 Google 希望在大規模的情框也可以精細操作對文字的影響，維持低計算成本。但作者也說不存在完全可靠的文字偵測方法。&lt;/p&gt;
&lt;p&gt;SynthID-text 其實是建立在現有的浮水印元件上的，不過採用了新的 Sampling 方式叫做：Tournament Sampling (競賽式採樣)。SynthID-text 可以設定兩種模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;non-distortionary：以維持文字品質為目標&lt;/li&gt;
&lt;li&gt;distortionary：會破壞文字品質但是更容易偵測出 watermark&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="watermarking-with-synthid-text"&gt;Watermarking with SynthID-Text
&lt;/h2&gt;&lt;p&gt;這邊 x 是一段輸入文字序列，其中包含來自 vocabulary &lt;span class="math math-inline"&gt;$V$&lt;/span&gt; 的 &lt;span class="math math-inline"&gt;$t - 1$&lt;/span&gt; 個 token
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$x_{&amp;lt;t} = x_1, \dots, x_{t-1},$$&lt;/div&gt;&lt;p&gt;
LLM 會根據 &lt;span class="math math-inline"&gt;$x_{&amp;lt;t}$&lt;/span&gt; 來計算下一個字的機率分佈
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$p_{\text{LM}}(\cdot \mid x_{&amp;lt;t}).$$&lt;/div&gt;&lt;p&gt;以上過程如 figure 1 的上半部所示&lt;/p&gt;
&lt;p&gt;&lt;img alt="figure1" class="gallery-image" data-flex-basis="466px" data-flex-grow="194" height="1302" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark_hu_5a4287f8d0e06e5.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark_hu_65952a71426e28bc.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark_hu_2895cbe5a8f82afa.png 2400w, https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark.png 2530w" width="2530"&gt;&lt;/p&gt;
&lt;p&gt;這樣的 generative watermark 又可以分成三個元件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;random seed generator&lt;/li&gt;
&lt;li&gt;sampling algorithm&lt;/li&gt;
&lt;li&gt;scoring function&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;figure 1 下半部可以看到，在每一個步驟 &lt;span class="math math-inline"&gt;$t$&lt;/span&gt; ，random seed generator 會產生一個隨機種子 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt;，這個種子可能是根據前面出現的文字 + 一個 key 來產生的。然後 sampling algorithm 會根據 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 以及 &lt;span class="math math-inline"&gt;$P_{LM}(\cdot | x_{&amp;lt;t})$&lt;/span&gt; 來取樣下一個 token。重點就是這個 sampling algorithm 會讓 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 和 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 產生相關性 (correlations)，這樣輸出的文字就是帶有統計訊號的 watermarked text。&lt;/p&gt;
&lt;p&gt;然後這邊採用 sliding window 的方式來取得最近 &lt;span class="math math-inline"&gt;$H$&lt;/span&gt; 個 token 並與 key 進行 hash 得到 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt;。figure 2 上半部可以看到，下面式子則是 &lt;span class="math math-inline"&gt;$H=4$&lt;/span&gt;。不過這邊也不一定要用 sliding window 就是了。到目前為止的 idea 都和 KGW 相同，唯一不同的就是前面提到的 tournament sampling 方法這個等等會提到。&lt;/p&gt;
&lt;div class="math math-block"&gt;$$r_t = \text{Hash}(x_{t-4}, x_{t-3}, x_{t-2}, x_{t-1}, k),$$&lt;/div&gt;&lt;p&gt;&lt;img alt="figure 2 上半部" class="gallery-image" data-flex-basis="708px" data-flex-grow="295" height="728" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-top-seed-generator.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-top-seed-generator_hu_939942cd49dd54a9.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/fig2-top-seed-generator_hu_8da926ba318b68ff.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/fig2-top-seed-generator.png 2150w" width="2150"&gt;&lt;/p&gt;
&lt;h3 id="synthid-texts-tournament-sampling-approach"&gt;SynthID-Text’s Tournament sampling approach
&lt;/h3&gt;&lt;p&gt;所謂的 Tournament 就是讓候選 token 去競賽，這邊會先定義要用到的 watermark function g 的數量 &lt;span class="math math-inline"&gt;$m$&lt;/span&gt;，figure 2 上半部的右邊可以看到有 &lt;span class="math math-inline"&gt;$m=3$&lt;/span&gt; 個 function &lt;span class="math math-inline"&gt;$g_1$&lt;/span&gt; &lt;span class="math math-inline"&gt;$g_2$&lt;/span&gt; &lt;span class="math math-inline"&gt;$g_3$&lt;/span&gt;，彼此是獨立的 pseudorandom number functions (偽隨機函數)。&lt;/p&gt;
&lt;p&gt;這個 function g 會給一個 score，公式會像這樣 &lt;span class="math math-inline"&gt;$g_{l}(x_t, r_t)$&lt;/span&gt;，在 figure 2 的例子輸出只有 0 或 1。也就是說同一個 token 在不同的 watermark function 可能會得到不同的輸出。function g 出來的分數我接下來都簡稱為 &lt;code&gt;g-score&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;在 figure 2 下半部可以看到比賽流程，這邊會先定義 sample 的候選數量 &lt;span class="math math-inline"&gt;$m$&lt;/span&gt;，從 LLM 的輸出機率中 sample &lt;span class="math math-inline"&gt;$M=2^m$&lt;/span&gt; 個 token 出來，而且同一個 token 可能會被選到多次。像下圖的 &lt;span class="math math-inline"&gt;$m$&lt;/span&gt; 定義為 3，所以會有八個，不過這邊有四組重複的。&lt;span class="math math-inline"&gt;$m=3$&lt;/span&gt; 意味著會經過 3 輪比賽，每一輪取分數高者獲勝，如果同分就隨機選一個，最後那個 token 就會是 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="figure2 下半部" class="gallery-image" data-flex-basis="494px" data-flex-grow="205" height="934" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament_hu_92f240108ec417fc.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament_hu_b8de37d119afc8d9.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament.png 1924w" width="1924"&gt;&lt;/p&gt;
&lt;p&gt;前面作者有提到這套方法可以用在拿不到 LLM 權重的情況，我一開始想說這不還是要拿到機率分佈嗎？後來想到 &lt;code&gt;openai-python&lt;/code&gt; 套件在呼叫的時候有一個參數 &lt;code&gt;n&lt;/code&gt; 可以生成多份獨立的完成結果，不過他也不是逐 token 的，所以&amp;hellip;不太確定怎麼用在完全黑箱的情況下。誒等等，我想到這個有沒有機會做呀，不過這就類似 &lt;a class="link" href="https://arxiv.org/abs/2410.02099" target="_blank" rel="noopener"
 &gt;A Watermark for Black-Box Language Models&lt;/a&gt; 提到的，會有很大量的推論成本。&lt;/p&gt;
&lt;p&gt;&lt;img alt="openai-python 原始碼中 create 參數 n的用途，但還是不能逐個 token 取樣，應該是因為這樣會大幅拖累 server 的 inference 速度" class="gallery-image" data-flex-basis="1318px" data-flex-grow="549" height="344" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/openai-python-n-param.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/openai-python-n-param_hu_925a06acf843894b.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/openai-python-n-param_hu_79c85d33e25e5c97.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/openai-python-n-param.png 1890w" width="1890"&gt;&lt;/p&gt;
&lt;p&gt;不過到這邊也不難發現 SynthID-Text 和 KGW 最大的差異就是在於不需要修改 logits (可以參考下圖我擷取自 KGW 原始論文 algorithm 2 的第四步驟)，KGW 是直接把修改 logits 後的 LLM 輸出當作有浮水印訊號的文字；SynthID 則是去取樣更多文字，然後 g function 數值高的獲勝 (還要贏每一輪)。KGW 這樣改 logits 的方式是很容易影響文字輸出品質的，而 SynthID 則比較不會，這個後面的章節會提到。&lt;/p&gt;
&lt;p&gt;&lt;img alt="擷取自 KGW 原始論文 algorithm 2 的第四步驟可以看到修改 logits 的意思" class="gallery-image" data-flex-basis="551px" data-flex-grow="229" height="654" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/kgw-algorithm2-step4.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/kgw-algorithm2-step4_hu_4f61e67a13717c36.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/kgw-algorithm2-step4.png 1504w" width="1504"&gt;&lt;/p&gt;
&lt;h3 id="watermark-detection"&gt;Watermark detection
&lt;/h3&gt;&lt;p&gt;偵測方式非常簡單，就是去計算這段可疑文字的 &lt;code&gt;g-score&lt;/code&gt; 即可，因為文字的採樣偏好 &lt;code&gt;g-score&lt;/code&gt; 高者，公式如下：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\text{Score}(x) = \frac{1}{mT} \sum_{t=1}^{T} \sum_{\ell=1}^{m} g_\ell(x_t, r_t).$$&lt;/div&gt;&lt;p&gt;這邊 m 是 g function 的數量，T 是 token 數量，其實就是把每一輪的每一個 token 的分數加總後平均。如果 Score 異常高，那表示這段文字極有可能是含有 SynthID-Text 的輸出。&lt;/p&gt;
&lt;p&gt;有兩種會影響浮水印偵測效能的因素，一個是文字的長度，長度越長偵測就越準；另一個因素則是 entropy，就是輸出下一個 token 的確定程度。如果今天 LLM 分部的 entropy 特低，表示模型每一次 sample 幾乎都會拿到一樣的回覆。直覺想一個例子就是我告訴 ChatGPT 給我生成 100 個 a 好了，那他怎麼可能給我生成 b，這 100 個 a 要怎麼去加浮水印？反之，如果要他生成一篇小說，那可能性就非常多樣且長度也很長。這和其他浮水印方法遇到的問題可以說是一模一樣。&lt;/p&gt;
&lt;p&gt;作者提到，LLM 分佈的 entropy 大小有很多因素會影響，越大的模型對自己的輸出就越有自信所以 entropy 會越低，如果有經過 RLHF 也可能降低 entropy，此現象又稱為 mode collapse (在 GAN model 常常用到的詞)，還有前面我提的例子的 prompt 也是、temparature 也是，還有很多。&lt;/p&gt;
&lt;p&gt;如果增加 Tournament layer m 的數量，可以讓每一個 token 提供更多 watermark evidence，同時降低 Score 公式的變異數。不過偵測的能力也不會隨著 layer 提升而無限增加 (直覺理解就是你後面的 layer 能選的多樣性也不多了，已經被前面選過多次了)&lt;/p&gt;
&lt;p&gt;本篇論文測試的 &lt;span class="math math-inline"&gt;$m$&lt;/span&gt; 如果沒有特別講都設定成 &lt;span class="math math-inline"&gt;$30$&lt;/span&gt;。&lt;/p&gt;
&lt;h3 id="preserving-the-quality-of-generative-text"&gt;Preserving the quality of generative text
&lt;/h3&gt;&lt;p&gt;這邊要提到一個詞叫「non-distortionary」，在過去的文獻這個詞有點混淆了，作者把所謂讓文字失真這件事定義成幾種不同的程度，從最弱到最強去分。其中最弱的就是 single-token non-distortionary。定義是當我們對 random seed &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 取平均時，由 watermark sampling algorithm 採樣的分佈，要等於從 &lt;span class="math math-inline"&gt;$P_{LM}(\cdot|x_{&amp;lt;t})$&lt;/span&gt; 取樣的分佈。&lt;/p&gt;
&lt;p&gt;我一開始有點看不懂但我仔細想想他要怎麼驗證這件事就通了，其實就是去產生各種不同的 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 然後把經由這些 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 的 sampling algorithm 產生的文字去取平均就知道了。&lt;/p&gt;
&lt;p&gt;更強的 non-distortionary 定義就會擴展到更長的 token 而不是 single-token 而已，可能是整個序列之類的。就是從 &lt;span class="math math-inline"&gt;$P(x_t)$&lt;/span&gt; 到要求 &lt;span class="math math-inline"&gt;$P(x_1, x_2, ..., x_t)$&lt;/span&gt; 都要保證和 LLM 的分佈相同。(這點其實就是 &lt;a class="link" href="https://arxiv.org/abs/2410.02099" target="_blank" rel="noopener"
 &gt;A Watermark for Black-Box Language Models&lt;/a&gt; 提到的 distortion-free 的概念)&lt;/p&gt;
&lt;p&gt;至於 SynthID-Text 為什麼可以做到 single-token non-distortionary，在 Supplementary Information Section G.1 有證明，當競賽的候選只有兩個的情況，那就有 single-token non-distortionary 的性質。如果大於兩個那就不可能會 non-distortionary。&lt;/p&gt;
&lt;h4 id="大於-2-不可能-non-distortionary-的證明如下"&gt;大於 2 不可能 non-distortionary 的證明如下：
&lt;/h4&gt;&lt;p&gt;假設 LLM 在只有兩個 token 的 vocabulary &lt;span class="math math-inline"&gt;$V=\{a,b\}$&lt;/span&gt; 中抽樣 &lt;span class="math math-inline"&gt;$N$&lt;/span&gt; 次，&lt;span class="math math-inline"&gt;$a$&lt;/span&gt; 產生的機率為 &lt;span class="math math-inline"&gt;$p$&lt;/span&gt;，&lt;span class="math math-inline"&gt;$b$&lt;/span&gt; 產生的機率為 &lt;span class="math math-inline"&gt;$1-p$&lt;/span&gt;。在 &lt;span class="math math-inline"&gt;$N$&lt;/span&gt; 次抽樣中，&lt;span class="math math-inline"&gt;$a$&lt;/span&gt; 出現的次數 &lt;span class="math math-inline"&gt;$i$&lt;/span&gt; 符合二項式分佈 &lt;span class="math math-inline"&gt;$Binomial(N,p)$&lt;/span&gt;。我們要算的是 &lt;span class="math math-inline"&gt;$a$&lt;/span&gt; 最後被選為 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 的機率 &lt;span class="math math-inline"&gt;$p_{wm}(a)$&lt;/span&gt;，對 &lt;span class="math math-inline"&gt;$r$&lt;/span&gt; 取期望後希望它等於 &lt;span class="math math-inline"&gt;$p$&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;考慮三種情況&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a 被選中 0 次，也就是 &lt;span class="math math-inline"&gt;$(1-p)^N \times 0=0$&lt;/span&gt;。&lt;/li&gt;
&lt;li&gt;a 被選中 N 次，也就是 &lt;span class="math math-inline"&gt;$p^N\times 1=p^N$&lt;/span&gt;。&lt;/li&gt;
&lt;li&gt;a 和 b 都有被選中，就是後面這個二項式分佈的式子，後面就是 g function 的數值，如果平手的話就直接是 &lt;span class="math math-inline"&gt;$\frac{i}{N}$&lt;/span&gt; 因為隨機挑。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;對 r 取期望值&lt;/strong&gt;，因為 &lt;span class="math math-inline"&gt;$p^N$&lt;/span&gt; 和二項式分佈那坨都和 r 沒關係所以可以取出來，等於說是取後面這項的期望值。這邊 &lt;span class="math math-inline"&gt;$C_{f_g}$&lt;/span&gt; 是 Collision probability (碰撞機率或者說平手機率) 的意思，利用指示函數 (Indicator function) 對指示函數取期望值，結果正好等於該事件發生的機率，而 &lt;span class="math math-inline"&gt;$\frac{1-C_{f_g}}{2}$&lt;/span&gt; 就是這樣來的，1 扣掉 &lt;span class="math math-inline"&gt;$C_{f_g}$&lt;/span&gt; 後剩下的就是 &lt;span class="math math-inline"&gt;$P(g_1(a) &amp;gt; g_1(b))&amp;#43;P(g_1(a) &amp;lt; g_1(b))$&lt;/span&gt; 的機率，而雜湊函數的設計就是讓他是公平的，所以這邊可以直接除以二。
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned}
\mathbb{E}_r \left[ p_{\mathrm{wm}}(a \mid p_{\mathrm{LM}}, r, f_g, N, 1) \right] 
&amp;amp;= \mathbb{E}_r \left[ p^N &amp;#43; \sum_{i=1}^{N-1} \binom{N}{i} p^i (1-p)^{N-i} \left[ \mathbb{1}_{g_1(a, r) &amp;gt; g_1(b, r)} &amp;#43; \mathbb{1}_{g_1(a, r) = g_1(b, r)} \frac{i}{N} \right] \right] \\
&amp;amp;= p^N &amp;#43; \sum_{i=1}^{N-1} \binom{N}{i} p^i (1-p)^{N-i} \left[ \frac{1 - C_{f_g}}{2} &amp;#43; C_{f_g} \frac{i}{N} \right]
\end{aligned}$$&lt;/div&gt;&lt;p&gt;
這個期望值的式子展開後會長得像 &lt;span class="math math-inline"&gt;$c_0\cdot p^0 &amp;#43; c_1\cdot p^1 &amp;#43; ...c_N \cdot p^N$&lt;/span&gt; ，而這個東東要恆等 (Identically Equal，在所有可能的變數取值下都成立) 於 &lt;span class="math math-inline"&gt;$p$&lt;/span&gt; (就是 &lt;span class="math math-inline"&gt;$1\cdot p^1$&lt;/span&gt;)，才符合 non-distortionary 的期待。也就是說要成立的話，因為 Polynomial Identity Theorem (多項式恆等定理) 的關係，&lt;span class="math math-inline"&gt;$c_1$&lt;/span&gt; 必須為 1，其他係數都要是 0。只要找出其他係數非 0 那就矛盾&lt;/p&gt;
&lt;p&gt;&lt;span class="math math-inline"&gt;$p^2$&lt;/span&gt; 係數的展開與計算，這邊 &lt;span class="math math-inline"&gt;$N&amp;gt;2$&lt;/span&gt; 且 &lt;span class="math math-inline"&gt;$C_{f_g} \neq 1$&lt;/span&gt; 所以會是非 0，矛盾了。&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned} &amp;amp;\sum_{i=1}^{2} \binom{N}{i} \binom{N-i}{2-i} (-1)^{2-i} \left[ \frac{1 - C_{f_g}}{2} &amp;#43; C_{f_g} \frac{i}{N} \right] \\ &amp;amp;= - N(N-1) \left[ \frac{1 - C_{f_g}}{2} &amp;#43; C_{f_g} \frac{1}{N} \right] &amp;#43; \frac{N(N-1)}{2} \left[ \frac{1 - C_{f_g}}{2} &amp;#43; C_{f_g} \frac{2}{N} \right] \\ &amp;amp;= \frac{N(N-1)}{4} \left[ C_{f_g} - 1 \right] \end{aligned}$$&lt;/div&gt;&lt;h4 id="當一層是兩個樣本去競賽時必定-non-distortionary-的證明如下"&gt;當一層是兩個樣本去競賽時必定 non-distortionary 的證明如下：
&lt;/h4&gt;&lt;p&gt;這個是 single layer (&lt;span class="math math-inline"&gt;$m=1$&lt;/span&gt;) &lt;span class="math math-inline"&gt;$p_{wm}$&lt;/span&gt; 的定義，分子是「在 &lt;span class="math math-inline"&gt;$N$&lt;/span&gt; 次抽樣中，每一個樣本的分數都小於或等於 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 的機率」減去「在 &lt;span class="math math-inline"&gt;$N$&lt;/span&gt; 次抽樣中，每一個樣本的分數都嚴格小於 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 的機率（代表最高分比 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 還低）。」，兩者相減就是最高分數正好等於 &lt;span class="math math-inline"&gt;$g_1(x_t, r)$&lt;/span&gt; 的機率。分母則是所有和 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 同 g-value 的 token 的機率總和 (包含 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 自己)。&lt;/p&gt;
&lt;div class="math math-block"&gt;$$p_{wm}(x_t \mid p, r, f_g, N, 1) = \begin{cases}
p(x_t) \left( \frac{p(V \le g_1(x_t, r))^N - p(V &amp;lt; g_1(x_t, r))^N}{p(V = g_1(x_t, r))} \right) &amp;amp; \text{if } p(x_t) \neq 0 \\
0 &amp;amp; \text{if } p(x_t) = 0.
\end{cases}$$&lt;/div&gt;&lt;p&gt;
也可以想成下式：&lt;/p&gt;
&lt;div class="math math-block"&gt;$$p_{\mathrm{wm}}(x_t) = \underbrace{\left[ p\left(V^{\le g_1(x_t,r)}\right)^N - p\left(V^{&amp;lt; g_1(x_t,r)}\right)^N \right]}_{\text{最高分恰好等於 } g_1(x_t, r) \text{ 的機率}} \times \underbrace{\frac{p(x_t)}{p\left(V^{= g_1(x_t,r)}\right)}}_{\text{在平手群體中，} x_t \text{ 贏得選取的機率}}$$&lt;/div&gt;&lt;p&gt;將 &lt;span class="math math-inline"&gt;$N=2$&lt;/span&gt; 帶入後可以寫成以下，就是按照原始 LLM 的機率分佈去乘以「Vocabulary 中分數和 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 剛好相同的機率」+「Vocabulary 中分數大於或小於的機率」，這邊之所以可以直接 &lt;span class="math math-inline"&gt;$2p(V^{g_1(x_t,r)})$&lt;/span&gt; ，這個 2 倍純粹來自代數：&lt;span class="math math-inline"&gt;$\le$&lt;/span&gt; 可以拆成 &lt;span class="math math-inline"&gt;$&amp;lt;$&lt;/span&gt; 和 &lt;span class="math math-inline"&gt;$=$&lt;/span&gt;，所以 &lt;span class="math math-inline"&gt;$A&amp;#43;B = (B &amp;#43; p(V^{=})) &amp;#43; B$&lt;/span&gt; 會多出一倍的 &lt;span class="math math-inline"&gt;$p(V^{&amp;lt;g_1(x_t,r)})$&lt;/span&gt;，這一步還沒用到雜湊函數的性質。機率可以變成指示函數的加總所以有了最後的式子。&lt;/p&gt;
&lt;p&gt;平方差公式：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$ A^2 - B^2 = (A - B)(A &amp;#43; B) $$&lt;/div&gt;&lt;p&gt;然後 &amp;ldquo;&lt;span class="math math-inline"&gt;$\le$&lt;/span&gt;&amp;rdquo; 可以拆成 &amp;ldquo;&lt;span class="math math-inline"&gt;$&amp;lt;$&lt;/span&gt;&amp;rdquo; 和 &amp;ldquo;&lt;span class="math math-inline"&gt;$=$&lt;/span&gt;&amp;rdquo;, &lt;span class="math math-inline"&gt;$A = B &amp;#43; p\left(V^{= g_1(x_t, r)}\right)$&lt;/span&gt;：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$ A - B = p\left(V^{= g_1(x_t, r)}\right), \quad A &amp;#43; B = p\left(V^{= g_1(x_t, r)}\right) &amp;#43; 2p\left(V^{&amp;lt; g_1(x_t, r)}\right) $$&lt;/div&gt;&lt;p&gt;帶回去消掉：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$ p_{\text{wm}}(x_t) = \underbrace{(A - B)}_{p\left(V^{= g_1}\right)} (A &amp;#43; B) \times \frac{p(x_t)}{\underbrace{p\left(V^{= g_1(x_t, r)}\right)}_{\text{cancels}}} = p(x_t) \left[ p\left(V^{= g_1}\right) &amp;#43; 2p\left(V^{&amp;lt; g_1}\right) \right] $$&lt;/div&gt;&lt;p&gt;機率就可以寫成，並還原為 indicator function 的加總：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned}
p_{\mathrm{wm}}(x_t \mid p, r, f_g, 2, 1) 
&amp;amp;= p(x_t) \left( p(V^{= g_1(x_t, r)}) &amp;#43; 2 p(V^{&amp;lt; g_1(x_t, r)}) \right) \quad \\
&amp;amp;= p(x_t) \left( \sum_{x \in V} p(x) \left[ \mathbb{1}_{g_1(x, r) = g_1(x_t, r)} &amp;#43; 2 \mathbb{1}_{g_1(x, r) &amp;lt; g_1(x_t, r)} \right] \right) \quad 
\end{aligned}$$&lt;/div&gt;&lt;p&gt;
然後我們要對 r 取期望值 &lt;span class="math math-inline"&gt;$\mathbb{E}_r[p_{wm}]$&lt;/span&gt;，也就只要算下面這個，可以發現這邊有用到雜湊函數的性質，也就是把 &lt;span class="math math-inline"&gt;$2\mathbb{E}[\mathbb{1}_&amp;lt;]$&lt;/span&gt; 拆成 &lt;span class="math math-inline"&gt;$\mathbb{E}[\mathbb{1}_&amp;lt;] &amp;#43; \mathbb{E}[\mathbb{1}_&amp;gt;]$&lt;/span&gt;：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned}
&amp;amp;\mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) = g_1(x_t, r)} \right] &amp;#43; 2 \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) &amp;lt; g_1(x_t, r)} \right] \\
&amp;amp;= \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) = g_1(x_t, r)} \right] &amp;#43; \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) &amp;lt; g_1(x_t, r)} \right] &amp;#43; \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) &amp;gt; g_1(x_t, r)} \right] \quad \text{(by Methods Def 4)} \\
&amp;amp;= \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) = g_1(x_t, r)} &amp;#43; \mathbb{1}_{g_1(x, r) &amp;lt; g_1(x_t, r)} &amp;#43; \mathbb{1}_{g_1(x, r) &amp;gt; g_1(x_t, r)} \right] \\
&amp;amp;= \mathbb{E}_r [1] \\
&amp;amp;= 1.
\end{aligned}$$&lt;/div&gt;&lt;p&gt;帶回去，得到了。(multi-layer 也有證明出一樣的結果)
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned}
\mathbb{E}_r \left[ p_{\mathrm{wm}}(x_t \mid p, r, f_g, 2, 1) \right] 
&amp;amp;= p(x_t) \left( \sum_{x \in V} p(x) \right) \\
&amp;amp;= p(x_t).
\end{aligned}$$&lt;/div&gt;&lt;p&gt;然後 Section G.2 又有詳細描述透過 repeated context masking 的方式來達到 non-distortionary for one or more sequences 性質的證明。就是去避免同一個 context 再次出現時，又套用相同的 watermark bias。這個就留給大家自己去看吧，反正我是相信他了，絕對不是懶得看了。&lt;/p&gt;
&lt;p&gt;這篇文章的 Supplementary Information 根本在寫課本了，從基本的開始講，蠻值得一看，但我有點累了。&lt;/p&gt;
&lt;h3 id="ensuring-computational-scalability"&gt;Ensuring computational scalability
&lt;/h3&gt;&lt;p&gt;因為只要在 sampling layer 做一些改動，所以不會重新執行 LLM 本身，因此附帶的計算成本可以忽略。且這些候選 token 的 g-value 可以平行運算，很適合 vectorization。&lt;/p&gt;
&lt;p&gt;要注意一點就是 production system 通常不是一般的 autoregressive loop，像是 production 可能會利用 speculative sampling 的方式，就是一種利用一個更小更快的 model 去預測 token 讓 LLM 可以更快運算的方法。target LLM 會再去檢查這些預測的 Token，就不用 Target LLM 每次都要浪費時間 forward，多出來的這些預測 token 可以平行運算。&lt;/p&gt;
&lt;p&gt;以下是 speculative sampling 的演算法，這邊 q 是 target LLM，p 是小模型&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;4 ~ 6 行，先讓小模型 draft K 個候選 token&lt;/li&gt;
&lt;li&gt;7 行，大模型把這 K 個 token 一起輸入，就可以平行運算 logits&lt;/li&gt;
&lt;li&gt;8 ~ 15 行，檢查的步驟，對每一個 drafted token &lt;span class="math math-inline"&gt;$\tilde{x_t}$&lt;/span&gt; 抽取隨機均勻數 &lt;span class="math math-inline"&gt;$r \sim U[0,1]$&lt;/span&gt; ，如果 &lt;span class="math math-inline"&gt;$r &amp;lt; min(1, \frac{q(\tilde{x_t})}{p(\tilde{x_t})})$&lt;/span&gt; 就把小模型 q 的 token 納入最後結果。如果不符合就立刻中斷本輪驗證，然後從殘差分佈中重新抽樣正確的 token 替換&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這邊值得注意的是 reject 的情況，就是要避免被拒絕的那個 token 變高，所以才要用這個式子，把兩個機率分佈相減。還有他們比較的方式，是用 target model 機率除以小 LLM 機率，越接近 1 甚至 &amp;gt; 1 就越有可能被接受，所以就是比較大模型和小模型對這個 token 的認同度的概念。然這邊也利用了 Uniform，因為小魔型的機率乘以這個 accept rate 的機率剛好就會是 target LLM 的機率，這麼做才不會讓 sampling 的分佈和 target LLM 不同，才不會影響生成品質，這樣才公平。
&lt;img alt="擷取自 supplement information 的 speculative sampling 演算法 algorithm4" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="976" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm4-speculative-sampling.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm4-speculative-sampling_hu_3b5376cd52f6a632.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/algorithm4-speculative-sampling.png 1065w" width="1065"&gt;&lt;/p&gt;
&lt;p&gt;這邊右下角的 + 符號表示「Positive Part Operator / Rectified Unit」，效果就和 ReLU + L1 normalization 相同&lt;/p&gt;
&lt;p&gt;&lt;img alt="definition 34 定義一個 operator" class="gallery-image" data-flex-basis="1068px" data-flex-grow="445" height="166" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/definition34-positive-part-operator.png" width="739"&gt;&lt;/p&gt;
&lt;p&gt;在這之前還沒有人討論過怎麼把 generative watermarking 與 speculative sampling 結合，這是他的貢獻之一。這邊作者提出了兩種 generative watermarking scheme with speculative sampling 演算法，在 supplementary Information Section I.4：&lt;/p&gt;
&lt;h4 id="high-detectability-watermarked-speculative-sampling"&gt;high-detectability watermarked speculative sampling
&lt;/h4&gt;&lt;p&gt;目標是維持 watermark 的可偵測性，可能會降低 speculative sampling 的效率但是不會犧牲浮水印的訊號。這邊演算法 (algorithm5) 就不特別說明了，和 speculative sampling 的方法一樣，只是 target LLM 的機率分佈換成 watermark sampling function 的機率分佈而已。不過會增加成本，因為演算法要求直接算出 &lt;span class="math math-inline"&gt;$p_{wm}$&lt;/span&gt; 以及 &lt;span class="math math-inline"&gt;$q_{wm}$&lt;/span&gt; 的分佈。主要是慢在 reject 的機率高，被 reject 後還要算整個 Vocabulary 的 watermark 分佈。&lt;/p&gt;
&lt;p&gt;&lt;img alt="algorithm5 high-detectability watermarked speculative sampling" class="gallery-image" data-flex-basis="315px" data-flex-grow="131" height="810" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm5-high-detectability.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm5-high-detectability_hu_7f839a29c33e9fca.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/algorithm5-high-detectability.png 1066w" width="1066"&gt;&lt;/p&gt;
&lt;h4 id="fast-watermarked-speculative-sampling"&gt;fast watermarked speculative sampling
&lt;/h4&gt;&lt;p&gt;可以維持 speculative sampling 的效率，但是可偵測性可能下降。針對這個 approach 作者提出了 learned bayesian scoring function，讓偵測端更有效。&lt;/p&gt;
&lt;p&gt;以下演算法可以看到，他不需要算出 &lt;span class="math math-inline"&gt;$p_{wm}$&lt;/span&gt; &lt;span class="math math-inline"&gt;$q_{wm}$&lt;/span&gt; 之類的機率，只要能夠 sample 就好。然後還有雙金鑰的機制，Draft key &lt;span class="math math-inline"&gt;$k^D$&lt;/span&gt; 是小模型用的，Target Key &lt;span class="math math-inline"&gt;$k^T$&lt;/span&gt; 是大模型用的。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;4 ~ 6 行，一樣讓小模型產生 K 的 draft token，產生這些 token 時小模型用的是 &lt;span class="math math-inline"&gt;$k^D$&lt;/span&gt;。&lt;/li&gt;
&lt;li&gt;然後大模型開始跑平行運算，算出這 K 個位置未加浮水印的分佈&lt;/li&gt;
&lt;li&gt;然後用跟前面提到一樣的方式去檢查 draft token
&lt;ol&gt;
&lt;li&gt;有通過的話，那就是 accept，不過注意這個 token 保留的是小模型的 key 的 watermark&lt;/li&gt;
&lt;li&gt;沒通過的話，這時候大模型會用 &lt;span class="math math-inline"&gt;$k^T$&lt;/span&gt; 從分佈抽一個 token 補上，然後中斷這回合&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;之所以可以說他是 fast 是因為 algorithm 5 的 10 行比值是 &lt;span class="math math-inline"&gt;$\frac{q_{wm}(\tilde{x_t})}{p_{wm}(\tilde{x_t})}$&lt;/span&gt; 也就是說系統要把這幾萬個 token 都丟回 watermark sampling function 算一遍，但是 algorithm 6 第十行只要算 &lt;span class="math math-inline"&gt;$\frac{q(\tilde{x_t})}{p(\tilde{x_t})}$&lt;/span&gt; 就可以了。和完全沒有浮水印的原始 speculative sampling 一樣快。之所以要用 two key 也是考慮到機率獨立性的問題 (&lt;span class="math math-inline"&gt;$k^D$&lt;/span&gt; 和 &lt;span class="math math-inline"&gt;$k^T$&lt;/span&gt; 互相獨立抽樣)，這樣可以提升 target model 接受 draft model 的 token 機率，因為理論上 p 和 q 會很像，two key 等於說消除了 watermark 的干擾。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Fast watermarked speculative sampling algorithm 6" class="gallery-image" data-flex-basis="248px" data-flex-grow="103" height="1027" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm6-fast-watermarked.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm6-fast-watermarked_hu_d5c85b3ab2c78366.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/algorithm6-fast-watermarked.png 1062w" width="1062"&gt;&lt;/p&gt;
&lt;h2 id="evaluation"&gt;Evaluation
&lt;/h2&gt;&lt;p&gt;作者做了很多實驗，這邊只挑有趣的講。&lt;/p&gt;
&lt;p&gt;作者比較對象分為兩種，non-distortionary 和 distortionary，前者選擇當時最佳的 Gumbel sampling 後者則選擇 Soft Red List。為了公平比較 (like-for-like comparison)，作者把焦點放在 sampling algorithm 上，其他部分都維持相同 (像是 random seed generator、scoring 之類的)，對所有 baseline 作者使用相同的 sliding window random seed generator，以及相同的 repeated context masking。&lt;/p&gt;
&lt;p&gt;希望驗證 quality (不能影響文字品質) 和 scalability (不能 cost 太高)&lt;/p&gt;
&lt;h3 id="synthid-text-preserves-quality-including-in-a-large-scale--production-system"&gt;SynthID-Text preserves quality including in a large-scale- production system
&lt;/h3&gt;&lt;p&gt;在 gemini 還叫做 bard 的時候，他們就做了線上的測試，把 user query 一半丟給 watermarked sampling 一半丟給沒有 watermark 的，讓使用者透過 UI 上的 👍 和 👎 來評分。結果就是 thumbs-up rate 說差 0.01 (thumbs-down 則是差 0.02)，而且有 2000 萬筆喔，等於說幾乎沒差的意思，至少人類感覺不出來。&lt;/p&gt;
&lt;p&gt;為了提供其他人可以 reproduce 的實驗，作者用 Gemma 7B-IT (IT -&amp;gt; instruction-tuned) 對 300 個 ELI5 (explain like im five 取名來自知名的 Reddit 論壇，有很多複雜且開放式的大哉問) 問題來回答，然後一樣讓人類評分，以 side-by-side comparison 的方式 (應該就是 LM-SYS 那種)，對以下面向進行評分&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;grammaticality / coherence：文法與連貫性&lt;/li&gt;
&lt;li&gt;relevance：相關性&lt;/li&gt;
&lt;li&gt;correctness：正確性&lt;/li&gt;
&lt;li&gt;helpfulness：實用性／幫助程度&lt;/li&gt;
&lt;li&gt;overall quality：整體品質&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;果就是沒有統計上的差異，可以看到 Extended Data Table 1&lt;/p&gt;
&lt;p&gt;&lt;img alt="Extended data table 1" class="gallery-image" data-flex-basis="668px" data-flex-grow="278" height="649" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-table1.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-table1_hu_eb22f892f23fa9cd.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-table1_hu_4576ae7feffc2835.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-table1.png 1808w" width="1808"&gt;&lt;/p&gt;
&lt;p&gt;然後他還有做 perplexity 和 automated benchmark performance，結論就是 non-distortionary SynthID-Text 與 unwatermarked model 都沒有顯著差異。&lt;/p&gt;
&lt;h3 id="synthid-text-provides-better-detectability-than-existing-watermarks"&gt;SynthID-Text provides better detectability than existing watermarks
&lt;/h3&gt;&lt;p&gt;&lt;img alt="figure3 detection performance of SynthID-Text" class="gallery-image" data-flex-basis="417px" data-flex-grow="173" height="979" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/fig3-detection-performance.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/fig3-detection-performance_hu_eedc951637b242d0.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/fig3-detection-performance_hu_9aa6bb92d18c7bf7.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/fig3-detection-performance.png 1702w" width="1702"&gt;
model:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gemma 2B-IT&lt;/li&gt;
&lt;li&gt;Gemma 7B-IT&lt;/li&gt;
&lt;li&gt;Mistral 7B-IT
實驗採用 ELI5 資料集，都是一些需要具有解釋性的多句回答，我在想他們的目的是這樣的 prompt 會使輸出 entropy 高的意思。在 figure 3a 是 non-distortionary 的類別，可以看到 SynthID-Text 確實比 Gumbel sampling 的效果好，且可以看到 token 越長確實 TPR 就越高。注意這邊的縱軸是 &lt;span class="math math-inline"&gt;$TPR\ @\ FPR = 1\%$&lt;/span&gt; 也就是在 FPR 最多只能 1% 的情條件下，模型的 TPR 是多少 (可以想成 score 的門檻)。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果是在需要非常低 FPR 的場景，可以用 selective prediction mechanism 的方式，就是對那些 scoring function 沒有信心的 sample 直接不做判斷 (abstention)。系統會設定兩個分數門檻&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高門檻 &lt;span class="math math-inline"&gt;$\tau_{positive}$&lt;/span&gt;：根據 unwatermarked text 算出來，高於這個門檻才敢判斷為有 watermark (控制 FPR)&lt;/li&gt;
&lt;li&gt;低門檻 &lt;span class="math math-inline"&gt;$\tau_{negative}$&lt;/span&gt;：根據 watermarked text 算出來，低於這個門檻才敢判斷為無 watermark (控制 FNR)
如果 &lt;span class="math math-inline"&gt;$\tau_{positive} &amp;lt; \tau_{negative}$&lt;/span&gt; 表示目前長度的檢測能力非常好，完全不需要棄權就可以完成要求。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;figure 3b 就是在描述採用 selective prediction mechanism 的情況，縱軸是放棄率，可以看到 token 越多，detector 越不會放棄。&lt;/p&gt;
&lt;p&gt;figure 3c，低 perplexity 和高 TPR 的搭配在左上角，越靠近左上角越好。可以看到 SynthID-Text 與 Soft Red list 的方法相比，模型困惑度更低，表示句子的品質犧牲較少。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Extended data fig4" class="gallery-image" data-flex-basis="466px" data-flex-grow="194" height="1316" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4_hu_4c9f452e6afc4904.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4_hu_fb95c3e56fa710fc.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4_hu_25f19a90eeba13ff.png 2400w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4.png 2558w" width="2558"&gt;&lt;/p&gt;
&lt;p&gt;Extended data fig 4，這邊用的是一個叫 Self-BLUE 的指標，用來衡量文字的多樣性，數值越低表示 diversity 越高。可以看到 SynthID-Text 也是比 Gumbel sampling 的多樣性更高&lt;/p&gt;
&lt;h3 id="synthid-text-has-minimal-computational-impact"&gt;SynthID-Text has minimal computational impact
&lt;/h3&gt;&lt;p&gt;作者指出，Tournament sampling 花費的時間確實可能比 Gumbel 和 Soft Red List sampling 還要久，但是這些時間都還是遠小於 LLM 本身推論的時間，所以對系統整體的影響相較是比較小的。&lt;/p&gt;
&lt;p&gt;這邊作者做了一個實驗是當 Gemma 7B-IT 使用 4 個 v5e TPU 時，原始文字生成速度為 15.527 ms / token，加入 30-layer tournament sampling 後，時間來到 15.615 ms / token。latency 只多了 0.57%。作為比較，Gumbel 增加的 latency 為 0.26%，Soft Red List 則增加 0.28%。可以看到根本就沒什麼差。&lt;/p&gt;
&lt;h2 id="discussion"&gt;Discussion
&lt;/h2&gt;&lt;h3 id="contribution"&gt;Contribution
&lt;/h3&gt;&lt;p&gt;以下是我整理的 Contribution&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We have introduced SynthID-Text, a method for watermarking LLM text.&lt;/li&gt;
&lt;li&gt;SynthID-Text uses certain elements introduced in previous work, but differs in the use of the sampling algorithm, Tournament sampling, which we find provides superior detectability compared with existing methods. 採用了過去研究的部分元素，但多了一個創新 sampling 方法：tournament sampling，這樣的方法優於現有方法的檢測能力。&lt;/li&gt;
&lt;li&gt;SynthID-Text comes with rigorous and customizable non-distortion properties that can be configured to guarantee text quality preservation. SynthID-Text 具有可以客製化的 non-distortionary 特性 (兩個面向，一個是 tournament 每一場有幾個 competitors，如果剛好只有兩個那就是 single-token non-distortionary；另一個面向是 repeated context masking 的 K 值)，可以確保文字品質不受影響&lt;/li&gt;
&lt;li&gt;We have also proposed an algorithm to combine generative watermarking with speculative sampling. 提出 generative watermarking 與 speculative sampling 結合的演算法&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="limitations"&gt;Limitations
&lt;/h3&gt;&lt;p&gt;這種 generative watermark 的優點是跨語言穩定性高，且比 post hoc detector 還要好 (因為不會有遇到沒看過的資料的問題)。比較顯著的限制：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要服務提供商配合，如果不配合的話，那可能要搭配 post hoc detector 來檢驗。也就是說 SynthID-Text 也不是萬能解。&lt;/li&gt;
&lt;li&gt;開源模型通常是去中心化的方式部署，官方無法強制每一個人都帶有浮水印的機制去推論&lt;/li&gt;
&lt;li&gt;浮水印還是可能被竊取 (stealing，透過觀察大量 watermarked output 去推出 watermark 規則)、偽造 (Spoofing)、抹掉 (Scrubbing)&lt;/li&gt;
&lt;li&gt;改寫攻擊 (LLM paraphrasing)：用其他 LLM 來改寫具有浮水印的文字，其實很容易就把 watermark 訊號移除了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;啊我還有想到一個，對我們這樣的 LLM 應用開發者來說，其實我們也拿不到 sampling 的東東，應該說我們也沒辦法對 sampling 的過程做到如 SynthID-Text 這麼細節的操作。所以黑箱 API 的浮水印也是一個值得挑戰的問題。&lt;/p&gt;
&lt;h3 id="conclusion"&gt;Conclusion
&lt;/h3&gt;&lt;p&gt;這篇論文為 SynthID-Text 提供了證據證明 SynthID-Text 在真實世界是有可行性的，據他們所知，這是第一個大規模部署的 Generative text watermark。(但應該也只有 Google 可以做到這種程度XD)&lt;/p&gt;</description></item></channel></rss>