Skip to main content
. 2025 Jul 24;27(8):784. doi: 10.3390/e27080784
Algorithm 1 Information-Theoretic Watermark Embedding
Require: prompt, LM, EMB, γ, ρ, τ, NGram, k, α
Ensure: watermarked_text
  •   1:

    Initialize watermarked_text = “”, bits_embedded = 0

  •   2:

     Htotal0      ▹ Track total entropy manipulation

  •   3:

     PLM(prompt)      ▹ Initial probability distribution

  •   4:

     while not termination condition do

  •   5:

         t0argmaxtP(t|prompt)      ▹ Maximum likelihood token

  •   6:

         HoriginaltP(t)logP(t)      ▹ Original entropy

  •   7:

         et0EMB(t0)        ▹ Token embedding

  •   8:

         Nτ(t0){t:cos(et0,EMB(t))>τ}    ▹ Semantic neighborhood

  •   9:

         PngramNGram(watermarked_text)      ▹ N-gram probabilities from context

  •   10:

        rUniform(0,1)

  •   11:

        if bits_embedded / len(watermarked_text) < ρ then

  •   12:

             GreenList,RedListPartition(Nτ(t0),h)

  •   13:

             PwatermarkModifyDistribution(P,GreenList,RedList,γ)    ▹ Boost green tokens by γ, zero red tokens

  •   14:

             HwatermarktPwatermark(t)logPwatermark(t)

  •   15:

             ΔH|HoriginalHwatermark|      ▹ Entropy change

  •   16:

             if ΔH<δentropy then      ▹ Entropy constraint

  •   17:

                   tSample(Pwatermark,Pngram,α)      ▹ Equation (6)

  •   18:

                   watermarked_text += t

  •   19:

                   bits_embedded += 1tGreenList

  •   20:

                   HtotalHtotal+ΔH

  •   21:

             else

  •   22:

                   tSample(P,Pngram,α)      ▹ Fallback to original

  •   23:

                   watermarked_text += t

  •   24:

             end if

  •   25:

         else

  •   26:

             tSample(P,Pngram,α)

  •   27:

             watermarked_text += t

  •   28:

         end if

  •   29:

         prompt ← Update(prompt, t)

  •   30:

         PLM(prompt)      ▹ Update distribution

  •   31:

     end while

  •   32:

     return watermarked_text, Htotal