构建自己 AI 翻译助手取代谷歌翻译

本文涉及的产品
图片翻译,图片翻译 100张
语种识别,语种识别 100万字符
文档翻译,文档翻译 1千页
简介: 构建自己 AI 翻译助手取代谷歌翻译

本文分享一种方式通过使用 Hugging Face LLM 和 Python 不受限制地翻译长文档。

在全球化的今天,与来自不同国家和文化的人交流变得越来越重要,而对于技术人员来说,阅读英文资料是常见的需求。通常语言障碍往往会降低学习英文资料的效率。虽然谷歌翻译成为弥补这一不足的流行工具,但它有其局限性,特别是在准确翻译较长的文本时。

真的很烦把一小部分文本复制/粘贴到谷歌翻译中,等待结果,复制到文件中,重复的复制、粘贴,所以为什么不使用现在最流行的方式 AI 助理来解决问题?

有人可能担心使用第三方服务翻译敏感信息的隐私和安全问题。在本文中,将探索使用 Hugging Face 构建自己的人工智能翻译应用程序的替代解决方案。通过构建自己的翻译应用程序,确保数据的隐私和安全,同时还可以实现较长文本的体面准确翻译。

最终应用的结果是这样的:

image.png

安装依赖项

需要的包并不多,访问 Hugging Face 模型、创建大块的长文本和图形界面。但首先,作为良好实践,为新的 Python 项目创建一个虚拟环境。创建一个全新的目录 AI_Translator 并运行 venv 创建指令:


python3 -m venv venv

激活虚拟环境:


source venv/bin/activate #for mac
venv\Scripts\activate  #for windows users

激活 venv 后安装下面依赖性:


pip  install mkl mkl-include   # Mac 用户的 CPU 使用率需要
pip install torch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0  # 核心
pip install transformers
pip install langchain==0.0.173
pip install streamlit
pip install streamlit-extras

如果要使用的模型使用 Tensorflow 来创建权重,则还必须安装 Tensorflow


pip install tensorflow

下载语言模型

应用程序的核心是语言翻译模型,这里的目标语言(中文)和原始文本语言(English),翻译模型是按照特定顺序训练的:

image.png

上面是一个翻译的模型:从英文到中文。 在Hugging Face Hub 翻译模型中,通常只有一对和一对的翻译,而这是个特定的顺序。从英文到中文(en-to-zh) 。

可以在 Helsinki 语言技术研究组的 Hugging Face 库中找到一组适合的翻译模型。

这里有 1440 个语言模型,想要一个从英文到中文的翻译模型:所以需要查找到以 en-to-zh 结尾的模型。

正如图中所看到的,这个模型卡片告诉我们在 PyTorch 和 Tensorflow 中都有可用的权重。

  1. 创建子文件夹 model_zh
  2. 转到模型卡的文件选项卡并下载下面列出的所有文件:对于目录 model_zh 中的中文模型下载,需要下载如下:


README.md
config.json
generation_config.json
pytorch_model.bin
source.spm
target.spm
tokenizer_config.json
vocab.json

一旦所有文件都下载到它们的相关子文件夹中,准备工作就完成了。

测试模型

如果模型的权重为 .h5 格式,则需要安装 tensorflow(如上例所示)


pip install tensorflow

调用模型时需要指定 tensorflow 框架,使用参数 from_tf=True,如下:


repo_id = "Helsinki-NLP/opus-mt-en-zh"
model_tt0zh = AutoModelForSeq2SeqLM.from_pretrained(repo_id, from_tf=True)

创建一个名为 test-en-zh.py 的新文件:在开始创建用户界面之前,将使用它来测试带有 pytorch 模型的翻译管道的功能。该文件的代码如下(随后将进行解释)


