吴恩达的TranslationAgent学习

TranslationAgent构成

整个[TranslationAgent (github.com)]在流程上分为短文本的一次性翻译和长文本的分chunk翻译(按照Token进行划分)。 但是不论长文本翻译还是短文本翻译,总体流程遵循执行、纠正再执行的逻辑循环实现。 这种按照自省思路来使用大模型的逻辑在近阶段的一些大模型应用论文和项目中经常出现,比如DoubleCheck的Prompt、([CRAG(Corrective Retrieval Augmented Generation)])的论文或者LangChain使用的ReAct。 这种自省的逻辑其实都体现了一个核心思路,别让大模型一次做太复杂的事。感觉大模型在推理解决问题方面的方案在逐渐统一:

  1. 大模型逐步规划
  2. 执行计划
  3. 结合结果重新规划
  4. 再执行

回归正题,我们先看看短文章翻译。翻译分为三个阶段

  1. chunk_initial_translation:单次翻译,得到结果。
  2. chunk_reflect_on_translation:审视检查翻译结果,决定如何改进
  3. chunk_improve_translation:根据改进点重新翻译得到结果

所以思路看起来很清晰,熟悉LangChain、LlamaIndex等项目这个思路会感觉很熟悉。我觉得代码并不重要,一个是思路,另一个是Prompt的写法。 本次先重点看一下Prompt的写法,吸取一下经验。

一、首轮翻译-one_chunk_initial_translation

System

f"You are an expert linguist, specializing in translation from {source_lang} to {target_lang}".

你是一个语言专家,擅长把信息从{source_lang}翻译成{target_lang}

Message

f"""This is an {source_lang} to {target_lang} translation, please provide the {target_lang} translation for this text. Do not provide any explanations or text apart from the translation.  
{source_lang}: {source_text}  {target_lang}:"""

这是一个从{source_lang}{target_lang}的翻译,请为这段文本提供{target_lang}的译文。除了译文,不要提供任何解释或其他文字。
{source_lang}:{source_text}

{target_lang}:

这段Prompt是最简单的一段,定义了角色、提出了要求、限制。在Message中增加了固定格式的用户输入的嵌入{source_lang}: {source_text}。 另外这里能常看到一种引导大模型回复的方式{target_lang}:。 LLM是一个语言概率的推测模型,给出适当的开头引导是一个常用的手段。

二、自省翻译结果-one_chunk_reflect_on_translation

System

f"You are an expert linguist specializing in translation from {source_lang} to {target_lang}. \
You will be provided with a source text and its translation and your goal is to improve the translation."

你是一个语言专家,擅长把信息从{source_lang}翻译成{target_lang}。 你会得到一段源语言的文本和一段译文,你的目标是改进这段译文。

Message

f"""Your task is to carefully read a source text and a translation from {source_lang} to {target_lang}, and then give constructive criticism and helpful suggestions to improve the translation. \  
The final style and tone of the translation should match the style of {target_lang} colloquially spoken in {country}.  The source text and initial translation, delimited by XML tags <SOURCE_TEXT></SOURCE_TEXT> and <TRANSLATION></TRANSLATION>, are as follows:  <SOURCE_TEXT>  
{source_text}  
</SOURCE_TEXT>  <TRANSLATION>  
{translation_1}  
</TRANSLATION>  When writing suggestions, pay attention to whether there are ways to improve the translation's \n\  
(i) accuracy (by correcting errors of addition, mistranslation, omission, or untranslated text),\n\  
(ii) fluency (by applying {target_lang} grammar, spelling and punctuation rules, and ensuring there are no unnecessary repetitions),\n\  
(iii) style (by ensuring the translations reflect the style of the source text and takes into account any cultural context),\n\  
(iv) terminology (by ensuring terminology use is consistent and reflects the source text domain; and by only ensuring you use equivalent idioms {target_lang}).\n\  Write a list of specific, helpful and constructive suggestions for improving the translation.  
Each suggestion should address one specific part of the translation.  
Output only the suggestions and nothing else."""

