Python脚本数据机器翻译HuggingFace如何用

wen 实用脚本 2

本文目录导读:

Python脚本数据机器翻译HuggingFace如何用

  1. 基础安装
  2. 使用pipeline进行翻译(最简单方式)
  3. 使用T5模型进行多语言翻译
  4. 使用M2M100模型(支持多语言)
  5. 批量翻译处理
  6. 高级功能:自定义翻译配置
  7. 常用模型推荐
  8. 注意事项:

我来详细介绍一下如何使用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种语言"
}

注意事项:

  1. 模型大小选择:根据硬件配置选择合适大小的模型
  2. 内存管理:大批量处理时注意内存使用
  3. 速度优化:使用GPU加速(如果可用)
  4. 错误处理:添加异常处理机制

这个基础框架可以满足大多数翻译需求,你可以根据具体场景进行调整和优化。

抱歉,评论功能暂时关闭!