1.初始翻译:Translation Agent 首先利用 LLM 对输入文本进行初步翻译,得到一个初步的译文。
2.反思与改进:与传统机器翻译系统直接输出译文不同,Translation Agent 会引导 LLM 对自身的翻译结果进行反思,并提出改进建议。例如,LLM 可能会指出译文中存在的不准确、不流畅或不符合目标语言习惯表达的地方,就像一个经验丰富的校对员一样,帮助 LLM 找出翻译中的不足之处。
3.优化输出:最后,Translation Agent 根据 LLM 提出的改进建议,对初始译文进行优化,最终生成一个更加精准、流畅且符合目标语言习惯的译文。
Translation Agent 的一大优势在于其高度可定制化的翻译引擎。通过在翻译过程中对 LLM 进行引导,用户可以轻松地控制翻译的各个方面,例如:
•调整输出风格:用户可以指定翻译的正式程度,例如是偏向于正式的商务文体,还是更加口语化的日常用语,就像告诉翻译助手你的目标读者是谁一样。
•处理习语和专业术语:用户可以在翻译之前提供一个术语表,确保特定的专业术语能够被准确地翻译成目标语言,就像为翻译助手准备了一本专业词典。
•指定特定地区或方言的语言使用:Translation Agent 可以根据用户的需求,选择使用特定地区或方言的语言变体进行翻译,例如拉丁美洲西班牙语、西班牙西班牙语、加拿大法语或法国法语等,就像告诉翻译助手你的目标受众来自哪里一样。
Translation Agent 的核心代码位于src/translation_agent/utils.py文件中。该文件包含了 Translation Agent 的主要功能函数,例如调用 OpenAI API、文本分块、翻译、反思、改进等。
•get_completion函数:调用 OpenAI API 获取 LLM 生成结果该函数负责调用 OpenAI API,将用户输入的文本和提示词发送给 LLM,并接收 LLM 生成的结果,就像是一个信使,负责在用户和 LLM 之间传递信息。
•one_chunk_translate_text函数:单段落文本的完整翻译流程该函数用于处理单段落文本的翻译任务,它包含以下三个步骤:
•one_chunk_initial_translation函数:单段落文本的初始翻译该函数负责对单段落文本进行初始翻译,它会将源语言文本和预先设计的提示词发送给 LLM,让 LLM 生成初步的译文。
•one_chunk_reflect_on_translation函数:对翻译结果进行反思该函数会将源语言文本、初始译文和反思提示词发送给 LLM,让 LLM 对初始译文进行评估,并提出改进建议。
•one_chunk_improve_translation函数:根据反思结果改进翻译该函数会将源语言文本、初始译文、反思结果和改进提示词发送给 LLM,让 LLM 根据反思结果对初始译文进行修改,生成最终译文。
•num_tokens_in_string函数:计算文本的 token 数量该函数用于计算文本的 token 数量,token 是 LLM 处理文本的基本单位,就像英语中的单词一样。
•multichunk_translation函数:多段落文本的完整翻译流程该函数用于处理多段落文本的翻译任务,它同样包含初始翻译、反思和改进三个步骤:
•multichunk_initial_translation函数:多段落文本的初始翻译
•multichunk_reflect_on_translation函数:对多段落翻译结果进行反思
•multichunk_improve_translation函数:根据反思结果改进多段落翻译
•calculate_chunk_size函数:计算文本分块大小该函数用于计算文本分块的大小,以便将长文本分成多个段落进行处理。
•translate函数:Translation Agent 的主函数该函数是 Translation Agent 的主函数,它负责接收用户输入的文本、源语言、目标语言和地区信息,并调用其他函数完成翻译任务。translate函数首先会计算输入文本的 token 数量,如果 token 数量小于预设的最大值MAX_TOKENS_PER_CHUNK,则调用one_chunk_translate_text函数对文本进行单段落翻译;否则,调用multichunk_translation函数对文本进行多段落翻译。
deftranslate(
source_lang,
target_lang,
source_text,
country,
max_tokens=MAX_TOKENS_PER_CHUNK,
):
"""Translatethesource_textfromsource_langtotarget_lang."""
num_tokens_in_text=num_tokens_in_string(source_text)
ic(num_tokens_in_text)
ifnum_tokens_in_text<max_tokens:
ic("Translatingtextassinglechunk")
final_translation=one_chunk_translate_text(
source_lang,target_lang,source_text,country
)
returnfinal_translation
else:
ic("Translatingtextasmultiplechunks")
token_size=calculate_chunk_size(
token_count=num_tokens_in_text,token_limit=max_tokens
)
ic(token_size)
text_splitter=RecursiveCharacterTextSplitter.from_tiktoken_encoder(
model_name="gpt-4",
chunk_size=token_size,
chunk_overlap=0,
)
source_text_chunks=text_splitter.split_text(source_text)
translation_2_chunks=multichunk_translation(
source_lang,target_lang,source_text_chunks,country
)
return"".join(translation_2_chunks)translate函数的逻辑非常清晰,它就像是一个总指挥,根据输入文本的长度,决定采用单段落翻译还是多段落翻译,并将任务 delegate 给相应的函数去执行。
提示词在 Translation Agent 中扮演着至关重要的角色,它决定了 LLM 如何理解和执行翻译任务。Translation Agent 使用了精心设计的提示词来引导 LLM 完成各个阶段的任务。
提示词是指导 LLM 行为的关键因素,它为 LLM 提供了上下文信息、任务目标和输出规范。优秀的提示词能够引导 LLM 生成更准确、更符合预期的结果,而糟糕的提示词则可能导致 LLM 生成不准确、不相关甚至有害的内容。
one_chunk_initial_translation函数:单段落文本的初始翻译 提示词Thisisan{source_lang}to{target_lang}translation,pleaseprovidethe{target_lang}translationforthistext.\
Donotprovideanyexplanationsortextapartfromthetranslation.
{source_lang}:{source_text}
{target_lang}:说明:
•该提示词首先明确了翻译的方向,即从源语言{source_lang}到目标语言{target_lang}。
•然后,它要求 LLM 只提供翻译结果,不要包含任何解释或其他无关信息,例如不要在翻译结果中添加注释或说明,以确保输出的简洁性。
•最后,它将源语言文本放在{source_text}占位符的位置,并将目标语言的占位符空出来,等待 LLM 填写翻译结果,这样可以确保 LLM 生成的内容格式正确,易于后续处理。
one_chunk_reflect_on_translation函数:对翻译结果进行反思 提示词Yourtaskistocarefullyreadasourcetextandatranslationfrom{source_lang}to{target_lang},andthengiveconstructivecriticismandhelpfulsuggestionstoimprovethetranslation.\
{country_specific}
Thesourcetextandinitialtranslation,delimitedbyXMLtags<SOURCE_TEXT></SOURCE_TEXT>and<TRANSLATION></TRANSLATION>,areasfollows:
<SOURCE_TEXT>
{source_text}
</SOURCE_TEXT>
<TRANSLATION>
{translation_1}
</TRANSLATION>
Whenwritingsuggestions,payattentiontowhethertherearewaystoimprovethetranslation's\n\
(i)accuracy(bycorrectingerrorsofaddition,mistranslation,omission,oruntranslatedtext),\n\
(ii)fluency(byapplying{target_lang}grammar,spellingandpunctuationrules,andensuringtherearenounnecessaryrepetitions),\n\
(iii)style(byensuringthetranslationsreflectthestyleofthesourcetextandtakesintoaccountanyculturalcontext),\n\
(iv)terminology(byensuringterminologyuseisconsistentandreflectsthesourcetextdomain;andbyonlyensuringyouuseequivalentidioms{target_lang}).\n\
Writealistofspecific,helpfulandconstructivesuggestionsforimprovingthetranslation.
Eachsuggestionshouldaddressonespecificpartofthetranslation.
Outputonlythesuggestionsandnothingelse.说明:
•该提示词首先向 LLM 明确了任务目标,即对翻译结果进行反思,并提供改进建议。这部分提示词以清晰的指令引导 LLM 进入“反思”模式。
•然后,它使用 XML 标签将源语言文本和初始译文分别标记出来,方便 LLM 识别。利用 XML 标签区分原文和译文,使得 LLM 更容易理解和处理文本信息。
•接下来,它列出了 LLM 在反思时需要关注的四个方面,即准确性 (accuracy)、流畅度 (fluency)、风格 (style) 和术语 (terminology)。这四个方面也是评价翻译质量的重要标准,提示词中对每个方面的详细说明能够引导 LLM 进行更全面的评估。
•最后,它要求 LLM 以列表的形式输出具体的改进建议,每个建议只针对翻译中的一个具体问题,并且不要输出任何其他内容,以确保输出格式的规范性。
one_chunk_improve_translation函数:根据反思结果改进翻译 提示词Yourtaskistocarefullyread,thenedit,atranslationfrom{source_lang}to{target_lang},takinginto
accountalistofexpertsuggestionsandconstructivecriticisms.
Thesourcetext,theinitialtranslation,andtheexpertlinguistsuggestionsaredelimitedbyXMLtags<SOURCE_TEXT></SOURCE_TEXT>,<TRANSLATION></TRANSLATION>and<EXPERT_SUGGESTIONS></EXPERT_SUGGESTIONS>\
asfollows:
<SOURCE_TEXT>
{source_text}
</SOURCE_TEXT>
<TRANSLATION>
{translation_1}
</TRANSLATION>
<EXPERT_SUGGESTIONS>
{reflection}
</EXPERT_SUGGESTIONS>
Pleasetakeintoaccounttheexpertsuggestionswheneditingthetranslation.Editthetranslationbyensuring:
(i)accuracy(bycorrectingerrorsofaddition,mistranslation,omission,oruntranslatedtext),
(ii)fluency(byapplying{target_lang}grammar,spellingandpunctuationrulesandensuringtherearenounnecessaryrepetitions),\
(iii)style(byensuringthetranslationsreflectthestyleofthesourcetext)
(iv)terminology(inappropriateforcontext,inconsistentuse),or
(v)othererrors.
Outputonlythenewtranslationandnothingelse.说明:
•该提示词首先向 LLM 明确了任务目标,即根据专家建议对初始译文进行改进。
•然后,它使用 XML 标签将源语言文本、初始译文和专家建议分别标记出来,方便 LLM 识别。
•最后,它要求 LLM 在改进译文时,要考虑专家建议,并确保译文的准确性、流畅度、风格和术语的准确性。
multichunk_initial_translation函数:多段落文本的初始翻译 提示词Yourtaskisprovideaprofessionaltranslationfrom{source_lang}to{target_lang}ofPARTofatext.
Thesourcetextisbelow,delimitedbyXMLtags<SOURCE_TEXT>and</SOURCE_TEXT>.Translateonlythepartwithinthesourcetext
delimitedby<TRANSLATE_THIS>and</TRANSLATE_THIS>.Youcanusetherestofthesourcetextascontext,butdonottranslateany
oftheothertext.Donotoutputanythingotherthanthetranslationoftheindicatedpartofthetext.
<SOURCE_TEXT>
{tagged_text}
</SOURCE_TEXT>
Toreiterate,youshouldtranslateonlythispartofthetext,shownhereagainbetween<TRANSLATE_THIS>and</TRANSLATE_THIS>:
<TRANSLATE_THIS>
{chunk_to_translate}
</TRANSLATE_THIS>
Outputonlythetranslationoftheportionyouareaskedtotranslate,andnothingelse.
multichunk_reflect_on_translation函数:对多段落翻译结果进行反思 提示词Yourtaskistocarefullyreadasourcetextandpartofatranslationofthattextfrom{source_lang}to{target_lang},andthengiveconstructivecriticismandhelpfulsuggestionsforimprovingthetranslation.
{country_specific}
Thesourcetextisbelow,delimitedbyXMLtags<SOURCE_TEXT>and</SOURCE_TEXT>,andthepartthathasbeentranslated
isdelimitedby<TRANSLATE_THIS>and</TRANSLATE_THIS>withinthesourcetext.Youcanusetherestofthesourcetext
ascontextforcritiquingthetranslatedpart.
<SOURCE_TEXT>
{tagged_text}
</SOURCE_TEXT>
Toreiterate,onlypartofthetextisbeingtranslated,shownhereagainbetween<TRANSLATE_THIS>and</TRANSLATE_THIS>:
<TRANSLATE_THIS>
{chunk_to_translate}
</TRANSLATE_THIS>
Thetranslationoftheindicatedpart,delimitedbelowby<TRANSLATION>and</TRANSLATION>,isasfollows:
<TRANSLATION>
{translation_1_chunk}
</TRANSLATION>
Whenwritingsuggestions,payattentiontowhethertherearewaystoimprovethetranslation's:\n\
(i)accuracy(bycorrectingerrorsofaddition,mistranslation,omission,oruntranslatedtext),\n\
(ii)fluency(byapplying{target_lang}grammar,spellingandpunctuationrules,andensuringtherearenounnecessaryrepetitions),\n\
(iii)style(byensuringthetranslationsreflectthestyleofthesourcetextandtakesintoaccountanyculturalcontext),\n\
(iv)terminology(byensuringterminologyuseisconsistentandreflectsthesourcetextdomain;andbyonlyensuringyouuseequivalentidioms{target_lang}).\n\
Writealistofspecific,helpfulandconstructivesuggestionsforimprovingthetranslation.
Eachsuggestionshouldaddressonespecificpartofthetranslation.
Outputonlythesuggestionsandnothingelse.multichunk_improve_translation函数:根据反思结果改进多段落翻译 提示词Yourtaskistocarefullyread,thenimprove,atranslationfrom{source_lang}to{target_lang},takinginto
accountasetofexpertsuggestionsandconstructivecritisms.Below,thesourcetext,initialtranslation,andexpertsuggestionsareprovided.
Thesourcetextisbelow,delimitedbyXMLtags<SOURCE_TEXT>and</SOURCE_TEXT>,andthepartthathasbeentranslated
isdelimitedby<TRANSLATE_THIS>and</TRANSLATE_THIS>withinthesourcetext.Youcanusetherestofthesourcetext
ascontext,butneedtoprovideatranslationonlyofthepartindicatedby<TRANSLATE_THIS>and</TRANSLATE_THIS>.
<SOURCE_TEXT>
{tagged_text}
</SOURCE_TEXT>
Toreiterate,onlypartofthetextisbeingtranslated,shownhereagainbetween<TRANSLATE_THIS>and</TRANSLATE_THIS>:
<TRANSLATE_THIS>
{chunk_to_translate}
</TRANSLATE_THIS>
Thetranslationoftheindicatedpart,delimitedbelowby<TRANSLATION>and</TRANSLATION>,isasfollows:
<TRANSLATION>
{translation_1_chunk}
</TRANSLATION>
Theexperttranslationsoftheindicatedpart,delimitedbelowby<EXPERT_SUGGESTIONS>and</EXPERT_SUGGESTIONS>,isasfollows:
<EXPERT_SUGGESTIONS>
{reflection_chunk}
</EXPERT_SUGGESTIONS>
Takingintoaccounttheexpertsuggestionsrewritethetranslationtoimproveit,payingattention
towhethertherearewaystoimprovethetranslation's
(i)accuracy(bycorrectingerrorsofaddition,mistranslation,omission,oruntranslatedtext),
(ii)fluency(byapplying{target_lang}grammar,spellingandpunctuationrulesandensuringtherearenounnecessaryrepetitions),\
(iii)style(byensuringthetranslationsreflectthestyleofthesourcetext)
(iv)terminology(inappropriateforcontext,inconsistentuse),or
(v)othererrors.
Outputonlythenewtranslationoftheindicatedpartandnothingelse.Translation Agent 的提示词设计遵循以下理念:
•清晰明确的任务目标:提示词需要清晰地描述 LLM 需要完成的任务,例如翻译、反思或改进。清晰的任务描述可以帮助 LLM 更好地理解用户的意图,从而生成更准确的结果。
•结构化的输入信息:使用 XML 标签或其他标记符号,将不同的信息进行区分,方便 LLM 识别和处理。结构化的信息能够帮助 LLM 更有效地提取关键信息,避免混淆和错误。
•具体的指导和规范:为了确保 LLM 能够按照预期目标进行工作,提示词需要提供具体的指导和规范,例如需要关注哪些方面、输出格式是什么等。清晰的指导和规范可以减少 LLM 的自由发挥空间,使其生成的文本更加符合预期。
优势:
•高度可定制化:用户可以通过修改提示词来控制翻译的各个方面,例如输出风格、专业术语和语言变体等,从而满足个性化的翻译需求。
•基于反思工作流:模拟了人类翻译专家的思考过程,能够生成更加精准、流畅的译文。反思工作流可以有效降低翻译错误,提高翻译质量。
•开源项目:任何人都可以免费使用、修改和分发 Translation Agent,这将促进智能翻译技术的交流和发展。
不足:
•翻译质量仍有提升空间:与商业翻译引擎相比,Translation Agent 的翻译质量还有待提高。这主要是由于 LLM 本身的局限性,例如对某些语言对的支持不足、对专业领域的理解不够深入等。
•依赖于 LLM:Translation Agent 的性能取决于所使用的 LLM,而 LLM 的性能会受到训练数据和模型大小的影响。因此,选择合适的 LLM 对于 Translation Agent 的性能至关重要。
•需要一定的技术门槛:用户需要具备一定的编程知识才能使用 Translation Agent,这限制了其在普通用户中的普及。
•更加精准、流畅的翻译质量:随着 LLM 技术的不断发展,智能翻译的质量将会越来越高。未来的 LLM 将会拥有更强大的语言理解和生成能力,能够处理更复杂
•更加个性化的翻译服务:未来的智能翻译系统将能够根据用户的需求,提供更加个性化的翻译服务。例如,用户可以根据自己的专业领域、语言水平和文化背景等,定制化自己的翻译引擎。
•更加广泛的应用场景:智能翻译将会应用到更多的领域,例如跨境电商、国际会议、文化交流等。随着智能翻译技术的成熟,它将会打破语言障碍,促进不同国家和地区之间的交流与合作。
Translation Agent 的出现,为智能翻译领域带来了新的活力。其独特的反思工作流和高度可定制化的特点,使其在处理复杂翻译任务时更具优势。相信随着 LLM 技术的不断发展和开源社区的共同努力,Translation Agent 将会在未来取得更大的突破,引领智能翻译技术走向更加美好的未来。
相关链接:
https://github.com/andrewyng/translation-agent/
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |