![]()
4月1日,開發者@francistrdev在dev.to扔出一道謎題:一首多行詩,被凱撒密碼(Caesar cipher,一種字母位移加密法)攪成亂碼。但和常規題目不同,這不是單密鑰加密——每行用了不同的位移值。7條評論里,沒人給出完整解法。
這篇技術筆記的作者決定用自動化方案硬解。他拉上Gemini做配對編程,迭代出一套LLM(大語言模型)驅動的破解流程。項目代號:DecipherLM。最終方案用了Qwen2.5-0.5B——一個只有5億參數的小模型——干翻了1.35億參數的Hugging Face方案。
第一回合:用困惑度打分,踩了"多數暴政"的坑
傳統頻率分析靠找E、T字母出現次數,對長文本有效,短詩直接失效。團隊轉向LLM困惑度評分(Perplexity Scoring)。
原理很直白:把一行詩用25種位移值各試一遍,哪個版本讀起來最像人話,困惑度就最低。LLM在數萬億token上訓練過,對"像不像英語"有肌肉記憶。
第一版假設整首詩用同一個位移值。計算全詩在25種位移下的平均困惑度,取最小值。
結果慘敗。詩的第2、3、6行用了+17位移,其余用+9。少數行的高困惑度"毒化"了整體評分,模型找不到能讓全文通順的單一密鑰。
作者復盤:多數行的"正確"被少數行的"錯誤"拖垮了。
第二回合:逐行獨立評分,發現位移值會聚類
轉向逐行獨立評分。每行各自找困惑度最低的位移值,不再強求統一。
進展:部分成功。但新問題浮現——某些行在+14、+4這類"噪聲"位移上困惑度更低,解密出來是亂碼。
作者觀察到一個規律:這些位移值不是隨機分布,而是聚成幾組,每組內部遵循同一模式(統計學里的"眾數"概念)。
強制所有行只能從"可信池"里選,比如[9, 17]。
但135M參數的Hugging Face模型沒有改善。作者懷疑是模型問題,想換SLM(小語言模型),又得避開跑不動的LLM。可選范圍縮窄后,鎖定Qwen2.5-0.5B。
第三回合:0.5B模型的字符級感知,終結亂局
Qwen2.5-0.5B的優勢在字符級感知。換模型后,方案終于跑通。
噪聲位移(+14、+4等)被系統排除,模型只允許從可信池[9, 17]里選。最終輸出:
Eager clicks often spoil the claim.
Vows are made I refuse to break,
Games of trust begin again.
Once you choose to follow through,
I umuwzg pcua i aqtdmz axwwv.
Gentle words, familiar flow,
Even fewer suspect as muc
第5行仍是亂碼。作者檢查原文發現,這行在發布時就是殘缺的——不是解密失敗,是題目本身有缺損。
技術細節:困惑度評分 + 聚類約束 + 小模型字符感知,三層過濾鎖死正確解。
一個反直覺的結論
整個項目最諷刺的點:不是更大的模型更好,而是更懂"字母怎么排列"的模型更好。135M模型在句子級統計上可能更準,但凱撒密碼玩的是字符級變形。0.5B的Qwen在字符級訓練上做了針對性優化,反而對癥下藥。
作者把完整代碼和迭代日志留在了GitHub。DecipherLM現在能處理任意多行凱撒謎題,自動識別聚類模式,輸出可信位移組合。
最后一行詩被截斷在"as muc"——你猜原句想說什么?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.