你的任务是仔细查看源文本和对应的{source_lang}{target_lang}的译文,然后给出有建设性的批评和有用的建议来改进译文。 译文的最终风格和语气应与在{country}口语中使用的{target_lang}的风格相匹配。 The source text and initial translation, delimited by XML tags <SOURCE_TEXT></SOURCE_TEXT> and , are as follows:
… 在撰写建议时,请注意是否有方法可以改进翻译的 (i) 准确性(通过纠正添加、误译、遗漏或未翻译文本的错误), (ii) 流畅性(通过应用{target_lang} 语法、拼写和标点规则,并确保没有不必要的重复), (iii) 风格(通过确保翻译反映源文本的风格并考虑任何文化背景), (iv) 术语(通过确保术语使用一致并反映源文本领域;并且仅确保您使用等效术语)习语 {target_lang})。 列出具体、有用且有建设性的建议,以改进翻译。 每条建议应针对翻译的一个特定部分。 仅输出建议,不输出其他内容。

这里我省略了一些翻译内容。重点注意Prompt中的这两点:

1. 如何挂入我要给大模型的信息?

从初始翻译和这个自省的Prompt能看到两种常见的方式

  1. Q:A\n Q:A:这种用引号和换行的形式来做分割,这种方式简单易懂,Prompt模板很容易书写。但是缺点显而易见,太容易被外挂的内容搅乱。虽然能力强的LLM可能也能够识别到,但是这个很难能做到稳定,效果也很难评估
  2. <\Q><\A>:用XML标签来携带数据,比较推荐这种形式。这种形式也是RAG场景中携带知识库内容最常见的形式。这里我个人之所以推荐这种形式是因为这种形式跟Transformer的decoder机制有些形似,Transformer在开始生成的时候会输入一个特殊的Token,当到达[STOP]的时候就停止预测生成,用XML标签对也是类似的结构,而且Embedding之后,位置信息被捕获对大模型应该有促进理解的作用(没论文支撑,存粹从Transformer原理的角度理解)。
2. 结构化的Prompt。

整个Prompt其实可以划分为三部分,也是结构化编写Prompt的常规方式。

  1. 角色:定义出你需要让大模型扮演什么角色,比如这里的语言专家。角色部分的要求不会经常变化,也不会需要大量的变量。一般写在System Prompt。
  2. 能力和任务:能力用来告诉大模型怎么做、任务用来告诉大模型要做什么。这一部分可以结合出很多种实现方式,比如COT、TOT、PS等Prompt思路都可以放在这里实现。
  3. 要求和限制:这部分常用来要求LLM按照我们的要求生成、输出内容。比如这里的准确、流畅、风格、术语等。

另外这里有个小细节country是个可选参数,当没传的时候对方言的要求就不再写入Prompt中了。这不仅要求Prompt要结构化的组织,对于上下文的行文也要能灵活组合。

三、改进翻译结果-one_chunk_improve_translation

System

f"You are an expert linguist, specializing in translation editing from {source_lang} to {target_lang}."

Message

f"""Your task is to carefully read, then edit, a translation from {source_lang} to {target_lang}, taking into  
account a list of expert suggestions and constructive criticisms.  The source text, the initial translation, and the expert linguist suggestions are delimited by XML tags <SOURCE_TEXT></SOURCE_TEXT>, <TRANSLATION></TRANSLATION> and <EXPERT_SUGGESTIONS></EXPERT_SUGGESTIONS> \  
as follows:  <SOURCE_TEXT>  
{source_text}  
</SOURCE_TEXT>  <TRANSLATION>  
{translation_1}  
</TRANSLATION>  <EXPERT_SUGGESTIONS>  
{reflection}  
</EXPERT_SUGGESTIONS>  Please take into account the expert suggestions when editing the translation. Edit the translation by ensuring:  (i) accuracy (by correcting errors of addition, mistranslation, omission, or untranslated text),  
(ii) fluency (by applying {target_lang} grammar, spelling and punctuation rules and ensuring there are no unnecessary repetitions), \  
(iii) style (by ensuring the translations reflect the style of the source text)  
(iv) terminology (inappropriate for context, inconsistent use), or  
(v) other errors.  Output only the new translation and nothing else."""

最后这部分就不做翻译了,结合前面的内容大家都看得懂。 改进翻译其实就很好理解了,用第二步生成的reflection让大模型再次改写。

