使用开源OPUS-MT模型进行文本翻译(python)

news2025/3/11 8:11:50

1. 环境准备

pip install transformers

2. 下载机器翻译模型:

2.1 代码从hugging face平台下载

from transformers import MarianMTModel, MarianTokenizer

# 指定模型名称
model_name = "Helsinki-NLP/opus-mt-zh-en"   # 中译英模型

# 下载并保存分词器到本地
tokenizer = MarianTokenizer.from_pretrained(model_name)
tokenizer.save_pretrained("./local_opus_mt_zh-en")

# 下载并保存模型到本地
model = MarianMTModel.from_pretrained(model_name)
model.save_pretrained("./local_opus_mt_zh-en")

2.2 手动下载模型

model_数据集-阿里云天池

2.3 加载模型进行翻译 

2.3.1 翻译文本

from transformers import MarianMTModel, MarianTokenizer

# 指定本地模型和分词器的路径
local_model_path = "./local_opus_mt_zh_en"

# 从本地加载分词器
tokenizer = MarianTokenizer.from_pretrained(local_model_path)

# 从本地加载模型
model = MarianMTModel.from_pretrained(local_model_path)

# 测试翻译
text = "你好"
inputs = tokenizer(text, return_tensors="pt")
translated = model.generate(**inputs)
translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)
print(translated_text)  # 输出: hello

2.3.2 翻译json串 

import json
from transformers import MarianMTModel, MarianTokenizer

# 指定本地模型和分词器的路径
local_model_path = "./local_opus_mt_zh_en"

# 从本地加载分词器
tokenizer = MarianTokenizer.from_pretrained(local_model_path)

# 从本地加载模型
model = MarianMTModel.from_pretrained(local_model_path)

# 输入的 JSON 字符串
input_json = '''
{
  "NUM1": "你好世界",
  "NUM2": "又是开心的一天:",
  "NUM3": "你在哪里",
  "NUM4": "嘿嘿嘿"
}
'''

# 解析 JSON 字符串
input_data = json.loads(input_json)

# 需要翻译的字段
fields_to_translate = ["NUM1", "NUM2","NUM3","NUM4"]

# 翻译函数
def translate_text(text, tokenizer, model):
    inputs = tokenizer(text, return_tensors="pt")
    translated = model.generate(**inputs)
    translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)
    return translated_text

# 遍历需要翻译的字段并翻译
for field in fields_to_translate:
    if field in input_data:
        input_data[field] = translate_text(input_data[field], tokenizer, model)

# 将翻译后的数据转换为 JSON 字符串
output_json = json.dumps(input_data, ensure_ascii=False, indent=2)

# 打印输出
print(output_json)

2.4 使用gpu加速翻译

import time
import torch
from transformers import MarianMTModel, MarianTokenizer

# 指定本地模型和分词器的路径
local_model_path = "./local_opus_mt_zh_en"

# 从本地加载分词器
tokenizer = MarianTokenizer.from_pretrained(local_model_path)

# 从本地加载模型
model = MarianMTModel.from_pretrained(local_model_path)

# 检查是否有 GPU,并设置设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# 测试翻译速度
text = "你好,世界!"
start_time = time.time()

# 将输入数据移动到 GPU
inputs = tokenizer(text, return_tensors="pt").to(device)

# 生成翻译结果
translated = model.generate(**inputs)

# 将结果移回 CPU 并解码
translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)

end_time = time.time()
print(f"翻译结果: {translated_text}")
print(f"翻译耗时: {end_time - start_time:.4f} 秒")

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

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

相关文章

Elastic如何获取当前系统时间

文章目录 1. 使用 _ingest.timestamp 在 Ingest Pipeline 中获取当前时间2. 使用 Painless Script 获取当前时间3. 使用 now 关键字在查询中获取当前时间4. 使用 date 类型字段的默认值5. 使用 Kibana 的 Dev Tools 查看当前时间6. 使用 date 聚合获取当前时间7. 使用 Elastics…

jenkins配置连接k8s集群

