一、背景
在翻译系统中,经常会遇到多端词义冲突、一词多义等问题。通常我们处理这些问题会用到建立词库、机器翻译、层级翻译等。即先建立好词条库,然后按层级进行翻译,先到词条库里面去匹配,如没有对应的词条翻译,则再利用chat-gpt进行机器翻译。
然而,当我们在词条库中发现多个翻译词条时,也就是一词多义,这种场景往往会出现翻译不准确的问题。
二、解决方案
面对一词多义,我们通常有2种解决方案,一是用户打标+机器学习训练(如tensorflow),二是上下文+机器翻译。
两种方案各有优缺点复杂度相对高一些但完全掌控;后者利用现成训练好的模型,相对简单但往往要收费,当然也可利用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. 常见问题
-
国内连接OpenAI一直报超时,# Error: connect ETIMEDOUT
-
报错 Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in
解决方案:语法冲突,检查下langchain版本是否正确,是否使用了正确的版本,js.langchain.com.cn/docs/gettin…
-
@langchain和langchain有什么区别?
答:
@langchain是 LangChain 生态系统中最近开始采用的新命名空间。这个包通常用于特定用途,如@langchain/core、@langchain/llms等,以帮助开发者更好地管理和使用 LangChain 相关的模块。langchain是原始的单一包,包含了 LangChain 的所有功能。安装langchain会引入整个库的功能。@langchain提供了更模块化和可定制的选择,而langchain是较为传统和一体化的版本。选择哪个取决于你的项目需求。