利用大模型实现地理领域文档中英文自动化翻译

news2025/5/17 7:40:14

 

一、 背景描述

在跨国性企业日常经营过程中,经常会遇到专业性较强的文档翻译的需求,例如法律文书、商务合同、技术文档等;以往遇到此类场景,企业内部往往需要指派专人投入数小时甚至数天来整理和翻译,效率低下,严重影响了企业日常经营和生产。如何利用自动化工具来自动化批量处理专业文档翻译的工作,使员工更加专注于业务创新,成为摆在企业面前的重要课题。

随着机器学习和大语言模型等技术的飞速发展,专业文档翻译的自动化成为了可能。客户希望构建一个地理领域专业文档的翻译方案,使其通过大语言模型进行翻译,并且提出如下几点要求:

  • 自动识别文档的语言种类,自动进行中翻英或者英翻中;

  • 翻译后的文档尽可能地保留 Microsoft Office Word 文档中的格式;

  • 尽可能地使用地理专业领域的术语,支持客户的术语表并可以用简单的方式扩展;

  • 避免中式英语,符合英文的语序和表达习惯。

二、 方案概述

根据客户需求,我们进行了方案的概念模型设计:

方案执行的流程如下:

  • 用户上传中文/英文文档到“输入文档存储”;

  • 上传完成的动作,触发文档翻译的处理作业,该作业会调用大语言模型;

  • 翻译作业完成后,生成对应的英文/中文文档,结果保存到“输出文档存储”。

基于以上概念模型和流程设计,我们形成了如下的方案组件选型:

  • 文档存储,包括原始输入文档存储和翻译后的输出文档存储,我们选用 Amazon S3,因为该服务支持事件通知,可以触发无服务器资源例如 Amazon Lambda 进行处理;

  • 文档处理,也就是具体的文档翻译作业,我们选择使用 Lambda,并在代码中调用 Amazon Bedrock 上的大模型来实现;

  • 日志记录,开启 Amazon CloudWatch Logs 记录 Lambda 执行过程,方便故障排查和代码调试。

方案部署架构设计如下:

具体执行过程如下:

  • 用户通过亚马逊云科技控制台上传原始文档到 Amazon S3 Input 存储桶;

  • S3 对象上传成功的通知,触发 Amazon Lambda 调用 Amazon Bedrock 上的大模型执行文档翻译;

  • Lambda 执行完成后,翻译后的文档自动保存到 S3 Output 存储桶;

用户可以在 Amazon CloudWatch Logs 中查看 Lambda 执行记录。

三、 核心代码实现

  • 语种检测

本方案使用 Amazon Bedrock 上的大模型对用户上传的文档,实现了自动化识别其语种是英语还是中文,如果是中文自动翻译成英文,如果是英文则翻译成中文。以下是语种检测部分的代码:

def language_detector(query):
    print("debug")
    model_id = '<you-model-id>'
    print(<you-model-id>')
    response = bedrock.invoke_model(body=_get_complete_lang_detect_prompt(query), modelId=model_id)

    print('<< call <you-model-id>')
    response_body = json.loads(response.get('body').read())
    print(response_body)
    match = re.search(r'<lang>([\s\S]*?)</lang>',  response_body['content'][0]['text'])
    print(f"response_body:{ response_body['content'][0]['text']}")
    if match:
        final_response = match.group(1)
        print(f"> in: {query}")
        print(f"> Language detected: {final_response}")
        return final_response
    else:
        # print(f"> in: {query}")
        print(f"< out: BR ERROR in language detect!!!")
另外,在调用 Amazon Bedrock 上的大模型时,需要按照其格式提供提示词模版,语种检测提示词模板部分的代码如下:

def _get_complete_lang_detect_prompt(query, domain='None'):
    system_prompt = f"""You need to detect the language in the given text. 
                     If the text contains characters from different languages, then you should respond the major ONE language that is used. 
                     Your output will be processed by a program so no explaintaion is needed.
                     NOTE: You are detecting the language in the given text, not the topic it is telling about.
                      <text> + {query} + </text>
                     The result should be in the tag of <lang></lang>. No explanation is needed. <lang>Respond only within these tags and do not provide any additional text outside the tags.</lang>. E.G. <lang>English</lang> or <lang>Chinese</lang>."""

    user_message = {"role": "user", "content": query}
    messages = [user_message]

    return json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 80960,
        "system": system_prompt,
        "messages": messages
    })
  • 文档翻译

本方案中文档翻译使用了 Amazon Bedrock 上的大模型,核心代码如下:

