0508feifei commited on
Commit
4d4cfde
·
verified ·
1 Parent(s): 6e1ac6a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -25
app.py CHANGED
@@ -1,37 +1,82 @@
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()
 
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()