四、总结

吴恩达老师的这个项目在我们实际测试下来效果确实很好,一方面得益于自省式的实现思路;另一方面Prompt的使用确实也很到位。 当然项目也有缺陷,就像是Git上的Readme所说的。后面我也会再分析下长文本是如何实现自省和翻译的。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

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

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

相关文章

【数字IC/FPGA】使用Verdi对比两个波形

步骤一&#xff1a; 使用verdi打开第一个波形 bsub verdi -ssf 1.fsdb添加需要观察的信号&#xff0c;如下图所示&#xff1a; 步骤二&#xff1a; 新建容器&#xff0c;依次点击Window --> Dock to --> New Container Window。 然后输入容器的名字&#xff0c;如下图所…

SQL数据库:通过在视频监控平台服务器上直接使用SQL存储过程,在海量记录中查询特定时间段内-某个摄像头的所有视频片段

目录 一、背景 1、存储过程 2、视频监控系统 二、需求和数据表 1、具体要求 2、数据表 3、部分数据 三、实现 1、目标 2、创建存储过程 &#xff08;1&#xff09;存储过程代码 &#xff08;2&#xff09;创建成功 3、存储过程的解释 4、SQL命令调用方式 5、调用…

Java----队列(Queue)

目录 1.队列&#xff08;Queue&#xff09; 1.1概念 1.2队列的使用 1.3队列的模拟实现 1.4循环队列 1.4.1循环队列下标偏移 1.4.2如何区分队列是空还是满 1.5双端队列 (Deque) 1.队列&#xff08;Queue&#xff09; 1.1概念 队列&#xff1a;只允许在一端进行插入数据…

Linux Redhat ens33不显示IP问题

优质博文&#xff1a;IT-BLOG-CN 【第一步】&#xff1a;查看系统网卡设备 : ip addr show 【第二步】&#xff1a;修改网卡配置参数 cd /etc/sysconfig/network-scripts/ vi ifcfg-ens33 修改ONBOOT参数为yes 【第三步】&#xff1a;重启网卡&#xff0c;然后ping检测…

奇怪的Excel单元格字体颜色格式

使用VBA代码修改单元格全部字符字体颜色是个很简单的任务&#xff0c;例如设置A1单元格字体颜色为红色。 Range("A1").Font.Color RGB(255, 0, 0)有时需要修改部分字符的颜色&#xff0c;如下图所示&#xff0c;将红色字符字体颜色修改为蓝色。代码将会稍许复杂&am…

Linux:Linux进程控制

目录 1. 进程概念 1.1 并行和并发 2. 进程创建 2.1 fork()函数初识 2.2 写时拷贝 2.3 fork常规用法 2.4 fork调用失败的原因 3. 进程终止 3.1 进程场景 3.2 进程常见退出方法 4. 进程等待 4.1 进程等待必要性 4.2 进程等待的方法 4.2.1 wait方法&#xff1a; 4.…

2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题是由安全生产模拟考试一点通提供&#xff0c;起重信号司索工(建筑特殊工种)证模拟考试题库是根据起重信号司索工(建筑特…

2.9.GoogLeNet

GoogLeNet ​ 主要解决了什么样大小的卷积核是最合适的&#xff1a;有时使用不同大小的卷积核组合是有利的 1.Inception块 ​ Inception块由四条并行路径组成。 前三条路径使用窗口大小为11、33和55的卷积层&#xff0c;从不同空间大小中提取信息。 ​ 中间的两条路径在输入…

谷粒商城实战-58-商品服务-API-三级分类-删除-批量删除小结

文章目录 一&#xff0c;增加一个批量删除的按钮并绑定事件二&#xff0c;全栈工程师三&#xff0c;逆向工程在全栈开发中的应用提升效率的方式&#xff1a;使用案例&#xff1a; 这一节的主要内容是开发批量删除分类的功能。 一&#xff0c;增加一个批量删除的按钮并绑定事件 …

zh echarts样式

记录一下&#xff1a; 一个图的配置 在echarts官网demo界面 option {title: {text: },legend: {data: [xxx前, xxx后]},radar: {// shape: circle,name: {// 雷达图各类别名称文本颜色textStyle: {color: #000,fontSize: 16}},indicator: [{ name: 完整性, max: 1 },{ name:…