def agent_bedrock(query, to_language, domain="None"):
    model_id = <you-model-id>'
    
    response = bedrock.invoke_model(body=_get_complete_prompt(query, to_language, domain), modelId=model_id)

    response_body = json.loads(response.get('body').read())
    match = re.search(r'<TRANSLATED>([\s\S]*?)</TRANSLATED>', response_body['content'][0]['text'])
    if match:
        final_response = match.group(1)
        # print(f"> in: {query}")
        # print(f"< out: {final_response}")
        return final_response
    else:
        # print(f"> in: {query}")
        print(f"< out: BR ERROR!!!")
        return query

文档翻译对应的提示词如下:

def _get_complete_prompt(query, to_language='English', domain='None'):
    system_prompt = f"""
            You are a helpful and honest AI assistant, now I want you to 
            help in translation for the give text. 
            you will translate the given text to its {to_language} version.  
            The following are the rules to follow during the translation.
            
            * The input will be in <TO_TRANSLATE> tag. they can be words, numbers, or single character, 
                Sometimes they are already in the target language, then only respond the original text into the <TRANSLATED> tag.
            * it is OK if you don't very confident to translate, 
                in such cases, you can give the best translate you can, because we will have human review later on.
            * Your output will be put to <TRANSLATED></TRANSLATED> tag. 
            * So, in summary, <TRANSLATED> tag should contain translated or original text, 
                <error> tag should contain the reason why you cannot translate.
            * The given content is in the {domain} domain, so you should use the professional terms if applicable.
            * If it is the Chinese-to-English translation, please be aware that the order of terms may very different between the two language. Use the order of English
                to make it flow better. 
            * the following is the terms for you to follow up: {_geo_terms}
            
        """

    user_message = {"role": "user", "content": "<TO_TRANSLATE>" + query + "</TO_TRANSLATE>"}
    messages = [user_message]

    return json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 80960,
        "system": system_prompt,
        "messages": messages
    })
  • 文档解析

由于客户提供的输入文档限定为 Microsoft Office Word 格式,因此本方案采用 Python 中的 docx 库进行 Word 文档解析,代码参考如下:

import docx
def parse_doc_and_translate(input_file_name, output_file_name):
    """
    Parse the document and translate the text
    """
    doc = docx.Document(input_file_name)
    texts = []
  • 专业术语翻译

地理领域的专业术语,放在文本文件中(命名为 terms.txt),上传到 Amazon S3 存储桶;在翻译的时候会先行从 S3 上读取专有词汇表,并自动将专有名词注入到提示词中。专有名词的格式如下:

Airy Hypothesis 艾里假说;
alias 假频;
amplitude spectrum 振幅谱;
antiroots 反山根;
Bouguer anomaly 布格异常;
Bouguer correction 布格改正;
continuation 延拓;
density 密度;

如果有新的专有词汇需要加入,只需要更新 S3 上的词汇表即可自动生效。在调用 Amazon Bedrock 上的大模型进行翻译时,提示词要求按照该术语表翻译,这部分核心代码如下:

import os
import boto3

s3 = boto3.client('s3')

S3_BUCKET = os.environ.get('APP_BUCKET_NAME', 'aaa-demo')
S3_TERMS_FILE = os.environ.get('S3_TERMS_FILE', 'terms.txt')

def geo_terms():
  #  Download the object content to a variable
  response = s3.get_object(Bucket=S3_BUCKET, Key=S3_TERMS_FILE)
  file_content = response['Body'].read().decode('utf-8')
  return file_content

if __name__ == '__main__':
print(geo_terms())

# Amazon Bedrock 上的大模型的提示词中引用该术语表
def _get_complete_prompt(query, to_language='English', domain='None'):
system_prompt = f"""
…
* the following is the terms for you to follow up: {_geo_terms}
        """
  • 并发配置和异常处理

本方案 Lambda 的并发配置如下:

CONCURRENT_FOR_BEDROCK_INVOCATION = os.environ.get(
    'CONCURRENT_FOR_BEDROCK_INVOCATION', '3')

如果同时上传多个文件,每个 Doc 会相应地启动一个 Lambda 实例来进行翻译工作;在执行翻译的时候,文档会被拆分成段落,并对每个段落进行翻译。一个文档可能会被拆分成 200~400 个片段,为了加快翻译速度,我们加入了并发执行的逻辑,并发数由上面的“CONCURRENT_FOR_BEDROCK_INVOCATION”来控制。设置该参数时需要考虑亚马逊云科技账号中 Bedrock 上的大模型的最大并发数(一般是每分钟 200 次),同时需要考虑并发的文档数量。

