File size: 2,005 Bytes
f115ecd
 
 
 
 
 
ce736ae
f115ecd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ce736ae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import gradio as gr
from models.watermark_faster import watermark_model
import pdb
from options import get_parser_main_model

opts = get_parser_main_model().parse_args()
model = watermark_model(language='English', mode=opts.mode, tau_word=0.8, lamda=0.83)
def watermark_embed_demo(raw):

    watermarked_text = model.embed(raw)
    return watermarked_text

def watermark_extract(raw):
    is_watermark, p_value, n, ones, z_value = model.watermark_detector_fast(raw)
    confidence = (1 - p_value) * 100

    return f"{confidence:.2f}%"

def precise_watermark_detect(raw):
    is_watermark, p_value, n, ones, z_value = model.watermark_detector_precise(raw)
    confidence = (1 - p_value) * 100

    return f"{confidence:.2f}%"


demo = gr.Blocks()
with demo:
    with gr.Column():
        gr.Markdown("# Watermarking Text Generated by Black-Box Language Models")

        inputs = gr.TextArea(label="Input text", placeholder="Copy your text here...")
        output = gr.Textbox(label="Watermarked Text")
        analysis_button = gr.Button("Inject Watermark")
        inputs_embed = [inputs]
        analysis_button.click(fn=watermark_embed_demo, inputs=inputs_embed, outputs=output)

        inputs_w = gr.TextArea(label="Text to Analyze", placeholder="Copy your watermarked text here...")

        mode = gr.Dropdown(
            label="Detection Mode", choices=["Fast", "Precise"], default="Fast"
        )
        output_detect = gr.Textbox(label="Confidence (the likelihood of the text containing a watermark)")
        detect_button = gr.Button("Detect")

        def detect_watermark(inputs_w, mode):
            if mode == "Fast":
                return watermark_extract(inputs_w)
            else:
                return precise_watermark_detect(inputs_w)

        detect_button.click(fn=detect_watermark, inputs=[inputs_w, mode], outputs=output_detect)


if __name__ == "__main__":
    gr.close_all()
    demo.title = "Watermarking Text Generated by Black-Box Language Models"
    demo.launch()