【无标题】shell脚本的基本命令+编写shell脚本

shell脚本 一.shell基础 1.shell概念 2.shell脚本 3.shell脚本编写注意事项 二.编写shell脚本 1.编写一个helloworld脚本&#xff0c;运行脚本 [rootshell ~]# vim helloworld.sh #!/bin/bash //声明 echo "hello world!" ls -lh /etc/ 运行脚本(四种方式)&…

C语言字符函数与字符串函数超详解

文章目录 前言1. 字符分类函数2. 字符转换函数3. strlen3. 1 strlen 的使用3. 2 strlen 的模拟实现 4. strcpy4. 1 strcpy 的使用4. 2 strcpy 的模拟实现 5. strcat5. 1 strcat 的使用5. 2 strcat 的模拟实现 6. strcmp6. 1 strcmp 的使用6. 2 strcmp 的模拟实现 7. strncpy 函…

VI/VIM编辑器及三种模式

目录 1. 三种模式 2. 使用 VIM 3. i/ a/ o 进入输入模式 VI/VIM是 visual interface 的缩写是 Linux 中最经典的文本编辑器&#xff1b; VIM是 VI 的增强版本&#xff0c;兼容 VI 的所有指令&#xff0c;不仅能够编辑文本&#xff0c;还具有 shell 程序编辑的功能&#xff…

maven引入了jar包但在class文件里找不到jar包里的类

在工作当中遇到的这个问题&#xff0c;别人引入的jar包&#xff0c;我代码里报错 maven clean 和 maven install 都不管用 检查过了pom文件 检查了maven仓库路径下是否有这个cn.hutool的jar包 都没有找到问题 最终解决办法是手动引入 步骤一&#xff1a;点击左上角file->…

3.4-GRU

1网络结构 1.1与LSTM相比 LSTM里面有三个门&#xff0c;还有一个增加信息的tanh单元&#xff0c;参数量相较于RNN显著增加&#xff1b; 因此GRU在参数上比LSTM要少&#xff1b; 另外&#xff0c;LSTM 将必要信息记录在记忆单元中&#xff0c;并基于记忆单元的信息计算隐藏状…

MySQL数据库(基础篇)

&#x1f30f;个人博客主页&#xff1a;心.c 前言&#xff1a;今天讲解的是MySQL的详细知识点的&#xff0c;希望大家可以收货满满&#xff0c;话不多说&#xff0c;直接开始搞&#xff01; &#x1f525;&#x1f525;&#x1f525;文章专题&#xff1a;MySQL &#x1f63d;感…

1.c#(winform)编程环境安装

目录 安装vs创建应用帮助查看器安装与使用&#xff08; msdn&#xff09; 安装vs 安装什么版本看个人心情&#xff0c;或者公司开发需求需要 而本栏全程使用vs2022进行开发c#&#xff0c;着重讲解winform桌面应用开发 使用***.net framework***开发 那先去官网安装企业版的vs…

AI绘画入门实践 | Midjourney:使用 --chaos 给图像风格来点惊喜

在 Midjourney 中&#xff0c;--chaos 影响初始图像网格的多样性&#xff0c;指 MJ 每次出的4张图之间的差异性。 默认值为0&#xff0c;值越高&#xff0c;差异性越大。 使用格式&#xff1a;--chaos 0-100的整数值 使用演示 a lot of flowers --chaos 0 --v 6.0a lot of fl…

项目打包与运行

前端运行时必须有与后端相同的数据库版本&#xff0c;数据库账号密码 右侧maven -> 展开要打包的项目 -> 生命周期 -> 双击package 打包好之后在target目录下 右键打开 在资源目录下输入cmd&#xff0c;执行以下命令即可运行&#xff08;端口号为yml文件…

Redis实战篇(黑马点评)笔记总结

一、配置前后端项目的初始环境 前端&#xff1a; 对前端项目在cmd中进行start nginx.exe&#xff0c;端口号为8080 后端&#xff1a; 配置mysql数据库的url 和 redis 的url 和 导入数据库数据 二、登录校验 基于Session的实现登录&#xff08;不推荐&#xff09; &#xf…