一起学Hugging Face Transformers(7) - 使用Transformers 库进行机器翻译(Machine Translation)

文章目录

  • 前言
  • 一、 环境准备
  • 二、 导入库并加载预训练模型
  • 三、 进行翻译
  • 四、 支持多语言对
  • 五、 调整翻译参数
  • 六、 使用具体任务的模型
  • 总结


前言

机器翻译(Machine Translation)是自然语言处理(NLP)中的一个重要任务,它涉及将文本从一种语言自动翻译为另一种语言。Hugging Face 的 Transformers 库提供了强大而易用的工具来实现机器翻译任务。本文将详细介绍如何使用 Transformers 库进行机器翻译,包括环境准备、加载预训练模型、进行翻译和调整翻译结果。


一、 环境准备

首先,确保安装了必要的库:

pip install transformers

二、 导入库并加载预训练模型

我们将使用 MarianMT(Marian Machine Translation)模型,这是一个由 MarianNMT 团队训练的多语言翻译模型,支持多种语言对。

from transformers import MarianMTModel, MarianTokenizer# 指定模型名称
model_name = "Helsinki-NLP/opus-mt-en-de"  # 英文到德文的翻译模型# 加载模型和分词器
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name)

三、 进行翻译

使用预训练模型进行翻译非常简单。我们只需要输入一个文本,模型将根据这个输入生成翻译结果。

# 定义要翻译的文本
src_texts = ["Hello, how are you?", "This is a machine translation example."]# 将文本转换为模型输入格式
inputs = tokenizer(src_texts, return_tensors="pt", padding=True, truncation=True)# 生成翻译
translated = model.generate(**inputs)# 将生成的 ID 序列转换为文本
translated_texts = [tokenizer.decode(t, skip_special_tokens=True) for t in translated]# 打印翻译结果
for src, tgt in zip(src_texts, translated_texts):print(f"{src} -> {tgt}")

在这个示例中,我们使用 MarianMT 模型,将英文句子翻译成德文,并打印翻译结果。

四、 支持多语言对

MarianMT 模型支持多种语言对,你可以根据需要选择合适的模型。例如,要进行中文到英文的翻译,可以使用 Helsinki-NLP/opus-mt-zh-en 模型。

# 加载中文到英文的翻译模型和分词器
model_name = "Helsinki-NLP/opus-mt-zh-en"
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name)# 定义要翻译的中文文本
src_texts = ["你好,你今天怎么样?", "这是一个机器翻译的例子。"]# 将文本转换为模型输入格式
inputs = tokenizer(src_texts, return_tensors="pt", padding=True, truncation=True)# 生成翻译
translated = model.generate(**inputs)# 将生成的 ID 序列转换为文本
translated_texts = [tokenizer.decode(t, skip_special_tokens=True) for t in translated]# 打印翻译结果
for src, tgt in zip(src_texts, translated_texts):print(f"{src} -> {tgt}")

具体支持的语言可以在网站上查看https://huggingface.co/Helsinki-NLP,进入Models列表里查看即可

五、 调整翻译参数

我们可以通过调整模型的生成参数来控制翻译结果的质量和多样性。常用的生成参数包括:

  • max_length: 生成文本的最大长度。
  • num_beams: 用于 beam search 的束数,值越高生成的文本越多样,但计算开销也越大。
  • length_penalty: 控制生成文本长度的惩罚,值越高生成的文本越简短。

下面是一个示例,展示如何调整这些参数来生成更高质量的翻译:

# 调整生成参数
translated = model.generate(**inputs,max_length=50,num_beams=5,length_penalty=2.0,early_stopping=True
)# 将生成的 ID 序列转换为文本并打印
translated_texts = [tokenizer.decode(t, skip_special_tokens=True) for t in translated]for src, tgt in zip(src_texts, translated_texts):print(f"{src} -> {tgt}")

六、 使用具体任务的模型

除了 MarianMT 模型,Hugging Face 的 Transformers 库还提供了其他专门为翻译任务训练的模型,例如 T5 和 mBART 模型。这些模型在翻译任务中表现优异。

使用 T5 模型进行翻译

from transformers import T5Tokenizer, T5ForConditionalGeneration# 加载 T5 模型和分词器
model_name = "t5-base"
tokenizer = T5Tokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name)# 定义要翻译的文本
src_texts = ["translate English to German: Hello, how are you?", "translate English to German: This is a machine translation example."]# 将文本转换为模型输入格式
inputs = tokenizer(src_texts, return_tensors="pt", padding=True, truncation=True)# 生成翻译
translated = model.generate(**inputs)# 将生成的 ID 序列转换为文本
translated_texts = [tokenizer.decode(t, skip_special_tokens=True) for t in translated]# 打印翻译结果
for src, tgt in zip(src_texts, translated_texts):print(f"{src} -> {tgt}")

在这个示例中,我们使用 T5 模型进行翻译,输入文本中指定了源语言和目标语言。

总结

Hugging Face 的 Transformers 库为机器翻译任务提供了强大而灵活的工具。通过使用预训练模型(如 MarianMT 和 T5),我们可以轻松实现高质量的文本翻译。此外,通过调整生成参数,我们可以控制翻译结果的质量和多样性,以满足不同的应用需求。希望本文能帮助你更好地理解和应用 Transformers 库进行机器翻译任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/35955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于RAG优化的几个小技巧

一、背景说明 RAG技术为大型语言模型(LLMs)提供了从数据源检索到的信息,以支撑其生成的答案。简而言之,RAG就是搜索加上LLM提示,你让模型在提供的信息上下文中回答问题。查询和检索到的上下文都被注入到发送给LLM的提…

