基于大语言模型的 Codeforces、AtCoder 等国际线上赛事翻译优化

· · 科技·工程

((让它看起来像篇论文,于是便有了这个结构((超小声~

摘要

通过基于大预言模型的翻译,优化翻译流程与翻译结果。使翻译结果更可靠,更便于查看。

关键词:翻译;大语言模型;

目前已有页面翻译的不足

目前,浏览器的页面翻译,虽然具有着速度快,方便查看等优点。但普遍存在误对行内公式翻译与行内公式与其它文本重叠或错位的问题,如将 a_{i} 译为 \text{一个}_{\text{我}}

基于大语言模型翻译优化

目前,已有许多较为成熟的商业大语言模型。在此,仅需通过调用相关接口。

注意到 Codeforces 原始题面中对 \KaTeX 的使用与 洛谷 不同。Codeforces 中两侧分别使用连续三个美元符号 $$$ $$$ 定界,而在 洛谷 中则两侧分别使用一个美元符号 $ $ 定界。^{[1]}

注意到在 洛谷 中,换行需要连续两个换行符 \n\n 才能实现一次换行。

对于上述两点问题,在翻译工作结束后,逐个进行替换即可。

在此,给出完整可运行的工程。

import os
from openai import OpenAI

api_key = ''            # APIKey
api_url = ""            # 大语言模型请求链接
api_model = ""          # 使用模型
in_file = "in.txt"      # 输入文本文件
out_file = "out.txt"    # 输出文本文件

# 构造 client
os.environ['OPENAI_API_KEY'] = api_key
client = OpenAI(
    api_key=os.environ.get(api_key),
    base_url=api_url, 
)

# 读取英文题面
text="请将如下内容翻译为中文。注意,请不要将一对 '$$$' 内的部分翻译。\n"
with open(in_file, "r") as f:
    text+=f.read()
print(text)

# 请求大预言模型
completion = client.chat.completions.create(
    model=api_model,
    messages=[
        {
            "role": "user",
            "content": text,
        },
    ],
    extra_body={
        "key": "hello world!", 
    },
)

out=completion.choices[0].message.content

out=out.replace("$$$","$") # 替换 KATEX 块
out=out.replace("\n","\n\n") # 替换 换行

# 输出中文题面
with open(out_file, "w") as f:
    print(out)
    print("\n\n**"+completion.note+"**")
    f.write(out+"\n\n\n**"+completion.note+"**")
^{[2]}

展望

目前,由于 Codeforces 使用了 Cloudflare 保护,使得参赛者只能手动复制,而无法方便的使用自动化工具获取题面。且未对样例部分进行保护与格式优化,可能造成样例误被翻译等问题。

本文针对现存主要问题进行了优化,提供了完整可运行的工程起点。希望未来工作能基于本文持续优化,进一步打破国际线上赛事的语言壁垒。

((致谢~ QwQ!

参考文献

^{[1]} https://help.luogu.com.cn/rules/academic/handbook/latex

^{[2]} https://cloud.tencent.com/document/product/1729/111007