本文目录导读:

我来详细介绍一下如何使用HuggingFace进行机器翻译的Python脚本编写。
基础安装
首先安装必要的库:
pip install transformers torch sentencepiece sacremoses
使用pipeline进行翻译(最简单方式)
from transformers import pipeline
# 加载翻译pipeline
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-zh-en")
# 中文翻译成英文
text = "你好,世界!"
result = translator(text)
print(result[0]['translation_text']) # Hello, world!
# 英文翻译成中文
translator_en_zh = pipeline("translation", model="Helsinki-NLP/opus-mt-en-zh")
text_en = "Hello, world!"
result = translator_en_zh(text_en)
print(result[0]['translation_text']) # 你好,世界!
使用T5模型进行多语言翻译
from transformers import T5ForConditionalGeneration, T5Tokenizer
# 加载T5模型
model_name = "google/flan-t5-large"
tokenizer = T5Tokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name)
def translate_t5(text, source_lang="Chinese", target_lang="English"):
# 构建翻译提示
prompt = f"Translate from {source_lang} to {target_lang}: {text}"
# 编码输入
inputs = tokenizer(prompt, return_tensors="pt", max_length=512, truncation=True)
# 生成翻译
outputs = model.generate(
inputs.input_ids,
max_length=150,
num_beams=4,
temperature=0.7,
do_sample=True
)
# 解码输出
translation = tokenizer.decode(outputs[0], skip_special_tokens=True)
return translation
# 使用示例
text = "人工智能正在改变世界"
result = translate_t5(text)
print(result) # Artificial intelligence is changing the world
使用M2M100模型(支持多语言)
from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
# 加载M2M100模型
model_name = "facebook/m2m100_418M"
tokenizer = M2M100Tokenizer.from_pretrained(model_name)
model = M2M100ForConditionalGeneration.from_pretrained(model_name)
def translate_m2m(text, source_lang="zh", target_lang="en"):
# 设置源语言
tokenizer.src_lang = source_lang
# 编码输入
inputs = tokenizer(text, return_tensors="pt")
# 设置目标语言
forced_bos_token_id = tokenizer.get_lang_id(target_lang)
# 生成翻译
outputs = model.generate(
**inputs,
forced_bos_token_id=forced_bos_token_id,
max_length=150,
num_beams=5
)
# 解码输出
translation = tokenizer.decode(outputs[0], skip_special_tokens=True)
return translation
# 使用示例
text = "深度学习是机器学习的一个分支"
result = translate_m2m(text, "zh", "en")
print(result) # Deep learning is a branch of machine learning
批量翻译处理
from transformers import pipeline
from typing import List
import time
class BatchTranslator:
def __init__(self, model_name="Helsinki-NLP/opus-mt-zh-en"):
self.translator = pipeline("translation", model=model_name)
def translate_batch(self, texts: List[str], batch_size=8):
"""
批量翻译文本
"""
results = []
for i in range(0, len(texts), batch_size):
batch = texts[i:i + batch_size]
# 批量翻译
translations = self.translator(batch)
results.extend([t['translation_text'] for t in translations])
# 避免API限制(如果在线使用)
if i + batch_size < len(texts):
time.sleep(0.5)
return results
def translate_with_progress(self, texts: List[str]):
"""
带进度显示的翻译
"""
from tqdm import tqdm
results = []
for text in tqdm(texts, desc="Translating"):
result = self.translator(text)
results.append(result[0]['translation_text'])
return results
# 使用示例
translator = BatchTranslator()
texts = [
"你好,今天天气真不错",
"机器学习正在快速发展",
"自然语言处理技术日益成熟"
]
# 批量翻译
translations = translator.translate_batch(texts)
for original, translated in zip(texts, translations):
print(f"原文: {original}")
print(f"翻译: {translated}")
print("-" * 30)
高级功能:自定义翻译配置
from transformers import pipeline
import torch
class AdvancedTranslator:
def __init__(self, model_name="Helsinki-NLP/opus-mt-zh-en"):
# 使用GPU如果可用
device = 0 if torch.cuda.is_available() else -1
self.translator = pipeline(
"translation",
model=model_name,
device=device,
batch_size=4 # 设置批次大小
)
def translate_with_options(self, text: str, **kwargs):
"""
带自定义选项的翻译
"""
# 默认参数
default_params = {
'max_length': 200,
'num_beams': 4,
'temperature': 0.8,
'top_k': 50,
'top_p': 0.95,
'repetition_penalty': 1.2,
'no_repeat_ngram_size': 3
}
# 更新自定义参数
default_params.update(kwargs)
result = self.translator(
text,
**default_params
)
return result[0]['translation_text']
def translate_document(self, file_path: str, output_path: str):
"""
翻译整个文档
"""
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# 按段落分割
paragraphs = content.split('\n\n')
translated_paragraphs = []
for para in paragraphs:
if para.strip(): # 跳过空段落
translated = self.translate_with_options(para)
translated_paragraphs.append(translated)
else:
translated_paragraphs.append('')
# 保存翻译结果
with open(output_path, 'w', encoding='utf-8') as f:
f.write('\n\n'.join(translated_paragraphs))
print(f"翻译完成!结果保存到: {output_path}")
# 使用示例
translator = AdvancedTranslator()
# 自定义翻译
text = "人工智能技术正在改变我们的生活方式"
result = translator.translate_with_options(
text,
temperature=0.6, # 降低温度,使输出更确定
num_beams=5 # 使用更多波束搜索
)
print(result)
# 翻译文档(可选)
# translator.translate_document("input.txt", "output.txt")
常用模型推荐
# 中文<->英文
zh_en_models = {
"Helsinki-NLP/opus-mt-zh-en": "中文→英文",
"Helsinki-NLP/opus-mt-en-zh": "英文→中文",
"facebook/m2m100_418M": "多语言翻译" # 支持100种语言
}
# 其他常用模型
other_models = {
"Helsinki-NLP/opus-mt-en-de": "英文→德文",
"Helsinki-NLP/opus-mt-en-fr": "英文→法文",
"Helsinki-NLP/opus-mt-en-es": "英文→西班牙文",
"facebook/nllb-200-distilled-600M": "NLLB 200种语言"
}
注意事项:
- 模型大小选择:根据硬件配置选择合适大小的模型
- 内存管理:大批量处理时注意内存使用
- 速度优化:使用GPU加速(如果可用)
- 错误处理:添加异常处理机制
这个基础框架可以满足大多数翻译需求,你可以根据具体场景进行调整和优化。