import torch
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from transformers import pipeline
import datetime
#LOCAL MODEL EN-IT
#---------------------------------
#  Helsinki-NLP/opus-mt-en-zh
Model_ZH = './model_zh/'   #torch
#---------------------------------
English = "Imagine a world where AI-driven technologies enable us to communicate more effectively, analyze enormous amounts of textual data, and make informed decisions in just seconds. A world where chatbots comprehend our intentions and respond with human-like clarity. This world is no longer a far-off dream, but an approaching reality, due to the remarkable advancements in AI technologies such as ChatGPT and LangChain. In this article, we will dive into the groundbreaking innovations of ChatGPT and LangChain, examine their potential applications, and uncover how they are transforming the AI landscape."
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM     
tokenizer_tt0zh = AutoTokenizer.from_pretrained(Model_ZH)  
print('===>初始化AI语言模型...')
#repo_id = "Helsinki-NLP/opus-mt-en-zh"
#model_tt0zh = AutoModelForSeq2SeqLM.from_pretrained(repo_id, from_tf=True)
model_tt0zh = AutoModelForSeq2SeqLM.from_pretrained(Model_ZH)  #Helsinki-NLP/opus-mt-en-zh
print("===>pipeline")
TToZH = pipeline("translation", model=model_tt0zh, tokenizer=tokenizer_tt0zh)
print("===>翻译正在进行中")
start = datetime.datetime.now() 
finaltext = TToZH(English)
stop = datetime.datetime.now() 
elapsed = stop - start
print(f'===>翻译完成于: {elapsed}...\n')
print(finaltext[0]['translation_text'])
print(f"\n===>翻译内容包含单词 {len(English.split(' '))} 个")

导入模型交互的核心:pytorchtransformers 库。然后为本地下载的模型设置检查点,存储它的路径 Model_ZH = './model_zh/'

要翻译的字符串存储在变量 English 中。然后,为分词器、模型和要执行的管道初始化对转换器库的调用:请注意,为分词器和模型传递了路径(Model_ZH 变量)。管道实例化为:


TToZH = pipeline("translation", model=model_tt0zh, tokenizer=tokenizer_tt0zh)

如果运行代码,将看到如下内容:

image.png

创建前端界面

创建一个名为 translationer.py 的新文件,在这里将使用 Streamlit 库来创建 Web 界面。

Streamlit 是一个无需了解任何前端技术(如 HTML 和 CSS)即可构建 Web 应用程序的库。如果想了解更多信息,请在此处查看清晰的文档


import streamlit as st
import torch
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from transformers import pipeline
from langchain.text_splitter import CharacterTextSplitter
import datetime
############# 在前端显示图像 #################
st.set_page_config(page_title="私人AI翻译助理",
                   page_icon='♾️',
                   layout="centered",  #or wide
                   initial_sidebar_state="expanded",
                   menu_items={
                        'Get Help': 'https://docs.streamlit.io/library/api-reference',
                        'Report a bug': "https://www.extremelycoolapp.com/bug",
                        'About': "一个懂你的AI翻译助理"
                                },
                   )
# 
#LOCAL MODEL EN-ZH
#---------------------------------
#  Helsinki-NLP/opus-mt-en-zh
Model_ZH = './model_zh/'   #torch
#---------------------------------

上述代码主要导入库、模型和 streamlit 页面的一般设置。如果模型是 .h5 模型,请记住导入 tensorflow


### HEADER section
st.header("私人AI翻译助理:帮你把英文翻译成中文")
English = st.text_area("", height=240, key="original",placeholder="请输入或者黏贴英文内容...")
col1, col2, col3 = st.columns([2,5,2])
btn_translate = col2.button("✅ 开始翻译", use_container_width=True, type="primary", key='start')

基本结构在这里完成,创建了 3 列并指定了 3 的比率。


col1, col2, col3 = st.columns([2,5,2])
btn_translate = col2.button("✅ 开始翻译", use_container_width=True, type="primary", key='start')

只有在按下名为 btn_translate 的按钮时才会调用翻译管道。

arduino

复制代码

if btn_translate:
    if English:
    else:
        st.warning("请输入您需要翻译的文本内容!", icon="⚠️")

2 个嵌套的 if 语句检查单击的按钮(如果 btn_translate)以及英文文本是否为空,即变量 English 是否为空。后面使用 text-splitter 将长文本分成更小的部分,这样就不会溢出最大数量的标记。

