0508feifei commited on
Commit
62bbcc3
·
verified ·
1 Parent(s): 4d4cfde

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -70
app.py CHANGED
@@ -1,82 +1,37 @@
1
  import gradio as gr
2
- from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
3
 
4
- # --------------------------
5
- # 1. 配置差异化场景(明确风格指令)
6
- # --------------------------
 
 
7
  SCENARIOS = {
8
- "日常闲聊": "请翻译成非常口语化的表达,像朋友聊天一样,用轻松的语气:\n",
9
- "正式文档": "请翻译成严谨的书面语,保留所有专业术语,语气正式:\n",
10
- "旅游口语": "请翻译成突出地点/时间的旅游常用语,用词简单、语气轻松:\n",
11
- "商务邮件": "请翻译成礼貌的商务用语,使用正式敬语,体现专业性:\n",
12
- "网络热梗": "请翻译成当下流行的网络用语(可以用缩写/流行词):\n",
13
- "儿童话术": "请翻译成简单易懂的儿童口语,用词幼稚化、语气可爱:\n"
14
  }
15
 
16
- # --------------------------
17
- # 2. 加载支持指令的翻译模型(适配风格)
18
- # --------------------------
19
- # 选择支持多语言+指令的mbart模型(效果比opus-mt更适配风格)
20
- model_name = "facebook/mbart-large-50-many-to-many-mmt"
21
- tokenizer = AutoTokenizer.from_pretrained(model_name)
22
- model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
23
-
24
- # --------------------------
25
- # 3. 翻译函数(强化场景指令)
26
- # --------------------------
27
  def translate(text, src_lang, tgt_lang, scenario):
28
  if not text.strip():
29
- return "请输入要翻译的内容~"
30
-
31
- # 拼接“场景指令 + 待翻译文本”
32
- prompt = f"{SCENARIOS[scenario]}{text}"
33
-
34
- # 设置模型的源语言/目标语言(mbart的语言编码)
35
- lang_map = {
36
- "中文": "zh_CN",
37
- "英文": "en_XX"
38
- }
39
- src_code = lang_map[src_lang]
40
- tgt_code = lang_map[tgt_lang]
41
- tokenizer.src_lang = src_code # 设定源语言
42
-
43
- # 模型推理
44
- inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=512)
45
- outputs = model.generate(
46
- **inputs,
47
- forced_bos_token_id=tokenizer.lang_code_to_id[tgt_code], # 设定目标语言
48
- max_new_tokens=512,
49
- temperature=0.7 # 适当增加随机性,强化风格差异
50
- )
51
-
52
- return tokenizer.decode(outputs[0], skip_special_tokens=True)
53
 
54
- # --------------------------
55
- # 4. Gradio界面配置
56
- # --------------------------
57
- with gr.Blocks(title="多场景翻译工具") as demo:
58
- gr.Markdown("# 📝 多风格翻译助手(差异更明显)")
59
  with gr.Row():
60
- with gr.Column(scale=2):
61
- text_input = gr.Textbox(label="输入文本", lines=5, placeholder="在这里输入要翻译的内容...")
62
- src_lang = gr.Radio(["中文", "英文"], label="源语言", value="中文")
63
- tgt_lang = gr.Radio(["英文", "中文"], label="目标语言", value="英文")
64
- with gr.Column(scale=1):
65
- scenario = gr.Dropdown(
66
- list(SCENARIOS.keys()),
67
- label="翻译场景",
68
- value="日常闲聊"
69
- )
70
- translate_btn = gr.Button("开始翻译", variant="primary")
71
- text_output = gr.Textbox(label="翻译结果", lines=5)
72
-
73
- # 绑定函数
74
- translate_btn.click(
75
- fn=translate,
76
- inputs=[text_input, src_lang, tgt_lang, scenario],
77
- outputs=text_output
78
- )
79
 
80
- # 启动界面
81
  if __name__ == "__main__":
82
  demo.launch()
 
1
  import gradio as gr
2
+ from transformers import pipeline
3
 
4
+ # 加载稳定的中英互译模型
5
+ translator_zh2en = pipeline("translation", model="Helsinki-NLP/opus-mt-zh-en", device=-1)
6
+ translator_en2zh = pipeline("translation", model="Helsinki-NLP/opus-mt-en-zh", device=-1)
7
+
8
+ # 4种翻译场景
9
  SCENARIOS = {
10
+ "日常对话": "(口语化、简洁自然)",
11
+ "文档翻译": "(正式、准确,保留专业术语)",
12
+ "旅游场景": "(突出地点、时间等关键信息)",
13
+ "商务沟通": "(礼貌、专业的商务语境)"
 
 
14
  }
15
 
 
 
 
 
 
 
 
 
 
 
 
16
  def translate(text, src_lang, tgt_lang, scenario):
17
  if not text.strip():
18
+ return "请输入内容"
19
+ prompt = f"{SCENARIOS[scenario]}\n{text}"
20
+ if src_lang == "中文" and tgt_lang == "英文":
21
+ return translator_zh2en(prompt)[0]["translation_text"]
22
+ else:
23
+ return translator_en2zh(prompt)[0]["translation_text"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
+ # 界面
26
+ with gr.Blocks(title="多场景翻译助手") as demo:
27
+ gr.Markdown("# 多场景中英翻译工具")
 
 
28
  with gr.Row():
29
+ src = gr.Dropdown(["中文", "英文"], label="源语言", value="中文")
30
+ tgt = gr.Dropdown(["英文", "中文"], label="目标语言", value="英文")
31
+ scene = gr.Dropdown(list(SCENARIOS.keys()), label="翻译场景", value="日常对话")
32
+ input_box = gr.Textbox(label="输入", lines=4)
33
+ output_box = gr.Textbox(label="输出", lines=4)
34
+ gr.Button("翻译").click(translate, [input_box, src, tgt, scene], output_box)
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
 
36
  if __name__ == "__main__":
37
  demo.launch()