[toc]
ChatGPT 是多语言的,但是,它不会产生与用英语查询它相同的高性能。同时,对于非英语人士来说,这可能也是障碍,原因有二:
- 有效提示词
当英语不是你的第一语言时,生成完全表达你意思的切中要害的问题可能很困难,而且 ChatGPT 或其他语言模型对你的要求感到困惑的情况并不少见,至少在他们的第一个答案中是这样。 - 跨语言结果不可靠
当试图用你的母语与LLM交谈时,你可能会遇到尴尬的措辞,错误或解释习语和其他日常表达的困难。
如果我们能从头开始生成一个多语言的LLM,那就太好了。我们也可以决定在已经存在的基于英语的模型上构建,而无需微调或重新训练它们,而是使用一个聪明的解决方法:我们可以使用一个过滤函数,该函数能够将用户的母语查询翻译成英语,将其提供给 LLM 并检索响应,最终将从英语回译为原始语言。 想尝试吗?让我们使用一些 python 来构建它!
1.导入依赖库
要构建多语言聊天机器人,您需要多个依赖项,可以通过 pip 安装这些依赖项:
python3 -m pip install transformers==4.39.3 \
langdetect==1.0.9 \
deep-translator==1.11.4 \
torch==2.1.2 \
gradio==4.28.3
让我们看看这些包有什么作用:
- transformers 是 Hugging Face 的一个软件包,可帮助您与 HF Hub (GitHub) 上的模型进行交互
- langdetect 是一个用于自动语言检测 (Github) 的软件包
- deep-translator 是一个基于多个翻译服务 (GitHub) 的句子翻译包
- torch 是一个用于在 python (GitHub) 中管理张量和动态神经网络的包
- gradio 是一个包,旨在简化 Python 和其他语言 (GitHub) 的应用程序界面开发
2.后端架构设计及实现
我们需要构建一个如下所示的后端架构
让我们定义一个 Translation 类,帮助我们检测原始语言并对其进行翻译:
from langdetect import detect
from deep_translator import GoogleTranslator
class Translation:
def __init__(self, text, destination):
self.text = text
self.destination = destination
try:
self.original = detect(self.text) # detect original
except Exception as e:
self.original = "auto" # if it does not work, default to "auto"
def translatef(self):
translator = GoogleTranslator(source=self.original, target=self.destination) # use Google Translate, one of the fastest translators available
translation = translator.translate(self.text)
return translation
正如你所看到的,这个类将我们想要翻译的text(文本)和我们想要翻译的语言(destination)作为参数。
现在让我们加载我们想要用于我们目的的 LLM:我们将从 Bigscience 的 Bloom-1.7B 开始,这是一个中等大小的 LLM,非常适合 16GB RAM、2 核 CPU 硬件。
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
model = AutoModelForCausalLM.from_pretrained("bigscience/bloom-1b7") # import the model
tokenizer = AutoTokenizer.from_pretrained("bigscience/bloom-1b7") # load the tokenizer
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=2048, repetition_penalty=1.2, temperature=0.4) # prepare the inference pipeline
我们定义了生成token的最大数量(2048),将重复惩罚设置为1.2,以避免模型一遍又一遍地重复同样的事情,并且我们将温度(生成响应的“creativity”)保持在相当低的水平。
现在,让我们创建一个函数,它能够从聊天中获取消息,将其翻译成英语(除非它已经是英语),将其作为提示提供给 Bloom,检索英语响应并将其反向翻译成原始语言:
def reply(message, history):
txt = Translation(message, "en")
if txt.original == "en":
response = pipe(message)
return response[0]["generated_text"]
else:
translation = txt.translatef()
response = pipe(translation)
t = Translation(response[0]["generated_text"], txt.original)
res = t.translatef()
return res
我们已经拥有了后端架构所需的一切,是时候构建前端接口了!
3.构建接口
使用 Gradio,构建用户界面就像一行代码一样简单:
demo = gr.ChatInterface(fn=reply, title="Multilingual-Bloom Bot")
现在,我们可以使用以下命令启动应用程序:
demo.launch()
我们将整个脚本保存在一个名为 chat.py 的文件中,为了使聊天机器人运行,我们转到终端并键入:
python3 chat.py
小结
本节我们学习了开源项目 bloom-multiligual-chatbot,这是一个多语言聊天机器人,我们使用bloom-1b7作为我们的AI基础模型,通过Gradio构建我们的web应用程序,通过本节的学习,相信读者对AI及聊天机器人架构及实践会有一个更加深入的了解。
github地址:https://github.com/AstraBert/bloom-multilingual-chatbot/
小编是一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能的最新应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!