pipeline 的调用和上一节测试代码一样,只是需要迭代。将文本分块,因此必须为每个块获取翻译管道的结果,然后将它们拼接起来:


# 遍历块并连接翻译
finaltext = ''
start = datetime.datetime.now() #not used now but useful
print('[bold yellow] 翻译进行中...')
for item in texts:
   line = TToIT(item.page_content)[0]['translation_text']
   finaltext = finaltext+line+'\n'

最后,可以在 text_area 部件中显示翻译的最终文本:


st.text_area(label="中文翻译:", value=finaltext, height=350)

完整的代码如下:


import streamlit as st
import torch
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from transformers import pipeline
from langchain.text_splitter import CharacterTextSplitter
import datetime
############# 在前端显示图像 #################
st.set_page_config(page_title="私人AI翻译助理",
                   page_icon='♾️',
                   layout="centered",  #or wide
                   initial_sidebar_state="expanded",
                   menu_items={
                        'Get Help': 'https://docs.streamlit.io/library/api-reference',
                        'Report a bug': "https://www.extremelycoolapp.com/bug",
                        'About': "一个懂你的AI翻译助理"
                                },
                   )
# 
#LOCAL MODEL EN-ZH
#---------------------------------
#  Helsinki-NLP/opus-mt-en-zh
Model_ZH = './model_zh/'   #torch
#---------------------------------
### HEADER section
st.header("私人AI翻译助理:帮你把英文翻译成中文")
English = st.text_area("", height=240, key="original",placeholder="请输入或者黏贴英文内容...")
col1, col2, col3 = st.columns([2,5,2])
btn_translate = col2.button("✅ 开始翻译", use_container_width=True, type="primary", key='start')
if btn_translate:
    if English:
        Model_ZH = './model_zh/'   #torch
        with st.spinner('AI翻译助理准备中...'):
            st.success(' AI翻译助理开始翻译', icon="🆗")
            # 用于分块的文本分离器函数
            text_splitter = CharacterTextSplitter(        
                separator = "\n\n",
                chunk_size = 300,
                chunk_overlap  = 0,
                length_function = len,
            )
            # 将文档分块
            st.success(' 文档块文本...', icon="🆗")
            texts = text_splitter.create_documents([English])
            from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
            # 初始化翻译从英文到中文
            tokenizer_tt0zh = AutoTokenizer.from_pretrained(Model_ZH)
            st.success(' 初始AI语言模型...', icon="🆗")
            model_tt0zh = AutoModelForSeq2SeqLM.from_pretrained(Model_ZH)  #Helsinki-NLP/opus-mt-en-zh  or #Helsinki-NLP/opus-mt-it-zh
            TToZH = pipeline("translation", model=model_tt0zh, tokenizer=tokenizer_tt0zh)
            # 遍历块并连接翻译
            finaltext = ''
            start = datetime.datetime.now()
            print('[bold yellow]翻译进行中...')
            for item in texts:
                line = TToZH(item.page_content)[0]['translation_text']
                finaltext = finaltext+line+'\n'
            stop = datetime.datetime.now() 
            elapsed = stop - start
            st.success(f'翻译完成于 {elapsed}', icon="🆗")
            print(f'[bold underline green1] Translation generated in [reverse dodger_blue2]{elapsed}[/reverse dodger_blue2]...')
            st.text_area(label="中文翻译:", value=finaltext, height=350)
            st.markdown(f'翻译完成于: **{elapsed}**')
            st.markdown(f"翻译内容包含单词 {len(English.split(' '))} 个")
    else:
        st.warning("请输入您需要翻译的文本内容!", icon="⚠️")

接下来执行命令:


streamlit run translationer.py

打开浏览器就可以体验自己构建的 AI 翻译助理了。

image.png

image.png

image.png