Spring Boot 启动流程是怎么样的

引言 SpringBoot是一个广泛使用的Java框架,旨在简化基于Spring框架的应用程序的开发过程。在这篇文章中,我们将深入探讨SpringBoot应用程序的启动流程,了解其背后的机制。 Spring Boot 启动概览 SpringBoot应用程序的启动通常从一个包含 m…

求生之路史低入手 教你怎么使用求生之路创意工坊提高体验性

求生之路是一款抵御丧尸的第一人称射击游戏,四名幸存者联机配合,在现代的城市中,击败各种丧尸还有强大的变种人BOSS,虽然是十几年前的游戏,但是毫不夸张的说,游戏丝毫不过时,目前steam夏促&…

理解SurfaceFlinger在Android中的作用

理解SurfaceFlinger在Android中的作用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨Android系统中一个关键的组件——SurfaceFlinger&#xff…

Spring Boot实现多环境配置

1.为什么需要多环境配置? 在实际项目开发过程中,我们往往需要区分开发,测试,联调,预发布,生产等不同的应用环境。这些应用环境用途不同,对应环境的配置项,稳定性,数据质量,保障性,可接触人群等要求也不同&…

Redis持久化(RDB AOF)

Redis持久化 MySQL的事务,有四个比较核心的特性: 原子性一致性持久性(和持久化一样),将数据存储在硬盘上,重启主机之后数据仍然存在隔离性 redis是一个内存数据库,把数据存储在内存中&#xff0…

【高考】【填志愿】分数限制下,选好专业还是选好学校?

【高考】选专业时,应避免的误区-CSDN博客 【高考】选专业时以什么为主?-CSDN博客 分数限制下,选好专业还是选好学校?-CSDN博客 分数限制下,选好专业还是选好学校?-CSDN博客 分数限制下,选好专…

低代码开发助力中小企业数字化转型难度持续降低

随着数字化转型的趋势不断加强,越来越多的中小企业开始意识到实现数字化升级是提升企业竞争力、适应市场变化的重要手段。然而,受制于资金、技术等方面的限制,这些企业在转型过程中面临着不少挑战。如何有效克服这些困难,找到一条…

算法题 — 接雨水

给定 n 给非负整数,表示每个宽度为 1 的柱子的高度图,计算按照此排列的柱子,下雨之后能能接到多少雨水。 输入:height [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] 输出:6 解释:上面是由数组 [0, 1, 0, 2, 1,…

布尔运算00

题目链接 布尔运算 题目描述 注意点 运算符的数量不超过 19 个布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成算出有几种可使该表达式得出 result 值的括号方法 解答思路 可以使用动态规划根据左右两侧区间不同结果相应组合数量计算得出当前…

国产Cortex-A55人工智能教学实验箱_基于Python机械臂跳舞实验案例分享

一、实验目的 本实验通过TL3568-PlusTEB教学实验箱修改机械臂不同舵机的角度,增加延迟时间,从而做到机械臂跳舞的效果。 二、实验原理 ROS(机器人操作系统) ROS(机器人操作系统),是专为机器人…

Golang解决bufio.Scanner: token too long的问题

Golang解决bufio.Scanner: token too long的问题 在Go语言中使用bufio.Scanner时,遇到“token too long”(标记过长)的错误,通常是因为尝试读取的行太大,超过了bufio.Scanner默认的最大容量。bufio.Scanner默认的缓冲…

@ComponentScan注解在Spring的作用

ComponentScan注解的作用是什么? 告知Spring扫描那些包下的类,可以配置includeFilters,excludeFilters,过滤某些类,更多内容可以具体看下此注解文件。 Spring是如何通过这个注解将类注入到Ioc容器中的? 请…

[linux]sed命令基础入门详解

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这…

生命在于折腾——Macbook虚拟机开启360核晶

首先启动PD虚拟机,打开360,发现提示如下: 此时将虚拟机关机。 打开该虚拟机设置: 将虚拟机监控程序改为Parallels,并启动nested虚拟化。 改好后截图如下: 保存设置,开机 此时就可以开启了…

硬件实用技巧:摄像头常用的输出协议类型和输出接口类型

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140042485 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

docker 多网卡指定网卡出网

前言 宿主机中有多个网卡 ens160 192.168.4.23/20 内网通信用 ens192 10.31.116.128/24 出公网访问-1 ens193 10.31.116.128/24 出公网访问-2 现在需要不同容器中不同出网访问,举例 容器1 192.168.0.1/20 网段走宿主机 ens160网卡,否则全部走ens192 网…

Java中的事件驱动编程模型

Java中的事件驱动编程模型 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我将为大家介绍Java中的事件驱动编程模型。事件驱动编程模型是一种以事件为核心驱…

太速科技-FMC144 -八路 250MSPS 14bit AD FMC子卡

FMC144 -八路 250MSPS 14bit AD FMC子卡 一、板卡概述   FMC144是一款具有8通道模数转换器(ADC)的FMC卡,具有14bit分辨率,最大采样速率达250Msps。时钟配置芯片为AD9516-1,可由板载10MHz时钟提供参考,也可…

STM32人体心电采集系统

资料下载地址:STM32人体心电采集系统 1、项目功能介绍 此项目主要实现了以STM32为核心的人体心电采集系统软硬件的设计。软件设计过程是在STM32上移植的uCGUI做图形界面,并如实显示采集到的心电波形信号,有SD卡存储和USB数据传输功能。 2、实…