File size: 1,566 Bytes
c3c0029
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
58
59
60
61
62
import os

import gradio as gr
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer

MODEL_ID = os.getenv("MODEL_ID", "Pectics/vad-macbert")
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID).to(DEVICE)
model.eval()


def predict(text):
    if not text or not text.strip():
        return {"error": "Input text is empty."}

    inputs = tokenizer(
        text,
        return_tensors="pt",
        padding=True,
        truncation=True,
        max_length=128,
    )
    inputs = {key: value.to(DEVICE) for key, value in inputs.items()}
    with torch.no_grad():
        outputs = model(**inputs)
    vad = outputs.logits.squeeze().tolist()
    return {"vad": vad}


with gr.Blocks(title="Vad MacBERT Demo") as demo:
    gr.Markdown(
        "\n".join(
            [
                "# Pectics/vad-macbert Demo",
                f"Model: `{MODEL_ID}`",
                "中文输入,返回序列分类头的 VAD 分数。",
            ]
        )
    )
    text_input = gr.Textbox(
        label="Input text",
        lines=4,
        placeholder="请输入中文文本。",
    )
    run_btn = gr.Button("Run")
    output = gr.JSON(label="VAD")

    run_btn.click(fn=predict, inputs=text_input, outputs=output)

    gr.Examples(
        examples=[
            "这部电影让我很感动。",
            "我对这个结果很失望。",
        ],
        inputs=text_input,
    )

demo.launch()