相关文章
|
15天前
|
机器学习/深度学习 人工智能 算法
整合海量公共数据,谷歌开源AI统计学专家DataGemma
【10月更文挑战第28天】谷歌近期开源了DataGemma,一款AI统计学专家工具,旨在帮助用户轻松整合和利用海量公共数据。DataGemma不仅提供便捷的数据访问和处理功能,还具备强大的数据分析能力,支持描述性统计、回归分析和聚类分析等。其开源性质和广泛的数据来源使其成为AI研究和应用的重要工具,有助于加速研究进展和推动数据共享。
44 6
|
24天前
|
人工智能
巧妙构建歌词结构:写歌词的技巧和方法之关键,妙笔生词AI智能写歌词软件
在音乐世界里,歌词是灵魂的载体,构建其结构至关重要。优秀的歌词需有引人入胜的开头、条理清晰且富变化的主体,以及深刻难忘的结尾。《妙笔生词智能写歌词软件》提供多种功能,帮助创作者克服结构难题,激发灵感,助你写出打动人心的歌词,开启音乐创作的新篇章。
|
17天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
16天前
|
人工智能 运维 NoSQL
云栖大会|多模+一体化,构建更高效的AI应用
在2024年云栖大会「NoSQL数据库」专场,多位知名企业和阿里云瑶池数据库团队的技术专家,共同分享了阿里云Lindorm、Tair、MongoDB和MyBase的最新进展与实践。Tair推出Serverless KV服务,解决性能瓶颈和运维难题;Lindorm助力AI和具身智能时代的多模数据处理;MongoDB云原生化提升开发效率;MyBase One打破云边界,提供云边端一体化服务。这些技术进展和最佳实践,展示了阿里云在NoSQL数据库领域的创新能力和广泛应用前景。
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI驱动的个性化学习平台构建###
【10月更文挑战第29天】 本文将深入探讨如何利用人工智能技术,特别是机器学习与大数据分析,构建一个能够提供高度个性化学习体验的在线平台。我们将分析当前在线教育的挑战,提出通过智能算法实现内容定制、学习路径优化及实时反馈机制的技术方案,以期为不同背景和需求的学习者创造更加高效、互动的学习环境。 ###
38 3
|
23天前
|
人工智能 机器人 API
【通义】AI视界|谷歌Q3财报:Gemini API六个月增长14倍,公司超25%的新代码由AI生成
本文内容由通义自动生成,涵盖谷歌Q3财报、马斯克xAI融资、九巨头联盟挑战英伟达、Meta加大AI投入及麻省理工研究LLM与人脑相似性等热点资讯。更多精彩内容,请访问通通知道。
|
22天前
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
157 6
|
24天前
|
人工智能
写歌词的技巧和方法:构建独特歌词结构的策略,妙笔生词AI智能写歌词软件
歌词创作如同搭建艺术殿堂,独特的歌词结构是其基石。掌握构建策略,让你的歌词脱颖而出。开头营造神秘氛围或出人意料的情感,主体部分采用倒叙、插叙或融合矛盾情感,结尾带来情感反转或深邃思考。《妙笔生词智能写歌词软件》提供 AI 智能写词、押韵优化等功能,助你轻松获取灵感,打造独特歌词结构。
|
22天前
|
人工智能 自然语言处理 算法
【通义】AI视界|OpenAI最新发布!ChatGPT搜索功能强势来了,挑战谷歌?
本文由【通义】自动生成,精选24小时内的重要资讯:OpenAI推出ChatGPT搜索功能挑战谷歌,微软披露130亿美元投资OpenAI,Reddit首次盈利股价暴涨20%,软银CEO孙正义看好英伟达及“超级AI”前景,谷歌云与沙特PIF共建全球AI中心。更多内容请访问通通知道。
|
29天前
|
人工智能 安全 芯片
【通义】AI视界|谷歌 Tensor G5 芯片揭秘:1+5+2 八核 CPU,支持光线追踪
本文由【通义】自动生成,涵盖黄仁勋宣布台积电协助修复Blackwell AI芯片设计缺陷、苹果分阶段推出Apple Intelligence、OpenAI保守派老将辞职、英伟达深化与印度合作推出印地语AI模型,以及谷歌Tensor G5芯片支持光线追踪等最新科技资讯。点击链接或扫描二维码,获取更多精彩内容。

热门文章

最新文章