MKMK 的 AI 筆記
動手學大模型 12 問

第 6 篇/共 12 篇

怎麼知道一段文字是不是 AI 寫的?

閱讀約 9 分鐘(約 1,593 字)發布 分類 一人公司工作流+學習系列

#AI 安全#水印#AI 偵測

怎麼知道一段文字是不是 AI 寫的?

模型產生文字時可以偷偷留下統計上的記號,再用演算法檢查。但翻譯、改寫會讓記號變淡,水印不是萬能的 AI 偵測器。

本文目錄
  1. 一句話回答
  2. 為什麼值得知道
  3. 白話原理
    1. KGW:綠色清單
    2. SIR 與 X-SIR:讓水印更耐改寫
  4. 教程裡實際做了什麼
  5. 動手試試
  6. 常見誤解
  7. 延伸閱讀

一句話回答

如果模型在產生文字時就「埋了水印」,可以用演算法算出這段文字帶有水印的強度,判斷它很可能出自該模型。但這只對有埋水印的模型有效,而且文字被翻譯或大幅改寫後,水印會變弱。水印是一種輔助工具,不是看一眼就能判定「AI 寫的」的萬能偵測器。

為什麼值得知道

AI 文字越來越像人寫的,學校擔心作業代寫,平台擔心大量灌文,新聞擔心假消息。很多人想要一個「AI 偵測器」,但市面上靠文風去猜的工具,誤判並不少見。

文字水印走的是另一條路:不是事後猜,而是產生的時候就留記號。了解它的原理和限制,你就知道:

  • 為什麼某些偵測結果只能當參考,不能當成定罪證據。
  • 為什麼「翻譯一下」常被討論成去水印的方法,以及研究者怎麼應對。
  • 為什麼這件事需要模型提供者配合,不是旁人說偵測就能偵測。

白話原理

KGW:綠色清單

最經典的方法常以作者姓氏縮寫稱為 KGW(Kirchenbauer 等人提出)。比喻如下:

  1. 模型每要寫下一個詞,先根據前一個詞和一把只有自己知道的「密鑰」,把整本字典隨機分成「綠色清單」和「紅色清單」。
  2. 產生文字時,稍微偏心綠色清單的詞,替它們的分數加一點分。
  3. 人讀起來幾乎感覺不到差別,但整篇文章裡綠色詞的比例會明顯偏高。

偵測時,用同一把密鑰重新算出每個位置的綠色清單,數一數綠色詞有幾個。如果文字跟水印無關,綠色詞大概只會落在隨機的比例附近;比例高得不尋常,就代表很可能有水印。這個「高得多不尋常」用 z 分數(z-score)表示,數字越大,水印越強。

SIR 與 X-SIR:讓水印更耐改寫

KGW 的綠色清單綁在「具體用了哪個詞」上,所以換詞改寫就容易把記號洗掉。

  • SIR(語意不變的穩健水印,Semantic Invariant Robust):改成依照前文的語意來決定偏好哪些詞,意思不變的改寫比較不容易破壞水印。
  • X-SIR:本章程式碼倉庫作者的研究,論文題目是〈水印能撐過翻譯嗎?〉。他們發現把文字翻成另一種語言,水印會大幅變弱;X-SIR 的做法是讓不同語言裡意思相近的詞落在同一組,提高跨語言的一致性。
方法 記號綁在哪裡 主要弱點
KGW 前一個詞+密鑰 換詞、改寫、翻譯
SIR 前文語意 跨語言仍會變弱
X-SIR 跨語言共通的語意分組 原文沒有宣稱完全不受攻擊影響

教程裡實際做了什麼

這章使用 GitHub 上的 X-SIR 程式碼倉庫,裡面實作了 X-SIR、SIR、KGW 三種水印,以及「改寫」(paraphrase)和「翻譯」(translation)兩種去除水印的攻擊,用來測試穩健性。

  1. 準備環境:下載倉庫、建立 Python 3.10 環境、安裝套件(原文說版本只是建議)。
  2. 準備資料:把提示句整理成 jsonl 檔,每行一個 prompt。範例用倉庫內附的英文 mC4 資料,共 500 條,嫌慢可以自己減量。
  3. 嵌入水印:用 baichuan-inc/Baichuan-7B 模型搭配 KGW,執行 gen.py 產生帶水印的回答。
  4. 偵測水印:用 detect.py 分別替「有水印的生成文字」和「沒有水印的原始資料」算 z 分數,比較兩邊差多少。
  5. 評估:用 eval_detection.py 算出 AUC、在固定誤報率下的偵測率(TPR)、F1,並畫 ROC 曲線。原文示範結果 AUC 為 1.000,代表在沒有攻擊的情況下幾乎能完全分開。
  6. 穩健性(選做):用 gpt-3.5-turbo-1106 把水印文字翻成中文,再重新評估,比較攻擊前後的分數變化。這一步需要自己的 OpenAI API 金鑰,也可以換成其他翻譯工具。

硬體需求:原文沒有寫。不過 7B 模型以半精度執行,一般需要有足夠顯存的 GPU,筆電大多跑不動。

動手試試

  • 先理解,再跑程式:拿一段英文,自己假裝用一個簡單規則(例如按字母分成兩半)當綠色清單,手算綠色詞比例,就能體會 z 分數在量什麼。這不需要任何硬體。
  • Colab 實作:X-SIR 支援的都是 7B 等級模型,免費版 Colab 的資源可能不夠,需要付費 GPU 或雲端主機。可以先把資料縮減到幾十條試跑。
  • 穩健性實驗:翻譯攻擊會呼叫外部 API,有費用;這部分屬於研究用途,目的是評估水印夠不夠耐用,不是教人去除水印。

本文刻意不提供任何去除水印的具體操作。研究攻擊是為了讓防禦更好,實際使用請遵守平台規範與學術倫理。

常見誤解

  • 「水印能偵測所有 AI 文字」:只有產生時有埋水印、而且你拿得到同一把密鑰和方法,才偵測得到。其他模型寫的文字,水印偵測器根本無從判斷。
  • 「z 分數高就是鐵證」:它是統計上的可能性,短文字的訊號本來就弱,也有誤判的可能。評估時才要看固定誤報率下的表現。
  • 「翻譯一下水印就完全消失」:翻譯會讓 KGW 這類方法明顯變弱,但 X-SIR 等研究正是在改善這點,效果要看實驗數字,不能一概而論。
  • 「有水印的文字讀起來比較差」:設計目標是人察覺不到,但偏好特定詞確實可能影響品質,這也是研究者要權衡的地方。

延伸閱讀

本文整理自上海交通大學《動手學大模型》第 5 章,原教程:https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter5。內容由 MK 以自己的話解說,如有錯誤歡迎留言指正。

追蹤 MK,掌握最新 AI 工具應用

每週分享 GitHub 飆星實測、AI 工具教學與提示詞,短影片版都在社群。