前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【AIGC】多语言聊天机器人服务构建(基于bloom大语言模型)

【AIGC】多语言聊天机器人服务构建(基于bloom大语言模型)

原创
作者头像
Freedom123
发布2024-05-09 14:38:55
2300
发布2024-05-09 14:38:55
举报
文章被收录于专栏:AIGC

ChatGPT 是多语言的,但是,它不会产生与用英语查询它相同的高性能。同时,对于非英语人士来说,这可能也是障碍,原因有二:

  • 有效提示词 当英语不是你的第一语言时,生成完全表达你意思的切中要害的问题可能很困难,而且 ChatGPT 或其他语言模型对你的要求感到困惑的情况并不少见,至少在他们的第一个答案中是这样。
  • 跨语言结果不可靠 当试图用你的母语与LLM交谈时,你可能会遇到尴尬的措辞,错误或解释习语和其他日常表达的困难。

如果我们能从头开始生成一个多语言的LLM,那就太好了。我们也可以决定在已经存在的基于英语的模型上构建,而无需微调或重新训练它们,而是使用一个聪明的解决方法:我们可以使用一个过滤函数,该函数能够将用户的母语查询翻译成英语,将其提供给 LLM 并检索响应,最终将从英语回译为原始语言。 想尝试吗?让我们使用一些 python 来构建它!

1.导入依赖库

要构建多语言聊天机器人,您需要多个依赖项,可以通过 pip 安装这些依赖项:

代码语言:python
代码运行次数:0
复制
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 类,帮助我们检测原始语言并对其进行翻译:

代码语言:python
代码运行次数:0
复制
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 硬件。

代码语言:python
代码运行次数:0
复制
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,检索英语响应并将其反向翻译成原始语言:

代码语言:python
代码运行次数:0
复制
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,构建用户界面就像一行代码一样简单:

代码语言:python
代码运行次数:0
复制
demo = gr.ChatInterface(fn=reply, title="Multilingual-Bloom Bot")

现在,我们可以使用以下命令启动应用程序:

代码语言:python
代码运行次数:0
复制
demo.launch()

我们将整个脚本保存在一个名为 chat.py 的文件中,为了使聊天机器人运行,我们转到终端并键入:

代码语言:python
代码运行次数:0
复制
python3 chat.py

小结

本节我们学习了开源项目 bloom-multiligual-chatbot,这是一个多语言聊天机器人,我们使用bloom-1b7作为我们的AI基础模型,通过Gradio构建我们的web应用程序,通过本节的学习,相信读者对AI及聊天机器人架构及实践会有一个更加深入的了解。

github地址:https://github.com/AstraBert/bloom-multilingual-chatbot/

小编是一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能的最新应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.导入依赖库
  • 2.后端架构设计及实现
  • 3.构建接口
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档