【mT5多语言翻译】之一——实战项目总览

2024-04-11 09:36

本文主要是介绍【mT5多语言翻译】之一——实战项目总览,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[1] 总览

  【mT5多语言翻译】系列共六篇文章:

  【mT5多语言翻译】之一——实战项目总览
  【mT5多语言翻译】之二——模型:T5模型与mT5模型与前置知识
  【mT5多语言翻译】之三——数据集:多语言翻译数据集与预处理
  【mT5多语言翻译】之四——加载:加载数据集与模型
  【mT5多语言翻译】之五——训练:中央日志、训练可视化、PEFT微调
  【mT5多语言翻译】之六——推理:多语言翻译与第三方接口设计


  出海业务场景下,多语言翻译成为必不可少的工具。然而,使用谷歌翻译接口不仅需要支付费用,还存在数据泄露的风险。因此我们训练一个自己的翻译模型是有必要的。

  mT5支持102种语言,有:

Afrikaans, Albanian, Amharic, Arabic, Armenian, Azerbaijani, Basque, Belarusian, Bengali, Bulgarian, Burmese, Catalan, Cebuano, Chichewa, Chinese, Corsican, Czech, Danish, Dutch, English, Esperanto, Estonian, Filipino, Finnish, French, Galician, Georgian, German, Greek, Gujarati, Haitian Creole, Hausa, Hawaiian, Hebrew, Hindi, Hmong, Hungarian, Icelandic, Igbo, Indonesian, Irish, Italian, Japanese, Javanese, Kannada, Kazakh, Khmer, Korean, Kurdish, Kyrgyz, Lao, Latin, Latvian, Lithuanian, Luxembourgish, Macedonian, Malagasy, Malay, Malayalam, Maltese, Maori, Marathi, Mongolian, Nepali, Norwegian, Pashto, Persian, Polish, Portuguese, Punjabi, Romanian, Russian, Samoan, Scottish Gaelic, Serbian, Shona, Sindhi, Sinhala, Slovak, Slovenian, Somali, Sotho, Spanish, Sundanese, Swahili, Swedish, Tajik, Tamil, Telugu, Thai, Turkish, Ukrainian, Urdu, Uzbek, Vietnamese, Welsh, West Frisian, Xhosa, Yiddish, Yoruba, Zulu.

  只要是上述102种语言之间的翻译任务,mT5都可以训练。本次项目实战演示了中文——韩文、中文——日文之间的多语言翻译,先来看看模型的效果:

  输入如下:

sentences = ["kor:我要去健身了","jpn:我要去健身了","kor:他说他会爱我一辈子","jpn:他说他会爱我一辈子",
]

  设置波束为10,每条输入文本返回3条输出文本。翻译输出如下:

나는 피트니스에 가고 싶
나는 피트니스 클럽에 가
나는 피트니스 센터에 가
ジムに行きます。
ジムに行きたいです。
ジムに行くわ
그는 평생을 나를 사랑할
그는 평생 나를 사랑할 것
그는 평생 나를 사랑할 거
彼は私を愛してくれると言っていた。
彼は私を愛してくれると言った。
彼は私を愛してくれると言っていました。

[2] 代码获取地址

  如果需要本项目的源代码,请扫描关注我的公众号,回复“多语言翻译”。

在这里插入图片描述

  代码结构如图所示:本项目使用pytorch+transformers库实现。

在这里插入图片描述

[3] 项目及资源要求介绍

  本项目基于mT5模型的base版进行翻译训练。mT5的详细情况请参考:https://huggingface.co/google/mt5-base。

【注】官方只提供了mT5模型的无监督训练参数,并没有放出微调任务的参数,因此我们想直接开箱使用是不可以的,必须要自己微调一下才可以输出正常的文本。这一点和T5模型比较不同。

项目功能介绍

  一、项目集成了中央日志,可以完成同时将所有文件产生的日志信息同时输出到控制台并记录为日志文件。

  二、项目集成了全量参数训练方式和PEFT微调方式,只需要在配置文件中简单修改一个参数即可完成训练方式的切换。

  三、项目集成了tensorBoard训练日志,可以实时的绘制模型的loss、准确率等指标。

  四、项目提供了数据集预处理代码,并开放了在600万条日文数据和600万条韩文数据上全量参数训练和PEFT微调2轮后的模型参数。

  五、项目提供了模型翻译的demo写法,并封装成了api接口方便外部调用。

项目运行时所占资源说明

  mT5-base的模型大小为2.3GB。

  设置文本长度为10,batch为32时:全量参数微调大约需要占13GB显存;PEFT微调时大约只需要5GB显存。

【注】我的显卡是8GB显存的4060,现在电脑好像都有GPU专用内存(在内存里划nGB专门给显卡使用),我的GPU专用内存是8GB,所以算下来可以提供16GB显存,即使是全量参数微调电脑也是可以跑的,大家可以试一下。
————————————————————
PEFT需要的显存资源更少,训练起来比全量参数微调快非常多。但是最终效果肯定是会逊色一些。到底怎么训练还是要看大家自身的资源情况。

[4] 进行下一篇实战

  【mT5多语言翻译】之二——模型:T5模型与mT5模型与前置知识

其他实战项目

  您还可以浏览我的其他实战项目:

  1、单标签文本分类(bert英文)

  2、多标签文本分类(bert英文)

  3、五子棋开发实战

  4、古诗生成AI实战

这篇关于【mT5多语言翻译】之一——实战项目总览的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/893709

相关文章

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1