jenkins配置连接k8s集群 前言 我这边jenkins是在一个服务器里面,k8s集群在其他服务器,实现连接 首先jenkins下载有k8s插件 进入配置页面 获取k8s-api-server地址 对应k8s服务器执行 kubectl config view --minify -o jsonpath{.clusters[0].cluste…

如何选择缓存模式?

如何选择缓存模式 当一个系统引入缓存后,最大的挑战之一便是如何确保缓存与后端数据库的一致性。目前,常见的解决方案主要有Cache Aside、Read/Write Throught和Write Back这三种缓存更新策略。 Read/Write Throught策略 读操作方面,如果缓…

网络安全配置截图 网络安全i

网络安全概念及规范 1.网络安全定义 网络安全的概述和发展历史 网络安全 广义的网络安全:Cyber Security(网络空间安全) 网络空间有独立且相互依存的信息基础设施和网络组成,包括互联网、电信网、计算机系统、嵌入式处理器和控…

k8s概念及k8s集群部署(Centos7)

Centos7部署k8s集群 部署之前,先简单说下k8s是个啥: 一、k8s简介: k8s,全称:kubernetes,它可以看作是一个分布式系统支撑平台。k8s的作用: 1、故障自愈: k8s这个玩意可以监控容器…

Manus详细介绍,Manus核心能力介绍

文章目录 前言Manus产品定位与核心理念:Manus产品特性与未来体验战略:Manus商业价值与创新指标:Manus技术特点与竞争优势:Manus用户反馈与展望:Manus市场竞争优势与团队战略:Manus深度总结与启发: 前言 这是一篇关于Manus智能体产品的用户体验评价报告,主要介绍了M…

Apache XTable:在数据湖仓一体中推进数据互作性

Apache XTable 通过以多种开放表格式提供对数据的访问,在增强互作性方面迈出了一大步。移动数据很困难,在过去,这意味着在为数据湖仓一体选择开放表格式时,您被锁定在该选择中。一个令人兴奋的项目当在数据堆栈的这一层引入互作性…

tauri加载网页处理点击a链接默认浏览器打开问题

添加click事件,当点击了a标签,就阻止默认事件,然后自己处理,在自己窗口中打开这个页面。将这个js注入到页面中就可以了 const hookClick (e) > {console.log(hookClick, e)e.preventDefault()const origin e.target.closest…

openharmony 软总线-设备发现流程

6.1 设备发现流程 6.1.1 Wi-Fi设备发现 6.1.1.1 Wi-Fi设备发现流程 Wi-Fi设备在出厂状态或者恢复出厂状态下,设备上电默认开启SoftAP模式,SoftAP的工作信道在1,6,11中随机选择,SoftAP的Beacon消息中携带的SSID eleme…

【GoTeams】-4:为项目引入etcd

本文目录 1. 书接上回2. 引入etcddiscoverystruct{}{} resolverserver 3. 将服务注册到etcd中4. 梳理下etcd调用逻辑 1. 书接上回 本节是为项目引入etcd这个环节,然后我们来看看具体该怎么实现。 首先来谈谈为什么要引入服务发现? 动态服务注册与发现…

Jmeter使用介绍

文章目录 前言Jmeter简介安装与配置JDK安装与配置JMeter安装与配置 打开JMeter方式一方式二 设置Jmeter语言为中文方法一(仅一次性)方法二(永久设置成中文) Jmeter文件常用目录 元件与组件元件组件元件的作用域元件的执行顺序第一个案例添加线程组添加 H…

Android Studio 配置国内镜像源

Android Studio版本号:2022.1.1 Patch 2 1、配置gradle国内镜像,用腾讯云 镜像源地址:https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK国内镜像 地址:Index of /AndroidSDK/

实战案例分享:WLAN TKIP/CCMP加密组件的选择

无线接入点(AP)与终端(STA)在连接过程中涉及多种加密算法,如CCMP、TKIP等,选择合适的加密组件对于保证网络安全和兼容性至关重要。本篇我们将分析Wi-Fi加密机制、Wi-Fi加密组件的选型要点、典型问题及解决方…

解锁STM32外设:开启嵌入式开发新世界

✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 探索 STM32 强大的外设家族 初窥门径:STM32 外设开发基础 开发方式与工具 外设配置基础步骤 深入剖析:常见外设应用实例…

docker学习笔记(1)从安装docker到使用Portainer部署容器

docker学习笔记第一课 先交代背景 docker宿主机系统:阿里云ubuntu22.04 开发机系统:win11 docker镜像仓库:阿里云,此阿里云与宿主机系统没有关系,是阿里云提供的一个免费的docker仓库 代码托管平台:github&…

基于Spring Boot的健美操评分管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

【Linux】——初识操作系统

文章目录 冯-诺依曼体系结构操作系统shell 冯-诺依曼体系结构 我们现在所使用的计算机就是冯-诺依曼体系结构。 存储器就是内存。 由下图可知,寄存器最快,为啥不用寄存器呢? 因为越快价格就最贵,冯诺依曼体系结构的诞生&#xf…

PromQL计算gateway指标增量最佳实践及常见问题答疑

普米官方网站 普米官方帮助:Getting started | Prometheus 普米下载地址:Download | Prometheus 普米查询语法:Querying basics | Prometheus 普米函数参考:Query functions | Prometheus promql计算增量 在PromQL&#xff…

vue使用slot时子组件的onUpdated执行问题

vue使用slot时子组件的onUpdated执行问题 在使用 Vue 的插槽 (slot) 功能时,可能会遇到一个问题:当父组件的任何状态更新时,子组件的 onUpdated 事件会被触发。这个问题在使用默认插槽时尤为明显。 为了避免这种情况,可以使用作用…

从零到多页复用:我的WPF MVVM国际化实践

文章目录 第一步:基础实现,资源文件入门第二步:依赖属性,提升WPF体验第三步:多页面复用,减少重复代码第四步:动态化,应对更多字符串总结与反思 作为一名WPF开发者,我最近…