四、总结与展望

本次我们采用亚马逊云科技原生服务搭建了一套地理领域专业文档翻译的解决方案,该方案核心处理逻辑采用了亚马逊云科技无服务器化服务 Amazon Lambda,翻译处理完全基于事件触发,对于用户来说大幅降低使用成本,同时运维负担小,用户体验友好。但客户也提出了一些改进意见,例如希望提供独立于亚马逊云科技 Console 的 Web 页面、对用户进行权限划分、专业术语表用户可自行添加、翻译任务状态展示等,后续我们将联合合作伙伴,对这些工程化和定制化功能继续深入合作。

*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

本篇作者

本期最新实验《多模一站通 —— Amazon Bedrock 上的基础模型初体验》
✨ 精心设计,旨在引导您深入探索Amazon Bedrock的模型选择与调用、模型自动化评估以及安全围栏(Guardrail)等重要功能。无需管理基础设施,利用亚马逊技术与生态,快速集成与部署生成式AI模型能力。
⏩️[点击进入实验] 即刻开启  AI 开发之旅
构建无限, 探索启程! 

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

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

相关文章

SGFormer:卫星-地面融合 3D 语义场景补全

论文介绍 题目&#xff1a;SGFormer: Satellite-Ground Fusion for 3D Semantic Scene Completion 会议&#xff1a;IEEE / CVF Computer Vision and Pattern Recognition Conference 论文&#xff1a;https://www.arxiv.org/abs/2503.16825 代码&#xff1a;https://githu…

Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化

一、软件介绍 文末提供源码和程序下载学习 Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化。Trinity 提供性能分析和 XAI 工具&#xff0c;非常适合深度学习系统或其他执行复杂分类或解码的模型。 二、软件作用和特征 Trinity 通过结合具有超维感知能力的不同交…

城市街拍暗色电影胶片风格Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 城市街拍暗色电影胶片风格 Lr 调色&#xff0c;是借助 Adobe Lightroom 软件&#xff0c;为城市街拍的人像或场景照片赋予独特视觉风格的后期处理方式。旨在模拟电影胶片质感&#xff0c;营造出充满故事感与艺术感的暗色氛围&#xff0c;让照片仿佛截取于某部充满张力…

加密和解密(大语言模型)

看到很多对matlab的p文件加密方案感兴趣的。网络上技术资料比较少&#xff0c;所以&#xff0c;我让大语言模型提供一些概论性质的东西&#xff0c;转发出来自娱自乐。期望了解p文件加密的复杂度&#xff0c;而不是一定要尝试挑战加密算法。 但根据大语言模型提供的材料&#…

双轮驱动能源革命:能源互联网与分布式能源赋能工厂能效跃迁

在全球能源结构深度转型与“双碳”目标的双重驱动下&#xff0c;工厂作为能源消耗的主力军&#xff0c;正站在节能变革的关键节点。能源互联网与分布式能源技术的融合发展&#xff0c;为工厂节能开辟了全新路径。塔能科技凭借前沿技术与创新实践&#xff0c;深度探索能源协同优…

React 更新 state 中的数组

更新 state 中的数组 数组是另外一种可以存储在 state 中的 JavaScript 对象&#xff0c;它虽然是可变的&#xff0c;但是却应该被视为不可变。同对象一样&#xff0c;当你想要更新存储于 state 中的数组时&#xff0c;你需要创建一个新的数组&#xff08;或者创建一份已有数组…

ubantu18.04HDFS编程实践(Hadoop3.1.3)

说明&#xff1a;本文图片较多&#xff0c;耐心等待加载。&#xff08;建议用电脑&#xff09; 注意所有打开的文件都要记得保存。 第一步&#xff1a;准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的&#xff0c;因此需要读者完成我之前教程的所有操作。 第二步&am…

MySQL快速入门篇---库的操作

目录 一、创建数据库 1.语法 2.示例 二、查看数据库 1.语法 三、字符集编码和校验&#xff08;排序&#xff09;规则 1.查看数据库支持的字符集编码 2.查看数据库支持的排序规则 3.查看系统默认字符集和排序规则 3.1.查看系统默认字符集 3.2.查看系统默认排序规则 ​…

【已更新完毕】2025华中杯B题数学建模网络挑战赛思路代码文章教学:校园共享单车的调度与维护问题

