从多义词到精准翻译:翻译系统的进化之路

326 阅读3分钟

一、背景

在翻译系统中,经常会遇到多端词义冲突、一词多义等问题。通常我们处理这些问题会用到建立词库、机器翻译、层级翻译等。即先建立好词条库,然后按层级进行翻译,先到词条库里面去匹配,如没有对应的词条翻译,则再利用chat-gpt进行机器翻译。

image.png

然而,当我们在词条库中发现多个翻译词条时,也就是一词多义,这种场景往往会出现翻译不准确的问题。

二、解决方案

面对一词多义,我们通常有2种解决方案,一是用户打标+机器学习训练(如tensorflow),二是上下文+机器翻译。

image.png

两种方案各有优缺点复杂度相对高一些但完全掌控;后者利用现成训练好的模型,相对简单但往往要收费,当然也可利用LLAMA等免费框架。

考虑到已有应用使用了chat-gpt的服务,我们选用了第二种方案。基于 Node.js + LangChain.js + GPT-4框架,处理翻译任务,尤其是理解多义词的上下文,能确保输出结果符合实际语境需求。

下面是一个完整的简单例子,使用 LangChain.js 在 Node.js 中处理上下文翻译任务。

三、案例:一词多义翻译

用于处理中文“确定”在不同上下文中的翻译(如“Confirm”或“OK”)。

1. 安装依赖

首先,安装必要的依赖:

npm install langchain openai dotenv

2. 配置 OpenAI API 密钥

创建一个 .env 文件,并将你的 OpenAI API 密钥添加到文件中:

OPENAI_API_KEY=your-openai-api-key

3. 编写翻译任务代码

在 Node.js 中使用 LangChain.js 和 OpenAI API 来处理多义词翻译任务:

require('dotenv').config();
const { OpenAI } = require('langchain/llms/openai');
const { LLMChain } = require('langchain/chains');
const { PromptTemplate } = require('langchain/prompts');

// 配置 OpenAI
const model = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  model: 'gpt-3.5-turbo',
  temperature: 0.3,
});

// 定义提示模板
const prompt = new PromptTemplate({
  template: `
你是一个翻译专家,请根据以下上下文判断中文“确定”应该翻译为“Confirm”还是“OK”:
上下文:{context}

翻译:`,
  inputVariables: ['context'],
});

// 创建 LLMChain
const chain = new LLMChain({
  llm: model,
  prompt: prompt
});

async function translate(context) {
  try {
    // console.log('Sending request with context:', context); // 调试信息
    const response = await chain.call({ context });
    // console.log('Received response:', response); // 调试信息
    return response.trim();
  } catch (error) {
    console.error('Error during translation:', error);
  }
}

// 模拟用户输入翻译的上下文
// 测试多个上下文
async function runTranslation() {
  const contexts = [
    '提交表单后,请点击确定按钮以保存更改。',
    '关闭此通知后,请点击确定按钮继续。',
    '删除操作不可撤销,点击确定按钮以确认删除。'
  ];

  for (const context of contexts) {
    const translation = await translate(context);
    console.log(`上下文: ${context}\n翻译: ${translation}\n`);
  }
}

runTranslation();

4. 示例输出

运行代码后,系统会根据上下文提供适当的翻译,例如:

上下文: 提交表单后,请点击确定按钮以保存更改。
翻译: Confirm

上下文: 关闭此通知后,请点击确定按钮继续。
翻译: OK

上下文: 删除操作不可撤销,点击确定按钮以确认删除。
翻译: Confirm

完整demo地址:在线demo (注意:demo中的OPENAI_API_KEY需要换成自己的)

5. 常见问题

  1. 国内连接OpenAI一直报超时,# Error: connect ETIMEDOUT

    解决方案:github.com/axios/axios…

  2. 报错 Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in

    解决方案:语法冲突,检查下langchain版本是否正确,是否使用了正确的版本,js.langchain.com.cn/docs/gettin…

  3. @langchain和langchain有什么区别?

    答:@langchain 是 LangChain 生态系统中最近开始采用的新命名空间。这个包通常用于特定用途,如 @langchain/core@langchain/llms 等,以帮助开发者更好地管理和使用 LangChain 相关的模块。

    langchain 是原始的单一包,包含了 LangChain 的所有功能。安装 langchain 会引入整个库的功能。

    @langchain 提供了更模块化和可定制的选择,而 langchain 是较为传统和一体化的版本。选择哪个取决于你的项目需求。