完整内容请看文末最后的推广群 构建校园共享单车的调度与维护问题 摘要 共享单车作为一种便捷、环保的短途出行工具&#xff0c;近年来在高校校园内得到了广泛应用。然而&#xff0c;共享单车的运营也面临一些挑战。某高校引入共享单车后&#xff0c;委托学生对运营情况进行调…

NO.92十六届蓝桥杯备战|图论基础-最小生成树-Prim算法-Kruskal算法|买礼物|繁忙的都市|滑雪(C++)

一个具有n个顶点的连通图&#xff0c;其⽣成树为包含n-1条边和所有顶点的极⼩连通⼦图。对于⽣成树来说&#xff0c;若砍去⼀条边就会使图不连通图&#xff1b;若增加⼀条边就会形成回路。 ⼀个图的⽣成树可能有多个&#xff0c;将所有⽣成树中权值之和最⼩的树称为最⼩⽣成树…

第十四节:实战场景-何实现全局状态管理?

React.createElement调用示例 Babel插件对JSX的转换逻辑 React 全局状态管理实战与 JSX 转换原理深度解析 一、React 全局状态管理实现方案 1. Context API useReducer 方案&#xff08;轻量级首选&#xff09; // 创建全局 Context 对象 const GlobalContext createConte…

数据驱动、精准协同:高端装备制造业三位一体生产管控体系构建

开篇引入 鉴于集团全面推行生产运营体建设以及对二级单位生产过程管控力度逐步加强&#xff0c;某高端装备制造企业生产部长王总正在开展新的一年企业生产管控规划工作&#xff0c;为了能够更好地进行体系规划与建设应用&#xff0c;特邀请智能制造专家小智来进行讨论交流。 王…

航电系统之通信技术篇

航电系统&#xff08;航空电子系统&#xff09;的通信技术是现代航空器的核心技术之一&#xff0c;其核心目标是实现飞行器内部各系统之间以及飞行器与外部设备&#xff08;如地面控制中心、其他飞行器等&#xff09;之间高效、可靠的信息交互。随着航空技术的不断发展&#xf…

发现“横”字手写有难度,对比两个“横”字

我发现手写体“横”字“好看”程度&#xff0c;难以比得上印刷体&#xff1a; 两个从方正简体启体来的“横”字&#xff1a; 哪个更好看&#xff1f;我是倾向于左边一点。 <div style"transform: rotate(180deg); display: inline-block;"> 左边是我从方正简…

深度学习3.1 线性回归

3.1.1 线性回归的基本概念 损失函数 梯度下降 3.1.2 向量化加速 %matplotlib inline import math import time import numpy as np import torch from d2l import torch as d2ln 1000000 #本机为了差距明显&#xff0c;选择数据较大&#xff0c;运行时间较长&#xff0c;可选…

番外篇 | SEAM-YOLO:引入SEAM系列注意力机制,提升遮挡小目标的检测性能

前言:Hello大家好,我是小哥谈。SEAM(Squeeze-and-Excitation Attention Module)系列注意力机制是一种高效的特征增强方法,特别适合处理遮挡和小目标检测问题。该机制通过建模通道间关系来自适应地重新校准通道特征响应。在遮挡小目标检测中的应用优势包括:1)通道注意力增强…

SpringBoot ApplicationEvent:事件发布与监听机制

文章目录 引言一、事件机制的基本概念二、创建自定义事件2.1 定义事件类2.2 发布事件2.3 简化的事件发布 三、创建事件监听器3.1 使用EventListener注解3.2 实现ApplicationListener接口3.3 监听非ApplicationEvent类型的事件 四、事件监听的高级特性4.1 条件事件监听4.2 异步事…

广东2024信息安全管理与评估一阶段答案截图

2023-2024 学年广东省职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题一 模块一 网络平台搭建与设备安全防护 一、 比赛时间 本阶段比赛时间为 180 分钟。 二、 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一…

安卓手机如何改ip地址教程

对于安卓手机用户而言&#xff0c;ip修改用在电商、跨境电商、游戏搬砖、社交软件这些需要开多个账号的项目。因为多个设备或账号又不能在同一ip网络下&#xff0c;所以修改手机的IP地址防检测成为一个必要的操作。以下是在安卓手机上更改IP地址的多种方法及详细步骤&#xff0…

(51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)

目录 演示视频&#xff1a; 源代码 main.c LCD1602.c LCD1602.h AT24C02.c AT24C02.h Key.c Key.h I2C.c I2C.h Delay.c Delay.h 代码解析与教程&#xff1a; Dealy模块 LCD1602模块 Key模块 I2C总线模块 AT24C02模块 /E2PROM模块 main模块 演示视频&#xff1a; &…